[Pkg-php-commits] [php/debian-sid] Imported Upstream version 5.3.6

Ondřej Surý ondrej at sury.org
Fri Mar 18 14:56:34 UTC 2011


---
 NEWS                                               |  275 ++-
 TSRM/TSRM.c                                        |    2 +-
 TSRM/TSRM.h                                        |    2 +-
 TSRM/tsrm_nw.c                                     |    4 +-
 TSRM/tsrm_nw.h                                     |    2 +-
 TSRM/tsrm_virtual_cwd.c                            |   37 +-
 TSRM/tsrm_virtual_cwd.h                            |    4 +-
 TSRM/tsrm_win32.c                                  |    4 +-
 TSRM/tsrm_win32.h                                  |    4 +-
 UPGRADING                                          |    6 +-
 Zend/acconfig.h                                    |    4 +-
 Zend/tests/bug53629.phpt                           |   31 +
 Zend/tests/bug53958.phpt                           |   61 +
 Zend/tests/bug53971.phpt                           |   11 +
 Zend/tests/bug54013.phpt                           |   31 +
 Zend/tests/bug54262.phpt                           |   17 +
 Zend/tests/debug_backtrace_options.phpt            |  397 ++
 Zend/tests/exception_handler_002.phpt              |    6 +-
 Zend/tests/indirect_reference_this.phpt            |   13 +
 Zend/zend.c                                        |    6 +-
 Zend/zend.h                                        |    7 +-
 Zend/zend_API.c                                    |    6 +-
 Zend/zend_API.h                                    |    4 +-
 Zend/zend_alloc.c                                  |   16 +-
 Zend/zend_alloc.h                                  |    4 +-
 Zend/zend_build.h                                  |    2 +-
 Zend/zend_builtin_functions.c                      |   30 +-
 Zend/zend_builtin_functions.h                      |    6 +-
 Zend/zend_closures.c                               |   23 +-
 Zend/zend_closures.h                               |    4 +-
 Zend/zend_compile.c                                |  113 +-
 Zend/zend_compile.h                                |    4 +-
 Zend/zend_config.nw.h                              |    4 +-
 Zend/zend_config.w32.h                             |    4 +-
 Zend/zend_constants.c                              |    6 +-
 Zend/zend_constants.h                              |    4 +-
 Zend/zend_default_classes.c                        |    4 +-
 Zend/zend_dynamic_array.c                          |    4 +-
 Zend/zend_dynamic_array.h                          |    4 +-
 Zend/zend_errors.h                                 |    4 +-
 Zend/zend_exceptions.c                             |    7 +-
 Zend/zend_exceptions.h                             |    4 +-
 Zend/zend_execute.c                                |    6 +-
 Zend/zend_execute.h                                |    4 +-
 Zend/zend_execute_API.c                            |    4 +-
 Zend/zend_extensions.c                             |    4 +-
 Zend/zend_extensions.h                             |    4 +-
 Zend/zend_fast_cache.h                             |    4 +-
 Zend/zend_float.c                                  |    4 +-
 Zend/zend_float.h                                  |    4 +-
 Zend/zend_gc.c                                     |    4 +-
 Zend/zend_gc.h                                     |    4 +-
 Zend/zend_globals.h                                |    4 +-
 Zend/zend_globals_macros.h                         |    4 +-
 Zend/zend_hash.c                                   |    4 +-
 Zend/zend_hash.h                                   |    4 +-
 Zend/zend_highlight.c                              |    4 +-
 Zend/zend_highlight.h                              |    4 +-
 Zend/zend_indent.c                                 |    4 +-
 Zend/zend_indent.h                                 |    4 +-
 Zend/zend_ini.c                                    |    4 +-
 Zend/zend_ini.h                                    |    4 +-
 Zend/zend_ini_parser.c                             |    4 +-
 Zend/zend_ini_parser.y                             |    4 +-
 Zend/zend_ini_scanner.c                            |    4 +-
 Zend/zend_ini_scanner.h                            |    4 +-
 Zend/zend_ini_scanner.l                            |    4 +-
 Zend/zend_interfaces.c                             |    4 +-
 Zend/zend_interfaces.h                             |    4 +-
 Zend/zend_istdiostream.h                           |    4 +-
 Zend/zend_iterators.c                              |    4 +-
 Zend/zend_iterators.h                              |    4 +-
 Zend/zend_language_parser.c                        |    4 +-
 Zend/zend_language_parser.y                        |    4 +-
 Zend/zend_language_scanner.c                       |  345 ++-
 Zend/zend_language_scanner.h                       |    4 +-
 Zend/zend_language_scanner.l                       |   10 +-
 Zend/zend_language_scanner_defs.h                  |    3 +-
 Zend/zend_list.c                                   |    4 +-
 Zend/zend_list.h                                   |    4 +-
 Zend/zend_llist.c                                  |    4 +-
 Zend/zend_llist.h                                  |    4 +-
 Zend/zend_modules.h                                |    4 +-
 Zend/zend_multibyte.c                              |    4 +-
 Zend/zend_multibyte.h                              |    4 +-
 Zend/zend_multiply.h                               |    4 +-
 Zend/zend_object_handlers.c                        |    4 +-
 Zend/zend_object_handlers.h                        |    4 +-
 Zend/zend_objects.c                                |    4 +-
 Zend/zend_objects.h                                |    4 +-
 Zend/zend_objects_API.c                            |    4 +-
 Zend/zend_objects_API.h                            |    4 +-
 Zend/zend_opcode.c                                 |    4 +-
 Zend/zend_operators.c                              |    4 +-
 Zend/zend_operators.h                              |    4 +-
 Zend/zend_ptr_stack.c                              |    4 +-
 Zend/zend_ptr_stack.h                              |    4 +-
 Zend/zend_qsort.c                                  |    4 +-
 Zend/zend_qsort.h                                  |    4 +-
 Zend/zend_sprintf.c                                |    4 +-
 Zend/zend_stack.c                                  |    4 +-
 Zend/zend_stack.h                                  |    4 +-
 Zend/zend_static_allocator.c                       |    4 +-
 Zend/zend_static_allocator.h                       |    4 +-
 Zend/zend_stream.c                                 |    4 +-
 Zend/zend_stream.h                                 |    4 +-
 Zend/zend_strtod.c                                 |    7 +-
 Zend/zend_strtod.h                                 |    4 +-
 Zend/zend_ts_hash.c                                |    4 +-
 Zend/zend_ts_hash.h                                |    4 +-
 Zend/zend_types.h                                  |    4 +-
 Zend/zend_variables.c                              |    4 +-
 Zend/zend_variables.h                              |    4 +-
 Zend/zend_vm.h                                     |    4 +-
 Zend/zend_vm_def.h                                 |   11 +-
 Zend/zend_vm_execute.h                             |   58 +-
 acconfig.h                                         |    4 +-
 acinclude.m4                                       |    3 +-
 aclocal.m4                                         |    3 +-
 configure                                          | 2279 +++++-----
 configure.in                                       |    4 +-
 ext/bcmath/bcmath.c                                |    4 +-
 ext/bcmath/php_bcmath.h                            |    4 +-
 ext/bz2/bz2.c                                      |    4 +-
 ext/bz2/bz2_filter.c                               |    4 +-
 ext/bz2/php_bz2.h                                  |    4 +-
 ext/calendar/cal_unix.c                            |    2 +-
 ext/calendar/calendar.c                            |    4 +-
 ext/calendar/easter.c                              |    2 +-
 ext/calendar/julian.c                              |   26 +-
 ext/calendar/tests/bug53574.phpt                   |   35 +
 ext/com_dotnet/com_com.c                           |    4 +-
 ext/com_dotnet/com_dotnet.c                        |    4 +-
 ext/com_dotnet/com_extension.c                     |    4 +-
 ext/com_dotnet/com_handlers.c                      |    4 +-
 ext/com_dotnet/com_iterator.c                      |    4 +-
 ext/com_dotnet/com_misc.c                          |    4 +-
 ext/com_dotnet/com_olechar.c                       |    8 +-
 ext/com_dotnet/com_persist.c                       |    4 +-
 ext/com_dotnet/com_saproxy.c                       |    4 +-
 ext/com_dotnet/com_typeinfo.c                      |   14 +-
 ext/com_dotnet/com_variant.c                       |    9 +-
 ext/com_dotnet/com_wrapper.c                       |    4 +-
 ext/com_dotnet/php_com_dotnet.h                    |    4 +-
 ext/com_dotnet/php_com_dotnet_internal.h           |    4 +-
 ext/ctype/ctype.c                                  |    2 +-
 ext/ctype/php_ctype.h                              |    2 +-
 ext/curl/interface.c                               |    4 +-
 ext/curl/multi.c                                   |    4 +-
 ext/curl/php_curl.h                                |    4 +-
 ext/curl/streams.c                                 |    4 +-
 ext/date/config.w32                                |    4 +-
 ext/date/lib/timelib.h                             |    4 +-
 ext/date/lib/timelib_structs.h                     |    4 +-
 ext/date/lib/timezonedb.h                          | 1091 +++--
 ext/date/lib/timezonemap.h                         |  222 +-
 ext/date/lib/unixtime2tm.c                         |   22 +-
 ext/date/php_date.c                                |  149 +-
 ext/date/php_date.h                                |    4 +-
 ext/date/tests/010.phpt                            |   22 +-
 ext/date/tests/DateInterval_format.phpt            |   70 +
 ext/date/tests/DateInterval_format_a.phpt          |   22 +
 .../DateTimeZone_listAbbreviations_basic1.phpt     |    4 +-
 ext/date/tests/DateTime_construct_variation2.phpt  |   38 +-
 ext/date/tests/DateTime_diff_add_sub-absolute.phpt |   29 +
 ext/date/tests/DateTime_diff_add_sub-dates.phpt    |   89 +
 .../DateTime_diff_add_sub-fall-type2-type2.phpt    |  246 ++
 .../DateTime_diff_add_sub-fall-type2-type3.phpt    |  258 ++
 .../DateTime_diff_add_sub-fall-type3-type2.phpt    |  260 ++
 .../DateTime_diff_add_sub-fall-type3-type3.phpt    |  270 ++
 ext/date/tests/DateTime_diff_add_sub-february.phpt |  281 ++
 ext/date/tests/DateTime_diff_add_sub-massive.phpt  |   45 +
 .../DateTime_diff_add_sub-spring-type2-type2.phpt  |  124 +
 .../DateTime_diff_add_sub-spring-type2-type3.phpt  |  124 +
 .../DateTime_diff_add_sub-spring-type3-type2.phpt  |  124 +
 .../DateTime_diff_add_sub-spring-type3-type3.phpt  |  124 +
 ext/date/tests/DateTime_modify_variation1.phpt     |   56 +-
 ext/date/tests/bug52063.phpt                       |   15 +
 ext/date/tests/bug52290.phpt                       |    4 +-
 ext/date/tests/bug52738.phpt                       |   32 +
 ext/date/tests/bug52808.phpt                       |   85 +
 ext/date/tests/date-time-modify-times.phpt         |   47 +
 ext/date/tests/date_create_variation2.phpt         |   44 +-
 ext/date/tests/date_modify_variation2.phpt         |   56 +-
 ext/date/tests/dateinterval_errors.phpt            |   13 -
 ext/date/tests/examine_diff.inc                    |   78 +
 ext/date/tests/gmstrftime_variation22.phpt         |   14 +-
 ext/date/tests/strftime_variation22.phpt           |   14 +-
 .../tests/timezone_abbreviations_list_basic1.phpt  |    4 +-
 ext/dba/dba.c                                      |    4 +-
 ext/dba/dba_cdb.c                                  |    4 +-
 ext/dba/dba_db1.c                                  |    4 +-
 ext/dba/dba_db2.c                                  |    4 +-
 ext/dba/dba_db3.c                                  |    4 +-
 ext/dba/dba_db4.c                                  |    4 +-
 ext/dba/dba_dbm.c                                  |    4 +-
 ext/dba/dba_flatfile.c                             |    4 +-
 ext/dba/dba_gdbm.c                                 |    4 +-
 ext/dba/dba_inifile.c                              |    4 +-
 ext/dba/dba_ndbm.c                                 |    4 +-
 ext/dba/dba_qdbm.c                                 |    4 +-
 ext/dba/libflatfile/flatfile.c                     |   12 +-
 ext/dba/php_dba.h                                  |    4 +-
 ext/dom/attr.c                                     |    4 +-
 ext/dom/cdatasection.c                             |    4 +-
 ext/dom/characterdata.c                            |    4 +-
 ext/dom/comment.c                                  |    4 +-
 ext/dom/config.w32                                 |    3 +-
 ext/dom/document.c                                 |   61 +-
 ext/dom/documentfragment.c                         |    4 +-
 ext/dom/documenttype.c                             |    4 +-
 ext/dom/dom_ce.h                                   |    4 +-
 ext/dom/dom_fe.h                                   |    4 +-
 ext/dom/dom_iterators.c                            |    4 +-
 ext/dom/dom_properties.h                           |    4 +-
 ext/dom/domconfiguration.c                         |    4 +-
 ext/dom/domerror.c                                 |    4 +-
 ext/dom/domerrorhandler.c                          |    4 +-
 ext/dom/domexception.c                             |    4 +-
 ext/dom/domimplementation.c                        |    4 +-
 ext/dom/domimplementationlist.c                    |    4 +-
 ext/dom/domimplementationsource.c                  |    4 +-
 ext/dom/domlocator.c                               |    4 +-
 ext/dom/domstringlist.c                            |    4 +-
 ext/dom/element.c                                  |    4 +-
 ext/dom/entity.c                                   |    4 +-
 ext/dom/entityreference.c                          |    4 +-
 ext/dom/namednodemap.c                             |    4 +-
 ext/dom/namelist.c                                 |    4 +-
 ext/dom/node.c                                     |    4 +-
 ext/dom/nodelist.c                                 |    4 +-
 ext/dom/notation.c                                 |    4 +-
 ext/dom/php_dom.c                                  |    4 +-
 ext/dom/php_dom.h                                  |    4 +-
 ext/dom/processinginstruction.c                    |    4 +-
 ext/dom/string_extend.c                            |    4 +-
 ext/dom/tests/DOMDocument_saveHTML_error1.phpt     |   24 -
 ext/dom/tests/DOMDocument_saveHTML_variant1.phpt   |   24 +
 ext/dom/text.c                                     |    4 +-
 ext/dom/typeinfo.c                                 |    4 +-
 ext/dom/userdatahandler.c                          |    4 +-
 ext/dom/xml_common.h                               |    4 +-
 ext/dom/xpath.c                                    |    4 +-
 ext/enchant/enchant.c                              |    6 +-
 ext/enchant/php_enchant.h                          |    4 +-
 ext/ereg/config.w32                                |    5 +-
 ext/ereg/ereg.c                                    |    4 +-
 ext/ereg/php_ereg.h                                |    4 +-
 ext/ereg/php_regex.h                               |    4 +-
 ext/exif/exif.c                                    |   31 +-
 ext/exif/php_exif.h                                |    4 +-
 ext/exif/tests/bug54002.phpt                       |   20 +
 ext/exif/tests/bug54002_1.jpeg                     |  Bin 0 -> 87599 bytes
 ext/exif/tests/bug54002_2.jpeg                     |  Bin 0 -> 87599 bytes
 ext/fileinfo/fileinfo.c                            |   26 +-
 ext/fileinfo/php_fileinfo.h                        |    4 +-
 ext/fileinfo/tests/finfo_file_001.phpt             |    2 +-
 ext/fileinfo/tests/finfo_file_002.phpt             |    4 +-
 ext/fileinfo/tests/finfo_file_stream_001.phpt      |   26 +
 ext/fileinfo/tests/mime_content_type_001.phpt      |    2 +-
 ext/fileinfo/tests/resources/dir.zip               |  Bin 0 -> 392 bytes
 ext/filter/callback_filter.c                       |    4 +-
 ext/filter/config.w32                              |    3 +-
 ext/filter/filter.c                                |    8 +-
 ext/filter/filter_private.h                        |   12 +-
 ext/filter/logical_filters.c                       |   44 +-
 ext/filter/php_filter.h                            |    4 +-
 ext/filter/sanitizing_filters.c                    |    4 +-
 ext/filter/tests/015.phpt                          |   10 +-
 ext/filter/tests/018.phpt                          |    4 +-
 ext/filter/tests/bug47435.phpt                     |   34 +
 ext/filter/tests/bug52209.phpt                     |   10 +
 ext/filter/tests/bug53150.phpt                     |   28 +
 ext/ftp/ftp.c                                      |    4 +-
 ext/ftp/ftp.h                                      |    4 +-
 ext/ftp/php_ftp.c                                  |    4 +-
 ext/ftp/php_ftp.h                                  |    4 +-
 ext/gd/config.w32                                  |    4 +-
 ext/gd/gd.c                                        |    8 +-
 ext/gd/gd_ctx.c                                    |    6 +-
 ext/gd/gdcache.c                                   |    5 +-
 ext/gd/php_gd.h                                    |    4 +-
 ext/gettext/gettext.c                              |    4 +-
 ext/gettext/php_gettext.h                          |    4 +-
 ext/gmp/gmp.c                                      |    4 +-
 ext/gmp/php_gmp.h                                  |    2 +-
 ext/hash/config.w32                                |    7 +-
 ext/hash/hash.c                                    |    4 +-
 ext/hash/hash_adler32.c                            |    4 +-
 ext/hash/hash_crc32.c                              |    4 +-
 ext/hash/hash_gost.c                               |    4 +-
 ext/hash/hash_haval.c                              |    4 +-
 ext/hash/hash_md.c                                 |    4 +-
 ext/hash/hash_ripemd.c                             |    4 +-
 ext/hash/hash_salsa.c                              |    4 +-
 ext/hash/hash_sha.c                                |    4 +-
 ext/hash/hash_snefru.c                             |    4 +-
 ext/hash/hash_tiger.c                              |    4 +-
 ext/hash/hash_whirlpool.c                          |    4 +-
 ext/hash/php_hash.h                                |    4 +-
 ext/hash/php_hash_adler32.h                        |    4 +-
 ext/hash/php_hash_crc32.h                          |    4 +-
 ext/hash/php_hash_crc32_tables.h                   |    4 +-
 ext/hash/php_hash_gost.h                           |    4 +-
 ext/hash/php_hash_haval.h                          |    4 +-
 ext/hash/php_hash_md.h                             |    4 +-
 ext/hash/php_hash_ripemd.h                         |    4 +-
 ext/hash/php_hash_salsa.h                          |    4 +-
 ext/hash/php_hash_sha.h                            |    4 +-
 ext/hash/php_hash_snefru.h                         |    4 +-
 ext/hash/php_hash_snefru_tables.h                  |    4 +-
 ext/hash/php_hash_tiger.h                          |    4 +-
 ext/hash/php_hash_tiger_tables.h                   |    4 +-
 ext/hash/php_hash_types.h                          |    4 +-
 ext/hash/php_hash_whirlpool.h                      |    4 +-
 ext/hash/php_hash_whirlpool_tables.h               |    4 +-
 ext/iconv/config.w32                               |    3 +-
 ext/iconv/iconv.c                                  |    4 +-
 ext/iconv/php_iconv.h                              |    4 +-
 ext/imap/php_imap.c                                |   47 +-
 ext/imap/php_imap.h                                |    5 +-
 ext/imap/tests/bug53377.phpt                       |   38 +
 ext/interbase/ibase_blobs.c                        |    4 +-
 ext/interbase/ibase_events.c                       |    4 +-
 ext/interbase/ibase_query.c                        |    4 +-
 ext/interbase/ibase_service.c                      |    4 +-
 ext/interbase/interbase.c                          |    9 +-
 ext/interbase/php_ibase_includes.h                 |    4 +-
 ext/interbase/php_ibase_udf.c                      |    4 +-
 ext/interbase/php_interbase.h                      |    4 +-
 ext/intl/collator/collator_class.c                 |    9 +-
 ext/intl/dateformat/dateformat_class.c             |   31 +-
 ext/intl/formatter/formatter_attr.c                |    5 +
 ext/intl/formatter/formatter_class.c               |   34 +-
 ext/intl/grapheme/grapheme_string.c                |  142 +-
 ext/intl/locale/locale_methods.c                   |   11 +-
 ext/intl/msgformat/msgformat_class.c               |   31 +-
 ext/intl/resourcebundle/resourcebundle.c           |    1 -
 ext/intl/resourcebundle/resourcebundle_class.c     |    5 +-
 ext/intl/tests/bug53512.phpt                       |   25 +
 ext/intl/tests/collator_get_locale.phpt            |    2 -
 ext/intl/tests/collator_get_sort_key.phpt          |   10 +-
 ext/intl/tests/dateformat_clone.phpt               |   36 +
 ext/intl/tests/dateformat_get_set_pattern.phpt     |    4 +-
 ext/intl/tests/dateformat_set_timezone_id.phpt     |   14 +-
 ext/intl/tests/formatter_clone.phpt                |   30 +
 ext/intl/tests/formatter_format.phpt               |   34 +-
 ext/intl/tests/formatter_format_currency.phpt      |   12 +-
 ext/intl/tests/formatter_get_set_attribute.phpt    |    6 +-
 ext/intl/tests/grapheme.phpt                       |    4 +-
 ext/intl/tests/locale_get_display_name.phpt        |   44 +-
 ext/intl/tests/locale_get_display_region.phpt      |   30 +-
 ext/intl/tests/locale_get_display_script.phpt      |    8 +-
 ext/intl/tests/locale_get_display_variant.phpt     |   20 +-
 ext/intl/tests/locale_get_region.phpt              |   10 +-
 ext/intl/tests/locale_parse_locale.phpt            |    4 +-
 ext/intl/tests/msgfmt_clone.phpt                   |   30 +
 ext/intl/tests/msgfmt_get_set_pattern.phpt         |    8 +-
 ext/json/JSON_parser.c                             |    2 +
 ext/json/json.c                                    |    7 +-
 ext/json/php_json.h                                |    4 +-
 ext/json/tests/bug54058.phpt                       |   35 +
 ext/ldap/ldap.c                                    |    6 +-
 ext/ldap/php_ldap.h                                |    4 +-
 ext/libxml/config.w32                              |    3 +-
 ext/libxml/libxml.c                                |    4 +-
 ext/libxml/php_libxml.h                            |    4 +-
 ext/mbstring/config.w32                            |    5 +-
 ext/mbstring/mb_gpc.c                              |    4 +-
 ext/mbstring/mbstring.c                            |    4 +-
 ext/mbstring/mbstring.h                            |    4 +-
 ext/mbstring/php_mbregex.c                         |    4 +-
 ext/mbstring/php_mbregex.h                         |    4 +-
 ext/mbstring/php_unicode.c                         |    2 +-
 ext/mbstring/php_unicode.h                         |    2 +-
 ext/mcrypt/config.w32                              |    5 +-
 ext/mcrypt/mcrypt.c                                |    4 +-
 ext/mcrypt/mcrypt_filter.c                         |    4 +-
 ext/mcrypt/php_mcrypt.h                            |    4 +-
 ext/mcrypt/php_mcrypt_filter.h                     |    4 +-
 ext/mssql/php_mssql.c                              |    4 +-
 ext/mssql/php_mssql.h                              |    4 +-
 ext/mysql/php_mysql.c                              |   25 +-
 ext/mysql/php_mysql.h                              |    4 +-
 ext/mysql/php_mysql_structs.h                      |    4 +-
 ext/mysql/tests/bug53649.phpt                      |   53 +
 ext/mysql/tests/mysql_db_name.phpt                 |    2 +-
 ext/mysql/tests/mysql_deprecated_api.phpt          |   78 +
 ext/mysql/tests/mysql_escape_string.phpt           |   14 +-
 ext/mysql/tests/mysql_list_dbs.phpt                |    6 +-
 ext/mysql/tests/mysql_trace_mode.phpt              |    9 +-
 ext/mysqli/config.w32                              |    4 +-
 ext/mysqli/mysqli.c                                |    4 +-
 ext/mysqli/mysqli_api.c                            |    6 +-
 ext/mysqli/mysqli_driver.c                         |    2 +-
 ext/mysqli/mysqli_embedded.c                       |    2 +-
 ext/mysqli/mysqli_exception.c                      |    2 +-
 ext/mysqli/mysqli_fe.c                             |    4 +-
 ext/mysqli/mysqli_fe.h                             |    2 +-
 ext/mysqli/mysqli_nonapi.c                         |    9 +-
 ext/mysqli/mysqli_priv.h                           |    2 +-
 ext/mysqli/mysqli_prop.c                           |    4 +-
 ext/mysqli/mysqli_report.c                         |    4 +-
 ext/mysqli/mysqli_report.h                         |    4 +-
 ext/mysqli/mysqli_warning.c                        |    2 +-
 ext/mysqli/php_mysqli.h                            |    4 +-
 ext/mysqli/php_mysqli_structs.h                    |    4 +-
 ext/mysqli/tests/047.phpt                          |   36 +-
 ext/mysqli/tests/bug53503.phpt                     |   53 +
 .../tests/mysqli_debug_mysqlnd_control_string.phpt |    2 +-
 ext/mysqli/tests/mysqli_fetch_field.phpt           |   30 +-
 ext/mysqli/tests/mysqli_fetch_field_direct.phpt    |    6 +-
 ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt |    8 +-
 ext/mysqli/tests/mysqli_fetch_field_oo.phpt        |   16 +-
 ext/mysqli/tests/mysqli_fetch_fields.phpt          |   16 +-
 ext/mysqli/tests/mysqli_field_seek.phpt            |   24 +-
 ext/mysqli/tests/mysqli_field_tell.phpt            |    6 +-
 ext/mysqli/tests/mysqli_no_reconnect.phpt          |   15 +-
 ...ysqli_stmt_get_result_metadata_fetch_field.phpt |   24 +-
 ext/mysqli/tests/mysqli_stmt_num_rows.phpt         |    4 +-
 ext/mysqli/tests/mysqli_stmt_result_metadata.phpt  |    6 +-
 ext/mysqlnd/config.w32                             |    4 +-
 ext/mysqlnd/mysqlnd.c                              |   49 +-
 ext/mysqlnd/mysqlnd.h                              |   14 +-
 ext/mysqlnd/mysqlnd_block_alloc.c                  |    4 +-
 ext/mysqlnd/mysqlnd_block_alloc.h                  |    4 +-
 ext/mysqlnd/mysqlnd_charset.c                      |    2 +-
 ext/mysqlnd/mysqlnd_charset.h                      |    2 +-
 ext/mysqlnd/mysqlnd_debug.c                        |    4 +-
 ext/mysqlnd/mysqlnd_debug.h                        |    4 +-
 ext/mysqlnd/mysqlnd_enum_n_def.h                   |    7 +-
 ext/mysqlnd/mysqlnd_libmysql_compat.h              |    2 +-
 ext/mysqlnd/mysqlnd_loaddata.c                     |    6 +-
 ext/mysqlnd/mysqlnd_net.c                          |   10 +-
 ext/mysqlnd/mysqlnd_net.h                          |    2 +-
 ext/mysqlnd/mysqlnd_priv.h                         |    4 +-
 ext/mysqlnd/mysqlnd_ps.c                           |   17 +-
 ext/mysqlnd/mysqlnd_ps_codec.c                     |    4 +-
 ext/mysqlnd/mysqlnd_result.c                       |   11 +-
 ext/mysqlnd/mysqlnd_result.h                       |    4 +-
 ext/mysqlnd/mysqlnd_result_meta.c                  |    4 +-
 ext/mysqlnd/mysqlnd_result_meta.h                  |    4 +-
 ext/mysqlnd/mysqlnd_statistics.c                   |    7 +-
 ext/mysqlnd/mysqlnd_statistics.h                   |    4 +-
 ext/mysqlnd/mysqlnd_structs.h                      |   14 +-
 ext/mysqlnd/mysqlnd_wireprotocol.c                 |    2 +-
 ext/mysqlnd/mysqlnd_wireprotocol.h                 |    4 +-
 ext/mysqlnd/php_mysqlnd.c                          |    4 +-
 ext/mysqlnd/php_mysqlnd.h                          |    4 +-
 ext/oci8/oci8.c                                    |    6 +-
 ext/oci8/oci8_collection.c                         |    4 +-
 ext/oci8/oci8_interface.c                          |    4 +-
 ext/oci8/oci8_lob.c                                |    4 +-
 ext/oci8/oci8_statement.c                          |    4 +-
 ext/oci8/package.xml                               |    6 +-
 ext/oci8/php_oci8.h                                |    4 +-
 ext/oci8/php_oci8_int.h                            |    4 +-
 ext/odbc/birdstep.c                                |    4 +-
 ext/odbc/php_birdstep.h                            |    4 +-
 ext/odbc/php_odbc.c                                |    4 +-
 ext/odbc/php_odbc.h                                |    4 +-
 ext/odbc/php_odbc_includes.h                       |    4 +-
 ext/openssl/openssl.c                              |    9 +-
 ext/openssl/php_openssl.h                          |    4 +-
 ext/openssl/tests/bug54060.phpt                    |   17 +
 ext/openssl/tests/bug54061.phpt                    |   17 +
 ext/openssl/xp_ssl.c                               |   88 +-
 ext/pcntl/pcntl.c                                  |    4 +-
 ext/pcntl/php_pcntl.h                              |    4 +-
 ext/pcntl/php_signal.c                             |    4 +-
 ext/pcntl/php_signal.h                             |    4 +-
 ext/pcre/config.w32                                |    3 +-
 ext/pcre/pcrelib/ChangeLog                         |  130 +
 ext/pcre/pcrelib/HACKING                           |   34 +-
 ext/pcre/pcrelib/NEWS                              |   21 +
 ext/pcre/pcrelib/config.h                          |    7 +-
 ext/pcre/pcrelib/doc/pcre.txt                      | 2632 ++++++------
 ext/pcre/pcrelib/pcre.h                            |   78 +-
 ext/pcre/pcrelib/pcre_compile.c                    |  158 +-
 ext/pcre/pcrelib/pcre_exec.c                       |  126 +-
 ext/pcre/pcrelib/pcre_internal.h                   |  218 +-
 ext/pcre/pcrelib/pcre_printint.src                 |   17 +-
 ext/pcre/pcrelib/pcre_study.c                      |    5 +-
 ext/pcre/pcrelib/pcre_valid_utf8.c                 |   17 +-
 ext/pcre/pcrelib/pcredemo.c                        |   76 +-
 ext/pcre/pcrelib/pcreposix.c                       |    1 +
 ext/pcre/php_pcre.c                                |    4 +-
 ext/pcre/php_pcre.h                                |    4 +-
 ext/pdo/config.w32                                 |    3 +-
 ext/pdo/pdo.c                                      |    4 +-
 ext/pdo/pdo_dbh.c                                  |    4 +-
 ext/pdo/pdo_sql_parser.c                           |    4 +-
 ext/pdo/pdo_sql_parser.c.orig                      |    4 +-
 ext/pdo/pdo_sql_parser.re                          |    4 +-
 ext/pdo/pdo_sqlstate.c                             |    4 +-
 ext/pdo/pdo_stmt.c                                 |    6 +-
 ext/pdo/php_pdo.h                                  |    4 +-
 ext/pdo/php_pdo_driver.h                           |    4 +-
 ext/pdo/php_pdo_int.h                              |    4 +-
 ext/pdo/tests/pdo_025.phpt                         |    2 +-
 ext/pdo_dblib/dblib_driver.c                       |    4 +-
 ext/pdo_dblib/dblib_stmt.c                         |    5 +-
 ext/pdo_dblib/pdo_dblib.c                          |    4 +-
 ext/pdo_dblib/php_pdo_dblib.h                      |    4 +-
 ext/pdo_dblib/php_pdo_dblib_int.h                  |    4 +-
 ext/pdo_firebird/firebird_driver.c                 |    4 +-
 ext/pdo_firebird/firebird_statement.c              |    4 +-
 ext/pdo_firebird/pdo_firebird.c                    |    4 +-
 ext/pdo_firebird/php_pdo_firebird.h                |    4 +-
 ext/pdo_firebird/php_pdo_firebird_int.h            |    4 +-
 ext/pdo_mysql/mysql_driver.c                       |   11 +-
 ext/pdo_mysql/mysql_statement.c                    |    7 +-
 ext/pdo_mysql/pdo_mysql.c                          |    4 +-
 ext/pdo_mysql/php_pdo_mysql.h                      |    4 +-
 ext/pdo_mysql/php_pdo_mysql_int.h                  |    8 +-
 ext/pdo_mysql/tests/bug53551.phpt                  |   73 +
 ext/pdo_mysql/tests/mysql_pdo_test.inc             |    4 +-
 ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt |   33 +
 ext/pdo_oci/oci_driver.c                           |    4 +-
 ext/pdo_oci/oci_statement.c                        |   22 +-
 ext/pdo_oci/pdo_oci.c                              |    4 +-
 ext/pdo_oci/php_pdo_oci.h                          |    4 +-
 ext/pdo_oci/php_pdo_oci_int.h                      |    4 +-
 ext/pdo_oci/tests/pdo_oci_fread_1.phpt             |   59 +
 ext/pdo_oci/tests/pdo_oci_stream_1.phpt            |  112 +
 ext/pdo_odbc/odbc_driver.c                         |    4 +-
 ext/pdo_odbc/odbc_stmt.c                           |    4 +-
 ext/pdo_odbc/pdo_odbc.c                            |    4 +-
 ext/pdo_odbc/php_pdo_odbc.h                        |    4 +-
 ext/pdo_odbc/php_pdo_odbc_int.h                    |    4 +-
 ext/pdo_pgsql/pdo_pgsql.c                          |    6 +-
 ext/pdo_pgsql/pgsql_driver.c                       |    4 +-
 ext/pdo_pgsql/pgsql_statement.c                    |    6 +-
 ext/pdo_pgsql/php_pdo_pgsql.h                      |    4 +-
 ext/pdo_pgsql/php_pdo_pgsql_int.h                  |    4 +-
 ext/pdo_sqlite/pdo_sqlite.c                        |    4 +-
 ext/pdo_sqlite/php_pdo_sqlite.h                    |    4 +-
 ext/pdo_sqlite/php_pdo_sqlite_int.h                |    4 +-
 ext/pdo_sqlite/sqlite_driver.c                     |    4 +-
 ext/pdo_sqlite/sqlite_statement.c                  |    4 +-
 ext/pgsql/pgsql.c                                  |    4 +-
 ext/pgsql/php_pgsql.h                              |    4 +-
 ext/phar/Makefile.frag                             |    3 +-
 ext/phar/dirstream.c                               |    2 +-
 ext/phar/dirstream.h                               |    4 +-
 ext/phar/func_interceptors.c                       |    4 +-
 ext/phar/func_interceptors.h                       |    4 +-
 ext/phar/phar.c                                    |    8 +-
 ext/phar/phar_internal.h                           |    4 +-
 ext/phar/phar_object.c                             |   66 +-
 ext/phar/phar_path_check.c                         |  146 +-
 ext/phar/phar_path_check.re                        |    4 +-
 ext/phar/pharzip.h                                 |    4 +-
 ext/phar/php_phar.h                                |    4 +-
 ext/phar/stream.c                                  |    4 +-
 ext/phar/stream.h                                  |    4 +-
 ext/phar/stub.h                                    |    4 +-
 ext/phar/tar.c                                     |    2 +-
 ext/phar/tar.h                                     |    2 +-
 ext/phar/tests/bug46032.phpt                       |    2 +-
 ext/phar/tests/cached_manifest_1.phpt              |    2 +-
 ext/phar/tests/cached_manifest_1U.phpt             |    2 +-
 ext/phar/tests/phar_construct_invalidurl.phpt      |    2 +-
 .../tests/phar_get_supported_signatures_002a.phpt  |    1 -
 ext/phar/tests/zip/odt.phpt                        |    2 +-
 ext/phar/util.c                                    |    4 +-
 ext/phar/zip.c                                     |    8 +-
 ext/posix/php_posix.h                              |    4 +-
 ext/posix/posix.c                                  |    6 +-
 ext/pspell/php_pspell.h                            |    4 +-
 ext/pspell/pspell.c                                |    5 +-
 ext/readline/php_readline.h                        |    4 +-
 ext/readline/readline.c                            |    6 +-
 ext/recode/php_recode.h                            |    4 +-
 ext/recode/recode.c                                |    6 +-
 ext/reflection/php_reflection.c                    |   12 +-
 ext/reflection/php_reflection.h                    |    4 +-
 ext/reflection/tests/bug53915.phpt                 |   28 +
 ext/session/config.w32                             |    5 +-
 ext/session/mod_files.c                            |    4 +-
 ext/session/mod_files.h                            |    4 +-
 ext/session/mod_mm.c                               |    4 +-
 ext/session/mod_mm.h                               |    4 +-
 ext/session/mod_user.c                             |    4 +-
 ext/session/mod_user.h                             |    4 +-
 ext/session/php_session.h                          |    4 +-
 ext/session/session.c                              |   16 +-
 ext/shmop/php_shmop.h                              |    2 +-
 ext/shmop/shmop.c                                  |    8 +-
 ext/simplexml/php_simplexml.h                      |    4 +-
 ext/simplexml/php_simplexml_exports.h              |    4 +-
 ext/simplexml/simplexml.c                          |  103 +-
 ext/simplexml/sxe.c                                |    4 +-
 ext/simplexml/sxe.h                                |    4 +-
 ext/snmp/php_snmp.h                                |    4 +-
 ext/snmp/snmp.c                                    |    6 +-
 ext/soap/php_encoding.c                            |    4 +-
 ext/soap/php_encoding.h                            |    4 +-
 ext/soap/php_http.c                                |    4 +-
 ext/soap/php_http.h                                |    4 +-
 ext/soap/php_packet_soap.c                         |    4 +-
 ext/soap/php_packet_soap.h                         |    4 +-
 ext/soap/php_schema.c                              |    4 +-
 ext/soap/php_schema.h                              |    4 +-
 ext/soap/php_sdl.c                                 |    4 +-
 ext/soap/php_sdl.h                                 |    4 +-
 ext/soap/php_soap.h                                |    4 +-
 ext/soap/php_xml.c                                 |    4 +-
 ext/soap/php_xml.h                                 |    4 +-
 ext/soap/soap.c                                    |   25 +-
 ext/soap/tests/error_handler.phpt                  |   17 +
 ext/sockets/config.w32                             |    3 +-
 ext/sockets/php_sockets.h                          |    4 +-
 ext/sockets/sockets.c                              |    4 +-
 ext/sockets/tests/socket_connect_params.phpt       |    2 +-
 ext/sockets/tests/socket_create_listen_used.phpt   |    2 +-
 ext/sockets/tests/socket_getpeername.phpt          |    2 +-
 ext/sockets/tests/socket_read_params.phpt          |    2 +-
 .../tests/socket_sentto_recvfrom_ipv4_udp.phpt     |    2 +-
 ext/sockets/tests/socket_strerror.phpt             |    3 +
 ext/sockets/tests/socket_write_params.phpt         |    2 +-
 ext/sockets/unix_socket_constants.h                |    4 +-
 ext/sockets/win32_socket_constants.h               |    4 +-
 ext/spl/config.w32                                 |    3 +-
 ext/spl/php_spl.c                                  |    4 +-
 ext/spl/php_spl.h                                  |    2 +-
 ext/spl/spl_array.c                                |   26 +-
 ext/spl/spl_array.h                                |    4 +-
 ext/spl/spl_directory.c                            |   98 +-
 ext/spl/spl_directory.h                            |    4 +-
 ext/spl/spl_dllist.c                               |    4 +-
 ext/spl/spl_dllist.h                               |    4 +-
 ext/spl/spl_engine.c                               |    2 +-
 ext/spl/spl_engine.h                               |    4 +-
 ext/spl/spl_exceptions.c                           |    4 +-
 ext/spl/spl_exceptions.h                           |    4 +-
 ext/spl/spl_fixedarray.c                           |    4 +-
 ext/spl/spl_fixedarray.h                           |    4 +-
 ext/spl/spl_functions.c                            |    4 +-
 ext/spl/spl_functions.h                            |    4 +-
 ext/spl/spl_heap.c                                 |    4 +-
 ext/spl/spl_heap.h                                 |    4 +-
 ext/spl/spl_iterators.c                            |    6 +-
 ext/spl/spl_iterators.h                            |    4 +-
 ext/spl/spl_observer.c                             |   42 +-
 ext/spl/spl_observer.h                             |    4 +-
 .../DirectoryIterator_getExtension_basic.phpt      |   51 +
 ext/spl/tests/SplFileInfo_getExtension_basic.phpt  |   31 +
 ext/spl/tests/SplFileObject_fgetcsv_basic.phpt     |    6 +-
 .../SplFileObject_fgetcsv_delimiter_basic.phpt     |    6 +-
 .../SplFileObject_fgetcsv_delimiter_error.phpt     |    6 +-
 .../SplFileObject_fgetcsv_enclosure_basic.phpt     |    6 +-
 .../SplFileObject_fgetcsv_enclosure_error.phpt     |    6 +-
 .../tests/SplFileObject_fgetcsv_escape_basic.phpt  |    6 +-
 .../SplFileObject_fgetcsv_escape_default.phpt      |    6 +-
 .../tests/SplFileObject_fgetcsv_escape_error.phpt  |    6 +-
 .../tests/SplFileObject_fwrite_variation_001.phpt  |    4 +
 .../tests/SplFileObject_fwrite_variation_002.phpt  |    4 +
 .../tests/SplFileObject_fwrite_variation_003.phpt  |    4 +
 .../SplObjectStorage_removeAllExcept_basic.phpt    |   27 +
 ...tStorage_removeAllExcept_invalid_parameter.phpt |   44 +
 ext/spl/tests/bug42364.phpt                        |    1 -
 ext/spl/tests/bug53515.phpt                        |   27 +
 ext/spl/tests/dit_001.phpt                         |    3 +
 ext/spl/tests/dit_001_noglob.phpt                  |   27 +
 ext/spl/tests/dit_002.phpt                         |    2 +-
 ext/sqlite/pdo_sqlite2.c                           |    4 +-
 ext/sqlite/php_sqlite.h                            |    4 +-
 ext/sqlite/sess_sqlite.c                           |    4 +-
 ext/sqlite/sqlite.c                                |    9 +-
 ext/sqlite3/CREDITS                                |    2 +-
 ext/sqlite3/config.w32                             |    3 +-
 ext/sqlite3/libsqlite/sqlite3.c                    | 4529 +++++++++++++++-----
 ext/sqlite3/libsqlite/sqlite3.h                    |   99 +-
 ext/sqlite3/libsqlite/sqlite3ext.h                 |   42 +
 ext/sqlite3/php_sqlite3.h                          |    4 +-
 ext/sqlite3/php_sqlite3_structs.h                  |    4 +-
 ext/sqlite3/sqlite3.c                              |   46 +-
 ext/sqlite3/tests/sqlite3_35_stmt_readonly.phpt    |   53 +
 ext/sqlite3/tests/sqlite3_prepare_001.phpt         |   17 +
 ext/standard/array.c                               |    8 +-
 ext/standard/assert.c                              |    4 +-
 ext/standard/base64.c                              |    4 +-
 ext/standard/base64.h                              |    4 +-
 ext/standard/basic_functions.c                     |    7 +-
 ext/standard/basic_functions.h                     |    4 +-
 ext/standard/browscap.c                            |    4 +-
 ext/standard/config.w32                            |    5 +-
 ext/standard/crc32.c                               |    4 +-
 ext/standard/crc32.h                               |    4 +-
 ext/standard/credits.c                             |    4 +-
 ext/standard/credits.h                             |    4 +-
 ext/standard/credits_ext.h                         |    4 +-
 ext/standard/crypt.c                               |    4 +-
 ext/standard/css.c                                 |    4 +-
 ext/standard/css.h                                 |    4 +-
 ext/standard/cyr_convert.c                         |    4 +-
 ext/standard/cyr_convert.h                         |    4 +-
 ext/standard/datetime.c                            |    4 +-
 ext/standard/datetime.h                            |    4 +-
 ext/standard/dir.c                                 |    4 +-
 ext/standard/dl.c                                  |    4 +-
 ext/standard/dl.h                                  |    4 +-
 ext/standard/dns.c                                 |    4 +-
 ext/standard/exec.c                                |    4 +-
 ext/standard/exec.h                                |    4 +-
 ext/standard/file.c                                |    4 +-
 ext/standard/file.h                                |    4 +-
 ext/standard/filestat.c                            |    4 +-
 ext/standard/filters.c                             |    4 +-
 ext/standard/flock_compat.c                        |    4 +-
 ext/standard/flock_compat.h                        |    4 +-
 ext/standard/formatted_print.c                     |    4 +-
 ext/standard/fsock.c                               |    4 +-
 ext/standard/fsock.h                               |    4 +-
 ext/standard/ftok.c                                |    4 +-
 ext/standard/ftp_fopen_wrapper.c                   |   65 +-
 ext/standard/head.c                                |    4 +-
 ext/standard/head.h                                |    4 +-
 ext/standard/html.c                                |    4 +-
 ext/standard/html.h                                |    4 +-
 ext/standard/http.c                                |    4 +-
 ext/standard/http_fopen_wrapper.c                  |  138 +-
 ext/standard/image.c                               |    4 +-
 ext/standard/incomplete_class.c                    |    4 +-
 ext/standard/info.c                                |    4 +-
 ext/standard/info.h                                |    4 +-
 ext/standard/iptc.c                                |    4 +-
 ext/standard/lcg.c                                 |    4 +-
 ext/standard/levenshtein.c                         |    4 +-
 ext/standard/link.c                                |    4 +-
 ext/standard/link_win32.c                          |    4 +-
 ext/standard/mail.c                                |    4 +-
 ext/standard/math.c                                |    4 +-
 ext/standard/md5.c                                 |    4 +-
 ext/standard/md5.h                                 |    4 +-
 ext/standard/metaphone.c                           |    4 +-
 ext/standard/microtime.c                           |    4 +-
 ext/standard/microtime.h                           |    4 +-
 ext/standard/pack.c                                |    4 +-
 ext/standard/pack.h                                |    4 +-
 ext/standard/pageinfo.c                            |    4 +-
 ext/standard/pageinfo.h                            |    4 +-
 ext/standard/php_array.h                           |    4 +-
 ext/standard/php_assert.h                          |    4 +-
 ext/standard/php_browscap.h                        |    4 +-
 ext/standard/php_crypt.h                           |    4 +-
 ext/standard/php_crypt_r.c                         |    6 +-
 ext/standard/php_crypt_r.h                         |    4 +-
 ext/standard/php_dir.h                             |    4 +-
 ext/standard/php_dns.h                             |    4 +-
 ext/standard/php_ext_syslog.h                      |    4 +-
 ext/standard/php_filestat.h                        |    4 +-
 ext/standard/php_fopen_wrapper.c                   |   37 +-
 ext/standard/php_fopen_wrappers.h                  |    4 +-
 ext/standard/php_ftok.h                            |    4 +-
 ext/standard/php_http.h                            |    4 +-
 ext/standard/php_image.h                           |    4 +-
 ext/standard/php_incomplete_class.h                |    4 +-
 ext/standard/php_iptc.h                            |    4 +-
 ext/standard/php_lcg.h                             |    4 +-
 ext/standard/php_link.h                            |    4 +-
 ext/standard/php_mail.h                            |    4 +-
 ext/standard/php_math.h                            |    4 +-
 ext/standard/php_metaphone.h                       |    4 +-
 ext/standard/php_rand.h                            |    4 +-
 ext/standard/php_smart_str.h                       |    4 +-
 ext/standard/php_smart_str_public.h                |    4 +-
 ext/standard/php_standard.h                        |    4 +-
 ext/standard/php_string.h                          |    4 +-
 ext/standard/php_type.h                            |    4 +-
 ext/standard/php_uuencode.h                        |    4 +-
 ext/standard/php_var.h                             |    4 +-
 ext/standard/php_versioning.h                      |    4 +-
 ext/standard/proc_open.c                           |    4 +-
 ext/standard/proc_open.h                           |    4 +-
 ext/standard/quot_print.c                          |    4 +-
 ext/standard/quot_print.h                          |    4 +-
 ext/standard/rand.c                                |    4 +-
 ext/standard/scanf.c                               |    4 +-
 ext/standard/scanf.h                               |    4 +-
 ext/standard/sha1.c                                |    4 +-
 ext/standard/sha1.h                                |    4 +-
 ext/standard/soundex.c                             |    4 +-
 ext/standard/streamsfuncs.c                        |   43 +-
 ext/standard/streamsfuncs.h                        |    4 +-
 ext/standard/string.c                              |    4 +-
 ext/standard/syslog.c                              |    4 +-
 ext/standard/tests/array/bug35014.phpt             |    2 +-
 ext/standard/tests/array/bug35014_64bit.phpt       |    2 +-
 ext/standard/tests/array/bug48484.phpt             |   16 +
 ext/standard/tests/file/php_fd_wrapper_01.phpt     |   11 +
 ext/standard/tests/file/php_fd_wrapper_02.phpt     |   11 +
 ext/standard/tests/file/php_fd_wrapper_03.phpt     |   22 +
 ext/standard/tests/file/php_fd_wrapper_04.phpt     |   20 +
 ext/standard/tests/serialize/precision.phpt        |   49 +
 ext/standard/tests/streams/bug53903.phpt           |   32 +
 ext/standard/tests/strings/bug54055.phpt           |  589 +++
 ext/standard/tests/strings/printf.phpt             |    4 +-
 .../tests/strings/sprintf_variation52.phpt         |    2 +-
 ext/standard/tests/url/parse_url_basic_001.phpt    |    9 +-
 ext/standard/tests/url/parse_url_basic_002.phpt    |    2 +-
 ext/standard/tests/url/parse_url_basic_003.phpt    |    2 +-
 ext/standard/tests/url/parse_url_basic_004.phpt    |    2 +-
 ext/standard/tests/url/parse_url_basic_005.phpt    |    2 +-
 ext/standard/tests/url/parse_url_basic_006.phpt    |    2 +-
 ext/standard/tests/url/parse_url_basic_007.phpt    |    2 +-
 ext/standard/tests/url/parse_url_basic_008.phpt    |    2 +-
 ext/standard/tests/url/parse_url_basic_009.phpt    |    2 +-
 ext/standard/type.c                                |    4 +-
 ext/standard/uniqid.c                              |    4 +-
 ext/standard/uniqid.h                              |    4 +-
 ext/standard/url.c                                 |   42 +-
 ext/standard/url.h                                 |    4 +-
 ext/standard/url_scanner_ex.c                      |    4 +-
 ext/standard/url_scanner_ex.c.orig                 |    4 +-
 ext/standard/url_scanner_ex.h                      |    4 +-
 ext/standard/user_filters.c                        |    4 +-
 ext/standard/uuencode.c                            |    4 +-
 ext/standard/var.c                                 |    4 +-
 ext/standard/var_unserializer.c                    |    6 +-
 ext/standard/var_unserializer.c.orig               |    6 +-
 ext/standard/var_unserializer.re                   |    4 +-
 ext/standard/versioning.c                          |    4 +-
 ext/sybase_ct/php_sybase_ct.c                      |    4 +-
 ext/sybase_ct/php_sybase_ct.h                      |    4 +-
 ext/sysvmsg/php_sysvmsg.h                          |    4 +-
 ext/sysvmsg/sysvmsg.c                              |    6 +-
 ext/sysvsem/php_sysvsem.h                          |    4 +-
 ext/sysvsem/sysvsem.c                              |    4 +-
 ext/sysvshm/php_sysvshm.h                          |    4 +-
 ext/sysvshm/sysvshm.c                              |    4 +-
 ext/tidy/php_tidy.h                                |    4 +-
 ext/tidy/tidy.c                                    |    6 +-
 ext/tokenizer/php_tokenizer.h                      |    4 +-
 ext/tokenizer/tests/bug54089.phpt                  |   40 +
 ext/tokenizer/tests/token_get_all_variation16.phpt |  213 +-
 ext/tokenizer/tokenizer.c                          |    8 +-
 ext/tokenizer/tokenizer_data.c                     |    4 +-
 ext/tokenizer/tokenizer_data_gen.sh                |    4 +-
 ext/wddx/php_wddx.h                                |    4 +-
 ext/wddx/php_wddx_api.h                            |    4 +-
 ext/wddx/wddx.c                                    |    4 +-
 ext/xml/compat.c                                   |    2 +-
 ext/xml/config.w32                                 |    3 +-
 ext/xml/expat_compat.h                             |    4 +-
 ext/xml/php_xml.h                                  |    4 +-
 ext/xml/xml.c                                      |    4 +-
 ext/xmlreader/php_xmlreader.c                      |    4 +-
 ext/xmlreader/php_xmlreader.h                      |    4 +-
 ext/xmlrpc/php_xmlrpc.h                            |    4 +-
 ext/xmlrpc/xmlrpc-epi-php.c                        |    5 +-
 ext/xmlwriter/php_xmlwriter.c                      |    4 +-
 ext/xmlwriter/php_xmlwriter.h                      |    4 +-
 ext/xsl/php_xsl.c                                  |    4 +-
 ext/xsl/php_xsl.h                                  |    4 +-
 ext/xsl/xsl_fe.h                                   |    4 +-
 ext/xsl/xsltprocessor.c                            |    5 +-
 ext/zip/lib/zip_dirent.c                           |    4 +-
 ext/zip/lib/zip_name_locate.c                      |    4 +
 ext/zip/php_zip.c                                  |  133 +-
 ext/zip/php_zip.h                                  |    4 +-
 ext/zip/tests/bug53579.phpt                        |   44 +
 ext/zip/tests/bug53603.phpt                        |   35 +
 ext/zip/tests/bug53854.phpt                        |   44 +
 ext/zip/tests/bug53885.phpt                        |   19 +
 ext/zip/tests/stream_meta_data.phpt                |   74 +
 ext/zip/zip_stream.c                               |   13 +-
 ext/zlib/php_zlib.h                                |    4 +-
 ext/zlib/zlib.c                                    |    4 +-
 ext/zlib/zlib_filter.c                             |    4 +-
 ext/zlib/zlib_fopen_wrapper.c                      |    4 +-
 main/SAPI.c                                        |    7 +-
 main/SAPI.h                                        |    4 +-
 main/fopen_wrappers.c                              |    8 +-
 main/fopen_wrappers.h                              |    4 +-
 main/getopt.c                                      |    4 +-
 main/internal_functions_nw.c                       |    4 +-
 main/internal_functions_win32.c                    |    4 +-
 main/logos.h                                       |    4 +-
 main/main.c                                        |   15 +-
 main/network.c                                     |    7 +-
 main/output.c                                      |    4 +-
 main/php.h                                         |    4 +-
 main/php3_compat.h                                 |    4 +-
 main/php_compat.h                                  |    4 +-
 main/php_config.h.in                               |    4 +-
 main/php_content_types.c                           |    4 +-
 main/php_content_types.h                           |    4 +-
 main/php_getopt.h                                  |    4 +-
 main/php_globals.h                                 |    4 +-
 main/php_ini.c                                     |   31 +-
 main/php_ini.h                                     |    4 +-
 main/php_logos.c                                   |    4 +-
 main/php_logos.h                                   |    4 +-
 main/php_main.h                                    |    4 +-
 main/php_memory_streams.h                          |    4 +-
 main/php_network.h                                 |    4 +-
 main/php_open_temporary_file.c                     |   10 +-
 main/php_open_temporary_file.h                     |    4 +-
 main/php_output.h                                  |    4 +-
 main/php_reentrancy.h                              |    4 +-
 main/php_scandir.c                                 |    4 +-
 main/php_scandir.h                                 |    4 +-
 main/php_sprintf.c                                 |    4 +-
 main/php_streams.h                                 |   18 +-
 main/php_syslog.h                                  |    4 +-
 main/php_ticks.c                                   |    4 +-
 main/php_ticks.h                                   |    4 +-
 main/php_variables.c                               |    4 +-
 main/php_variables.h                               |    4 +-
 main/php_version.h                                 |    6 +-
 main/reentrancy.c                                  |    4 +-
 main/rfc1867.c                                     |    6 +-
 main/rfc1867.h                                     |    4 +-
 main/safe_mode.c                                   |    4 +-
 main/safe_mode.h                                   |    4 +-
 main/snprintf.c                                    |   12 +-
 main/snprintf.h                                    |   17 +-
 main/spprintf.c                                    |   12 +-
 main/spprintf.h                                    |    4 +-
 main/streams/cast.c                                |   13 +-
 main/streams/filter.c                              |    6 +-
 main/streams/glob_wrapper.c                        |    4 +-
 main/streams/memory.c                              |    4 +-
 main/streams/mmap.c                                |    4 +-
 main/streams/php_stream_context.h                  |    4 +-
 main/streams/php_stream_filter_api.h               |    4 +-
 main/streams/php_stream_glob_wrapper.h             |    4 +-
 main/streams/php_stream_mmap.h                     |    4 +-
 main/streams/php_stream_plain_wrapper.h            |    4 +-
 main/streams/php_stream_transport.h                |    4 +-
 main/streams/php_stream_userspace.h                |    4 +-
 main/streams/php_streams_int.h                     |    4 +-
 main/streams/plain_wrapper.c                       |    8 +-
 main/streams/streams.c                             |   28 +-
 main/streams/transports.c                          |    4 +-
 main/streams/userspace.c                           |    5 +-
 main/streams/xp_socket.c                           |    4 +-
 main/strlcat.c                                     |    4 +-
 main/strlcpy.c                                     |    4 +-
 main/win32_internal_function_disabled.h            |    4 +-
 main/win95nt.h                                     |    4 +-
 pear/install-pear-nozlib.phar                      | 2864 ++++++++-----
 php.ini-development                                |   10 +-
 php.ini-production                                 |   10 +-
 run-tests.php                                      |   31 +-
 sapi/aolserver/aolserver.c                         |    6 +-
 sapi/apache/libpre.c                               |    4 +-
 sapi/apache/mod_php5.c                             |    4 +-
 sapi/apache/mod_php5.h                             |    4 +-
 sapi/apache/php_apache.c                           |    4 +-
 sapi/apache/php_apache_http.h                      |    4 +-
 sapi/apache/sapi_apache.c                          |    4 +-
 sapi/apache2filter/apache_config.c                 |    4 +-
 sapi/apache2filter/php_apache.h                    |    4 +-
 sapi/apache2filter/php_functions.c                 |    4 +-
 sapi/apache2filter/sapi_apache2.c                  |    4 +-
 sapi/apache2handler/apache_config.c                |    4 +-
 sapi/apache2handler/mod_php5.c                     |    4 +-
 sapi/apache2handler/php_apache.h                   |    4 +-
 sapi/apache2handler/php_functions.c                |    4 +-
 sapi/apache2handler/sapi_apache2.c                 |    4 +-
 sapi/apache_hooks/mod_php5.c                       |    4 +-
 sapi/apache_hooks/mod_php5.h                       |    4 +-
 sapi/apache_hooks/php_apache.c                     |    4 +-
 sapi/apache_hooks/sapi_apache.c                    |    4 +-
 sapi/caudium/caudium.c                             |    6 +-
 sapi/cgi/cgi_main.c                                |    8 +-
 sapi/cgi/fastcgi.c                                 |   23 +-
 sapi/cgi/fastcgi.h                                 |    4 +-
 sapi/cli/php_cli.c                                 |    6 +-
 sapi/cli/php_cli_readline.c                        |    4 +-
 sapi/cli/php_cli_readline.h                        |    4 +-
 sapi/continuity/capi.c                             |    4 +-
 sapi/embed/php_embed.c                             |    4 +-
 sapi/embed/php_embed.h                             |    4 +-
 sapi/fpm/fpm/fastcgi.c                             |  112 +-
 sapi/fpm/fpm/fpm.c                                 |   22 +-
 sapi/fpm/fpm/fpm.h                                 |    1 +
 sapi/fpm/fpm/fpm_conf.c                            |    1 +
 sapi/fpm/fpm/fpm_main.c                            |   42 +-
 sapi/fpm/fpm/fpm_php.c                             |    6 +
 sapi/fpm/fpm/fpm_php.h                             |    1 +
 sapi/fpm/fpm/fpm_request.c                         |   20 +-
 sapi/fpm/fpm/fpm_shm_slots.h                       |    1 +
 sapi/fpm/fpm/fpm_sockets.c                         |    2 +-
 sapi/fpm/fpm/fpm_str.h                             |   23 -
 sapi/fpm/fpm/zlog.c                                |   11 +-
 sapi/isapi/php5isapi.c                             |    4 +-
 sapi/litespeed/lsapi_main.c                        | 1289 ++++---
 sapi/litespeed/lsapilib.c                          |   49 +-
 sapi/litespeed/lsapilib.h                          |    5 +
 sapi/milter/php_milter.c                           |    6 +-
 sapi/nsapi/nsapi.c                                 |    6 +-
 sapi/phttpd/php_phttpd.h                           |    2 +-
 sapi/phttpd/phttpd.c                               |    2 +-
 sapi/pi3web/pi3web_sapi.c                          |    6 +-
 sapi/roxen/roxen.c                                 |    6 +-
 sapi/thttpd/php_thttpd.h                           |    2 +-
 sapi/thttpd/thttpd.c                               |    4 +-
 sapi/tux/php_tux.c                                 |    2 +-
 sapi/webjames/php_webjames.h                       |    2 +-
 sapi/webjames/webjames.c                           |    2 +-
 win32/build/Makefile                               |   44 +-
 win32/build/Makefile.phpize                        |   38 +
 win32/build/buildconf.js                           |    1 +
 win32/build/config.w32                             |   22 +-
 win32/build/config.w32.phpize.in                   |  353 ++
 win32/build/configure.tail                         |    4 +-
 win32/build/confutils.js                           |  255 +-
 win32/build/mkdist.php                             |    5 +-
 win32/build/phpize.bat                             |    6 +
 win32/build/phpize.js.in                           |  260 ++
 win32/globals.c                                    |    4 +-
 win32/grp.h                                        |    4 +-
 win32/php_win32_globals.h                          |    4 +-
 win32/readdir.c                                    |   10 +
 win32/registry.c                                   |    8 +-
 win32/select.c                                     |    4 +-
 win32/select.h                                     |    4 +-
 win32/sockets.c                                    |    4 +-
 win32/sockets.h                                    |    4 +-
 win32/syslog.h                                     |    4 +-
 win32/syslog.reg                                   |    4 +-
 win32/winutil.c                                    |    4 +-
 win32/winutil.h                                    |    2 +-
 1027 files changed, 20630 insertions(+), 9023 deletions(-)
 create mode 100644 Zend/tests/bug53629.phpt
 create mode 100644 Zend/tests/bug53958.phpt
 create mode 100644 Zend/tests/bug53971.phpt
 create mode 100644 Zend/tests/bug54013.phpt
 create mode 100644 Zend/tests/bug54262.phpt
 create mode 100755 Zend/tests/debug_backtrace_options.phpt
 create mode 100644 Zend/tests/indirect_reference_this.phpt
 create mode 100644 ext/calendar/tests/bug53574.phpt
 create mode 100644 ext/date/tests/DateInterval_format.phpt
 create mode 100644 ext/date/tests/DateInterval_format_a.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-absolute.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-dates.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-fall-type2-type2.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-fall-type2-type3.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-fall-type3-type2.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-fall-type3-type3.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-february.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-massive.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-spring-type2-type2.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-spring-type2-type3.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-spring-type3-type2.phpt
 create mode 100644 ext/date/tests/DateTime_diff_add_sub-spring-type3-type3.phpt
 create mode 100644 ext/date/tests/bug52063.phpt
 create mode 100644 ext/date/tests/bug52738.phpt
 create mode 100644 ext/date/tests/bug52808.phpt
 create mode 100644 ext/date/tests/date-time-modify-times.phpt
 delete mode 100644 ext/date/tests/dateinterval_errors.phpt
 create mode 100644 ext/date/tests/examine_diff.inc
 delete mode 100644 ext/dom/tests/DOMDocument_saveHTML_error1.phpt
 create mode 100644 ext/dom/tests/DOMDocument_saveHTML_variant1.phpt
 create mode 100644 ext/exif/tests/bug54002.phpt
 create mode 100644 ext/exif/tests/bug54002_1.jpeg
 create mode 100644 ext/exif/tests/bug54002_2.jpeg
 create mode 100644 ext/fileinfo/tests/finfo_file_stream_001.phpt
 create mode 100644 ext/fileinfo/tests/resources/dir.zip
 create mode 100644 ext/filter/tests/bug47435.phpt
 create mode 100644 ext/filter/tests/bug52209.phpt
 create mode 100644 ext/filter/tests/bug53150.phpt
 create mode 100644 ext/imap/tests/bug53377.phpt
 create mode 100644 ext/intl/tests/bug53512.phpt
 create mode 100755 ext/intl/tests/dateformat_clone.phpt
 create mode 100755 ext/intl/tests/formatter_clone.phpt
 create mode 100755 ext/intl/tests/msgfmt_clone.phpt
 create mode 100644 ext/json/tests/bug54058.phpt
 create mode 100644 ext/mysql/tests/bug53649.phpt
 create mode 100644 ext/mysql/tests/mysql_deprecated_api.phpt
 create mode 100644 ext/mysqli/tests/bug53503.phpt
 create mode 100644 ext/openssl/tests/bug54060.phpt
 create mode 100644 ext/openssl/tests/bug54061.phpt
 create mode 100644 ext/pdo_mysql/tests/bug53551.phpt
 create mode 100644 ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt
 create mode 100644 ext/pdo_oci/tests/pdo_oci_fread_1.phpt
 create mode 100644 ext/pdo_oci/tests/pdo_oci_stream_1.phpt
 mode change 100755 => 100644 ext/phar/Makefile.frag
 mode change 100755 => 100644 ext/phar/phar_internal.h
 mode change 100755 => 100644 ext/phar/phar_object.c
 mode change 100755 => 100644 ext/phar/phar_path_check.c
 mode change 100755 => 100644 ext/phar/phar_path_check.re
 create mode 100644 ext/reflection/tests/bug53915.phpt
 create mode 100644 ext/soap/tests/error_handler.phpt
 create mode 100644 ext/spl/tests/DirectoryIterator_getExtension_basic.phpt
 create mode 100644 ext/spl/tests/SplFileInfo_getExtension_basic.phpt
 create mode 100644 ext/spl/tests/SplObjectStorage_removeAllExcept_basic.phpt
 create mode 100644 ext/spl/tests/SplObjectStorage_removeAllExcept_invalid_parameter.phpt
 create mode 100644 ext/spl/tests/bug53515.phpt
 create mode 100644 ext/spl/tests/dit_001_noglob.phpt
 create mode 100644 ext/sqlite3/tests/sqlite3_35_stmt_readonly.phpt
 create mode 100644 ext/sqlite3/tests/sqlite3_prepare_001.phpt
 create mode 100644 ext/standard/tests/array/bug48484.phpt
 create mode 100644 ext/standard/tests/file/php_fd_wrapper_01.phpt
 create mode 100644 ext/standard/tests/file/php_fd_wrapper_02.phpt
 create mode 100644 ext/standard/tests/file/php_fd_wrapper_03.phpt
 create mode 100644 ext/standard/tests/file/php_fd_wrapper_04.phpt
 create mode 100644 ext/standard/tests/serialize/precision.phpt
 create mode 100644 ext/standard/tests/streams/bug53903.phpt
 create mode 100644 ext/standard/tests/strings/bug54055.phpt
 create mode 100644 ext/tokenizer/tests/bug54089.phpt
 create mode 100644 ext/zip/tests/bug53579.phpt
 create mode 100644 ext/zip/tests/bug53603.phpt
 create mode 100644 ext/zip/tests/bug53854.phpt
 create mode 100644 ext/zip/tests/bug53885.phpt
 create mode 100644 ext/zip/tests/stream_meta_data.phpt
 create mode 100644 win32/build/Makefile.phpize
 create mode 100644 win32/build/config.w32.phpize.in
 create mode 100644 win32/build/phpize.bat
 create mode 100644 win32/build/phpize.js.in

diff --git a/NEWS b/NEWS
index 19818ad..e06e59a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,238 @@
-PHP                                                                        NEWS
+PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+17 Mar 2011, PHP 5.3.6
+- Upgraded bundled Sqlite3 to version 3.7.4. (Ilia)
+- Upgraded bundled PCRE to version 8.11. (Ilia)
+
+- Zend Engine:
+  . Indirect reference to $this fails to resolve if direct $this is never used
+    in method. (Scott)
+  . Added options to debug backtrace functions. (Stas)
+  . Fixed bug numerous crashes due to setlocale (crash on error, pcre, mysql
+    etc.) on Windows in thread safe mode. (Pierre)
+  . Fixed Bug #53971 (isset() and empty() produce apparently spurious runtime
+    error). (Dmitry)
+  . Fixed Bug #53958 (Closures can't 'use' shared variables by value and by
+    reference). (Dmitry)
+  . Fixed Bug #53629 (memory leak inside highlight_string()). (Hannes, Ilia)
+  . Fixed Bug #51458 (Lack of error context with nested exceptions). (Stas)
+  . Fixed Bug #47143 (Throwing an exception in a destructor causes a fatal
+    error). (Stas)
+  . Fixed bug #43512 (same parameter name can be used multiple times in
+    method/function definition). (Felipe)
+
+- Core:
+  . Added ability to connect to HTTPS sites through proxy with basic
+    authentication using stream_context/http/header/Proxy-Authorization (Dmitry)
+  . Changed default value of ini directive serialize_precision from 100 to 17.
+    (Gustavo)
+  . Fixed bug #54055 (buffer overrun with high values for precision ini
+    setting). (Gustavo)
+  . Fixed bug #53959 (reflection data for fgetcsv out-of-date). (Richard)
+  . Fixed bug #53577 (Regression introduced in 5.3.4 in open_basedir with a
+    trailing forward slash). (lekensteyn at gmail dot com, Pierre)
+  . Fixed bug #53682 (Fix compile on the VAX). (Rasmus, jklos)
+  . Fixed bug #48484 (array_product() always returns 0 for an empty array).
+    (Ilia)
+  . Fixed bug #48607 (fwrite() doesn't check reply from ftp server before
+    exiting). (Ilia)
+
+ 
+- Calendar extension:
+  . Fixed bug #53574 (Integer overflow in SdnToJulian, sometimes leading to
+    segfault). (Gustavo)
+
+- DOM extension:
+  . Implemented FR #39771 (Made DOMDocument::saveHTML accept an optional DOMNode
+    like DOMDocument::saveXML). (Gustavo)
+  
+- DateTime extension:
+  . Fixed a bug in DateTime->modify() where absolute date/time statements had
+    no effect. (Derick)
+  . Fixed bug #53729 (DatePeriod fails to initialize recurrences on 64bit
+    big-endian systems). (Derick, rein at basefarm.no)
+  . Fixed bug #52808 (Segfault when specifying interval as two dates). (Stas)
+  . Fixed bug #52738 (Can't use new properties in class extended from 
+    DateInterval). (Stas)
+  . Fixed bug #52290 (setDate, setISODate, setTime works wrong when DateTime
+    created from timestamp). (Stas)
+  . Fixed bug #52063 (DateTime constructor's second argument doesn't have a 
+    null default value). (Gustavo, Stas)
+
+- Exif extension:
+  . Fixed bug #54002 (crash on crafted tag, reported by Luca Carettoni).
+    (Pierre) (CVE-2011-0708)
+
+- Filter extension:
+  . Fixed bug #53924 (FILTER_VALIDATE_URL doesn't validate port number).
+    (Ilia, Gustavo)
+  . Fixed bug #53150 (FILTER_FLAG_NO_RES_RANGE is missing some IP ranges).
+    (Ilia)
+  . Fixed bug #52209 (INPUT_ENV returns NULL for set variables (CLI)). (Ilia)
+  . Fixed bug #47435 (FILTER_FLAG_NO_RES_RANGE don't work with ipv6).
+    (Ilia, valli at icsurselva dot ch)
+
+- Fileinfo extension:
+  . Fixed bug #54016 (finfo_file() Cannot determine filetype in archives).
+    (Hannes)
+
+- Gettext
+  . Fixed bug #53837 (_() crashes on Windows when no LANG or LANGUAGE 
+    environment variable are set). (Pierre)
+
+- IMAP extension:
+  . Implemented FR #53812 (get MIME headers of the part of the email). (Stas)
+  . Fixed bug #53377 (imap_mime_header_decode() doesn't ignore \t during long
+    MIME header unfolding). (Adam)
+    
+- Intl extension:
+  . Fixed bug #53612 (Segmentation fault when using cloned several intl
+    objects). (Gustavo)
+  . Fixed bug #53512 (NumberFormatter::setSymbol crash on bogus $attr values).
+    (Felipe)
+  . Implemented clone functionality for number, date & message formatters. 
+    (Stas).
+
+- JSON extension:
+  . Fixed bug #53963 (Ensure error_code is always set during some failed
+    decodings). (Scott)
+
+- mysqlnd
+  . Fixed problem with always returning 0 as num_rows for unbuffered sets. 
+    (Andrey, Ulf)
+
+- MySQL Improved extension:
+  . Added 'db' and 'catalog' keys to the field fetching functions (FR #39847). 
+    (Kalle)
+  . Fixed buggy counting of affected rows when using the text protocol. The
+    collected statistics were wrong when multi_query was used with mysqlnd
+    (Andrey)
+  . Fixed bug #53795 (Connect Error from MySqli (mysqlnd) when using SSL). 
+    (Kalle)
+  . Fixed bug #53503 (mysqli::query returns false after successful LOAD DATA 
+    query). (Kalle, Andrey)
+  . Fixed bug #53425 (mysqli_real_connect() ignores client flags when built to 
+    call libmysql). (Kalle, tre-php-net at crushedhat dot com)
+
+- OpenSSL extension:
+  . Fixed stream_socket_enable_crypto() not honoring the socket timeout in
+    server mode. (Gustavo)
+  . Fixed bug #54060 (Memory leaks when openssl_encrypt). (Pierre)
+  . Fixed bug #54061 (Memory leaks when openssl_decrypt). (Pierre)
+  . Fixed bug #53592 (stream_socket_enable_crypto() busy-waits in client mode).
+    (Gustavo)
+  . Implemented FR #53447 (Cannot disable SessionTicket extension for servers
+    that do not support it) by adding a no_ticket SSL context option. (Adam,
+    Tony)
+
+- PDO MySQL driver:
+  . Fixed bug #53551 (PDOStatement execute segfaults for pdo_mysql driver).
+    (Johannes)
+  . Implemented FR #47802 (Support for setting character sets in DSN strings). 
+    (Kalle)
+
+- PDO Oracle driver:
+  . Fixed bug #39199 (Cannot load Lob data with more than 4000 bytes on
+    ORACLE 10). (spatar at mail dot nnov dot ru)
+    
+- PDO PostgreSQL driver:
+  . Fixed bug #53517 (segfault in pgsql_stmt_execute() when postgres is down).
+    (gyp at balabit dot hu)
+
+- Phar extension:
+  . Fixed bug #54247 (format-string vulnerability on Phar). (Felipe)
+    (CVE-2011-1153)
+  . Fixed bug #53541 (format string bug in ext/phar).
+    (crrodriguez at opensuse dot org, Ilia)
+  . Fixed bug #53898 (PHAR reports invalid error message, when the directory 
+    does not exist). (Ilia)
+
+- PHP-FPM SAPI:
+  . Enforce security in the fastcgi protocol parsing.
+    (ef-lists at email dotde)
+  . Fixed bug #53777 (php-fpm log format now match php_error log format). (fat)
+  . Fixed bug #53527 (php-fpm --test doesn't set a valuable return value). (fat)
+  . Fixed bug #53434 (php-fpm slowlog now also logs the original request). (fat)
+
+- Readline extension:
+  . Fixed bug #53630 (Fixed parameter handling inside readline() function).
+    (jo at feuersee dot de, Ilia)
+
+- Reflection extension:
+  . Fixed bug #53915 (ReflectionClass::getConstant(s) emits fatal error on
+    constants with self::). (Gustavo)
+
+- Shmop extension:
+  . Fixed bug #54193 (Integer overflow in shmop_read()). (Felipe)
+    Reported by Jose Carlos Norte <jose at eyeos dot org> (CVE-2011-1092)
+
+- SNMP extension:
+  . Fixed bug #51336 (snmprealwalk (snmp v1) does not handle end of OID tree
+    correctly). (Boris Lytochkin)
+
+- SOAP extension:
+  . Fixed possible crash introduced by the NULL poisoning patch.
+    (Mateusz Kocielski, Pierre)
+
+- SPL extension:
+  . Fixed memory leak in DirectoryIterator::getExtension() and 
+    SplFileInfo::getExtension(). (Felipe)
+  . Fixed bug #53914 (SPL assumes HAVE_GLOB is defined). (Chris Jones)
+  . Fixed bug #53515 (property_exists incorrect on ArrayObject null and 0
+    values). (Felipe)
+  . Fixed bug #49608 (Using CachingIterator on DirectoryIterator instance
+    segfaults). (Felipe)
+
+  . Added SplFileInfo::getExtension(). FR #48767. (Peter Cowburn)
+
+- SQLite3 extension:
+  . Fixed memory leaked introduced by the NULL poisoning patch.
+    (Mateusz Kocielski, Pierre)
+  . Fixed memory leak on SQLite3Result and SQLite3Stmt when assigning to a
+    reference. (Felipe)
+  . Add SQlite3_Stmt::readonly() for checking if a statement is read only.
+    (Scott)
+  . Implemented FR #53466 (SQLite3Result::columnType() should return false after
+    all of the rows have been fetched). (Scott)
+
+- Streams:
+  . Fixed bug #54092 (Segmentation fault when using HTTP proxy with the FTP
+    wrapper). (Gustavo)
+  . Fixed bug #53913 (Streams functions assume HAVE_GLOB is defined). (Chris
+    Jones)
+  . Fixed bug #53903 (userspace stream stat callback does not separate the
+    elements of the returned array before converting them). (Gustavo)
+  . Implemented FR #26158 (open arbitrary file descriptor with fopen). (Gustavo)
+
+- Tokenizer Extension
+  . Fixed bug #54089 (token_get_all() does not stop after __halt_compiler).
+    (Ilia)
+
+- XSL extension:
+  . Fixed memory leaked introduced by the NULL poisoning patch.
+    (Mateusz Kocielski, Pierre)
+
+- Zip extension:
+  . Added the filename into the return value of stream_get_meta_data(). (Hannes)
+  . Fixed bug #53923 (Zip functions assume HAVE_GLOB is defined). (Adam)
+  . Fixed bug #53893 (Wrong return value for ZipArchive::extractTo()). (Pierre)
+  . Fixed bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive).
+    (Stas, Maksymilian Arciemowicz). (CVE-2011-0421)
+  . Fixed bug #53854 (Missing constants for compression type). (Richard, Adam)
+  . Fixed bug #53603 (ZipArchive should quiet stat errors). (brad dot froehle at
+    gmail dot com, Gustavo)
+  . Fixed bug #53579 (stream_get_contents() segfaults on ziparchive streams).
+    (Hannes)
+  . Fixed bug #53568 (swapped memset arguments in struct initialization).
+    (crrodriguez at opensuse dot org)
+  . Fixed bug #53166 (Missing parameters in docs and reflection definition). 
+    (Richard)
+  . Fixed bug #49072 (feof never returns true for damaged file in zip).
+    (Gustavo, Richard Quadling)
+
 06 Jan 2011, PHP 5.3.5
-- Fixed Bug #53632 (infinite loop with x87 fpu). (Scott, Rasmus)
+- Fixed Bug #53632 (infinite loop with x87 fpu). (CVE-2010-4645) (Scott, 
+  Rasmus)
 
 09 Dec 2010, PHP 5.3.4
 - Upgraded bundled Sqlite3 to version 3.7.3. (Ilia)
@@ -10,7 +241,8 @@
 - Security enhancements:
   . Fixed crash in zip extract method (possible CWE-170). 
     (Maksymilian Arciemowicz, Pierre)
-  . Paths with NULL in them (foo\0bar.txt) are now considered as invalid. (Rasmus)
+  . Paths with NULL in them (foo\0bar.txt) are now considered as invalid.
+    (Rasmus)
   . Fixed a possible double free in imap extension (Identified by Mateusz 
     Kocielski). (CVE-2010-4150). (Ilia)
   . Fixed NULL pointer dereference in ZipArchive::getArchiveComment.
@@ -37,8 +269,8 @@
   . Implemented symbolic links support for open_basedir checks. (Pierre)
   . Implemented FR #51804, SplFileInfo::getLinkTarget on Windows. (Pierre)
   . Implemented FR #50692, not uploaded files don't count towards
-    max_file_uploads limit. As a side improvement, temporary files are not opened
-    for empty uploads and, in debug mode, 0-length uploads. (Gustavo)
+    max_file_uploads limit. As a side improvement, temporary files are not
+    opened for empty uploads and, in debug mode, 0-length uploads. (Gustavo)
     
 - Improved MySQLnd:
   . Added new character sets to mysqlnd, which are available in MySQL 5.5
@@ -75,12 +307,12 @@
   . Fixed bug #53141 (autoload misbehaves if called from closing session).
     (ladislav at marek dot su)
   . Fixed bug #53021 (In html_entity_decode, failure to convert numeric entities
-    with ENT_NOQUOTES and ISO-8859-1). Fixed and extended the fix of ENT_NOQUOTES 
-    in html_entity_decode that had introduced the bug (rev #185591) to other
-    encodings. Additionaly, html_entity_decode() now doesn't decode " if
-    ENT_NOQUOTES is given. (Gustavo)
-  . Fixed bug #52931 (strripos not overloaded with function overloading enabled).
-    (Felipe)
+    with ENT_NOQUOTES and ISO-8859-1). Fixed and extended the fix of
+    ENT_NOQUOTES in html_entity_decode that had introduced the bug (rev
+    #185591) to other encodings. Additionaly, html_entity_decode() now doesn't
+    decode " if ENT_NOQUOTES is given. (Gustavo)
+  . Fixed bug #52931 (strripos not overloaded with function overloading
+    enabled). (Felipe)
   . Fixed bug #52772 (var_dump() doesn't check for the existence of 
     get_class_name before calling it). (Kalle, Gustavo)
   . Fixed bug #52534 (var_export array with negative key). (Felipe)
@@ -94,7 +326,8 @@
     other platforms). (Pierre)
   . Fixed bug #49687 (utf8_decode vulnerabilities and deficiencies in the number
     of reported malformed sequences). (CVE-2010-3870) (Gustavo)
-  . Fixed bug #49407 (get_html_translation_table doesn't handle UTF-8). (Gustavo)
+  . Fixed bug #49407 (get_html_translation_table doesn't handle UTF-8).
+    (Gustavo)
   . Fixed bug #48831 (php -i has different output to php --ini). (Richard, 
     Pierre)
   . Fixed bug #47643 (array_diff() takes over 3000 times longer than php 5.2.4).
@@ -195,8 +428,8 @@
     words). (Ilia)
 
 - Intl extension:
-  . Fixed crashes on invalid parameters in intl extension. (CVE-2010-4409). (Stas, Maksymilian
-    Arciemowicz)
+  . Fixed crashes on invalid parameters in intl extension. (CVE-2010-4409).
+    (Stas, Maksymilian Arciemowicz)
   . Added support for formatting the timestamp stored in a DateTime object.
     (Stas)
   . Fixed bug #50590 (IntlDateFormatter::parse result is limited to the integer
@@ -206,8 +439,8 @@
   . Fixed bug #53273 (mb_strcut() returns garbage with the excessive length
     parameter). (CVE-2010-4156) (Mateusz Kocielski, Pierre, Moriyoshi)
   . Fixed bug #52981 (Unicode casing table was out-of-date. Updated with
-    UnicodeData-6.0.0d7.txt and included the source of the generator program with
-    the distribution) (Gustavo).
+    UnicodeData-6.0.0d7.txt and included the source of the generator program
+    with the distribution) (Gustavo).
   . Fixed bug #52681 (mb_send_mail() appends an extra MIME-Version header).
     (Adam)
  
@@ -278,8 +511,8 @@
   . Fixed bug #52725 (gcc builtin atomic functions were sometimes used when they
     were not available). (fat)
   . Fixed bug #52693 (configuration file errors are not logged to stderr). (fat)
-  . Fixed bug #52674 (FPM Status page returns inconsistent Content-Type headers).
-    (fat)
+  . Fixed bug #52674 (FPM Status page returns inconsistent Content-Type
+    headers). (fat)
   . Fixed bug #52498 (libevent was not only linked to php-fpm). (fat)
 
 - PDO:
@@ -337,9 +570,9 @@
 - Streams:
   . Fixed forward stream seeking emulation in streams that don't support seeking
     in situations where the read operation gives back less data than requested
-    and when there was data in the buffer before the emulation started. Also made
-    more consistent its behavior -- should return failure every time less data
-    than was requested was skipped. (Gustavo)
+    and when there was data in the buffer before the emulation started. Also
+    made more consistent its behavior -- should return failure every time less
+    data than was requested was skipped. (Gustavo)
   . Fixed bug #53241 (stream casting that relies on fdopen/fopencookie fails
     with streams opened with, inter alia, the 'xb' mode). (Gustavo)
   . Fixed bug #53006 (stream_get_contents has an unpredictable behavior when the
diff --git a/TSRM/TSRM.c b/TSRM/TSRM.c
index 368178e..41368a4 100644
--- a/TSRM/TSRM.c
+++ b/TSRM/TSRM.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Thread Safe Resource Manager                                         |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1999-2010, Andi Gutmans, Sascha Schumann, Zeev Suraski |
+   | Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski |
    | This source file is subject to the TSRM license, that is bundled     |
    | with this package in the file LICENSE                                |
    +----------------------------------------------------------------------+
diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h
index cd6618f..d3d6f9b 100644
--- a/TSRM/TSRM.h
+++ b/TSRM/TSRM.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Thread Safe Resource Manager                                         |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1999-2010, Andi Gutmans, Sascha Schumann, Zeev Suraski |
+   | Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski |
    | This source file is subject to the TSRM license, that is bundled     |
    | with this package in the file LICENSE                                |
    +----------------------------------------------------------------------+
diff --git a/TSRM/tsrm_nw.c b/TSRM/tsrm_nw.c
index ac566a4..0c2a2fd 100644
--- a/TSRM/tsrm_nw.c
+++ b/TSRM/tsrm_nw.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: tsrm_nw.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: tsrm_nw.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdlib.h>
 #include <stdio.h>
diff --git a/TSRM/tsrm_nw.h b/TSRM/tsrm_nw.h
index 4895059..1350e6e 100644
--- a/TSRM/tsrm_nw.h
+++ b/TSRM/tsrm_nw.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/TSRM/tsrm_virtual_cwd.c b/TSRM/tsrm_virtual_cwd.c
index 30f42b1..6799036 100644
--- a/TSRM/tsrm_virtual_cwd.c
+++ b/TSRM/tsrm_virtual_cwd.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: tsrm_virtual_cwd.c 305070 2010-11-04 01:16:20Z pajoye $ */
+/* $Id: tsrm_virtual_cwd.c 307316 2011-01-10 00:43:08Z pajoye $ */
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -509,6 +509,9 @@ CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC) /* {{{ */
 
 		*length = 1;
 		retval = (char *) malloc(2);
+		if (retval == NULL) {
+			return NULL;
+		}
 		retval[0] = DEFAULT_SLASH;
 		retval[1] = '\0';
 		return retval;
@@ -521,6 +524,9 @@ CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC) /* {{{ */
 
 		*length = state->cwd_length+1;
 		retval = (char *) malloc(*length+1);
+		if (retval == NULL) {
+			return NULL;
+		}
 		memcpy(retval, state->cwd, *length);
 		retval[0] = toupper(retval[0]);
 		retval[*length-1] = DEFAULT_SLASH;
@@ -648,6 +654,10 @@ static inline void realpath_cache_add(const char *path, int path_len, const char
 		realpath_cache_bucket *bucket = malloc(size);
 		unsigned long n;
 
+		if (bucket == NULL) {
+			return;
+		}
+
 #ifdef PHP_WIN32
 		bucket->key = realpath_cache_key(path, path_len TSRMLS_CC);
 #else
@@ -866,6 +876,9 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
 			}
 
 			pbuffer = (REPARSE_DATA_BUFFER *)tsrm_do_alloca(MAXIMUM_REPARSE_DATA_BUFFER_SIZE, use_heap_large);
+			if (pbuffer == NULL) {
+				return -1;
+			}
 			if(!DeviceIoControl(hLink, FSCTL_GET_REPARSE_POINT, NULL, 0, pbuffer,  MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &retlength, NULL)) {
 				tsrm_free_alloca(pbuffer, use_heap_large);
 				CloseHandle(hLink);
@@ -952,9 +965,9 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
 			}
 
 			if (!isVolume) {
-				char * tmp = substitutename + substitutename_off;
+				char * tmp2 = substitutename + substitutename_off;
 				for(bufindex = 0; bufindex < (substitutename_len - substitutename_off); bufindex++) {
-					*(path + bufindex) = *(tmp + bufindex);
+					*(path + bufindex) = *(tmp2 + bufindex);
 				}
 
 				*(path + bufindex) = 0;
@@ -1370,6 +1383,10 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC) /* {
 	/* realpath("") returns CWD */
 	if (!*path) {
 		new_state.cwd = (char*)malloc(1);
+		if (new_state.cwd == NULL) {
+			retval = NULL;
+			goto end;
+		}
 		new_state.cwd[0] = '\0';
 		new_state.cwd_length = 0;
 		if (VCWD_GETCWD(cwd, MAXPATHLEN)) {
@@ -1379,6 +1396,10 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC) /* {
 		CWD_STATE_COPY(&new_state, &CWDG(cwd));
 	} else {
 		new_state.cwd = (char*)malloc(1);
+		if (new_state.cwd == NULL) {
+			retval = NULL;
+			goto end;
+		}
 		new_state.cwd[0] = '\0';
 		new_state.cwd_length = 0;
 	}
@@ -1394,7 +1415,7 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC) /* {
 	}
 
 	CWD_STATE_FREE(&new_state);
-
+end:
 	return retval;
 }
 /* }}} */
@@ -1887,6 +1908,9 @@ CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC) /* {{{
 	/* realpath("") returns CWD */
 	if (!*path) {
 		new_state.cwd = (char*)malloc(1);
+		if (new_state.cwd == NULL) {
+			return NULL;
+		}
 		new_state.cwd[0] = '\0';
 		new_state.cwd_length = 0;
 		if (VCWD_GETCWD(cwd, MAXPATHLEN)) {
@@ -1898,6 +1922,9 @@ CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC) /* {{{
 		new_state.cwd_length = strlen(cwd);
 	} else {
 		new_state.cwd = (char*)malloc(1);
+		if (new_state.cwd == NULL) {
+			return NULL;
+		}
 		new_state.cwd[0] = '\0';
 		new_state.cwd_length = 0;
 	}
diff --git a/TSRM/tsrm_virtual_cwd.h b/TSRM/tsrm_virtual_cwd.h
index d1bdd68..4f7308a 100644
--- a/TSRM/tsrm_virtual_cwd.h
+++ b/TSRM/tsrm_virtual_cwd.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: tsrm_virtual_cwd.h 305070 2010-11-04 01:16:20Z pajoye $ */
+/* $Id: tsrm_virtual_cwd.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef VIRTUAL_CWD_H
 #define VIRTUAL_CWD_H
diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c
index 24314c8..6ea8492 100644
--- a/TSRM/tsrm_win32.c
+++ b/TSRM/tsrm_win32.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: tsrm_win32.c 294532 2010-02-04 15:34:19Z pajoye $ */
+/* $Id: tsrm_win32.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 #include <fcntl.h>
diff --git a/TSRM/tsrm_win32.h b/TSRM/tsrm_win32.h
index 0d6f2ab..144d7f3 100644
--- a/TSRM/tsrm_win32.h
+++ b/TSRM/tsrm_win32.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: tsrm_win32.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: tsrm_win32.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef TSRM_WIN32_H
 #define TSRM_WIN32_H
diff --git a/UPGRADING b/UPGRADING
index bf88494..94b768d 100755
--- a/UPGRADING
+++ b/UPGRADING
@@ -1,4 +1,4 @@
-$Id: UPGRADING 306076 2010-12-08 09:38:47Z pajoye $
+$Id: UPGRADING 308266 2011-02-11 22:31:52Z salathe $
 
 UPGRADE NOTES - PHP 5.3
 
@@ -670,7 +670,9 @@ UPGRADE NOTES - PHP 5.3
                        ReflectionClass::inNamespace()
                        ReflectionClass::getNamespaceName()
                        ReflectionClass::getShortName()
-       - SPL           SplObjectStorage::addAll()
+       - SPL:          DirectoryIterator::getExtension()
+                       SplFileInfo::getExtension()
+                       SplObjectStorage::addAll()
                        SplObjectStorage::removeAll()
        - XSL:          XSLTProcessor::setProfiling()
 
diff --git a/Zend/acconfig.h b/Zend/acconfig.h
index 75d1cd8..4c9ec4a 100644
--- a/Zend/acconfig.h
+++ b/Zend/acconfig.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: acconfig.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: acconfig.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #if defined(__GNUC__) && __GNUC__ >= 4
 # define ZEND_API __attribute__ ((visibility("default")))
diff --git a/Zend/tests/bug53629.phpt b/Zend/tests/bug53629.phpt
new file mode 100644
index 0000000..4b46b9f
--- /dev/null
+++ b/Zend/tests/bug53629.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #53629 (memory leak inside highlight_string())
+--FILE--
+<?php
+
+$str = '
+<?php
+class foo {
+    public $bar = <<<EOT
+bar
+    EOT;
+}
+?>
+';
+$str2 = '
+<?php
+var_dump(array(<<<EOD
+foobar!
+EOD
+));
+?>
+';
+
+highlight_string($str, true);
+highlight_string($str2, true);
+
+
+echo "Done\n";
+?>
+--EXPECT--
+Done
diff --git a/Zend/tests/bug53958.phpt b/Zend/tests/bug53958.phpt
new file mode 100644
index 0000000..96a4115
--- /dev/null
+++ b/Zend/tests/bug53958.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Bug #53958 (Closures can't 'use' shared variables by value and by reference)
+--FILE--
+<?php
+// TEST 1
+$a = 1;
+$fn1 = function() use ($a) {echo "$a\n"; $a++;};
+$fn2 = function() use ($a) {echo "$a\n"; $a++;};
+$a = 5;
+$fn1(); // 1
+$fn2(); // 1
+$fn1(); // 1
+$fn2(); // 1
+
+// TEST 2
+$b = 1;
+$fn1 = function() use (&$b) {echo "$b\n"; $b++;};
+$fn2 = function() use (&$b) {echo "$b\n"; $b++;};
+$b = 5;
+$fn1(); // 5
+$fn2(); // 6
+$fn1(); // 7
+$fn2(); // 8
+
+// TEST 3
+$c = 1;
+$fn1 = function() use (&$c) {echo "$c\n"; $c++;};
+$fn2 = function() use ($c) {echo "$c\n"; $c++;};
+$c = 5;
+$fn1(); // 5
+$fn2(); // 1
+$fn1(); // 6
+$fn2(); // 1
+
+// TEST 4
+$d = 1;
+$fn1 = function() use ($d) {echo "$d\n"; $d++;};
+$fn2 = function() use (&$d) {echo "$d\n"; $d++;};
+$d = 5;
+$fn1(); // 1
+$fn2(); // 5
+$fn1(); // 1
+$fn2(); // 6
+?>
+--EXPECT--
+1
+1
+1
+1
+5
+6
+7
+8
+5
+1
+6
+1
+1
+5
+1
+6
diff --git a/Zend/tests/bug53971.phpt b/Zend/tests/bug53971.phpt
new file mode 100644
index 0000000..a1e66cc
--- /dev/null
+++ b/Zend/tests/bug53971.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Bug #53971 (isset() and empty() produce apparently spurious runtime error)
+--FILE--
+<?php
+$s = "";
+var_dump(isset($s[0][0]));
+?>
+--EXPECT--
+bool(false)
+
+
diff --git a/Zend/tests/bug54013.phpt b/Zend/tests/bug54013.phpt
new file mode 100644
index 0000000..4219eed
--- /dev/null
+++ b/Zend/tests/bug54013.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #54013 (ReflectionParam for duplicate parameter contains garbage)
+--FILE--
+<?php
+
+class a
+{
+        function b($aaaaaaaa, $aaaaaaaa)
+        {
+                $params = func_get_args();
+        }
+}
+
+$c = new a;
+$c->b('waa?', 'meukee!');
+
+$reflectionClass = new ReflectionClass($c);
+$params = $reflectionClass->getMethod('b')->getParameters();
+
+var_dump($params[0], $params[1]);
+
+?>
+--EXPECTF--
+object(ReflectionParameter)#%d (1) {
+  ["name"]=>
+  string(8) "aaaaaaaa"
+}
+object(ReflectionParameter)#%d (1) {
+  ["name"]=>
+  string(8) "aaaaaaaa"
+}
diff --git a/Zend/tests/bug54262.phpt b/Zend/tests/bug54262.phpt
new file mode 100644
index 0000000..24c7122
--- /dev/null
+++ b/Zend/tests/bug54262.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #54262 (Crash when assigning value to a dimension in a non-array)
+--FILE--
+<?php
+$a = '0';
+var_dump(isset($a['b']));
+$simpleString = preg_match('//', '', $a->a);
+$simpleString["wrong"] = "f";
+echo "ok\n";
+?>
+--EXPECTF--
+bool(true)
+
+Warning: Attempt to modify property of non-object in %s/Zend/tests/bug54262.php on line 4
+
+Warning: Cannot use a scalar value as an array in %s/Zend/tests/bug54262.php on line 5
+ok
\ No newline at end of file
diff --git a/Zend/tests/debug_backtrace_options.phpt b/Zend/tests/debug_backtrace_options.phpt
new file mode 100755
index 0000000..1b2d7e5
--- /dev/null
+++ b/Zend/tests/debug_backtrace_options.phpt
@@ -0,0 +1,397 @@
+--TEST--
+debug_backtrace options
+--FILE--
+<?php
+
+function backtrace_print($opt = null)
+{
+	if(is_null($opt)) {
+		print_r(debug_backtrace());
+	} else {
+		print_r(debug_backtrace($opt));
+	}
+}
+
+function doit($a, $b, $how)
+{
+	echo "==default\n";
+	$how();
+	echo "==true\n";
+	$how(true);
+	echo "==false\n";
+	$how(false);
+	echo "==DEBUG_BACKTRACE_PROVIDE_OBJECT\n";
+	$how(DEBUG_BACKTRACE_PROVIDE_OBJECT);
+	echo "==DEBUG_BACKTRACE_IGNORE_ARGS\n";
+	$how(DEBUG_BACKTRACE_IGNORE_ARGS);
+	echo "==both\n";
+	$how(DEBUG_BACKTRACE_PROVIDE_OBJECT|DEBUG_BACKTRACE_IGNORE_ARGS);
+}
+
+class foo {
+	protected function doCall($dowhat, $how) 
+	{  
+	   $dowhat('a','b', $how);
+	}
+	static function statCall($dowhat, $how)
+	{
+		$obj = new self();
+		$obj->doCall($dowhat, $how);
+	}
+}
+foo::statCall("doit", "debug_print_backtrace");
+foo::statCall("doit", "backtrace_print");
+
+?>
+--EXPECTF--
+==default
+#0  doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+#1  foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+#2  foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+==true
+#0  doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+#1  foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+#2  foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+==false
+#0  doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+#1  foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+#2  foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+==DEBUG_BACKTRACE_PROVIDE_OBJECT
+#0  doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+#1  foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+#2  foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
+==DEBUG_BACKTRACE_IGNORE_ARGS
+#0  doit() called at [%sdebug_backtrace_options.php:%d]
+#1  foo->doCall() called at [%sdebug_backtrace_options.php:%d]
+#2  foo::statCall() called at [%sdebug_backtrace_options.php:%d]
+==both
+#0  doit() called at [%sdebug_backtrace_options.php:%d]
+#1  foo->doCall() called at [%sdebug_backtrace_options.php:%d]
+#2  foo::statCall() called at [%sdebug_backtrace_options.php:%d]
+==default
+Array
+(
+    [0] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => backtrace_print
+            [args] => Array
+                (
+                )
+
+        )
+
+    [1] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doit
+            [args] => Array
+                (
+                    [0] => a
+                    [1] => b
+                    [2] => backtrace_print
+                )
+
+        )
+
+    [2] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doCall
+            [class] => foo
+            [object] => foo Object
+                (
+                )
+
+            [type] => ->
+            [args] => Array
+                (
+                    [0] => doit
+                    [1] => backtrace_print
+                )
+
+        )
+
+    [3] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => statCall
+            [class] => foo
+            [type] => ::
+            [args] => Array
+                (
+                    [0] => doit
+                    [1] => backtrace_print
+                )
+
+        )
+
+)
+==true
+Array
+(
+    [0] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => 17
+            [function] => backtrace_print
+            [args] => Array
+                (
+                    [0] => 1
+                )
+
+        )
+
+    [1] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doit
+            [args] => Array
+                (
+                    [0] => a
+                    [1] => b
+                    [2] => backtrace_print
+                )
+
+        )
+
+    [2] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doCall
+            [class] => foo
+            [object] => foo Object
+                (
+                )
+
+            [type] => ->
+            [args] => Array
+                (
+                    [0] => doit
+                    [1] => backtrace_print
+                )
+
+        )
+
+    [3] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => statCall
+            [class] => foo
+            [type] => ::
+            [args] => Array
+                (
+                    [0] => doit
+                    [1] => backtrace_print
+                )
+
+        )
+
+)
+==false
+Array
+(
+    [0] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => 19
+            [function] => backtrace_print
+            [args] => Array
+                (
+                    [0] => 
+                )
+
+        )
+
+    [1] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doit
+            [args] => Array
+                (
+                    [0] => a
+                    [1] => b
+                    [2] => backtrace_print
+                )
+
+        )
+
+    [2] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doCall
+            [class] => foo
+            [type] => ->
+            [args] => Array
+                (
+                    [0] => doit
+                    [1] => backtrace_print
+                )
+
+        )
+
+    [3] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => statCall
+            [class] => foo
+            [type] => ::
+            [args] => Array
+                (
+                    [0] => doit
+                    [1] => backtrace_print
+                )
+
+        )
+
+)
+==DEBUG_BACKTRACE_PROVIDE_OBJECT
+Array
+(
+    [0] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => 21
+            [function] => backtrace_print
+            [args] => Array
+                (
+                    [0] => 1
+                )
+
+        )
+
+    [1] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doit
+            [args] => Array
+                (
+                    [0] => a
+                    [1] => b
+                    [2] => backtrace_print
+                )
+
+        )
+
+    [2] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doCall
+            [class] => foo
+            [object] => foo Object
+                (
+                )
+
+            [type] => ->
+            [args] => Array
+                (
+                    [0] => doit
+                    [1] => backtrace_print
+                )
+
+        )
+
+    [3] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => statCall
+            [class] => foo
+            [type] => ::
+            [args] => Array
+                (
+                    [0] => doit
+                    [1] => backtrace_print
+                )
+
+        )
+
+)
+==DEBUG_BACKTRACE_IGNORE_ARGS
+Array
+(
+    [0] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => 23
+            [function] => backtrace_print
+        )
+
+    [1] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doit
+        )
+
+    [2] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doCall
+            [class] => foo
+            [type] => ->
+        )
+
+    [3] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => statCall
+            [class] => foo
+            [type] => ::
+        )
+
+)
+==both
+Array
+(
+    [0] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => 25
+            [function] => backtrace_print
+        )
+
+    [1] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doit
+        )
+
+    [2] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => doCall
+            [class] => foo
+            [object] => foo Object
+                (
+                )
+
+            [type] => ->
+        )
+
+    [3] => Array
+        (
+            [file] => %sdebug_backtrace_options.php
+            [line] => %d
+            [function] => statCall
+            [class] => foo
+            [type] => ::
+        )
+
+)
diff --git a/Zend/tests/exception_handler_002.phpt b/Zend/tests/exception_handler_002.phpt
index 3e0e4f0..7dfbb38 100644
--- a/Zend/tests/exception_handler_002.phpt
+++ b/Zend/tests/exception_handler_002.phpt
@@ -20,4 +20,8 @@ echo "Done\n";
 --EXPECTF--	
 string(12) "test thrown!"
 
-Fatal error: Exception thrown without a stack frame in Unknown on line 0
+Fatal error: Uncaught exception 'Exception' in %sexception_handler_002.php:7
+Stack trace:
+#0 [internal function]: foo(Object(test))
+#1 {main}
+  thrown in %sexception_handler_002.php on line %d
diff --git a/Zend/tests/indirect_reference_this.phpt b/Zend/tests/indirect_reference_this.phpt
new file mode 100644
index 0000000..05419d6
--- /dev/null
+++ b/Zend/tests/indirect_reference_this.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Indirect referenced $this
+--FILE--
+<?php
+class X {
+  function f($x){var_dump($$x);}
+}
+$x = new X;
+$x->f("this");
+?>
+--EXPECTF--
+object(X)#%d (0) {
+}
\ No newline at end of file
diff --git a/Zend/zend.c b/Zend/zend.c
index cd8ba77..dc7fba5 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_extensions.h"
@@ -114,7 +114,7 @@ ZEND_API zval zval_used_for_init; /* True global variable */
 /* version information */
 static char *zend_version_info;
 static uint zend_version_info_length;
-#define ZEND_CORE_VERSION_INFO	"Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2010 Zend Technologies\n"
+#define ZEND_CORE_VERSION_INFO	"Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2011 Zend Technologies\n"
 #define PRINT_ZVAL_INDENT 4
 
 static void print_hash(zend_write_func_t write_func, HashTable *ht, int indent, zend_bool is_object TSRMLS_DC) /* {{{ */
diff --git a/Zend/zend.h b/Zend/zend.h
index 3427b31..67fcac8 100644
--- a/Zend/zend.h
+++ b/Zend/zend.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend.h 293590 2010-01-15 18:26:53Z rasmus $ */
+/* $Id: zend.h 307522 2011-01-16 20:39:22Z stas $ */
 
 #ifndef ZEND_H
 #define ZEND_H
@@ -771,6 +771,9 @@ ZEND_API void zend_save_error_handling(zend_error_handling *current TSRMLS_DC);
 ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, zend_class_entry *exception_class, zend_error_handling *current TSRMLS_DC);
 ZEND_API void zend_restore_error_handling(zend_error_handling *saved TSRMLS_DC);
 
+#define DEBUG_BACKTRACE_PROVIDE_OBJECT (1<<0)
+#define DEBUG_BACKTRACE_IGNORE_ARGS    (1<<1)
+
 #endif /* ZEND_H */
 
 /*
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index ea00d44..6d99c4d 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_API.c 302137 2010-08-12 07:58:14Z sas $ */
+/* $Id: zend_API.c 307424 2011-01-12 22:17:10Z felipe $ */
 
 #include "zend.h"
 #include "zend_execute.h"
@@ -928,7 +928,7 @@ ZEND_API int zend_parse_method_parameters_ex(int flags, int num_args TSRMLS_DC,
 		va_end(va);
 	} else {
 		p++;
-		RETURN_IF_ZERO_ARGS(num_args-1, p, quiet);
+		RETURN_IF_ZERO_ARGS(num_args, p, quiet);
 
 		va_start(va, type_spec);
 
diff --git a/Zend/zend_API.h b/Zend/zend_API.h
index 7368958..7259273 100644
--- a/Zend/zend_API.h
+++ b/Zend/zend_API.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_API.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_API.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_API_H
 #define ZEND_API_H
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index cc7c54d..ab226cb 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_alloc.c 301262 2010-07-14 10:27:08Z dmitry $ */
+/* $Id: zend_alloc.c 308090 2011-02-07 10:25:34Z pajoye $ */
 
 #include "zend.h"
 #include "zend_alloc.h"
@@ -241,6 +241,10 @@ static zend_mm_storage* zend_mm_mem_win32_init(void *params)
 		return NULL;
 	}
 	storage = (zend_mm_storage*)malloc(sizeof(zend_mm_storage));
+	if (storage == NULL) {
+		HeapDestroy(heap);
+		return NULL;
+	}
 	storage->data = (void*) heap;
 	return storage;
 }
@@ -1066,7 +1070,13 @@ ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_mem_handlers *handlers,
 	storage->handlers = handlers;
 
 	heap = malloc(sizeof(struct _zend_mm_heap));
-
+	if (heap == NULL) {
+		fprintf(stderr, "Cannot allocate heap for zend_mm storage [%s]\n", handlers->name);
+#ifdef PHP_WIN32
+		fflush(stderr);
+#endif
+		exit(255);
+	}
 	heap->storage = storage;
 	heap->block_size = block_size;
 	heap->compact_size = 0;
diff --git a/Zend/zend_alloc.h b/Zend/zend_alloc.h
index ac64a30..f704584 100644
--- a/Zend/zend_alloc.h
+++ b/Zend/zend_alloc.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_alloc.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_alloc.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_ALLOC_H
 #define ZEND_ALLOC_H
diff --git a/Zend/zend_build.h b/Zend/zend_build.h
index 2c821f3..a0ed763 100755
--- a/Zend/zend_build.h
+++ b/Zend/zend_build.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 320c2bc..c638698 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_builtin_functions.c 300392 2010-06-11 23:20:13Z felipe $ */
+/* $Id: zend_builtin_functions.c 307522 2011-01-16 20:39:22Z stas $ */
 
 #include "zend.h"
 #include "zend_API.h"
@@ -211,7 +211,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_get_defined_constants, 0, 0, 0)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_debug_backtrace, 0, 0, 0)
-	ZEND_ARG_INFO(0, provide_object)
+	ZEND_ARG_INFO(0, options)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_extension_loaded, 0, 0, 1)
@@ -272,7 +272,7 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */
 	ZEND_FE(get_extension_funcs,		arginfo_extension_loaded)
 	ZEND_FE(get_defined_constants,		arginfo_get_defined_constants)
 	ZEND_FE(debug_backtrace, 			arginfo_debug_backtrace)
-	ZEND_FE(debug_print_backtrace, 		arginfo_zend__void)
+	ZEND_FE(debug_print_backtrace, 		arginfo_debug_backtrace)
 #if ZEND_DEBUG
 	ZEND_FE(zend_test_func,		NULL)
 #ifdef ZTS
@@ -1944,7 +1944,7 @@ void debug_print_backtrace_args(zval *arg_array TSRMLS_DC)
 	}
 }
 
-/* {{{ proto void debug_print_backtrace(void) */
+/* {{{ proto void debug_print_backtrace([int options]) */
 ZEND_FUNCTION(debug_print_backtrace)
 {
 	zend_execute_data *ptr, *skip;
@@ -1956,8 +1956,9 @@ ZEND_FUNCTION(debug_print_backtrace)
 	char *include_filename = NULL;
 	zval *arg_array = NULL;
 	int indent = 0;
+	long options = 0;
 
-	if (zend_parse_parameters_none() == FAILURE) {
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &options) == FAILURE) {
 		return;
 	}
 
@@ -2016,7 +2017,7 @@ ZEND_FUNCTION(debug_print_backtrace)
 				call_type = NULL;
 			}
 			if ((! ptr->opline) || ((ptr->opline->opcode == ZEND_DO_FCALL_BY_NAME) || (ptr->opline->opcode == ZEND_DO_FCALL))) {
-				if (ptr->function_state.arguments) {
+				if (ptr->function_state.arguments && (options & DEBUG_BACKTRACE_IGNORE_ARGS) == 0) {
 					arg_array = debug_backtrace_get_args(ptr->function_state.arguments TSRMLS_CC);
 				}
 			}
@@ -2103,7 +2104,7 @@ ZEND_FUNCTION(debug_print_backtrace)
 
 /* }}} */
 
-ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int provide_object TSRMLS_DC)
+ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int options TSRMLS_DC)
 {
 	zend_execute_data *ptr, *skip;
 	int lineno;
@@ -2187,7 +2188,7 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
 					add_assoc_string_ex(stack_frame, "class", sizeof("class"), class_name, dup);
 					
 				}
-				if (provide_object) {
+				if ((options & DEBUG_BACKTRACE_PROVIDE_OBJECT) != 0) {
 					add_assoc_zval_ex(stack_frame, "object", sizeof("object"), ptr->object);
 					Z_ADDREF_P(ptr->object);
 				}
@@ -2198,7 +2199,8 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
 				add_assoc_string_ex(stack_frame, "type", sizeof("type"), "::", 1);
 			}
 
-			if ((! ptr->opline) || ((ptr->opline->opcode == ZEND_DO_FCALL_BY_NAME) || (ptr->opline->opcode == ZEND_DO_FCALL))) {
+			if ((options & DEBUG_BACKTRACE_IGNORE_ARGS) == 0 && 
+				((! ptr->opline) || ((ptr->opline->opcode == ZEND_DO_FCALL_BY_NAME) || (ptr->opline->opcode == ZEND_DO_FCALL)))) {
 				if (ptr->function_state.arguments) {
 					add_assoc_zval_ex(stack_frame, "args", sizeof("args"), debug_backtrace_get_args(ptr->function_state.arguments TSRMLS_CC));
 				}
@@ -2264,17 +2266,17 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
 /* }}} */
 
 
-/* {{{ proto array debug_backtrace([bool provide_object])
+/* {{{ proto array debug_backtrace([int options])
    Return backtrace as array */
 ZEND_FUNCTION(debug_backtrace)
 {
-	zend_bool provide_object = 1;
+	long options = DEBUG_BACKTRACE_PROVIDE_OBJECT;
 	
-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &provide_object) == FAILURE) {
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &options) == FAILURE) {
 		return;
 	}
 
-	zend_fetch_debug_backtrace(return_value, 1, provide_object TSRMLS_CC);
+	zend_fetch_debug_backtrace(return_value, 1, options TSRMLS_CC);
 }
 /* }}} */
 
diff --git a/Zend/zend_builtin_functions.h b/Zend/zend_builtin_functions.h
index 03bfd37..9293767 100644
--- a/Zend/zend_builtin_functions.h
+++ b/Zend/zend_builtin_functions.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_builtin_functions.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_builtin_functions.h 309106 2011-03-11 03:52:39Z sebastian $ */
 
 #ifndef ZEND_BUILTIN_FUNCTIONS_H
 #define ZEND_BUILTIN_FUNCTIONS_H
@@ -25,7 +25,7 @@
 int zend_startup_builtin_functions(TSRMLS_D);
 
 BEGIN_EXTERN_C()
-ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int provide_object TSRMLS_DC);
+ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int options TSRMLS_DC);
 END_EXTERN_C()
 
 #endif /* ZEND_BUILTIN_FUNCTIONS_H */
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c
index a5a2f84..32f3bb9 100644
--- a/Zend/zend_closures.c
+++ b/Zend/zend_closures.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_closures.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_closures.c 308320 2011-02-14 10:52:16Z dmitry $ */
 
 #include "zend.h"
 #include "zend_API.h"
@@ -323,6 +323,7 @@ static int zval_copy_static_var(zval **p TSRMLS_DC, int num_args, va_list args,
 {
 	HashTable *target = va_arg(args, HashTable*);
 	zend_bool is_ref;
+	zval *tmp;
 
 	if (Z_TYPE_PP(p) & (IS_LEXICAL_VAR|IS_LEXICAL_REF)) {
 		is_ref = Z_TYPE_PP(p) & IS_LEXICAL_REF;
@@ -332,25 +333,31 @@ static int zval_copy_static_var(zval **p TSRMLS_DC, int num_args, va_list args,
 		}
 		if (zend_hash_quick_find(EG(active_symbol_table), key->arKey, key->nKeyLength, key->h, (void **) &p) == FAILURE) {
 			if (is_ref) {
-				zval *tmp;
-
 				ALLOC_INIT_ZVAL(tmp);
 				Z_SET_ISREF_P(tmp);
 				zend_hash_quick_add(EG(active_symbol_table), key->arKey, key->nKeyLength, key->h, &tmp, sizeof(zval*), (void**)&p);
 			} else {
-				p = &EG(uninitialized_zval_ptr);
+				tmp = EG(uninitialized_zval_ptr);
 				zend_error(E_NOTICE,"Undefined variable: %s", key->arKey);
 			}
 		} else {
 			if (is_ref) {
 				SEPARATE_ZVAL_TO_MAKE_IS_REF(p);
+				tmp = *p;
 			} else if (Z_ISREF_PP(p)) {
-				SEPARATE_ZVAL(p);
+				ALLOC_INIT_ZVAL(tmp);
+				*tmp = **p;
+				Z_SET_REFCOUNT_P(tmp, 0);
+				Z_UNSET_ISREF_P(tmp);
+			} else {
+				tmp = *p;
 			}
 		}
+	} else {
+		tmp = *p;
 	}
-	if (zend_hash_quick_add(target, key->arKey, key->nKeyLength, key->h, p, sizeof(zval*), NULL) == SUCCESS) {
-		Z_ADDREF_PP(p);
+	if (zend_hash_quick_add(target, key->arKey, key->nKeyLength, key->h, &tmp, sizeof(zval*), NULL) == SUCCESS) {
+		Z_ADDREF_P(tmp);
 	}
 	return ZEND_HASH_APPLY_KEEP;
 }
diff --git a/Zend/zend_closures.h b/Zend/zend_closures.h
index c51079e..4be32e2 100644
--- a/Zend/zend_closures.h
+++ b/Zend/zend_closures.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_closures.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_closures.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_CLOSURES_H
 #define ZEND_CLOSURES_H
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index af450b8..4e05be7 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_compile.c 305057 2010-11-03 15:40:24Z colder $ */
+/* $Id: zend_compile.c 308443 2011-02-17 23:24:50Z felipe $ */
 
 #include <zend_language_parser.h>
 #include "zend.h"
@@ -387,6 +387,7 @@ void fetch_simple_variable_ex(znode *result, znode *varname, int bp, zend_uchar
 			result->op_type = IS_CV;
 			result->u.var = lookup_cv(CG(active_op_array), varname->u.constant.value.str.val, varname->u.constant.value.str.len);
 			result->u.EA.type = 0;
+			varname->u.constant.value.str.val = CG(active_op_array)->vars[result->u.var].name;
 			return;
 		}
 	}
@@ -625,7 +626,7 @@ void zend_do_assign(znode *result, znode *variable, const znode *value TSRMLS_DC
 	if (variable->op_type == IS_CV) {
 		if (variable->u.var == CG(active_op_array)->this_var) {
 			zend_error(E_COMPILE_ERROR, "Cannot re-assign $this");
-	    }
+		}
 	} else if (variable->op_type == IS_VAR) {
 		int n = 0;
 
@@ -705,7 +706,7 @@ void zend_do_assign_ref(znode *result, const znode *lvar, const znode *rvar TSRM
 	if (lvar->op_type == IS_CV) {
 		if (lvar->u.var == CG(active_op_array)->this_var) {
  			zend_error(E_COMPILE_ERROR, "Cannot re-assign $this");
-	    }
+		}
 	} else if (lvar->op_type == IS_VAR) {
 		int last_op_number = get_next_op_number(CG(active_op_array));
 
@@ -1008,7 +1009,7 @@ void zend_do_end_variable_parse(znode *variable, int type, int arg_offset TSRMLS
 					variable->op_type = IS_CV;
 					variable->u.var = CG(active_op_array)->this_var;
 				}
-		    } else if (CG(active_op_array)->this_var == -1) {
+			} else if (CG(active_op_array)->this_var == -1) {
 				CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), estrndup("this", sizeof("this")-1), sizeof("this")-1);
 			}
 		}
@@ -1894,14 +1895,14 @@ void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int pass2
 	long current, distance;
 
 	if (CG(labels) == NULL ||
-	    zend_hash_find(CG(labels), Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant)+1, (void**)&dest) == FAILURE) {
+		zend_hash_find(CG(labels), Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant)+1, (void**)&dest) == FAILURE) {
 
-	    if (pass2) {
-	    	CG(in_compilation) = 1;
-	    	CG(active_op_array) = op_array;
-	    	CG(zend_lineno) = opline->lineno;
+		if (pass2) {
+			CG(in_compilation) = 1;
+			CG(active_op_array) = op_array;
+			CG(zend_lineno) = opline->lineno;
 			zend_error(E_COMPILE_ERROR, "'goto' to undefined label '%s'", Z_STRVAL(opline->op2.u.constant));
-	    } else {
+		} else {
 			/* Label is not defined. Delay to pass 2. */
 			INC_BPC(op_array);
 			return;
@@ -1915,11 +1916,11 @@ void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int pass2
 	current = opline->extended_value;
 	for (distance = 0; current != dest->brk_cont; distance++) {
 		if (current == -1) {
-		    if (pass2) {
-		    	CG(in_compilation) = 1;
-	    		CG(active_op_array) = op_array;
-	    		CG(zend_lineno) = opline->lineno;
-	    	}
+			if (pass2) {
+				CG(in_compilation) = 1;
+				CG(active_op_array) = op_array;
+				CG(zend_lineno) = opline->lineno;
+			}
 			zend_error(E_COMPILE_ERROR, "'goto' into loop or switch statement is disallowed");
 		}
 		current = op_array->brk_cont_array[current].parent;
@@ -1935,9 +1936,9 @@ void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int pass2
 		ZVAL_LONG(&opline->op2.u.constant, distance);
 	}
 
-    if (pass2) {
+	if (pass2) {
 		DEC_BPC(op_array);
-    }
+	}
 }
 /* }}} */
 
@@ -2009,7 +2010,7 @@ int zend_do_begin_class_member_function_call(znode *class_name, znode *method_na
 	if (method_name->op_type == IS_CONST) {
 		char *lcname = zend_str_tolower_dup(Z_STRVAL(method_name->u.constant), Z_STRLEN(method_name->u.constant));
 		if ((sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == Z_STRLEN(method_name->u.constant) &&
-		    memcmp(lcname, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == 0) {
+			memcmp(lcname, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == 0) {
 			zval_dtor(&method_name->u.constant);
 			SET_UNUSED(*method_name);
 		}
@@ -2017,7 +2018,7 @@ int zend_do_begin_class_member_function_call(znode *class_name, znode *method_na
 	}
 
 	if (class_name->op_type == IS_CONST &&
-	    ZEND_FETCH_CLASS_DEFAULT == zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant))) {
+			ZEND_FETCH_CLASS_DEFAULT == zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant))) {
 		fetch_type = ZEND_FETCH_CLASS_GLOBAL;
 		zend_resolve_class_name(class_name, &fetch_type, 1 TSRMLS_CC);
 		class_node = *class_name;
@@ -2080,9 +2081,9 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{
 
 	if (original_op == ZEND_SEND_REF && !CG(allow_call_time_pass_reference)) {
 		if (function_ptr &&
-		    function_ptr->common.function_name &&
-		    function_ptr->common.type == ZEND_USER_FUNCTION &&
-		    !ARG_SHOULD_BE_SENT_BY_REF(function_ptr, (zend_uint) offset)) {
+				function_ptr->common.function_name &&
+				function_ptr->common.type == ZEND_USER_FUNCTION &&
+				!ARG_SHOULD_BE_SENT_BY_REF(function_ptr, (zend_uint) offset)) {
 			zend_error(E_DEPRECATED,
 						"Call-time pass-by-reference has been deprecated; "
 						"If you would like to pass it by reference, modify the declaration of %s().  "
@@ -2572,9 +2573,9 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
 			char *colon;
 
 			if (fe->common.type != ZEND_USER_FUNCTION ||
-			    strchr(proto->common.arg_info[i].class_name, '\\') != NULL ||
-			    (colon = zend_memrchr(fe->common.arg_info[i].class_name, '\\', fe->common.arg_info[i].class_name_len)) == NULL ||
-			    strcasecmp(colon+1, proto->common.arg_info[i].class_name) != 0) {
+					strchr(proto->common.arg_info[i].class_name, '\\') != NULL ||
+					(colon = zend_memrchr(fe->common.arg_info[i].class_name, '\\', fe->common.arg_info[i].class_name_len)) == NULL ||
+					strcasecmp(colon+1, proto->common.arg_info[i].class_name) != 0) {
 				return 0;
 			}
 		}
@@ -3059,9 +3060,9 @@ void zend_do_early_binding(TSRMLS_D) /* {{{ */
 				zend_class_entry **pce;
 
 				if ((zend_lookup_class(Z_STRVAL_P(parent_name), Z_STRLEN_P(parent_name), &pce TSRMLS_CC) == FAILURE) ||
-				    ((CG(compiler_options) & ZEND_COMPILE_IGNORE_INTERNAL_CLASSES) &&
-				     ((*pce)->type == ZEND_INTERNAL_CLASS))) {
-				    if (CG(compiler_options) & ZEND_COMPILE_DELAYED_BINDING) {
+						((CG(compiler_options) & ZEND_COMPILE_IGNORE_INTERNAL_CLASSES) &&
+						((*pce)->type == ZEND_INTERNAL_CLASS))) {
+					if (CG(compiler_options) & ZEND_COMPILE_DELAYED_BINDING) {
 						zend_uint *opline_num = &CG(active_op_array)->early_binding;
 
 						while (*opline_num != -1) {
@@ -3391,7 +3392,7 @@ void zend_do_begin_class_declaration(const znode *class_token, znode *class_name
 
 	/* Class name must not conflict with import names */
 	if (CG(current_import) &&
-	    zend_hash_find(CG(current_import), lcname, Z_STRLEN(class_name->u.constant)+1, (void**)&ns_name) == SUCCESS) {
+			zend_hash_find(CG(current_import), lcname, Z_STRLEN(class_name->u.constant)+1, (void**)&ns_name) == SUCCESS) {
 		error = 1;
 	}
 
@@ -3626,7 +3627,7 @@ void zend_do_declare_property(const znode *var_name, const znode *value, zend_ui
 
 	if (access_type & ZEND_ACC_FINAL) {
 		zend_error(E_COMPILE_ERROR, "Cannot declare property %s::$%s final, the final modifier is allowed only for methods and classes",
-				   CG(active_class_entry)->name, var_name->u.constant.value.str.val);
+					CG(active_class_entry)->name, var_name->u.constant.value.str.val);
 	}
 
 	if (zend_hash_find(&CG(active_class_entry)->properties_info, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, (void **) &existing_property_info)==SUCCESS) {
@@ -3689,8 +3690,8 @@ void zend_do_fetch_property(znode *result, znode *object, const znode *property
 
 	if (object->op_type == IS_CV) {
 		if (object->u.var == CG(active_op_array)->this_var) {
-		    SET_UNUSED(*object); /* this means $this for objects */
-	    }
+			SET_UNUSED(*object); /* this means $this for objects */
+		}
 	} else if (fetch_list_ptr->count == 1) {
 		zend_llist_element *le = fetch_list_ptr->head;
 		zend_op *opline_ptr = (zend_op *) le->data;
@@ -3865,10 +3866,10 @@ static zend_constant* zend_get_ct_const(const zval *const_name, int all_internal
 		return c;
 	}
 	if (all_internal_constants_substitution &&
-	    (c->flags & CONST_PERSISTENT) &&
-	    !(CG(compiler_options) & ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION) &&
-	    Z_TYPE(c->value) != IS_CONSTANT &&
-	    Z_TYPE(c->value) != IS_CONSTANT_ARRAY) {
+			(c->flags & CONST_PERSISTENT) &&
+			!(CG(compiler_options) & ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION) &&
+			Z_TYPE(c->value) != IS_CONSTANT &&
+			Z_TYPE(c->value) != IS_CONSTANT_ARRAY) {
 		return c;
 	}
 	return NULL;
@@ -4261,7 +4262,7 @@ void zend_do_fetch_lexical_variable(znode *varname, zend_bool is_ref TSRMLS_DC)
 	znode value;
 
 	if (Z_STRLEN(varname->u.constant) == sizeof("this") - 1 &&
-	    memcmp(Z_STRVAL(varname->u.constant), "this", sizeof("this") - 1) == 0) {
+			memcmp(Z_STRVAL(varname->u.constant), "this", sizeof("this") - 1) == 0) {
 		zend_error(E_COMPILE_ERROR, "Cannot use $this as lexical variable");
 		return;
 	}
@@ -4351,6 +4352,10 @@ void zend_do_indirect_references(znode *result, const znode *num_references, zno
 	}
 	zend_do_begin_variable_parse(TSRMLS_C);
 	fetch_simple_variable(result, variable, 1 TSRMLS_CC);
+	/* there is a chance someone is accessing $this */
+	if (CG(active_op_array)->scope && CG(active_op_array)->this_var == -1) {
+		CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), estrndup("this", sizeof("this")-1), sizeof("this")-1);
+	}
 }
 /* }}} */
 
@@ -4471,7 +4476,7 @@ void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, zno
 		open_brackets_token->u.opline_num = get_next_op_number(CG(active_op_array));
 		zend_do_end_variable_parse(array, BP_VAR_W, 0 TSRMLS_CC);
 		if (CG(active_op_array)->last > 0 &&
-		    CG(active_op_array)->opcodes[CG(active_op_array)->last-1].opcode == ZEND_FETCH_OBJ_W) {
+				CG(active_op_array)->opcodes[CG(active_op_array)->last-1].opcode == ZEND_FETCH_OBJ_W) {
 			/* Only lock the container if we are fetching from a real container and not $this */
 			if (CG(active_op_array)->opcodes[CG(active_op_array)->last-1].op1.op_type == IS_VAR) {
 				CG(active_op_array)->opcodes[CG(active_op_array)->last-1].extended_value |= ZEND_FETCH_ADD_LOCK;
@@ -4658,8 +4663,8 @@ void zend_do_declare_stmt(znode *var, znode *val TSRMLS_DC) /* {{{ */
 			int num = CG(active_op_array)->last;
 			/* ignore ZEND_EXT_STMT and ZEND_TICKS */
 			while (num > 0 &&
-			       (CG(active_op_array)->opcodes[num-1].opcode == ZEND_EXT_STMT ||
-			        CG(active_op_array)->opcodes[num-1].opcode == ZEND_TICKS)) {
+						 (CG(active_op_array)->opcodes[num-1].opcode == ZEND_EXT_STMT ||
+							CG(active_op_array)->opcodes[num-1].opcode == ZEND_TICKS)) {
 				--num;
 			}
 
@@ -5073,7 +5078,7 @@ void zend_do_build_namespace_name(znode *result, znode *prefix, znode *name TSRM
 	if (prefix) {
 		*result = *prefix;
 		if (Z_TYPE(result->u.constant) == IS_STRING &&
-		    Z_STRLEN(result->u.constant) == 0) {
+		Z_STRLEN(result->u.constant) == 0) {
 			/* namespace\ */
 			if (CG(current_namespace)) {
 				znode tmp;
@@ -5121,8 +5126,8 @@ void zend_do_begin_namespace(const znode *name, zend_bool with_bracket TSRMLS_DC
 		/* ignore ZEND_EXT_STMT and ZEND_TICKS */
 		int num = CG(active_op_array)->last;
 		while (num > 0 &&
-		       (CG(active_op_array)->opcodes[num-1].opcode == ZEND_EXT_STMT ||
-		        CG(active_op_array)->opcodes[num-1].opcode == ZEND_TICKS)) {
+					 (CG(active_op_array)->opcodes[num-1].opcode == ZEND_EXT_STMT ||
+						CG(active_op_array)->opcodes[num-1].opcode == ZEND_TICKS)) {
 			--num;
 		}
 		if (num > 0) {
@@ -5138,9 +5143,9 @@ void zend_do_begin_namespace(const znode *name, zend_bool with_bracket TSRMLS_DC
 	if (name) {
 		lcname = zend_str_tolower_dup(Z_STRVAL(name->u.constant), Z_STRLEN(name->u.constant));
 		if (((Z_STRLEN(name->u.constant) == sizeof("self")-1) &&
-		      !memcmp(lcname, "self", sizeof("self")-1)) ||
-		    ((Z_STRLEN(name->u.constant) == sizeof("parent")-1) &&
-	          !memcmp(lcname, "parent", sizeof("parent")-1))) {
+					!memcmp(lcname, "self", sizeof("self")-1)) ||
+				((Z_STRLEN(name->u.constant) == sizeof("parent")-1) &&
+						!memcmp(lcname, "parent", sizeof("parent")-1))) {
 			zend_error(E_COMPILE_ERROR, "Cannot use '%s' as namespace name", Z_STRVAL(name->u.constant));
 		}
 		efree(lcname);
@@ -5202,9 +5207,9 @@ void zend_do_use(znode *ns_name, znode *new_name, int is_global TSRMLS_DC) /* {{
 	lcname = zend_str_tolower_dup(Z_STRVAL_P(name), Z_STRLEN_P(name));
 
 	if (((Z_STRLEN_P(name) == sizeof("self")-1) &&
-          !memcmp(lcname, "self", sizeof("self")-1)) ||
-	    ((Z_STRLEN_P(name) == sizeof("parent")-1) &&
-          !memcmp(lcname, "parent", sizeof("parent")-1))) {
+				!memcmp(lcname, "self", sizeof("self")-1)) ||
+			((Z_STRLEN_P(name) == sizeof("parent")-1) &&
+				!memcmp(lcname, "parent", sizeof("parent")-1))) {
 		zend_error(E_COMPILE_ERROR, "Cannot use %s as %s because '%s' is a special class name", Z_STRVAL_P(ns), Z_STRVAL_P(name), Z_STRVAL_P(name));
 	}
 
@@ -5216,13 +5221,13 @@ void zend_do_use(znode *ns_name, znode *new_name, int is_global TSRMLS_DC) /* {{
 		c_ns_name[Z_STRLEN_P(CG(current_namespace))] = '\\';
 		memcpy(c_ns_name+Z_STRLEN_P(CG(current_namespace))+1, lcname, Z_STRLEN_P(name)+1);
 		if (zend_hash_exists(CG(class_table), c_ns_name, Z_STRLEN_P(CG(current_namespace)) + 1 + Z_STRLEN_P(name)+1)) {
-			char *tmp = zend_str_tolower_dup(Z_STRVAL_P(ns), Z_STRLEN_P(ns));
+			char *tmp2 = zend_str_tolower_dup(Z_STRVAL_P(ns), Z_STRLEN_P(ns));
 
 			if (Z_STRLEN_P(ns) != Z_STRLEN_P(CG(current_namespace)) + 1 + Z_STRLEN_P(name) ||
-				memcmp(tmp, c_ns_name, Z_STRLEN_P(ns))) {
+				memcmp(tmp2, c_ns_name, Z_STRLEN_P(ns))) {
 				zend_error(E_COMPILE_ERROR, "Cannot use %s as %s because the name is already in use", Z_STRVAL_P(ns), Z_STRVAL_P(name));
 			}
-			efree(tmp);
+			efree(tmp2);
 		}
 		efree(c_ns_name);
 	} else if (zend_hash_find(CG(class_table), lcname, Z_STRLEN_P(name)+1, (void**)&pce) == SUCCESS &&
@@ -5348,7 +5353,7 @@ ZEND_API size_t zend_dirname(char *path, size_t len)
 		if (len_adjust == len) {
 			return len;
 		}
-    }
+	}
 #endif
 
 	if (len == 0) {
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index ac9b31b..dac8b9f 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_compile.h 300345 2010-06-10 09:13:22Z dmitry $ */
+/* $Id: zend_compile.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_COMPILE_H
 #define ZEND_COMPILE_H
diff --git a/Zend/zend_config.nw.h b/Zend/zend_config.nw.h
index 14467c2..7ec4a1f 100644
--- a/Zend/zend_config.nw.h
+++ b/Zend/zend_config.nw.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_config.nw.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_config.nw.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_CONFIG_NW_H
 #define ZEND_CONFIG_NW_H
diff --git a/Zend/zend_config.w32.h b/Zend/zend_config.w32.h
index 4313ec1..715a834 100644
--- a/Zend/zend_config.w32.h
+++ b/Zend/zend_config.w32.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_config.w32.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_config.w32.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_CONFIG_W32_H
 #define ZEND_CONFIG_W32_H
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c
index 8a49b2f..056c3b9 100644
--- a/Zend/zend_constants.c
+++ b/Zend/zend_constants.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_constants.c 305332 2010-11-14 01:38:52Z felipe $ */
+/* $Id: zend_constants.c 307522 2011-01-16 20:39:22Z stas $ */
 
 #include "zend.h"
 #include "zend_constants.h"
@@ -113,6 +113,8 @@ void zend_register_standard_constants(TSRMLS_D)
 
 	REGISTER_MAIN_LONG_CONSTANT("E_ALL", E_ALL, CONST_PERSISTENT | CONST_CS);
 
+	REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_PROVIDE_OBJECT", DEBUG_BACKTRACE_PROVIDE_OBJECT, CONST_PERSISTENT | CONST_CS);
+	REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_IGNORE_ARGS", DEBUG_BACKTRACE_IGNORE_ARGS, CONST_PERSISTENT | CONST_CS);
 	/* true/false constants */
 	{
 		zend_constant c;
diff --git a/Zend/zend_constants.h b/Zend/zend_constants.h
index b041c98..de45c24 100644
--- a/Zend/zend_constants.h
+++ b/Zend/zend_constants.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_constants.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_constants.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_CONSTANTS_H
 #define ZEND_CONSTANTS_H
diff --git a/Zend/zend_default_classes.c b/Zend/zend_default_classes.c
index d36dabb..e28819e 100644
--- a/Zend/zend_default_classes.c
+++ b/Zend/zend_default_classes.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_default_classes.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_default_classes.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_API.h"
diff --git a/Zend/zend_dynamic_array.c b/Zend/zend_dynamic_array.c
index b6ad419..73185a6 100644
--- a/Zend/zend_dynamic_array.c
+++ b/Zend/zend_dynamic_array.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_dynamic_array.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_dynamic_array.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 
diff --git a/Zend/zend_dynamic_array.h b/Zend/zend_dynamic_array.h
index c0e22f6..2ec72fd 100644
--- a/Zend/zend_dynamic_array.h
+++ b/Zend/zend_dynamic_array.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_dynamic_array.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_dynamic_array.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_DYNAMIC_ARRAY_H
 #define ZEND_DYNAMIC_ARRAY_H
diff --git a/Zend/zend_errors.h b/Zend/zend_errors.h
index df5da6e..d3f1833 100644
--- a/Zend/zend_errors.h
+++ b/Zend/zend_errors.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_errors.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_errors.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_ERRORS_H
 #define ZEND_ERRORS_H
diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c
index aa2a366..180366c 100644
--- a/Zend/zend_exceptions.c
+++ b/Zend/zend_exceptions.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_exceptions.c 302311 2010-08-16 08:11:08Z dmitry $ */
+/* $Id: zend_exceptions.c 307523 2011-01-16 21:24:43Z stas $ */
 
 #include "zend.h"
 #include "zend_API.h"
@@ -91,6 +91,9 @@ void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */
 		}
 	}
 	if (!EG(current_execute_data)) {
+		if(EG(exception)) {
+			zend_exception_error(EG(exception), E_ERROR TSRMLS_CC);
+		}
 		zend_error(E_ERROR, "Exception thrown without a stack frame");
 	}
 
diff --git a/Zend/zend_exceptions.h b/Zend/zend_exceptions.h
index ee2ced9..d360eb1 100644
--- a/Zend/zend_exceptions.h
+++ b/Zend/zend_exceptions.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_exceptions.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_exceptions.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_EXCEPTIONS_H
 #define ZEND_EXCEPTIONS_H
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index d7a2e2c..e16cb3f 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute.c 303895 2010-09-30 14:11:51Z dmitry $ */
+/* $Id: zend_execute.c 309328 2011-03-17 07:46:57Z johannes $ */
 
 #define ZEND_INTENSIVE_DEBUGGING 0
 
@@ -1067,7 +1067,7 @@ static void zend_fetch_dimension_address_read(temp_variable *result, zval **cont
 					dim = &tmp;
 				}
 				if (result) {
-					if (Z_LVAL_P(dim) < 0 || Z_STRLEN_P(container) <= Z_LVAL_P(dim)) {
+					if ((Z_LVAL_P(dim) < 0 || Z_STRLEN_P(container) <= Z_LVAL_P(dim)) && type != BP_VAR_IS) {
 						zend_error(E_NOTICE, "Uninitialized string offset: %ld", Z_LVAL_P(dim));
 					}
 					result->str_offset.str = container;
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h
index fdcb568..9295e97 100644
--- a/Zend/zend_execute.h
+++ b/Zend/zend_execute.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute.h 299766 2010-05-26 00:00:58Z felipe $ */
+/* $Id: zend_execute.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_EXECUTE_H
 #define ZEND_EXECUTE_H
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 8996abf..32c3fc3 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute_API.c 304364 2010-10-13 08:51:39Z dmitry $ */
+/* $Id: zend_execute_API.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 #include <signal.h>
diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c
index 1b26d6c..e0f93f8 100644
--- a/Zend/zend_extensions.c
+++ b/Zend/zend_extensions.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_extensions.c 293985 2010-01-25 14:47:19Z pajoye $ */
+/* $Id: zend_extensions.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend_extensions.h"
 
diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h
index 98747ce..84ec7b8 100644
--- a/Zend/zend_extensions.h
+++ b/Zend/zend_extensions.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_extensions.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_extensions.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_EXTENSIONS_H
 #define ZEND_EXTENSIONS_H
diff --git a/Zend/zend_fast_cache.h b/Zend/zend_fast_cache.h
index afc708b..614035c 100644
--- a/Zend/zend_fast_cache.h
+++ b/Zend/zend_fast_cache.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_fast_cache.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_fast_cache.h 306939 2011-01-01 02:19:59Z felipe $ */
 #if 0
 #ifndef ZEND_FAST_CACHE_H
 #define ZEND_FAST_CACHE_H
diff --git a/Zend/zend_float.c b/Zend/zend_float.c
index d1ac404..4a8b4e0 100644
--- a/Zend/zend_float.c
+++ b/Zend/zend_float.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_float.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_float.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_compile.h"
diff --git a/Zend/zend_float.h b/Zend/zend_float.h
index 2bcae3b..deb5114 100644
--- a/Zend/zend_float.h
+++ b/Zend/zend_float.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_float.h 301274 2010-07-15 00:13:20Z pajoye $ */
+/* $Id: zend_float.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_FLOAT_H
 #define ZEND_FLOAT_H
diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c
index 7e6e153..0d797c5 100644
--- a/Zend/zend_gc.c
+++ b/Zend/zend_gc.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_gc.c 303016 2010-09-03 09:27:47Z dmitry $ */
+/* $Id: zend_gc.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_API.h"
diff --git a/Zend/zend_gc.h b/Zend/zend_gc.h
index 0fbc9f1..3c7aa91 100644
--- a/Zend/zend_gc.h
+++ b/Zend/zend_gc.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_gc.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_gc.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_GC_H
 #define ZEND_GC_H
diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h
index 4577969..377daf9 100644
--- a/Zend/zend_globals.h
+++ b/Zend/zend_globals.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_globals.h 300854 2010-06-29 11:37:13Z felipe $ */
+/* $Id: zend_globals.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_GLOBALS_H
 #define ZEND_GLOBALS_H
diff --git a/Zend/zend_globals_macros.h b/Zend/zend_globals_macros.h
index 72ea598..dac6d04 100644
--- a/Zend/zend_globals_macros.h
+++ b/Zend/zend_globals_macros.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_globals_macros.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_globals_macros.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_GLOBALS_MACROS_H
 #define ZEND_GLOBALS_MACROS_H
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 674347b..1c9aa5e 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_hash.c 303364 2010-09-14 14:26:37Z johannes $ */
+/* $Id: zend_hash.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
index 64e9c19..e18d73d 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_hash.h 304083 2010-10-05 11:28:56Z dmitry $ */
+/* $Id: zend_hash.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_HASH_H
 #define ZEND_HASH_H
diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c
index 5229877..98d6317 100644
--- a/Zend/zend_highlight.c
+++ b/Zend/zend_highlight.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_highlight.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: zend_highlight.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include <zend_language_parser.h>
diff --git a/Zend/zend_highlight.h b/Zend/zend_highlight.h
index 3402f6f..3c5ed9b 100644
--- a/Zend/zend_highlight.h
+++ b/Zend/zend_highlight.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_highlight.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_highlight.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_HIGHLIGHT_H
 #define ZEND_HIGHLIGHT_H
diff --git a/Zend/zend_indent.c b/Zend/zend_indent.c
index 11fcbce..1acb0dc 100644
--- a/Zend/zend_indent.c
+++ b/Zend/zend_indent.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_indent.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: zend_indent.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* This indenter doesn't really work, it's here for no particular reason. */
 
diff --git a/Zend/zend_indent.h b/Zend/zend_indent.h
index 2615164..89b2fc0 100644
--- a/Zend/zend_indent.h
+++ b/Zend/zend_indent.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_indent.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_indent.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_INDENT_H
 #define ZEND_INDENT_H
diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c
index ef6ef37..fcc5f3c 100644
--- a/Zend/zend_ini.c
+++ b/Zend/zend_ini.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ini.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_ini.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_qsort.h"
diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h
index 4b4ab02..d908991 100644
--- a/Zend/zend_ini.h
+++ b/Zend/zend_ini.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ini.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_ini.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_INI_H
 #define ZEND_INI_H
diff --git a/Zend/zend_ini_parser.c b/Zend/zend_ini_parser.c
index c416348..c64d036 100644
--- a/Zend/zend_ini_parser.c
+++ b/Zend/zend_ini_parser.c
@@ -116,7 +116,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -131,7 +131,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ini_parser.y 300737 2010-06-24 22:32:42Z felipe $ */
+/* $Id: zend_ini_parser.y 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define DEBUG_CFG_PARSER 0
 
diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y
index 672947f..05c28cf 100644
--- a/Zend/zend_ini_parser.y
+++ b/Zend/zend_ini_parser.y
@@ -3,7 +3,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ini_parser.y 300737 2010-06-24 22:32:42Z felipe $ */
+/* $Id: zend_ini_parser.y 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define DEBUG_CFG_PARSER 0
 
diff --git a/Zend/zend_ini_scanner.c b/Zend/zend_ini_scanner.c
index 1911329..c27fc68 100644
--- a/Zend/zend_ini_scanner.c
+++ b/Zend/zend_ini_scanner.c
@@ -4,7 +4,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -22,7 +22,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ini_scanner.c 301758 2010-08-01 15:26:54Z felipe $ */
+/* $Id: zend_ini_scanner.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <errno.h>
 #include "zend.h"
diff --git a/Zend/zend_ini_scanner.h b/Zend/zend_ini_scanner.h
index 07d1102..f7cd947 100644
--- a/Zend/zend_ini_scanner.h
+++ b/Zend/zend_ini_scanner.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ini_scanner.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_ini_scanner.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef _ZEND_INI_SCANNER_H
 #define _ZEND_INI_SCANNER_H
diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l
index 3910bff..4e74d8e 100644
--- a/Zend/zend_ini_scanner.l
+++ b/Zend/zend_ini_scanner.l
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ini_scanner.l 301758 2010-08-01 15:26:54Z felipe $ */
+/* $Id: zend_ini_scanner.l 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <errno.h>
 #include "zend.h"
diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c
index f9309e4..4c12086 100755
--- a/Zend/zend_interfaces.c
+++ b/Zend/zend_interfaces.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_interfaces.c 294333 2010-02-02 04:49:02Z colder $ */
+/* $Id: zend_interfaces.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_API.h"
diff --git a/Zend/zend_interfaces.h b/Zend/zend_interfaces.h
index c75e6dd..807f54d 100755
--- a/Zend/zend_interfaces.h
+++ b/Zend/zend_interfaces.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_interfaces.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_interfaces.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_INTERFACES_H
 #define ZEND_INTERFACES_H
diff --git a/Zend/zend_istdiostream.h b/Zend/zend_istdiostream.h
index 4b38a8c..fd0abbb 100644
--- a/Zend/zend_istdiostream.h
+++ b/Zend/zend_istdiostream.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_istdiostream.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_istdiostream.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef _ZEND_STDIOSTREAM
 #define _ZEND_STDIOSTREAM
diff --git a/Zend/zend_iterators.c b/Zend/zend_iterators.c
index 76588e2..6590edd 100755
--- a/Zend/zend_iterators.c
+++ b/Zend/zend_iterators.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_iterators.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_iterators.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_API.h"
diff --git a/Zend/zend_iterators.h b/Zend/zend_iterators.h
index b108403..7cc4002 100755
--- a/Zend/zend_iterators.h
+++ b/Zend/zend_iterators.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_iterators.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_iterators.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* These iterators were designed to operate within the foreach()
  * structures provided by the engine, but could be extended for use
diff --git a/Zend/zend_language_parser.c b/Zend/zend_language_parser.c
index 6461dc1..c5ba987 100644
--- a/Zend/zend_language_parser.c
+++ b/Zend/zend_language_parser.c
@@ -334,7 +334,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -349,7 +349,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_language_parser.y 293154 2010-01-05 20:40:23Z sebastian $ */
+/* $Id: zend_language_parser.y 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
  * LALR shift/reduce conflicts and how they are resolved:
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 2635fdb..b43841d 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -3,7 +3,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_language_parser.y 293154 2010-01-05 20:40:23Z sebastian $ */
+/* $Id: zend_language_parser.y 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
  * LALR shift/reduce conflicts and how they are resolved:
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index 8b0be1c..847e88e 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -1,9 +1,10 @@
-/* Generated by re2c 0.13.5 on Wed Jan  5 17:41:40 2011 */
+/* Generated by re2c 0.13.5 on Mon Jan  3 05:56:03 2011 */
+#line 1 "Zend/zend_language_scanner.l"
 /*
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -22,7 +23,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_language_scanner.l 305464 2010-11-17 16:46:19Z pajoye $ */
+/* $Id: zend_language_scanner.c 307028 2011-01-03 14:39:48Z iliaa $ */
 
 #if 0
 # define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
@@ -228,6 +229,12 @@ ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
 	SCNG(script_encoding) = lex_state->script_encoding;
 	SCNG(internal_encoding) = lex_state->internal_encoding;
 #endif /* ZEND_MULTIBYTE */
+
+	if (CG(heredoc)) {
+		efree(CG(heredoc));
+		CG(heredoc) = NULL;
+		CG(heredoc_len) = 0;
+	}
 }
 
 ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC)
@@ -849,6 +856,7 @@ restart:
 yymore_restart:
 
 
+#line 860 "Zend/zend_language_scanner.c"
 {
 	YYCTYPE yych;
 	unsigned int yyaccept = 0;
@@ -947,6 +955,7 @@ yyc_INITIAL:
 yy3:
 		YYDEBUG(3, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1584 "Zend/zend_language_scanner.l"
 		{
 	if (YYCURSOR > YYLIMIT) {
 		return 0;
@@ -1011,6 +1020,7 @@ inline_html:
 	HANDLE_NEWLINES(yytext, yyleng);
 	return T_INLINE_HTML;
 }
+#line 1024 "Zend/zend_language_scanner.c"
 yy4:
 		YYDEBUG(4, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1028,6 +1038,7 @@ yy5:
 yy6:
 		YYDEBUG(6, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1572 "Zend/zend_language_scanner.l"
 		{
 	if (CG(short_tags)) {
 		zendlval->value.str.val = yytext; /* no copying - intentional */
@@ -1039,12 +1050,14 @@ yy6:
 		goto inline_char_handler;
 	}
 }
+#line 1054 "Zend/zend_language_scanner.c"
 yy7:
 		YYDEBUG(7, *YYCURSOR);
 		++YYCURSOR;
 		if ((yych = *YYCURSOR) == '=') goto yy43;
 		YYDEBUG(8, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1549 "Zend/zend_language_scanner.l"
 		{
 	if (CG(asp_tags)) {
 		zendlval->value.str.val = yytext; /* no copying - intentional */
@@ -1056,6 +1069,7 @@ yy7:
 		goto inline_char_handler;
 	}
 }
+#line 1073 "Zend/zend_language_scanner.c"
 yy9:
 		YYDEBUG(9, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1241,6 +1255,7 @@ yy35:
 		++YYCURSOR;
 		YYDEBUG(38, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1505 "Zend/zend_language_scanner.l"
 		{
 	YYCTYPE *bracket = zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1));
 
@@ -1257,6 +1272,7 @@ yy35:
 	BEGIN(ST_IN_SCRIPTING);
 	return T_OPEN_TAG;
 }
+#line 1276 "Zend/zend_language_scanner.c"
 yy39:
 		YYDEBUG(39, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1283,6 +1299,7 @@ yy43:
 		++YYCURSOR;
 		YYDEBUG(44, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1523 "Zend/zend_language_scanner.l"
 		{
 	if (CG(asp_tags)) {
 		zendlval->value.str.val = yytext; /* no copying - intentional */
@@ -1294,11 +1311,13 @@ yy43:
 		goto inline_char_handler;
 	}
 }
+#line 1315 "Zend/zend_language_scanner.c"
 yy45:
 		YYDEBUG(45, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(46, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1536 "Zend/zend_language_scanner.l"
 		{
 	if (CG(short_tags)) {
 		zendlval->value.str.val = yytext; /* no copying - intentional */
@@ -1310,6 +1329,7 @@ yy45:
 		goto inline_char_handler;
 	}
 }
+#line 1333 "Zend/zend_language_scanner.c"
 yy47:
 		YYDEBUG(47, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1336,6 +1356,7 @@ yy50:
 yy51:
 		YYDEBUG(51, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1562 "Zend/zend_language_scanner.l"
 		{
 	zendlval->value.str.val = yytext; /* no copying - intentional */
 	zendlval->value.str.len = yyleng;
@@ -1344,6 +1365,7 @@ yy51:
 	BEGIN(ST_IN_SCRIPTING);
 	return T_OPEN_TAG;
 }
+#line 1369 "Zend/zend_language_scanner.c"
 yy52:
 		YYDEBUG(52, *YYCURSOR);
 		++YYCURSOR;
@@ -1414,6 +1436,7 @@ yyc_ST_BACKQUOTE:
 yy56:
 		YYDEBUG(56, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 2042 "Zend/zend_language_scanner.l"
 		{
 	if (YYCURSOR > YYLIMIT) {
 		return 0;
@@ -1454,6 +1477,7 @@ yy56:
 	zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC);
 	return T_ENCAPSED_AND_WHITESPACE;
 }
+#line 1481 "Zend/zend_language_scanner.c"
 yy57:
 		YYDEBUG(57, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1464,10 +1488,12 @@ yy58:
 		++YYCURSOR;
 		YYDEBUG(59, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1986 "Zend/zend_language_scanner.l"
 		{
 	BEGIN(ST_IN_SCRIPTING);
 	return '`';
 }
+#line 1497 "Zend/zend_language_scanner.c"
 yy60:
 		YYDEBUG(60, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1477,12 +1503,14 @@ yy61:
 		++YYCURSOR;
 		YYDEBUG(62, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1973 "Zend/zend_language_scanner.l"
 		{
 	zendlval->value.lval = (long) '{';
 	yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 	yyless(1);
 	return T_CURLY_OPEN;
 }
+#line 1514 "Zend/zend_language_scanner.c"
 yy63:
 		YYDEBUG(63, *YYCURSOR);
 		yyaccept = 0;
@@ -1498,20 +1526,24 @@ yy63:
 yy65:
 		YYDEBUG(65, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1671 "Zend/zend_language_scanner.l"
 		{
 	zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 1536 "Zend/zend_language_scanner.c"
 yy66:
 		YYDEBUG(66, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(67, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1298 "Zend/zend_language_scanner.l"
 		{
 	yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
 	return T_DOLLAR_OPEN_CURLY_BRACES;
 }
+#line 1547 "Zend/zend_language_scanner.c"
 yy68:
 		YYDEBUG(68, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1525,6 +1557,7 @@ yy70:
 		++YYCURSOR;
 		YYDEBUG(71, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1663 "Zend/zend_language_scanner.l"
 		{
 	yyless(yyleng - 1);
 	yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1532,6 +1565,7 @@ yy70:
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 1569 "Zend/zend_language_scanner.c"
 yy72:
 		YYDEBUG(72, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1549,6 +1583,7 @@ yy73:
 		++YYCURSOR;
 		YYDEBUG(74, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1653 "Zend/zend_language_scanner.l"
 		{
 	yyless(yyleng - 3);
 	yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1556,6 +1591,7 @@ yy73:
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 1595 "Zend/zend_language_scanner.c"
 	}
 /* *********************************** */
 yyc_ST_DOUBLE_QUOTES:
@@ -1623,6 +1659,7 @@ yy77:
 yy78:
 		YYDEBUG(78, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1992 "Zend/zend_language_scanner.l"
 		{
 	if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
 		YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1671,6 +1708,7 @@ double_quotes_scan_done:
 	zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);
 	return T_ENCAPSED_AND_WHITESPACE;
 }
+#line 1712 "Zend/zend_language_scanner.c"
 yy79:
 		YYDEBUG(79, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1681,10 +1719,12 @@ yy80:
 		++YYCURSOR;
 		YYDEBUG(81, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1981 "Zend/zend_language_scanner.l"
 		{
 	BEGIN(ST_IN_SCRIPTING);
 	return '"';
 }
+#line 1728 "Zend/zend_language_scanner.c"
 yy82:
 		YYDEBUG(82, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1694,12 +1734,14 @@ yy83:
 		++YYCURSOR;
 		YYDEBUG(84, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1973 "Zend/zend_language_scanner.l"
 		{
 	zendlval->value.lval = (long) '{';
 	yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 	yyless(1);
 	return T_CURLY_OPEN;
 }
+#line 1745 "Zend/zend_language_scanner.c"
 yy85:
 		YYDEBUG(85, *YYCURSOR);
 		yyaccept = 0;
@@ -1715,20 +1757,24 @@ yy85:
 yy87:
 		YYDEBUG(87, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1671 "Zend/zend_language_scanner.l"
 		{
 	zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 1767 "Zend/zend_language_scanner.c"
 yy88:
 		YYDEBUG(88, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(89, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1298 "Zend/zend_language_scanner.l"
 		{
 	yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
 	return T_DOLLAR_OPEN_CURLY_BRACES;
 }
+#line 1778 "Zend/zend_language_scanner.c"
 yy90:
 		YYDEBUG(90, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1742,6 +1788,7 @@ yy92:
 		++YYCURSOR;
 		YYDEBUG(93, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1663 "Zend/zend_language_scanner.l"
 		{
 	yyless(yyleng - 1);
 	yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1749,6 +1796,7 @@ yy92:
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 1800 "Zend/zend_language_scanner.c"
 yy94:
 		YYDEBUG(94, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1766,6 +1814,7 @@ yy95:
 		++YYCURSOR;
 		YYDEBUG(96, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1653 "Zend/zend_language_scanner.l"
 		{
 	yyless(yyleng - 3);
 	yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1773,6 +1822,7 @@ yy95:
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 1826 "Zend/zend_language_scanner.c"
 	}
 /* *********************************** */
 yyc_ST_END_HEREDOC:
@@ -1783,6 +1833,7 @@ yyc_ST_END_HEREDOC:
 	++YYCURSOR;
 	YYDEBUG(100, *YYCURSOR);
 	yyleng = YYCURSOR - SCNG(yy_text);
+#line 1960 "Zend/zend_language_scanner.l"
 	{
 	YYCURSOR += CG(heredoc_len) - 1;
 	yyleng = CG(heredoc_len);
@@ -1794,6 +1845,7 @@ yyc_ST_END_HEREDOC:
 	BEGIN(ST_IN_SCRIPTING);
 	return T_END_HEREDOC;
 }
+#line 1849 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_HEREDOC:
 	{
@@ -1855,6 +1907,7 @@ yy103:
 yy104:
 		YYDEBUG(104, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 2084 "Zend/zend_language_scanner.l"
 		{
 	int newline = 0;
 
@@ -1925,6 +1978,7 @@ heredoc_scan_done:
 	zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0 TSRMLS_CC);
 	return T_ENCAPSED_AND_WHITESPACE;
 }
+#line 1982 "Zend/zend_language_scanner.c"
 yy105:
 		YYDEBUG(105, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1939,12 +1993,14 @@ yy107:
 		++YYCURSOR;
 		YYDEBUG(108, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1973 "Zend/zend_language_scanner.l"
 		{
 	zendlval->value.lval = (long) '{';
 	yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 	yyless(1);
 	return T_CURLY_OPEN;
 }
+#line 2004 "Zend/zend_language_scanner.c"
 yy109:
 		YYDEBUG(109, *YYCURSOR);
 		yyaccept = 0;
@@ -1960,20 +2016,24 @@ yy109:
 yy111:
 		YYDEBUG(111, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1671 "Zend/zend_language_scanner.l"
 		{
 	zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 2026 "Zend/zend_language_scanner.c"
 yy112:
 		YYDEBUG(112, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(113, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1298 "Zend/zend_language_scanner.l"
 		{
 	yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
 	return T_DOLLAR_OPEN_CURLY_BRACES;
 }
+#line 2037 "Zend/zend_language_scanner.c"
 yy114:
 		YYDEBUG(114, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -1987,6 +2047,7 @@ yy116:
 		++YYCURSOR;
 		YYDEBUG(117, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1663 "Zend/zend_language_scanner.l"
 		{
 	yyless(yyleng - 1);
 	yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1994,6 +2055,7 @@ yy116:
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 2059 "Zend/zend_language_scanner.c"
 yy118:
 		YYDEBUG(118, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -2011,6 +2073,7 @@ yy119:
 		++YYCURSOR;
 		YYDEBUG(120, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1653 "Zend/zend_language_scanner.l"
 		{
 	yyless(yyleng - 3);
 	yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -2018,6 +2081,7 @@ yy119:
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 2085 "Zend/zend_language_scanner.c"
 	}
 /* *********************************** */
 yyc_ST_IN_SCRIPTING:
@@ -2198,11 +2262,13 @@ yy123:
 yy124:
 		YYDEBUG(124, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1694 "Zend/zend_language_scanner.l"
 		{
 	zend_copy_value(zendlval, yytext, yyleng);
 	zendlval->type = IS_STRING;
 	return T_STRING;
 }
+#line 2272 "Zend/zend_language_scanner.c"
 yy125:
 		YYDEBUG(125, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -2428,9 +2494,11 @@ yy137:
 yy138:
 		YYDEBUG(138, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1287 "Zend/zend_language_scanner.l"
 		{
 	return yytext[0];
 }
+#line 2502 "Zend/zend_language_scanner.c"
 yy139:
 		YYDEBUG(139, *YYCURSOR);
 		++YYCURSOR;
@@ -2439,6 +2507,7 @@ yy139:
 yy140:
 		YYDEBUG(140, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1022 "Zend/zend_language_scanner.l"
 		{
 	zendlval->value.str.val = yytext; /* no copying - intentional */
 	zendlval->value.str.len = yyleng;
@@ -2446,6 +2515,7 @@ yy140:
 	HANDLE_NEWLINES(yytext, yyleng);
 	return T_WHITESPACE;
 }
+#line 2519 "Zend/zend_language_scanner.c"
 yy141:
 		YYDEBUG(141, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -2456,9 +2526,11 @@ yy142:
 		++YYCURSOR;
 		YYDEBUG(143, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1051 "Zend/zend_language_scanner.l"
 		{
 	return T_NS_SEPARATOR;
 }
+#line 2534 "Zend/zend_language_scanner.c"
 yy144:
 		YYDEBUG(144, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -2686,15 +2758,18 @@ yy167:
 		++YYCURSOR;
 		YYDEBUG(168, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1292 "Zend/zend_language_scanner.l"
 		{
 	yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 	return '{';
 }
+#line 2767 "Zend/zend_language_scanner.c"
 yy169:
 		YYDEBUG(169, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(170, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1304 "Zend/zend_language_scanner.l"
 		{
 	RESET_DOC_COMMENT();
 	if (!zend_stack_is_empty(&SCNG(state_stack))) {
@@ -2702,6 +2777,7 @@ yy169:
 	}
 	return '}';
 }
+#line 2781 "Zend/zend_language_scanner.c"
 yy171:
 		YYDEBUG(171, *YYCURSOR);
 		yyaccept = 2;
@@ -2724,6 +2800,7 @@ yy171:
 yy172:
 		YYDEBUG(172, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1330 "Zend/zend_language_scanner.l"
 		{
 	if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
 		zendlval->value.lval = strtol(yytext, NULL, 0);
@@ -2744,6 +2821,7 @@ yy172:
 	zendlval->type = IS_LONG;
 	return T_LNUMBER;
 }
+#line 2825 "Zend/zend_language_scanner.c"
 yy173:
 		YYDEBUG(173, *YYCURSOR);
 		yyaccept = 2;
@@ -2771,6 +2849,7 @@ yy175:
 yy176:
 		YYDEBUG(176, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1701 "Zend/zend_language_scanner.l"
 		{
 	while (YYCURSOR < YYLIMIT) {
 		switch (*YYCURSOR++) {
@@ -2804,12 +2883,14 @@ yy176:
 
 	return T_COMMENT;
 }
+#line 2887 "Zend/zend_language_scanner.c"
 yy177:
 		YYDEBUG(177, *YYCURSOR);
 		++YYCURSOR;
 yy178:
 		YYDEBUG(178, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1792 "Zend/zend_language_scanner.l"
 		{
 	register char *s, *t;
 	char *end;
@@ -2879,12 +2960,14 @@ yy178:
 #endif /* ZEND_MULTIBYTE */
 	return T_CONSTANT_ENCAPSED_STRING;
 }
+#line 2964 "Zend/zend_language_scanner.c"
 yy179:
 		YYDEBUG(179, *YYCURSOR);
 		++YYCURSOR;
 yy180:
 		YYDEBUG(180, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1863 "Zend/zend_language_scanner.l"
 		{
 	int bprefix = (yytext[0] != '"') ? 1 : 0;
 
@@ -2925,20 +3008,24 @@ yy180:
 	BEGIN(ST_DOUBLE_QUOTES);
 	return '"';
 }
+#line 3012 "Zend/zend_language_scanner.c"
 yy181:
 		YYDEBUG(181, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(182, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1954 "Zend/zend_language_scanner.l"
 		{
 	BEGIN(ST_BACKQUOTE);
 	return '`';
 }
+#line 3023 "Zend/zend_language_scanner.c"
 yy183:
 		YYDEBUG(183, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(184, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 2212 "Zend/zend_language_scanner.l"
 		{
 	if (YYCURSOR > YYLIMIT) {
 		return 0;
@@ -2947,6 +3034,7 @@ yy183:
 	zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
 	goto restart;
 }
+#line 3038 "Zend/zend_language_scanner.c"
 yy185:
 		YYDEBUG(185, *YYCURSOR);
 		++YYCURSOR;
@@ -2973,11 +3061,13 @@ yy187:
 yy189:
 		YYDEBUG(189, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1391 "Zend/zend_language_scanner.l"
 		{
 	zendlval->value.dval = zend_strtod(yytext, NULL);
 	zendlval->type = IS_DOUBLE;
 	return T_DNUMBER;
 }
+#line 3071 "Zend/zend_language_scanner.c"
 yy190:
 		YYDEBUG(190, *YYCURSOR);
 		yyaccept = 2;
@@ -3062,6 +3152,7 @@ yy198:
 		}
 		YYDEBUG(200, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1351 "Zend/zend_language_scanner.l"
 		{
 	char *hex = yytext + 2; /* Skip "0x" */
 	int len = yyleng - 2;
@@ -3082,6 +3173,7 @@ yy198:
 		return T_DNUMBER;
 	}
 }
+#line 3177 "Zend/zend_language_scanner.c"
 yy201:
 		YYDEBUG(201, *YYCURSOR);
 		++YYCURSOR;
@@ -3090,6 +3182,7 @@ yy201:
 yy202:
 		YYDEBUG(202, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1769 "Zend/zend_language_scanner.l"
 		{
 	zendlval->value.str.val = yytext; /* no copying - intentional */
 	zendlval->value.str.len = yyleng;
@@ -3097,6 +3190,7 @@ yy202:
 	BEGIN(INITIAL);
 	return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 }
+#line 3194 "Zend/zend_language_scanner.c"
 yy203:
 		YYDEBUG(203, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3130,11 +3224,13 @@ yy205:
 yy207:
 		YYDEBUG(207, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1671 "Zend/zend_language_scanner.l"
 		{
 	zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 3234 "Zend/zend_language_scanner.c"
 yy208:
 		YYDEBUG(208, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3148,9 +3244,11 @@ yy209:
 		}
 		YYDEBUG(210, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1275 "Zend/zend_language_scanner.l"
 		{
 	return T_LOGICAL_XOR;
 }
+#line 3252 "Zend/zend_language_scanner.c"
 yy211:
 		YYDEBUG(211, *YYCURSOR);
 		++YYCURSOR;
@@ -3159,49 +3257,61 @@ yy211:
 		}
 		YYDEBUG(212, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1267 "Zend/zend_language_scanner.l"
 		{
 	return T_LOGICAL_OR;
 }
+#line 3265 "Zend/zend_language_scanner.c"
 yy213:
 		YYDEBUG(213, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(214, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1255 "Zend/zend_language_scanner.l"
 		{
 	return T_XOR_EQUAL;
 }
+#line 3275 "Zend/zend_language_scanner.c"
 yy215:
 		YYDEBUG(215, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(216, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1259 "Zend/zend_language_scanner.l"
 		{
 	return T_BOOLEAN_OR;
 }
+#line 3285 "Zend/zend_language_scanner.c"
 yy217:
 		YYDEBUG(217, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(218, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1251 "Zend/zend_language_scanner.l"
 		{
 	return T_OR_EQUAL;
 }
+#line 3295 "Zend/zend_language_scanner.c"
 yy219:
 		YYDEBUG(219, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(220, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1263 "Zend/zend_language_scanner.l"
 		{
 	return T_BOOLEAN_AND;
 }
+#line 3305 "Zend/zend_language_scanner.c"
 yy221:
 		YYDEBUG(221, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(222, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1247 "Zend/zend_language_scanner.l"
 		{
 	return T_AND_EQUAL;
 }
+#line 3315 "Zend/zend_language_scanner.c"
 yy223:
 		YYDEBUG(223, *YYCURSOR);
 		++YYCURSOR;
@@ -3210,6 +3320,7 @@ yy223:
 yy224:
 		YYDEBUG(224, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1778 "Zend/zend_language_scanner.l"
 		{
 	if (CG(asp_tags)) {
 		BEGIN(INITIAL);
@@ -3222,14 +3333,17 @@ yy224:
 		return yytext[0];
 	}
 }
+#line 3337 "Zend/zend_language_scanner.c"
 yy225:
 		YYDEBUG(225, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(226, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1235 "Zend/zend_language_scanner.l"
 		{
 	return T_MOD_EQUAL;
 }
+#line 3347 "Zend/zend_language_scanner.c"
 yy227:
 		YYDEBUG(227, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3260,9 +3374,11 @@ yy231:
 		++YYCURSOR;
 		YYDEBUG(232, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1231 "Zend/zend_language_scanner.l"
 		{
 	return T_CONCAT_EQUAL;
 }
+#line 3382 "Zend/zend_language_scanner.c"
 yy233:
 		YYDEBUG(233, *YYCURSOR);
 		yyaccept = 4;
@@ -3271,6 +3387,7 @@ yy233:
 yy234:
 		YYDEBUG(234, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1735 "Zend/zend_language_scanner.l"
 		{
 	int doc_com;
 
@@ -3304,6 +3421,7 @@ yy234:
 
 	return T_COMMENT;
 }
+#line 3425 "Zend/zend_language_scanner.c"
 yy235:
 		YYDEBUG(235, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3313,9 +3431,11 @@ yy236:
 		++YYCURSOR;
 		YYDEBUG(237, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1227 "Zend/zend_language_scanner.l"
 		{
 	return T_DIV_EQUAL;
 }
+#line 3439 "Zend/zend_language_scanner.c"
 yy238:
 		YYDEBUG(238, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3338,34 +3458,42 @@ yy241:
 		++YYCURSOR;
 		YYDEBUG(242, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1223 "Zend/zend_language_scanner.l"
 		{
 	return T_MUL_EQUAL;
 }
+#line 3466 "Zend/zend_language_scanner.c"
 yy243:
 		YYDEBUG(243, *YYCURSOR);
 		++YYCURSOR;
 		if ((yych = *YYCURSOR) == '=') goto yy247;
 		YYDEBUG(244, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1283 "Zend/zend_language_scanner.l"
 		{
 	return T_SR;
 }
+#line 3477 "Zend/zend_language_scanner.c"
 yy245:
 		YYDEBUG(245, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(246, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1211 "Zend/zend_language_scanner.l"
 		{
 	return T_IS_GREATER_OR_EQUAL;
 }
+#line 3487 "Zend/zend_language_scanner.c"
 yy247:
 		YYDEBUG(247, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(248, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1243 "Zend/zend_language_scanner.l"
 		{
 	return T_SR_EQUAL;
 }
+#line 3497 "Zend/zend_language_scanner.c"
 yy249:
 		YYDEBUG(249, *YYCURSOR);
 		yyaccept = 5;
@@ -3376,9 +3504,11 @@ yy249:
 yy250:
 		YYDEBUG(250, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1279 "Zend/zend_language_scanner.l"
 		{
 	return T_SL;
 }
+#line 3512 "Zend/zend_language_scanner.c"
 yy251:
 		YYDEBUG(251, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3390,18 +3520,22 @@ yy252:
 		++YYCURSOR;
 		YYDEBUG(253, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1207 "Zend/zend_language_scanner.l"
 		{
 	return T_IS_SMALLER_OR_EQUAL;
 }
+#line 3528 "Zend/zend_language_scanner.c"
 yy254:
 		YYDEBUG(254, *YYCURSOR);
 		++YYCURSOR;
 yy255:
 		YYDEBUG(255, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1203 "Zend/zend_language_scanner.l"
 		{
 	return T_IS_NOT_EQUAL;
 }
+#line 3539 "Zend/zend_language_scanner.c"
 yy256:
 		YYDEBUG(256, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3452,9 +3586,11 @@ yy263:
 		++YYCURSOR;
 		YYDEBUG(264, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1239 "Zend/zend_language_scanner.l"
 		{
 	return T_SL_EQUAL;
 }
+#line 3594 "Zend/zend_language_scanner.c"
 yy265:
 		YYDEBUG(265, *YYCURSOR);
 		++YYCURSOR;
@@ -3559,6 +3695,7 @@ yy274:
 yy275:
 		YYDEBUG(275, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1905 "Zend/zend_language_scanner.l"
 		{
 	char *s;
 	int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -3606,6 +3743,7 @@ yy275:
 
 	return T_START_HEREDOC;
 }
+#line 3747 "Zend/zend_language_scanner.c"
 yy276:
 		YYDEBUG(276, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3645,25 +3783,31 @@ yy279:
 		++YYCURSOR;
 		YYDEBUG(281, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1195 "Zend/zend_language_scanner.l"
 		{
 	return T_IS_NOT_IDENTICAL;
 }
+#line 3791 "Zend/zend_language_scanner.c"
 yy282:
 		YYDEBUG(282, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(283, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1215 "Zend/zend_language_scanner.l"
 		{
 	return T_PLUS_EQUAL;
 }
+#line 3801 "Zend/zend_language_scanner.c"
 yy284:
 		YYDEBUG(284, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(285, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1183 "Zend/zend_language_scanner.l"
 		{
 	return T_INC;
 }
+#line 3811 "Zend/zend_language_scanner.c"
 yy286:
 		YYDEBUG(286, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3682,34 +3826,42 @@ yy288:
 		}
 		YYDEBUG(289, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1175 "Zend/zend_language_scanner.l"
 		{
 	return T_LIST;
 }
+#line 3834 "Zend/zend_language_scanner.c"
 yy290:
 		YYDEBUG(290, *YYCURSOR);
 		++YYCURSOR;
 		if ((yych = *YYCURSOR) == '=') goto yy294;
 		YYDEBUG(291, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1199 "Zend/zend_language_scanner.l"
 		{
 	return T_IS_EQUAL;
 }
+#line 3845 "Zend/zend_language_scanner.c"
 yy292:
 		YYDEBUG(292, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(293, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1171 "Zend/zend_language_scanner.l"
 		{
 	return T_DOUBLE_ARROW;
 }
+#line 3855 "Zend/zend_language_scanner.c"
 yy294:
 		YYDEBUG(294, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(295, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1191 "Zend/zend_language_scanner.l"
 		{
 	return T_IS_IDENTICAL;
 }
+#line 3865 "Zend/zend_language_scanner.c"
 yy296:
 		YYDEBUG(296, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3831,6 +3983,7 @@ yy311:
 		}
 		YYDEBUG(314, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1495 "Zend/zend_language_scanner.l"
 		{
 	if (CG(current_namespace)) {
 		*zendlval = *CG(current_namespace);
@@ -3840,6 +3993,7 @@ yy311:
 	}
 	return T_NS_C;
 }
+#line 3997 "Zend/zend_language_scanner.c"
 yy315:
 		YYDEBUG(315, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3859,6 +4013,7 @@ yy316:
 		}
 		YYDEBUG(319, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1468 "Zend/zend_language_scanner.l"
 		{
 	char *filename = zend_get_compiled_filename(TSRMLS_C);
 	const size_t filename_len = strlen(filename);
@@ -3885,6 +4040,7 @@ yy316:
 	zendlval->type = IS_STRING;
 	return T_DIR;
 }
+#line 4044 "Zend/zend_language_scanner.c"
 yy320:
 		YYDEBUG(320, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3909,11 +4065,13 @@ yy322:
 		}
 		YYDEBUG(325, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1450 "Zend/zend_language_scanner.l"
 		{
 	zendlval->value.lval = CG(zend_lineno);
 	zendlval->type = IS_LONG;
 	return T_LINE;
 }
+#line 4075 "Zend/zend_language_scanner.c"
 yy326:
 		YYDEBUG(326, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -3948,6 +4106,7 @@ yy330:
 		}
 		YYDEBUG(333, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1429 "Zend/zend_language_scanner.l"
 		{
 	char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL;
 	char *func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL;
@@ -3968,6 +4127,7 @@ yy330:
 	zendlval->type = IS_STRING;
 	return T_METHOD_C;
 }
+#line 4131 "Zend/zend_language_scanner.c"
 yy334:
 		YYDEBUG(334, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4018,6 +4178,7 @@ yy341:
 		}
 		YYDEBUG(344, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1413 "Zend/zend_language_scanner.l"
 		{
 	char *func_name = NULL;
 
@@ -4033,6 +4194,7 @@ yy341:
 	zendlval->type = IS_STRING;
 	return T_FUNC_C;
 }
+#line 4198 "Zend/zend_language_scanner.c"
 yy345:
 		YYDEBUG(345, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4052,6 +4214,7 @@ yy346:
 		}
 		YYDEBUG(349, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1456 "Zend/zend_language_scanner.l"
 		{
 	char *filename = zend_get_compiled_filename(TSRMLS_C);
 
@@ -4063,6 +4226,7 @@ yy346:
 	zendlval->type = IS_STRING;
 	return T_FILE;
 }
+#line 4230 "Zend/zend_language_scanner.c"
 yy350:
 		YYDEBUG(350, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4092,6 +4256,7 @@ yy353:
 		}
 		YYDEBUG(356, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1397 "Zend/zend_language_scanner.l"
 		{
 	char *class_name = NULL;
 
@@ -4107,6 +4272,7 @@ yy353:
 	zendlval->type = IS_STRING;
 	return T_CLASS_C;
 }
+#line 4276 "Zend/zend_language_scanner.c"
 yy357:
 		YYDEBUG(357, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4168,9 +4334,11 @@ yy368:
 		}
 		YYDEBUG(369, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1139 "Zend/zend_language_scanner.l"
 		{
 	return T_HALT_COMPILER;
 }
+#line 4342 "Zend/zend_language_scanner.c"
 yy370:
 		YYDEBUG(370, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4190,9 +4358,11 @@ yy372:
 		}
 		YYDEBUG(373, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1123 "Zend/zend_language_scanner.l"
 		{
 	return T_USE;
 }
+#line 4366 "Zend/zend_language_scanner.c"
 yy374:
 		YYDEBUG(374, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4211,9 +4381,11 @@ yy376:
 		}
 		YYDEBUG(377, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1167 "Zend/zend_language_scanner.l"
 		{
 	return T_UNSET;
 }
+#line 4389 "Zend/zend_language_scanner.c"
 yy378:
 		YYDEBUG(378, *YYCURSOR);
 		++YYCURSOR;
@@ -4385,9 +4557,11 @@ yy393:
 		++YYCURSOR;
 		YYDEBUG(395, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1067 "Zend/zend_language_scanner.l"
 		{
 	return T_INT_CAST;
 }
+#line 4565 "Zend/zend_language_scanner.c"
 yy396:
 		YYDEBUG(396, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4431,9 +4605,11 @@ yy401:
 		++YYCURSOR;
 		YYDEBUG(404, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1071 "Zend/zend_language_scanner.l"
 		{
 	return T_DOUBLE_CAST;
 }
+#line 4613 "Zend/zend_language_scanner.c"
 yy405:
 		YYDEBUG(405, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4503,9 +4679,11 @@ yy415:
 		++YYCURSOR;
 		YYDEBUG(418, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1075 "Zend/zend_language_scanner.l"
 		{
 	return T_STRING_CAST;
 }
+#line 4687 "Zend/zend_language_scanner.c"
 yy419:
 		YYDEBUG(419, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4538,9 +4716,11 @@ yy422:
 		++YYCURSOR;
 		YYDEBUG(425, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1083 "Zend/zend_language_scanner.l"
 		{
 	return T_ARRAY_CAST;
 }
+#line 4724 "Zend/zend_language_scanner.c"
 yy426:
 		YYDEBUG(426, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4578,9 +4758,11 @@ yy430:
 		++YYCURSOR;
 		YYDEBUG(433, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1087 "Zend/zend_language_scanner.l"
 		{
 	return T_OBJECT_CAST;
 }
+#line 4766 "Zend/zend_language_scanner.c"
 yy434:
 		YYDEBUG(434, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4621,9 +4803,11 @@ yy439:
 		++YYCURSOR;
 		YYDEBUG(441, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1091 "Zend/zend_language_scanner.l"
 		{
 	return T_BOOL_CAST;
 }
+#line 4811 "Zend/zend_language_scanner.c"
 yy442:
 		YYDEBUG(442, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4667,9 +4851,11 @@ yy447:
 		++YYCURSOR;
 		YYDEBUG(450, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1079 "Zend/zend_language_scanner.l"
 		{
 	return T_STRING_CAST;
 }
+#line 4859 "Zend/zend_language_scanner.c"
 yy451:
 		YYDEBUG(451, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4702,9 +4888,11 @@ yy454:
 		++YYCURSOR;
 		YYDEBUG(457, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1095 "Zend/zend_language_scanner.l"
 		{
 	return T_UNSET_CAST;
 }
+#line 4896 "Zend/zend_language_scanner.c"
 yy458:
 		YYDEBUG(458, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4718,9 +4906,11 @@ yy459:
 		}
 		YYDEBUG(460, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1063 "Zend/zend_language_scanner.l"
 		{
 	return T_VAR;
 }
+#line 4914 "Zend/zend_language_scanner.c"
 yy461:
 		YYDEBUG(461, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4740,9 +4930,11 @@ yy463:
 		}
 		YYDEBUG(464, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1055 "Zend/zend_language_scanner.l"
 		{
 	return T_NEW;
 }
+#line 4938 "Zend/zend_language_scanner.c"
 yy465:
 		YYDEBUG(465, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4781,17 +4973,21 @@ yy471:
 		}
 		YYDEBUG(472, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1119 "Zend/zend_language_scanner.l"
 		{
 	return T_NAMESPACE;
 }
+#line 4981 "Zend/zend_language_scanner.c"
 yy473:
 		YYDEBUG(473, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(474, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1047 "Zend/zend_language_scanner.l"
 		{
 	return T_PAAMAYIM_NEKUDOTAYIM;
 }
+#line 4991 "Zend/zend_language_scanner.c"
 yy475:
 		YYDEBUG(475, *YYCURSOR);
 		++YYCURSOR;
@@ -4813,26 +5009,32 @@ yy477:
 		++YYCURSOR;
 		YYDEBUG(478, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1219 "Zend/zend_language_scanner.l"
 		{
 	return T_MINUS_EQUAL;
 }
+#line 5017 "Zend/zend_language_scanner.c"
 yy479:
 		YYDEBUG(479, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(480, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1187 "Zend/zend_language_scanner.l"
 		{
 	return T_DEC;
 }
+#line 5027 "Zend/zend_language_scanner.c"
 yy481:
 		YYDEBUG(481, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(482, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1017 "Zend/zend_language_scanner.l"
 		{
 	yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
 	return T_OBJECT_OPERATOR;
 }
+#line 5038 "Zend/zend_language_scanner.c"
 yy483:
 		YYDEBUG(483, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4877,9 +5079,11 @@ yy488:
 		}
 		YYDEBUG(489, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1163 "Zend/zend_language_scanner.l"
 		{
 	return T_PUBLIC;
 }
+#line 5087 "Zend/zend_language_scanner.c"
 yy490:
 		YYDEBUG(490, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4934,9 +5138,11 @@ yy497:
 		}
 		YYDEBUG(498, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1159 "Zend/zend_language_scanner.l"
 		{
 	return T_PROTECTED;
 }
+#line 5146 "Zend/zend_language_scanner.c"
 yy499:
 		YYDEBUG(499, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -4966,9 +5172,11 @@ yy503:
 		}
 		YYDEBUG(504, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1155 "Zend/zend_language_scanner.l"
 		{
 	return T_PRIVATE;
 }
+#line 5180 "Zend/zend_language_scanner.c"
 yy505:
 		YYDEBUG(505, *YYCURSOR);
 		++YYCURSOR;
@@ -4977,9 +5185,11 @@ yy505:
 		}
 		YYDEBUG(506, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 997 "Zend/zend_language_scanner.l"
 		{
 	return T_PRINT;
 }
+#line 5193 "Zend/zend_language_scanner.c"
 yy507:
 		YYDEBUG(507, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5004,9 +5214,11 @@ yy510:
 		}
 		YYDEBUG(511, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 989 "Zend/zend_language_scanner.l"
 		{
 	return T_GOTO;
 }
+#line 5222 "Zend/zend_language_scanner.c"
 yy512:
 		YYDEBUG(512, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5030,9 +5242,11 @@ yy515:
 		}
 		YYDEBUG(516, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1127 "Zend/zend_language_scanner.l"
 		{
 	return T_GLOBAL;
 }
+#line 5250 "Zend/zend_language_scanner.c"
 yy517:
 		YYDEBUG(517, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5069,9 +5283,11 @@ yy523:
 		}
 		YYDEBUG(524, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 981 "Zend/zend_language_scanner.l"
 		{
 	return T_BREAK;
 }
+#line 5291 "Zend/zend_language_scanner.c"
 yy525:
 		YYDEBUG(525, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5111,9 +5327,11 @@ yy531:
 		}
 		YYDEBUG(532, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 965 "Zend/zend_language_scanner.l"
 		{
 	return T_SWITCH;
 }
+#line 5335 "Zend/zend_language_scanner.c"
 yy533:
 		YYDEBUG(533, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5137,9 +5355,11 @@ yy536:
 		}
 		YYDEBUG(537, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1143 "Zend/zend_language_scanner.l"
 		{
 	return T_STATIC;
 }
+#line 5363 "Zend/zend_language_scanner.c"
 yy538:
 		YYDEBUG(538, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5166,9 +5386,11 @@ yy541:
 		}
 		YYDEBUG(542, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 961 "Zend/zend_language_scanner.l"
 		{
 	return T_AS;
 }
+#line 5394 "Zend/zend_language_scanner.c"
 yy543:
 		YYDEBUG(543, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5187,9 +5409,11 @@ yy545:
 		}
 		YYDEBUG(546, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1179 "Zend/zend_language_scanner.l"
 		{
 	return T_ARRAY;
 }
+#line 5417 "Zend/zend_language_scanner.c"
 yy547:
 		YYDEBUG(547, *YYCURSOR);
 		++YYCURSOR;
@@ -5198,9 +5422,11 @@ yy547:
 		}
 		YYDEBUG(548, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1271 "Zend/zend_language_scanner.l"
 		{
 	return T_LOGICAL_AND;
 }
+#line 5430 "Zend/zend_language_scanner.c"
 yy549:
 		YYDEBUG(549, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5234,9 +5460,11 @@ yy554:
 		}
 		YYDEBUG(555, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1147 "Zend/zend_language_scanner.l"
 		{
 	return T_ABSTRACT;
 }
+#line 5468 "Zend/zend_language_scanner.c"
 yy556:
 		YYDEBUG(556, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5260,9 +5488,11 @@ yy559:
 		}
 		YYDEBUG(560, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 921 "Zend/zend_language_scanner.l"
 		{
 	return T_WHILE;
 }
+#line 5496 "Zend/zend_language_scanner.c"
 yy561:
 		YYDEBUG(561, *YYCURSOR);
 		++YYCURSOR;
@@ -5271,9 +5501,11 @@ yy561:
 		}
 		YYDEBUG(562, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 905 "Zend/zend_language_scanner.l"
 		{
 	return T_IF;
 }
+#line 5509 "Zend/zend_language_scanner.c"
 yy563:
 		YYDEBUG(563, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5325,9 +5557,11 @@ yy568:
 		}
 		YYDEBUG(569, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1131 "Zend/zend_language_scanner.l"
 		{
 	return T_ISSET;
 }
+#line 5565 "Zend/zend_language_scanner.c"
 yy570:
 		YYDEBUG(570, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5381,9 +5615,11 @@ yy576:
 yy577:
 		YYDEBUG(577, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1103 "Zend/zend_language_scanner.l"
 		{
 	return T_INCLUDE;
 }
+#line 5623 "Zend/zend_language_scanner.c"
 yy578:
 		YYDEBUG(578, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5412,9 +5648,11 @@ yy582:
 		}
 		YYDEBUG(583, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1107 "Zend/zend_language_scanner.l"
 		{
 	return T_INCLUDE_ONCE;
 }
+#line 5656 "Zend/zend_language_scanner.c"
 yy584:
 		YYDEBUG(584, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5448,9 +5686,11 @@ yy589:
 		}
 		YYDEBUG(590, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1005 "Zend/zend_language_scanner.l"
 		{
 	return T_INTERFACE;
 }
+#line 5694 "Zend/zend_language_scanner.c"
 yy591:
 		YYDEBUG(591, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5489,9 +5729,11 @@ yy597:
 		}
 		YYDEBUG(598, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 957 "Zend/zend_language_scanner.l"
 		{
 	return T_INSTANCEOF;
 }
+#line 5737 "Zend/zend_language_scanner.c"
 yy599:
 		YYDEBUG(599, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5535,9 +5777,11 @@ yy606:
 		}
 		YYDEBUG(607, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1013 "Zend/zend_language_scanner.l"
 		{
 	return T_IMPLEMENTS;
 }
+#line 5785 "Zend/zend_language_scanner.c"
 yy608:
 		YYDEBUG(608, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5557,9 +5801,11 @@ yy610:
 		}
 		YYDEBUG(611, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 893 "Zend/zend_language_scanner.l"
 		{
 	return T_TRY;
 }
+#line 5809 "Zend/zend_language_scanner.c"
 yy612:
 		YYDEBUG(612, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5578,9 +5824,11 @@ yy614:
 		}
 		YYDEBUG(615, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 901 "Zend/zend_language_scanner.l"
 		{
 	return T_THROW;
 }
+#line 5832 "Zend/zend_language_scanner.c"
 yy616:
 		YYDEBUG(616, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5641,9 +5889,11 @@ yy622:
 yy623:
 		YYDEBUG(623, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1111 "Zend/zend_language_scanner.l"
 		{
 	return T_REQUIRE;
 }
+#line 5897 "Zend/zend_language_scanner.c"
 yy624:
 		YYDEBUG(624, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5672,9 +5922,11 @@ yy628:
 		}
 		YYDEBUG(629, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1115 "Zend/zend_language_scanner.l"
 		{
 	return T_REQUIRE_ONCE;
 }
+#line 5930 "Zend/zend_language_scanner.c"
 yy630:
 		YYDEBUG(630, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5693,9 +5945,11 @@ yy632:
 		}
 		YYDEBUG(633, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 889 "Zend/zend_language_scanner.l"
 		{
 	return T_RETURN;
 }
+#line 5953 "Zend/zend_language_scanner.c"
 yy634:
 		YYDEBUG(634, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5776,9 +6030,11 @@ yy643:
 		}
 		YYDEBUG(644, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 985 "Zend/zend_language_scanner.l"
 		{
 	return T_CONTINUE;
 }
+#line 6038 "Zend/zend_language_scanner.c"
 yy645:
 		YYDEBUG(645, *YYCURSOR);
 		++YYCURSOR;
@@ -5787,9 +6043,11 @@ yy645:
 		}
 		YYDEBUG(646, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 885 "Zend/zend_language_scanner.l"
 		{
 	return T_CONST;
 }
+#line 6051 "Zend/zend_language_scanner.c"
 yy647:
 		YYDEBUG(647, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5814,9 +6072,11 @@ yy650:
 		}
 		YYDEBUG(651, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1059 "Zend/zend_language_scanner.l"
 		{
 	return T_CLONE;
 }
+#line 6080 "Zend/zend_language_scanner.c"
 yy652:
 		YYDEBUG(652, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5830,9 +6090,11 @@ yy653:
 		}
 		YYDEBUG(654, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1001 "Zend/zend_language_scanner.l"
 		{
 	return T_CLASS;
 }
+#line 6098 "Zend/zend_language_scanner.c"
 yy655:
 		YYDEBUG(655, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5852,9 +6114,11 @@ yy657:
 		}
 		YYDEBUG(658, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 973 "Zend/zend_language_scanner.l"
 		{
 	return T_CASE;
 }
+#line 6122 "Zend/zend_language_scanner.c"
 yy659:
 		YYDEBUG(659, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5868,9 +6132,11 @@ yy660:
 		}
 		YYDEBUG(661, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 897 "Zend/zend_language_scanner.l"
 		{
 	return T_CATCH;
 }
+#line 6140 "Zend/zend_language_scanner.c"
 yy662:
 		YYDEBUG(662, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5921,9 +6187,11 @@ yy670:
 		}
 		YYDEBUG(671, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 881 "Zend/zend_language_scanner.l"
 		{
 	return T_FUNCTION;
 }
+#line 6195 "Zend/zend_language_scanner.c"
 yy672:
 		YYDEBUG(672, *YYCURSOR);
 		++YYCURSOR;
@@ -5947,9 +6215,11 @@ yy672:
 yy673:
 		YYDEBUG(673, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 933 "Zend/zend_language_scanner.l"
 		{
 	return T_FOR;
 }
+#line 6223 "Zend/zend_language_scanner.c"
 yy674:
 		YYDEBUG(674, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5973,9 +6243,11 @@ yy677:
 		}
 		YYDEBUG(678, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 941 "Zend/zend_language_scanner.l"
 		{
 	return T_FOREACH;
 }
+#line 6251 "Zend/zend_language_scanner.c"
 yy679:
 		YYDEBUG(679, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -5994,9 +6266,11 @@ yy681:
 		}
 		YYDEBUG(682, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1151 "Zend/zend_language_scanner.l"
 		{
 	return T_FINAL;
 }
+#line 6274 "Zend/zend_language_scanner.c"
 yy683:
 		YYDEBUG(683, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6027,9 +6301,11 @@ yy685:
 		}
 		YYDEBUG(686, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 929 "Zend/zend_language_scanner.l"
 		{
 	return T_DO;
 }
+#line 6309 "Zend/zend_language_scanner.c"
 yy687:
 		YYDEBUG(687, *YYCURSOR);
 		++YYCURSOR;
@@ -6038,9 +6314,11 @@ yy687:
 		}
 		YYDEBUG(688, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 877 "Zend/zend_language_scanner.l"
 		{
 	return T_EXIT;
 }
+#line 6322 "Zend/zend_language_scanner.c"
 yy689:
 		YYDEBUG(689, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6075,9 +6353,11 @@ yy694:
 		}
 		YYDEBUG(695, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 977 "Zend/zend_language_scanner.l"
 		{
 	return T_DEFAULT;
 }
+#line 6361 "Zend/zend_language_scanner.c"
 yy696:
 		YYDEBUG(696, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6101,9 +6381,11 @@ yy699:
 		}
 		YYDEBUG(700, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 949 "Zend/zend_language_scanner.l"
 		{
 	return T_DECLARE;
 }
+#line 6389 "Zend/zend_language_scanner.c"
 yy701:
 		YYDEBUG(701, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6183,9 +6465,11 @@ yy712:
 		}
 		YYDEBUG(713, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1009 "Zend/zend_language_scanner.l"
 		{
 	return T_EXTENDS;
 }
+#line 6473 "Zend/zend_language_scanner.c"
 yy714:
 		YYDEBUG(714, *YYCURSOR);
 		++YYCURSOR;
@@ -6194,9 +6478,11 @@ yy714:
 		}
 		YYDEBUG(715, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 873 "Zend/zend_language_scanner.l"
 		{
 	return T_EXIT;
 }
+#line 6486 "Zend/zend_language_scanner.c"
 yy716:
 		YYDEBUG(716, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6210,9 +6496,11 @@ yy717:
 		}
 		YYDEBUG(718, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1099 "Zend/zend_language_scanner.l"
 		{
 	return T_EVAL;
 }
+#line 6504 "Zend/zend_language_scanner.c"
 yy719:
 		YYDEBUG(719, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6282,9 +6570,11 @@ yy728:
 		}
 		YYDEBUG(729, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 925 "Zend/zend_language_scanner.l"
 		{
 	return T_ENDWHILE;
 }
+#line 6578 "Zend/zend_language_scanner.c"
 yy730:
 		YYDEBUG(730, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6313,9 +6603,11 @@ yy734:
 		}
 		YYDEBUG(735, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 969 "Zend/zend_language_scanner.l"
 		{
 	return T_ENDSWITCH;
 }
+#line 6611 "Zend/zend_language_scanner.c"
 yy736:
 		YYDEBUG(736, *YYCURSOR);
 		++YYCURSOR;
@@ -6324,9 +6616,11 @@ yy736:
 		}
 		YYDEBUG(737, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 913 "Zend/zend_language_scanner.l"
 		{
 	return T_ENDIF;
 }
+#line 6624 "Zend/zend_language_scanner.c"
 yy738:
 		YYDEBUG(738, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6355,9 +6649,11 @@ yy739:
 yy740:
 		YYDEBUG(740, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 937 "Zend/zend_language_scanner.l"
 		{
 	return T_ENDFOR;
 }
+#line 6657 "Zend/zend_language_scanner.c"
 yy741:
 		YYDEBUG(741, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6381,9 +6677,11 @@ yy744:
 		}
 		YYDEBUG(745, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 945 "Zend/zend_language_scanner.l"
 		{
 	return T_ENDFOREACH;
 }
+#line 6685 "Zend/zend_language_scanner.c"
 yy746:
 		YYDEBUG(746, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6417,9 +6715,11 @@ yy751:
 		}
 		YYDEBUG(752, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 953 "Zend/zend_language_scanner.l"
 		{
 	return T_ENDDECLARE;
 }
+#line 6723 "Zend/zend_language_scanner.c"
 yy753:
 		YYDEBUG(753, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6438,9 +6738,11 @@ yy755:
 		}
 		YYDEBUG(756, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1135 "Zend/zend_language_scanner.l"
 		{
 	return T_EMPTY;
 }
+#line 6746 "Zend/zend_language_scanner.c"
 yy757:
 		YYDEBUG(757, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6469,9 +6771,11 @@ yy758:
 yy759:
 		YYDEBUG(759, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 917 "Zend/zend_language_scanner.l"
 		{
 	return T_ELSE;
 }
+#line 6779 "Zend/zend_language_scanner.c"
 yy760:
 		YYDEBUG(760, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6485,9 +6789,11 @@ yy761:
 		}
 		YYDEBUG(762, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 909 "Zend/zend_language_scanner.l"
 		{
 	return T_ELSEIF;
 }
+#line 6797 "Zend/zend_language_scanner.c"
 yy763:
 		YYDEBUG(763, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6501,9 +6807,11 @@ yy764:
 		}
 		YYDEBUG(765, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 993 "Zend/zend_language_scanner.l"
 		{
 	return T_ECHO;
 }
+#line 6815 "Zend/zend_language_scanner.c"
 	}
 /* *********************************** */
 yyc_ST_LOOKING_FOR_PROPERTY:
@@ -6576,6 +6884,7 @@ yy768:
 yy769:
 		YYDEBUG(769, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1022 "Zend/zend_language_scanner.l"
 		{
 	zendlval->value.str.val = yytext; /* no copying - intentional */
 	zendlval->value.str.len = yyleng;
@@ -6583,6 +6892,7 @@ yy769:
 	HANDLE_NEWLINES(yytext, yyleng);
 	return T_WHITESPACE;
 }
+#line 6896 "Zend/zend_language_scanner.c"
 yy770:
 		YYDEBUG(770, *YYCURSOR);
 		++YYCURSOR;
@@ -6590,11 +6900,13 @@ yy770:
 yy771:
 		YYDEBUG(771, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1041 "Zend/zend_language_scanner.l"
 		{
 	yyless(0);
 	yy_pop_state(TSRMLS_C);
 	goto restart;
 }
+#line 6910 "Zend/zend_language_scanner.c"
 yy772:
 		YYDEBUG(772, *YYCURSOR);
 		++YYCURSOR;
@@ -6603,12 +6915,14 @@ yy772:
 yy773:
 		YYDEBUG(773, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1034 "Zend/zend_language_scanner.l"
 		{
 	yy_pop_state(TSRMLS_C);
 	zend_copy_value(zendlval, yytext, yyleng);
 	zendlval->type = IS_STRING;
 	return T_STRING;
 }
+#line 6926 "Zend/zend_language_scanner.c"
 yy774:
 		YYDEBUG(774, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6629,9 +6943,11 @@ yy777:
 		++YYCURSOR;
 		YYDEBUG(778, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1030 "Zend/zend_language_scanner.l"
 		{
 	return T_OBJECT_OPERATOR;
 }
+#line 6951 "Zend/zend_language_scanner.c"
 yy779:
 		YYDEBUG(779, *YYCURSOR);
 		++YYCURSOR;
@@ -6701,6 +7017,7 @@ yy783:
 yy784:
 		YYDEBUG(784, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1313 "Zend/zend_language_scanner.l"
 		{
 	zend_copy_value(zendlval, yytext, yyleng);
 	zendlval->type = IS_STRING;
@@ -6708,17 +7025,20 @@ yy784:
 	yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 	return T_STRING_VARNAME;
 }
+#line 7029 "Zend/zend_language_scanner.c"
 yy785:
 		YYDEBUG(785, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(786, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1322 "Zend/zend_language_scanner.l"
 		{
 	yyless(0);
 	yy_pop_state(TSRMLS_C);
 	yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 	goto restart;
 }
+#line 7042 "Zend/zend_language_scanner.c"
 yy787:
 		YYDEBUG(787, *YYCURSOR);
 		++YYCURSOR;
@@ -6740,6 +7060,7 @@ yyc_ST_NOWDOC:
 	++YYCURSOR;
 	YYDEBUG(792, *YYCURSOR);
 	yyleng = YYCURSOR - SCNG(yy_text);
+#line 2156 "Zend/zend_language_scanner.l"
 	{
 	int newline = 0;
 
@@ -6794,6 +7115,7 @@ nowdoc_scan_done:
 	HANDLE_NEWLINES(yytext, yyleng - newline);
 	return T_ENCAPSED_AND_WHITESPACE;
 }
+#line 7119 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_VAR_OFFSET:
 	{
@@ -6893,6 +7215,7 @@ yy795:
 yy796:
 		YYDEBUG(796, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1372 "Zend/zend_language_scanner.l"
 		{ /* Offset could be treated as a long */
 	if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) {
 		zendlval->value.lval = strtol(yytext, NULL, 10);
@@ -6904,6 +7227,7 @@ yy796:
 	}
 	return T_NUM_STRING;
 }
+#line 7231 "Zend/zend_language_scanner.c"
 yy797:
 		YYDEBUG(797, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6923,19 +7247,23 @@ yy798:
 yy799:
 		YYDEBUG(799, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1682 "Zend/zend_language_scanner.l"
 		{
 	/* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
 	return yytext[0];
 }
+#line 7256 "Zend/zend_language_scanner.c"
 yy800:
 		YYDEBUG(800, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(801, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1677 "Zend/zend_language_scanner.l"
 		{
 	yy_pop_state(TSRMLS_C);
 	return ']';
 }
+#line 7267 "Zend/zend_language_scanner.c"
 yy802:
 		YYDEBUG(802, *YYCURSOR);
 		yych = *++YYCURSOR;
@@ -6945,12 +7273,14 @@ yy803:
 		++YYCURSOR;
 		YYDEBUG(804, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1687 "Zend/zend_language_scanner.l"
 		{
 	/* Invalid rule to return a more explicit parse error with proper line number */
 	yyless(0);
 	yy_pop_state(TSRMLS_C);
 	return T_ENCAPSED_AND_WHITESPACE;
 }
+#line 7284 "Zend/zend_language_scanner.c"
 yy805:
 		YYDEBUG(805, *YYCURSOR);
 		++YYCURSOR;
@@ -6959,16 +7289,19 @@ yy805:
 yy806:
 		YYDEBUG(806, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1694 "Zend/zend_language_scanner.l"
 		{
 	zend_copy_value(zendlval, yytext, yyleng);
 	zendlval->type = IS_STRING;
 	return T_STRING;
 }
+#line 7299 "Zend/zend_language_scanner.c"
 yy807:
 		YYDEBUG(807, *YYCURSOR);
 		++YYCURSOR;
 		YYDEBUG(808, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 2212 "Zend/zend_language_scanner.l"
 		{
 	if (YYCURSOR > YYLIMIT) {
 		return 0;
@@ -6977,6 +7310,7 @@ yy807:
 	zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
 	goto restart;
 }
+#line 7314 "Zend/zend_language_scanner.c"
 yy809:
 		YYDEBUG(809, *YYCURSOR);
 		++YYCURSOR;
@@ -7012,11 +7346,13 @@ yy811:
 yy813:
 		YYDEBUG(813, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1671 "Zend/zend_language_scanner.l"
 		{
 	zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 	zendlval->type = IS_STRING;
 	return T_VARIABLE;
 }
+#line 7356 "Zend/zend_language_scanner.c"
 yy814:
 		YYDEBUG(814, *YYCURSOR);
 		++YYCURSOR;
@@ -7048,12 +7384,14 @@ yy818:
 yy820:
 		YYDEBUG(820, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
+#line 1384 "Zend/zend_language_scanner.l"
 		{ /* Offset must be treated as a string */
 	zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
 	zendlval->value.str.len = yyleng;
 	zendlval->type = IS_STRING;
 	return T_NUM_STRING;
 }
+#line 7395 "Zend/zend_language_scanner.c"
 yy821:
 		YYDEBUG(821, *YYCURSOR);
 		++YYCURSOR;
@@ -7066,5 +7404,6 @@ yy821:
 		goto yy820;
 	}
 }
+#line 2221 "Zend/zend_language_scanner.l"
 
 }
diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h
index f564c03..852eb2e 100644
--- a/Zend/zend_language_scanner.h
+++ b/Zend/zend_language_scanner.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_language_scanner.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_language_scanner.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_SCANNER_H
 #define ZEND_SCANNER_H
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index 5252a65..0613475 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_language_scanner.l 305464 2010-11-17 16:46:19Z pajoye $ */
+/* $Id: zend_language_scanner.l 307028 2011-01-03 14:39:48Z iliaa $ */
 
 #if 0
 # define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
@@ -227,6 +227,12 @@ ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
 	SCNG(script_encoding) = lex_state->script_encoding;
 	SCNG(internal_encoding) = lex_state->internal_encoding;
 #endif /* ZEND_MULTIBYTE */
+
+	if (CG(heredoc)) {
+		efree(CG(heredoc));
+		CG(heredoc) = NULL;
+		CG(heredoc_len) = 0;
+	}
 }
 
 ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC)
diff --git a/Zend/zend_language_scanner_defs.h b/Zend/zend_language_scanner_defs.h
index 17956ff..c66be47 100644
--- a/Zend/zend_language_scanner_defs.h
+++ b/Zend/zend_language_scanner_defs.h
@@ -1,4 +1,5 @@
-/* Generated by re2c 0.13.5 on Wed Jan  5 17:41:40 2011 */
+/* Generated by re2c 0.13.5 on Mon Jan  3 05:56:03 2011 */
+#line 3 "Zend/zend_language_scanner_defs.h"
 
 enum YYCONDTYPE {
 	yycST_IN_SCRIPTING,
diff --git a/Zend/zend_list.c b/Zend/zend_list.c
index 985a1fb..ec9c337 100644
--- a/Zend/zend_list.c
+++ b/Zend/zend_list.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_list.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_list.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* resource lists */
 
diff --git a/Zend/zend_list.h b/Zend/zend_list.h
index 74ee451..6f263ec 100644
--- a/Zend/zend_list.h
+++ b/Zend/zend_list.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_list.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_list.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_LIST_H
 #define ZEND_LIST_H
diff --git a/Zend/zend_llist.c b/Zend/zend_llist.c
index b23fe1c..173246f 100644
--- a/Zend/zend_llist.c
+++ b/Zend/zend_llist.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_llist.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_llist.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_llist.h"
diff --git a/Zend/zend_llist.h b/Zend/zend_llist.h
index ab1e643..b37b25c 100644
--- a/Zend/zend_llist.h
+++ b/Zend/zend_llist.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_llist.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_llist.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_LLIST_H
 #define ZEND_LLIST_H
diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h
index 86807ee..3ca4344 100644
--- a/Zend/zend_modules.h
+++ b/Zend/zend_modules.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_modules.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_modules.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MODULES_H
 #define MODULES_H
diff --git a/Zend/zend_multibyte.c b/Zend/zend_multibyte.c
index 4b82a67..9c4e321 100644
--- a/Zend/zend_multibyte.c
+++ b/Zend/zend_multibyte.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_multibyte.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_multibyte.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_compile.h"
diff --git a/Zend/zend_multibyte.h b/Zend/zend_multibyte.h
index c4c0f1c..6b51ea0 100644
--- a/Zend/zend_multibyte.h
+++ b/Zend/zend_multibyte.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_multibyte.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_multibyte.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_MULTIBYTE_H
 #define ZEND_MULTIBYTE_H
diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h
index cb790b7..f6b9d27 100644
--- a/Zend/zend_multiply.h
+++ b/Zend/zend_multiply.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_multiply.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_multiply.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #if defined(__i386__) && defined(__GNUC__)
 
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index bf42923..866fae1 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_object_handlers.c 305043 2010-11-03 01:35:26Z felipe $ */
+/* $Id: zend_object_handlers.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_globals.h"
diff --git a/Zend/zend_object_handlers.h b/Zend/zend_object_handlers.h
index 721bfed..e3c587e 100644
--- a/Zend/zend_object_handlers.h
+++ b/Zend/zend_object_handlers.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_object_handlers.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_object_handlers.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_OBJECT_HANDLERS_H
 #define ZEND_OBJECT_HANDLERS_H
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c
index bf25114..3ff5027 100644
--- a/Zend/zend_objects.c
+++ b/Zend/zend_objects.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_objects.c 302323 2010-08-16 09:20:46Z dmitry $ */
+/* $Id: zend_objects.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_globals.h"
diff --git a/Zend/zend_objects.h b/Zend/zend_objects.h
index c27de0a..1056ade 100644
--- a/Zend/zend_objects.h
+++ b/Zend/zend_objects.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_objects.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_objects.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_OBJECTS_H
 #define ZEND_OBJECTS_H
diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c
index 9f83fd4..e3fe506 100644
--- a/Zend/zend_objects_API.c
+++ b/Zend/zend_objects_API.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_objects_API.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_objects_API.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_globals.h"
diff --git a/Zend/zend_objects_API.h b/Zend/zend_objects_API.h
index 1f1a0ff..4165885 100644
--- a/Zend/zend_objects_API.h
+++ b/Zend/zend_objects_API.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_objects_API.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_objects_API.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_OBJECTS_API_H
 #define ZEND_OBJECTS_API_H
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
index b112173..3f0ca28 100644
--- a/Zend/zend_opcode.c
+++ b/Zend/zend_opcode.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_opcode.c 300350 2010-06-10 11:45:51Z dmitry $ */
+/* $Id: zend_opcode.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index c61bdc8..07500a4 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_operators.c 300765 2010-06-26 17:14:33Z felipe $ */
+/* $Id: zend_operators.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <ctype.h>
 
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h
index bc24284..0e8f569 100644
--- a/Zend/zend_operators.h
+++ b/Zend/zend_operators.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_operators.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_operators.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_OPERATORS_H
 #define ZEND_OPERATORS_H
diff --git a/Zend/zend_ptr_stack.c b/Zend/zend_ptr_stack.c
index d866e6b..4acf6e0 100644
--- a/Zend/zend_ptr_stack.c
+++ b/Zend/zend_ptr_stack.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ptr_stack.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_ptr_stack.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_ptr_stack.h"
diff --git a/Zend/zend_ptr_stack.h b/Zend/zend_ptr_stack.h
index 490b982..048188f 100644
--- a/Zend/zend_ptr_stack.h
+++ b/Zend/zend_ptr_stack.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ptr_stack.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_ptr_stack.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_PTR_STACK_H
 #define ZEND_PTR_STACK_H
diff --git a/Zend/zend_qsort.c b/Zend/zend_qsort.c
index b144742..c12f421 100644
--- a/Zend/zend_qsort.c
+++ b/Zend/zend_qsort.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_qsort.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_qsort.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 
diff --git a/Zend/zend_qsort.h b/Zend/zend_qsort.h
index 667df71..4da2a81 100644
--- a/Zend/zend_qsort.h
+++ b/Zend/zend_qsort.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_qsort.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_qsort.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_QSORT_H
 #define ZEND_QSORT_H
diff --git a/Zend/zend_sprintf.c b/Zend/zend_sprintf.c
index 4e9eb8e..8671484 100644
--- a/Zend/zend_sprintf.c
+++ b/Zend/zend_sprintf.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_sprintf.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_sprintf.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 
diff --git a/Zend/zend_stack.c b/Zend/zend_stack.c
index caa7f36..5f17002 100644
--- a/Zend/zend_stack.c
+++ b/Zend/zend_stack.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_stack.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_stack.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_stack.h"
diff --git a/Zend/zend_stack.h b/Zend/zend_stack.h
index 408c383..dcfab39 100644
--- a/Zend/zend_stack.h
+++ b/Zend/zend_stack.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_stack.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_stack.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_STACK_H
 #define ZEND_STACK_H
diff --git a/Zend/zend_static_allocator.c b/Zend/zend_static_allocator.c
index 6a985c7..741840d 100644
--- a/Zend/zend_static_allocator.c
+++ b/Zend/zend_static_allocator.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_static_allocator.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_static_allocator.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend_static_allocator.h"
 
diff --git a/Zend/zend_static_allocator.h b/Zend/zend_static_allocator.h
index 9921a87..dceca59 100644
--- a/Zend/zend_static_allocator.h
+++ b/Zend/zend_static_allocator.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_static_allocator.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_static_allocator.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_STATIC_ALLOCATOR_H
 #define ZEND_STATIC_ALLOCATOR_H
diff --git a/Zend/zend_stream.c b/Zend/zend_stream.c
index d3c35f2..7a3c8a1 100644
--- a/Zend/zend_stream.c
+++ b/Zend/zend_stream.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_stream.c 300225 2010-06-06 12:32:25Z pajoye $ */
+/* $Id: zend_stream.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 #include "zend.h"
diff --git a/Zend/zend_stream.h b/Zend/zend_stream.h
index e40a33b..d3e3f4f 100644
--- a/Zend/zend_stream.h
+++ b/Zend/zend_stream.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_stream.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_stream.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_STREAM_H
 #define ZEND_STREAM_H
diff --git a/Zend/zend_strtod.c b/Zend/zend_strtod.c
index 7bcc98d..6bca42f 100644
--- a/Zend/zend_strtod.c
+++ b/Zend/zend_strtod.c
@@ -89,7 +89,7 @@
  *	directly -- and assumed always to succeed.
  */
 
-/* $Id: zend_strtod.c 307119 2011-01-05 13:32:26Z johannes $ */
+/* $Id: zend_strtod.c 307192 2011-01-06 22:48:20Z rasmus $ */
 
 #include <zend_operators.h>
 #include <zend_strtod.h>
@@ -164,6 +164,7 @@ typedef unsigned long int uint32_t;
 
 #ifdef __vax__
 #define VAX
+#undef IEEE_LITTLE_ENDIAN
 #endif
 
 #if defined(_MSC_VER)
@@ -2030,6 +2031,10 @@ ret1:
 	return s0;
 }
 
+/* F* VC6 */
+#if _MSC_VER <= 1300
+# pragma optimize( "", off )
+#endif
 ZEND_API double zend_strtod (CONST char *s00, char **se)
 {
 	int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign,
diff --git a/Zend/zend_strtod.h b/Zend/zend_strtod.h
index c112d29..c3c8663 100644
--- a/Zend/zend_strtod.h
+++ b/Zend/zend_strtod.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_strtod.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_strtod.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* This is a header file for the strtod implementation by David M. Gay which
  * can be found in zend_strtod.c */
diff --git a/Zend/zend_ts_hash.c b/Zend/zend_ts_hash.c
index 43f719d..c0d597a 100644
--- a/Zend/zend_ts_hash.c
+++ b/Zend/zend_ts_hash.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ts_hash.c 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_ts_hash.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "zend.h"
 #include "zend_ts_hash.h"
diff --git a/Zend/zend_ts_hash.h b/Zend/zend_ts_hash.h
index bdc2a8d..b87a976 100644
--- a/Zend/zend_ts_hash.h
+++ b/Zend/zend_ts_hash.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ts_hash.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_ts_hash.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_TS_HASH_H
 #define ZEND_TS_HASH_H
diff --git a/Zend/zend_types.h b/Zend/zend_types.h
index 374f600..33e90eb 100644
--- a/Zend/zend_types.h
+++ b/Zend/zend_types.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_types.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_types.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_TYPES_H
 #define ZEND_TYPES_H
diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c
index 32a0a02..67627f5 100644
--- a/Zend/zend_variables.c
+++ b/Zend/zend_variables.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_variables.c 302137 2010-08-12 07:58:14Z sas $ */
+/* $Id: zend_variables.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 #include "zend.h"
diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h
index 9eb7f52..c9330af 100644
--- a/Zend/zend_variables.h
+++ b/Zend/zend_variables.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        | 
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_variables.h 302152 2010-08-12 17:28:08Z sas $ */
+/* $Id: zend_variables.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_VARIABLES_H
 #define ZEND_VARIABLES_H
diff --git a/Zend/zend_vm.h b/Zend/zend_vm.h
index 61390d0..04d333c 100644
--- a/Zend/zend_vm.h
+++ b/Zend/zend_vm.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_vm.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: zend_vm.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef ZEND_VM_H
 #define ZEND_VM_H
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 5a5cf34..c09b8a0 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_vm_def.h 300990 2010-07-05 09:08:35Z dmitry $ */
+/* $Id: zend_vm_def.h 309300 2011-03-16 11:14:33Z dmitry $ */
 
 /* If you change this file, please regenerate the zend_vm_execute.h and
  * zend_vm_opcodes.h files by running:
@@ -2694,10 +2694,9 @@ ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, ANY)
 	}
 
 	if (OP1_TYPE == IS_VAR && *varptr_ptr == EG(error_zval_ptr)) {
-		Z_DELREF_PP(varptr_ptr);
-		ALLOC_ZVAL(*varptr_ptr);
-		INIT_ZVAL(**varptr_ptr);
-		Z_SET_REFCOUNT_PP(varptr_ptr, 0);
+		ALLOC_INIT_ZVAL(varptr);
+		zend_vm_stack_push(varptr TSRMLS_CC);
+		ZEND_VM_NEXT_OPCODE();
 	}
 
 	if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION && !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 4c6598c..7e37790 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -1880,16 +1880,6 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HA
 
 	return_value_used = RETURN_VALUE_USED(opline);
 
-	if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
-		if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE ||
-		    Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {
-			zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-		} else {
-			zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-		}
-		goto done;
-	}
-
 	switch (Z_LVAL(opline->op2.u.constant)) {
 		case ZEND_INCLUDE_ONCE:
 		case ZEND_REQUIRE_ONCE: {
@@ -1943,7 +1933,6 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HA
 			break;
 		EMPTY_SWITCH_DEFAULT_CASE()
 	}
-done:
 	if (inc_filename==&tmp_inc_filename) {
 		zval_dtor(&tmp_inc_filename);
 	}
@@ -5165,16 +5154,6 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HAND
 
 	return_value_used = RETURN_VALUE_USED(opline);
 
-	if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
-		if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE ||
-		    Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {
-			zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-		} else {
-			zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-		}
-		goto done;
-	}
-
 	switch (Z_LVAL(opline->op2.u.constant)) {
 		case ZEND_INCLUDE_ONCE:
 		case ZEND_REQUIRE_ONCE: {
@@ -5228,7 +5207,6 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HAND
 			break;
 		EMPTY_SWITCH_DEFAULT_CASE()
 	}
-done:
 	if (inc_filename==&tmp_inc_filename) {
 		zval_dtor(&tmp_inc_filename);
 	}
@@ -8364,10 +8342,9 @@ static int ZEND_FASTCALL  ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
 	}
 
 	if (IS_VAR == IS_VAR && *varptr_ptr == EG(error_zval_ptr)) {
-		Z_DELREF_PP(varptr_ptr);
-		ALLOC_ZVAL(*varptr_ptr);
-		INIT_ZVAL(**varptr_ptr);
-		Z_SET_REFCOUNT_PP(varptr_ptr, 0);
+		ALLOC_INIT_ZVAL(varptr);
+		zend_vm_stack_push(varptr TSRMLS_CC);
+		ZEND_VM_NEXT_OPCODE();
 	}
 
 	if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION && !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
@@ -8546,16 +8523,6 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND
 
 	return_value_used = RETURN_VALUE_USED(opline);
 
-	if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
-		if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE ||
-		    Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {
-			zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-		} else {
-			zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-		}
-		goto done;
-	}
-
 	switch (Z_LVAL(opline->op2.u.constant)) {
 		case ZEND_INCLUDE_ONCE:
 		case ZEND_REQUIRE_ONCE: {
@@ -8609,7 +8576,6 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND
 			break;
 		EMPTY_SWITCH_DEFAULT_CASE()
 	}
-done:
 	if (inc_filename==&tmp_inc_filename) {
 		zval_dtor(&tmp_inc_filename);
 	}
@@ -22248,10 +22214,9 @@ static int ZEND_FASTCALL  ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 	}
 
 	if (IS_CV == IS_VAR && *varptr_ptr == EG(error_zval_ptr)) {
-		Z_DELREF_PP(varptr_ptr);
-		ALLOC_ZVAL(*varptr_ptr);
-		INIT_ZVAL(**varptr_ptr);
-		Z_SET_REFCOUNT_PP(varptr_ptr, 0);
+		ALLOC_INIT_ZVAL(varptr);
+		zend_vm_stack_push(varptr TSRMLS_CC);
+		ZEND_VM_NEXT_OPCODE();
 	}
 
 	if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION && !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
@@ -22420,16 +22385,6 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL
 
 	return_value_used = RETURN_VALUE_USED(opline);
 
-	if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
-		if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE ||
-		    Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {
-			zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-		} else {
-			zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-		}
-		goto done;
-	}
-
 	switch (Z_LVAL(opline->op2.u.constant)) {
 		case ZEND_INCLUDE_ONCE:
 		case ZEND_REQUIRE_ONCE: {
@@ -22483,7 +22438,6 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL
 			break;
 		EMPTY_SWITCH_DEFAULT_CASE()
 	}
-done:
 	if (inc_filename==&tmp_inc_filename) {
 		zval_dtor(&tmp_inc_filename);
 	}
diff --git a/acconfig.h b/acconfig.h
index 9d6b0f7..4be285e 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -3,7 +3,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: acconfig.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: acconfig.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #if defined(__GNUC__) && __GNUC__ >= 4
 # define ZEND_API __attribute__ ((visibility("default")))
diff --git a/acinclude.m4 b/acinclude.m4
index e168c98..557722f 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: acinclude.m4 305553 2010-11-19 08:26:47Z jani $
+dnl $Id: acinclude.m4 308352 2011-02-15 08:28:22Z pajoye $
 dnl
 dnl This file contains local autoconf functions.
 dnl
@@ -2228,6 +2228,7 @@ AC_DEFUN([PHP_SETUP_ICU],[
       AC_MSG_ERROR([ICU version 3.4 or later is required])
     fi
 
+    ICU_VERSION=$icu_version
     ICU_INCS=`$ICU_CONFIG --cppflags-searchpath`
     ICU_LIBS=`$ICU_CONFIG --ldflags --ldflags-icuio`
     PHP_EVAL_INCLINE($ICU_INCS)
diff --git a/aclocal.m4 b/aclocal.m4
index a75affa..cde7793 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: acinclude.m4 305553 2010-11-19 08:26:47Z jani $
+dnl $Id: acinclude.m4 308352 2011-02-15 08:28:22Z pajoye $
 dnl
 dnl This file contains local autoconf functions.
 dnl
@@ -2228,6 +2228,7 @@ AC_DEFUN([PHP_SETUP_ICU],[
       AC_MSG_ERROR([ICU version 3.4 or later is required])
     fi
 
+    ICU_VERSION=$icu_version
     ICU_INCS=`$ICU_CONFIG --cppflags-searchpath`
     ICU_LIBS=`$ICU_CONFIG --ldflags --ldflags-icuio`
     PHP_EVAL_INCLINE($ICU_INCS)
diff --git a/configure b/configure
index ba58fa8..5658cd7 100755
--- a/configure
+++ b/configure
@@ -2168,7 +2168,7 @@ echo "$ac_t""$target" 1>&6
 
 PHP_MAJOR_VERSION=5
 PHP_MINOR_VERSION=3
-PHP_RELEASE_VERSION=5
+PHP_RELEASE_VERSION=6
 PHP_EXTRA_VERSION=""
 PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION"
 PHP_VERSION_ID=`expr $PHP_MAJOR_VERSION \* 10000 + $PHP_MINOR_VERSION \* 100 + $PHP_RELEASE_VERSION`
@@ -51690,6 +51690,7 @@ echo "configure:51681: checking for ICU 3.4 or greater" >&5
       { echo "configure: error: ICU version 3.4 or later is required" 1>&2; exit 1; }
     fi
 
+    ICU_VERSION=$icu_version
     ICU_INCS=`$ICU_CONFIG --cppflags-searchpath`
     ICU_LIBS=`$ICU_CONFIG --ldflags --ldflags-icuio`
     
@@ -51833,7 +51834,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:51837: checking for $ac_word" >&5
+echo "configure:51838: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -51865,7 +51866,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:51869: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:51870: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -51876,12 +51877,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 51880 "configure"
+#line 51881 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:51885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:51886: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -51907,12 +51908,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:51911: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:51912: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:51916: checking whether we are using GNU C++" >&5
+echo "configure:51917: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -51921,7 +51922,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:51925: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:51926: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -51940,7 +51941,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:51944: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:51945: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -51981,7 +51982,7 @@ for ac_declaration in \
    'void exit (int);'
 do
   cat > conftest.$ac_ext <<EOF
-#line 51985 "configure"
+#line 51986 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 $ac_declaration
@@ -51989,7 +51990,7 @@ int main() {
 exit (42);
 ; return 0; }
 EOF
-if { (eval echo configure:51993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:51994: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -51999,14 +52000,14 @@ else
 fi
 rm -f conftest*
   cat > conftest.$ac_ext <<EOF
-#line 52003 "configure"
+#line 52004 "configure"
 #include "confdefs.h"
 $ac_declaration
 int main() {
 exit (42);
 ; return 0; }
 EOF
-if { (eval echo configure:52010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:52011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   break
 else
@@ -52023,7 +52024,7 @@ fi
 
 
     echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:52027: checking how to run the C++ preprocessor" >&5
+echo "configure:52028: checking how to run the C++ preprocessor" >&5
 if test -z "$CXXCPP"; then
 if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -52036,12 +52037,12 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
 cross_compiling=$ac_cv_prog_cxx_cross
   CXXCPP="${CXX-g++} -E"
   cat > conftest.$ac_ext <<EOF
-#line 52040 "configure"
+#line 52041 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:52045: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:52046: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -52599,7 +52600,7 @@ fi
 php_enable_json=yes
 
 echo $ac_n "checking whether to enable JavaScript Object Serialization support""... $ac_c" 1>&6
-echo "configure:52603: checking whether to enable JavaScript Object Serialization support" >&5
+echo "configure:52604: checking whether to enable JavaScript Object Serialization support" >&5
 # Check whether --enable-json or --disable-json was given.
 if test "${enable_json+set}" = set; then
   enableval="$enable_json"
@@ -52645,12 +52646,12 @@ if test "$PHP_JSON" != "no"; then
 EOF
 
   echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:52649: checking for ANSI C header files" >&5
+echo "configure:52650: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 52654 "configure"
+#line 52655 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -52658,7 +52659,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:52662: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:52663: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -52675,7 +52676,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 52679 "configure"
+#line 52680 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -52693,7 +52694,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 52697 "configure"
+#line 52698 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -52714,7 +52715,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 52718 "configure"
+#line 52719 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -52725,7 +52726,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:52729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:52730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -53075,7 +53076,7 @@ fi
 php_with_ldap=no
 
 echo $ac_n "checking for LDAP support""... $ac_c" 1>&6
-echo "configure:53079: checking for LDAP support" >&5
+echo "configure:53080: checking for LDAP support" >&5
 # Check whether --with-ldap or --without-ldap was given.
 if test "${with_ldap+set}" = set; then
   withval="$with_ldap"
@@ -53119,7 +53120,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_ldap_sasl=no
 
 echo $ac_n "checking for LDAP Cyrus SASL support""... $ac_c" 1>&6
-echo "configure:53123: checking for LDAP Cyrus SASL support" >&5
+echo "configure:53124: checking for LDAP Cyrus SASL support" >&5
 # Check whether --with-ldap-sasl or --without-ldap-sasl was given.
 if test "${with_ldap_sasl+set}" = set; then
   withval="$with_ldap_sasl"
@@ -55461,19 +55462,19 @@ EOF
   LIBS="$LIBS $LDAP_SHARED_LIBADD"
 
     echo $ac_n "checking for 3 arg ldap_set_rebind_proc""... $ac_c" 1>&6
-echo "configure:55465: checking for 3 arg ldap_set_rebind_proc" >&5
+echo "configure:55466: checking for 3 arg ldap_set_rebind_proc" >&5
 if eval "test \"`echo '$''{'ac_cv_3arg_setrebindproc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 55470 "configure"
+#line 55471 "configure"
 #include "confdefs.h"
 #include <ldap.h>
 int main() {
 ldap_set_rebind_proc(0,0,0)
 ; return 0; }
 EOF
-if { (eval echo configure:55477: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:55478: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_3arg_setrebindproc=yes
 else
@@ -55496,12 +55497,12 @@ EOF
       for ac_func in ldap_parse_result ldap_parse_reference ldap_start_tls_s
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:55500: checking for $ac_func" >&5
+echo "configure:55501: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 55505 "configure"
+#line 55506 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -55524,7 +55525,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:55528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:55529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -55686,7 +55687,7 @@ EOF
   done
 
   echo $ac_n "checking for sasl_version in -lldap""... $ac_c" 1>&6
-echo "configure:55690: checking for sasl_version in -lldap" >&5
+echo "configure:55691: checking for sasl_version in -lldap" >&5
 ac_lib_var=`echo ldap'_'sasl_version | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -55694,7 +55695,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lldap  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 55698 "configure"
+#line 55699 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -55705,7 +55706,7 @@ int main() {
 sasl_version()
 ; return 0; }
 EOF
-if { (eval echo configure:55709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:55710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -55874,12 +55875,12 @@ fi
   fi
 
         echo $ac_n "checking for ldap_bind_s""... $ac_c" 1>&6
-echo "configure:55878: checking for ldap_bind_s" >&5
+echo "configure:55879: checking for ldap_bind_s" >&5
 if eval "test \"`echo '$''{'ac_cv_func_ldap_bind_s'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 55883 "configure"
+#line 55884 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char ldap_bind_s(); below.  */
@@ -55902,7 +55903,7 @@ ldap_bind_s();
 
 ; return 0; }
 EOF
-if { (eval echo configure:55906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:55907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_ldap_bind_s=yes"
 else
@@ -55955,7 +55956,7 @@ fi
 php_enable_mbstring=no
 
 echo $ac_n "checking whether to enable multibyte string support""... $ac_c" 1>&6
-echo "configure:55959: checking whether to enable multibyte string support" >&5
+echo "configure:55960: checking whether to enable multibyte string support" >&5
 # Check whether --enable-mbstring or --disable-mbstring was given.
 if test "${enable_mbstring+set}" = set; then
   enableval="$enable_mbstring"
@@ -55999,7 +56000,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_mbregex=yes
 
 echo $ac_n "checking whether to enable multibyte regex support""... $ac_c" 1>&6
-echo "configure:56003: checking whether to enable multibyte regex support" >&5
+echo "configure:56004: checking whether to enable multibyte regex support" >&5
 # Check whether --enable-mbregex or --disable-mbregex was given.
 if test "${enable_mbregex+set}" = set; then
   enableval="$enable_mbregex"
@@ -56022,7 +56023,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_mbregex_backtrack=yes
 
 echo $ac_n "checking whether to check multibyte regex backtrack""... $ac_c" 1>&6
-echo "configure:56026: checking whether to check multibyte regex backtrack" >&5
+echo "configure:56027: checking whether to check multibyte regex backtrack" >&5
 # Check whether --enable-mbregex_backtrack or --disable-mbregex_backtrack was given.
 if test "${enable_mbregex_backtrack+set}" = set; then
   enableval="$enable_mbregex_backtrack"
@@ -56045,7 +56046,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_libmbfl=no
 
 echo $ac_n "checking for external libmbfl""... $ac_c" 1>&6
-echo "configure:56049: checking for external libmbfl" >&5
+echo "configure:56050: checking for external libmbfl" >&5
 # Check whether --with-libmbfl or --without-libmbfl was given.
 if test "${with_libmbfl+set}" = set; then
   withval="$with_libmbfl"
@@ -56068,7 +56069,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_onig=no
 
 echo $ac_n "checking for external oniguruma""... $ac_c" 1>&6
-echo "configure:56072: checking for external oniguruma" >&5
+echo "configure:56073: checking for external oniguruma" >&5
 # Check whether --with-onig or --without-onig was given.
 if test "${with_onig+set}" = set; then
   withval="$with_onig"
@@ -56109,7 +56110,7 @@ EOF
       fi
 
       echo $ac_n "checking for variable length prototypes and stdarg.h""... $ac_c" 1>&6
-echo "configure:56113: checking for variable length prototypes and stdarg.h" >&5
+echo "configure:56114: checking for variable length prototypes and stdarg.h" >&5
 if eval "test \"`echo '$''{'php_cv_mbstring_stdarg'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -56127,7 +56128,7 @@ else
         
 else
   cat > conftest.$ac_ext <<EOF
-#line 56131 "configure"
+#line 56132 "configure"
 #include "confdefs.h"
 
 #include <stdarg.h>
@@ -56142,7 +56143,7 @@ int foo(int x, ...) {
 int main() { return foo(10, "", 3.14); }
         
 EOF
-if { (eval echo configure:56146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:56147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   php_cv_mbstring_stdarg=yes
 else
@@ -56163,17 +56164,17 @@ echo "$ac_t""$php_cv_mbstring_stdarg" 1>&6
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:56167: checking for $ac_hdr" >&5
+echo "configure:56168: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 56172 "configure"
+#line 56173 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:56177: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:56178: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -56200,7 +56201,7 @@ fi
 done
 
       echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:56204: checking size of int" >&5
+echo "configure:56205: checking size of int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -56208,7 +56209,7 @@ else
   ac_cv_sizeof_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 56212 "configure"
+#line 56213 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -56219,7 +56220,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:56223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:56224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -56239,7 +56240,7 @@ EOF
 
 
       echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:56243: checking size of short" >&5
+echo "configure:56244: checking size of short" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -56247,7 +56248,7 @@ else
   ac_cv_sizeof_short=2
 else
   cat > conftest.$ac_ext <<EOF
-#line 56251 "configure"
+#line 56252 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -56258,7 +56259,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:56262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:56263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -56278,7 +56279,7 @@ EOF
 
 
       echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:56282: checking size of long" >&5
+echo "configure:56283: checking size of long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -56286,7 +56287,7 @@ else
   ac_cv_sizeof_long=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 56290 "configure"
+#line 56291 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -56297,7 +56298,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:56301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:56302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -56317,12 +56318,12 @@ EOF
 
 
       echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:56321: checking for working const" >&5
+echo "configure:56322: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 56326 "configure"
+#line 56327 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -56371,7 +56372,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:56375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:56376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -56392,12 +56393,12 @@ EOF
 fi
 
       echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:56396: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:56397: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 56401 "configure"
+#line 56402 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -56406,7 +56407,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:56410: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:56411: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -56429,19 +56430,19 @@ fi
       # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:56433: checking for working alloca.h" >&5
+echo "configure:56434: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 56438 "configure"
+#line 56439 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:56445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:56446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -56462,12 +56463,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:56466: checking for alloca" >&5
+echo "configure:56467: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 56471 "configure"
+#line 56472 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -56495,7 +56496,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:56499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:56500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -56527,12 +56528,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:56531: checking whether alloca needs Cray hooks" >&5
+echo "configure:56532: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 56536 "configure"
+#line 56537 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -56557,12 +56558,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:56561: checking for $ac_func" >&5
+echo "configure:56562: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 56566 "configure"
+#line 56567 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -56585,7 +56586,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:56589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:56590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -56612,7 +56613,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:56616: checking stack direction for C alloca" >&5
+echo "configure:56617: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -56620,7 +56621,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 56624 "configure"
+#line 56625 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -56639,7 +56640,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:56643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:56644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -56661,7 +56662,7 @@ EOF
 fi
 
       echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:56665: checking for 8-bit clean memcmp" >&5
+echo "configure:56666: checking for 8-bit clean memcmp" >&5
 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -56669,7 +56670,7 @@ else
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 56673 "configure"
+#line 56674 "configure"
 #include "confdefs.h"
 
 main()
@@ -56679,7 +56680,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:56683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:56684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_memcmp_clean=yes
 else
@@ -56698,17 +56699,17 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
 
       ac_safe=`echo "stdarg.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for stdarg.h""... $ac_c" 1>&6
-echo "configure:56702: checking for stdarg.h" >&5
+echo "configure:56703: checking for stdarg.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 56707 "configure"
+#line 56708 "configure"
 #include "confdefs.h"
 #include <stdarg.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:56712: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:56713: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -56938,7 +56939,7 @@ EOF
   done
 
   echo $ac_n "checking for onig_init in -lonig""... $ac_c" 1>&6
-echo "configure:56942: checking for onig_init in -lonig" >&5
+echo "configure:56943: checking for onig_init in -lonig" >&5
 ac_lib_var=`echo onig'_'onig_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -56946,7 +56947,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lonig  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 56950 "configure"
+#line 56951 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -56957,7 +56958,7 @@ int main() {
 onig_init()
 ; return 0; }
 EOF
-if { (eval echo configure:56961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:56962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -57183,9 +57184,9 @@ fi
   done
 
       echo $ac_n "checking if oniguruma has an invalid entry for KOI8 encoding""... $ac_c" 1>&6
-echo "configure:57187: checking if oniguruma has an invalid entry for KOI8 encoding" >&5
+echo "configure:57188: checking if oniguruma has an invalid entry for KOI8 encoding" >&5
       cat > conftest.$ac_ext <<EOF
-#line 57189 "configure"
+#line 57190 "configure"
 #include "confdefs.h"
 
 #include <oniguruma.h>
@@ -57196,7 +57197,7 @@ return (int)(ONIG_ENCODING_KOI8 + 1);
       
 ; return 0; }
 EOF
-if { (eval echo configure:57200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:57201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
         echo "$ac_t""no" 1>&6
@@ -57494,7 +57495,7 @@ EOF
   done
 
   echo $ac_n "checking for mbfl_buffer_converter_new in -lmbfl""... $ac_c" 1>&6
-echo "configure:57498: checking for mbfl_buffer_converter_new in -lmbfl" >&5
+echo "configure:57499: checking for mbfl_buffer_converter_new in -lmbfl" >&5
 ac_lib_var=`echo mbfl'_'mbfl_buffer_converter_new | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -57502,7 +57503,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmbfl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 57506 "configure"
+#line 57507 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -57513,7 +57514,7 @@ int main() {
 mbfl_buffer_converter_new()
 ; return 0; }
 EOF
-if { (eval echo configure:57517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:57518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -58150,7 +58151,7 @@ fi
 php_with_mcrypt=no
 
 echo $ac_n "checking for mcrypt support""... $ac_c" 1>&6
-echo "configure:58154: checking for mcrypt support" >&5
+echo "configure:58155: checking for mcrypt support" >&5
 # Check whether --with-mcrypt or --without-mcrypt was given.
 if test "${with_mcrypt+set}" = set; then
   withval="$with_mcrypt"
@@ -58203,9 +58204,9 @@ if test "$PHP_MCRYPT" != "no"; then
   old_CPPFLAGS=$CPPFLAGS
   CPPFLAGS=-I$MCRYPT_DIR/include
   echo $ac_n "checking for libmcrypt version""... $ac_c" 1>&6
-echo "configure:58207: checking for libmcrypt version" >&5
+echo "configure:58208: checking for libmcrypt version" >&5
   cat > conftest.$ac_ext <<EOF
-#line 58209 "configure"
+#line 58210 "configure"
 #include "confdefs.h"
 
 #include <mcrypt.h>
@@ -58329,7 +58330,7 @@ rm -f conftest*
   done
 
   echo $ac_n "checking for mcrypt_module_open in -lmcrypt""... $ac_c" 1>&6
-echo "configure:58333: checking for mcrypt_module_open in -lmcrypt" >&5
+echo "configure:58334: checking for mcrypt_module_open in -lmcrypt" >&5
 ac_lib_var=`echo mcrypt'_'mcrypt_module_open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -58337,7 +58338,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 58341 "configure"
+#line 58342 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -58348,7 +58349,7 @@ int main() {
 mcrypt_module_open()
 ; return 0; }
 EOF
-if { (eval echo configure:58352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:58353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -58501,7 +58502,7 @@ else
   done
 
   echo $ac_n "checking for mcrypt_module_open in -lmcrypt""... $ac_c" 1>&6
-echo "configure:58505: checking for mcrypt_module_open in -lmcrypt" >&5
+echo "configure:58506: checking for mcrypt_module_open in -lmcrypt" >&5
 ac_lib_var=`echo mcrypt'_'mcrypt_module_open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -58509,7 +58510,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 58513 "configure"
+#line 58514 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -58520,7 +58521,7 @@ int main() {
 mcrypt_module_open()
 ; return 0; }
 EOF
-if { (eval echo configure:58524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:58525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -58993,7 +58994,7 @@ fi
 php_with_mssql=no
 
 echo $ac_n "checking for MSSQL support via FreeTDS""... $ac_c" 1>&6
-echo "configure:58997: checking for MSSQL support via FreeTDS" >&5
+echo "configure:58998: checking for MSSQL support via FreeTDS" >&5
 # Check whether --with-mssql or --without-mssql was given.
 if test "${with_mssql+set}" = set; then
   withval="$with_mssql"
@@ -59491,7 +59492,7 @@ EOF
   fi
 
   echo $ac_n "checking for dnet_addr in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:59495: checking for dnet_addr in -ldnet_stub" >&5
+echo "configure:59496: checking for dnet_addr in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_addr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -59499,7 +59500,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 59503 "configure"
+#line 59504 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -59510,7 +59511,7 @@ int main() {
 dnet_addr()
 ; return 0; }
 EOF
-if { (eval echo configure:59514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:59515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -59654,7 +59655,7 @@ fi
 php_with_mysql=no
 
 echo $ac_n "checking for MySQL support""... $ac_c" 1>&6
-echo "configure:59658: checking for MySQL support" >&5
+echo "configure:59659: checking for MySQL support" >&5
 # Check whether --with-mysql or --without-mysql was given.
 if test "${with_mysql+set}" = set; then
   withval="$with_mysql"
@@ -59698,7 +59699,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_mysql_sock=no
 
 echo $ac_n "checking for specified location of the MySQL UNIX socket""... $ac_c" 1>&6
-echo "configure:59702: checking for specified location of the MySQL UNIX socket" >&5
+echo "configure:59703: checking for specified location of the MySQL UNIX socket" >&5
 # Check whether --with-mysql-sock or --without-mysql-sock was given.
 if test "${with_mysql_sock+set}" = set; then
   withval="$with_mysql_sock"
@@ -59722,7 +59723,7 @@ if test -z "$PHP_ZLIB_DIR"; then
 php_with_zlib_dir=no
 
 echo $ac_n "checking for the location of libz""... $ac_c" 1>&6
-echo "configure:59726: checking for the location of libz" >&5
+echo "configure:59727: checking for the location of libz" >&5
 # Check whether --with-zlib-dir or --without-zlib-dir was given.
 if test "${with_zlib_dir+set}" = set; then
   withval="$with_zlib_dir"
@@ -59896,7 +59897,7 @@ Note that the MySQL client library is not bundled anymore!" 1>&2; exit 1; }
   done
 
   echo $ac_n "checking for mysql_close in -l$MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:59900: checking for mysql_close in -l$MYSQL_LIBNAME" >&5
+echo "configure:59901: checking for mysql_close in -l$MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $MYSQL_LIBNAME'_'mysql_close | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -59904,7 +59905,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 59908 "configure"
+#line 59909 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -59915,7 +59916,7 @@ int main() {
 mysql_close()
 ; return 0; }
 EOF
-if { (eval echo configure:59919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:59920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -60138,7 +60139,7 @@ else
   done
 
   echo $ac_n "checking for mysql_error in -l$MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:60142: checking for mysql_error in -l$MYSQL_LIBNAME" >&5
+echo "configure:60143: checking for mysql_error in -l$MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $MYSQL_LIBNAME'_'mysql_error | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -60146,7 +60147,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 60150 "configure"
+#line 60151 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -60157,7 +60158,7 @@ int main() {
 mysql_error()
 ; return 0; }
 EOF
-if { (eval echo configure:60161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:60162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -60312,7 +60313,7 @@ fi
   done
 
   echo $ac_n "checking for mysql_errno in -l$MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:60316: checking for mysql_errno in -l$MYSQL_LIBNAME" >&5
+echo "configure:60317: checking for mysql_errno in -l$MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $MYSQL_LIBNAME'_'mysql_errno | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -60320,7 +60321,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 60324 "configure"
+#line 60325 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -60331,7 +60332,7 @@ int main() {
 mysql_errno()
 ; return 0; }
 EOF
-if { (eval echo configure:60335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:60336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -60525,7 +60526,7 @@ fi
 
 if test "$PHP_MYSQL" != "no"; then
   echo $ac_n "checking for MySQL UNIX socket location""... $ac_c" 1>&6
-echo "configure:60529: checking for MySQL UNIX socket location" >&5
+echo "configure:60530: checking for MySQL UNIX socket location" >&5
   if test "$PHP_MYSQL_SOCK" != "no" && test "$PHP_MYSQL_SOCK" != "yes"; then
     MYSQL_SOCK=$PHP_MYSQL_SOCK
     cat >> confdefs.h <<EOF
@@ -60898,7 +60899,7 @@ fi
 php_with_mysqli=no
 
 echo $ac_n "checking for MySQLi support""... $ac_c" 1>&6
-echo "configure:60902: checking for MySQLi support" >&5
+echo "configure:60903: checking for MySQLi support" >&5
 # Check whether --with-mysqli or --without-mysqli was given.
 if test "${with_mysqli+set}" = set; then
   withval="$with_mysqli"
@@ -60942,7 +60943,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_embedded_mysqli=no
 
 echo $ac_n "checking whether to enable embedded MySQLi support""... $ac_c" 1>&6
-echo "configure:60946: checking whether to enable embedded MySQLi support" >&5
+echo "configure:60947: checking whether to enable embedded MySQLi support" >&5
 # Check whether --enable-embedded_mysqli or --disable-embedded_mysqli was given.
 if test "${enable_embedded_mysqli+set}" = set; then
   enableval="$enable_embedded_mysqli"
@@ -61093,7 +61094,7 @@ EOF
   done
 
   echo $ac_n "checking for mysql_set_server_option in -l$MYSQL_LIB_NAME""... $ac_c" 1>&6
-echo "configure:61097: checking for mysql_set_server_option in -l$MYSQL_LIB_NAME" >&5
+echo "configure:61098: checking for mysql_set_server_option in -l$MYSQL_LIB_NAME" >&5
 ac_lib_var=`echo $MYSQL_LIB_NAME'_'mysql_set_server_option | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -61101,7 +61102,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIB_NAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 61105 "configure"
+#line 61106 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -61112,7 +61113,7 @@ int main() {
 mysql_set_server_option()
 ; return 0; }
 EOF
-if { (eval echo configure:61116: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:61117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -61360,7 +61361,7 @@ EOF
   done
 
   echo $ac_n "checking for mysql_set_character_set in -l$MYSQL_LIB_NAME""... $ac_c" 1>&6
-echo "configure:61364: checking for mysql_set_character_set in -l$MYSQL_LIB_NAME" >&5
+echo "configure:61365: checking for mysql_set_character_set in -l$MYSQL_LIB_NAME" >&5
 ac_lib_var=`echo $MYSQL_LIB_NAME'_'mysql_set_character_set | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -61368,7 +61369,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIB_NAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 61372 "configure"
+#line 61373 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -61379,7 +61380,7 @@ int main() {
 mysql_set_character_set()
 ; return 0; }
 EOF
-if { (eval echo configure:61383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:61384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -61523,7 +61524,7 @@ fi
   done
 
   echo $ac_n "checking for mysql_stmt_next_result in -l$MYSQL_LIB_NAME""... $ac_c" 1>&6
-echo "configure:61527: checking for mysql_stmt_next_result in -l$MYSQL_LIB_NAME" >&5
+echo "configure:61528: checking for mysql_stmt_next_result in -l$MYSQL_LIB_NAME" >&5
 ac_lib_var=`echo $MYSQL_LIB_NAME'_'mysql_stmt_next_result | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -61531,7 +61532,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIB_NAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 61535 "configure"
+#line 61536 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -61542,7 +61543,7 @@ int main() {
 mysql_stmt_next_result()
 ; return 0; }
 EOF
-if { (eval echo configure:61546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:61547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -61946,7 +61947,7 @@ fi
 php_with_oci8=no
 
 echo $ac_n "checking for Oracle (OCI8) support""... $ac_c" 1>&6
-echo "configure:61950: checking for Oracle (OCI8) support" >&5
+echo "configure:61951: checking for Oracle (OCI8) support" >&5
 # Check whether --with-oci8 or --without-oci8 was given.
 if test "${with_oci8+set}" = set; then
   withval="$with_oci8"
@@ -61994,7 +61995,7 @@ if test "$PHP_OCI8" != "no"; then
 
   
   echo $ac_n "checking PHP version""... $ac_c" 1>&6
-echo "configure:61998: checking PHP version" >&5
+echo "configure:61999: checking PHP version" >&5
 
   tmp_version=$PHP_VERSION
   if test -z "$tmp_version"; then
@@ -62026,7 +62027,7 @@ echo "configure:61998: checking PHP version" >&5
 
   
   echo $ac_n "checking size of long int""... $ac_c" 1>&6
-echo "configure:62030: checking size of long int" >&5
+echo "configure:62031: checking size of long int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -62034,7 +62035,7 @@ else
   ac_cv_sizeof_long_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 62038 "configure"
+#line 62039 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -62045,7 +62046,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:62049: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:62050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_int=`cat conftestval`
 else
@@ -62065,7 +62066,7 @@ EOF
 
 
   echo $ac_n "checking checking if we're on a 64-bit platform""... $ac_c" 1>&6
-echo "configure:62069: checking checking if we're on a 64-bit platform" >&5
+echo "configure:62070: checking checking if we're on a 64-bit platform" >&5
   if test "$ac_cv_sizeof_long_int" = "4"; then
     echo "$ac_t""no" 1>&6
     PHP_OCI8_OH_LIBDIR=lib32 
@@ -62109,7 +62110,7 @@ echo "configure:62069: checking checking if we're on a 64-bit platform" >&5
   if test "$PHP_OCI8_INSTANT_CLIENT" = "no"; then
             
     echo $ac_n "checking Oracle ORACLE_HOME install directory""... $ac_c" 1>&6
-echo "configure:62113: checking Oracle ORACLE_HOME install directory" >&5
+echo "configure:62114: checking Oracle ORACLE_HOME install directory" >&5
 
     if test "$PHP_OCI8" = "yes"; then
       OCI8_DIR=$ORACLE_HOME
@@ -62120,7 +62121,7 @@ echo "configure:62113: checking Oracle ORACLE_HOME install directory" >&5
 
     
   echo $ac_n "checking ORACLE_HOME library validity""... $ac_c" 1>&6
-echo "configure:62124: checking ORACLE_HOME library validity" >&5
+echo "configure:62125: checking ORACLE_HOME library validity" >&5
   if test ! -d "$OCI8_DIR"; then
     { echo "configure: error: ${OCI8_DIR} is not a directory" 1>&2; exit 1; }
   fi
@@ -62461,7 +62462,7 @@ echo "configure:62124: checking ORACLE_HOME library validity" >&5
 
     
   echo $ac_n "checking Oracle version""... $ac_c" 1>&6
-echo "configure:62465: checking Oracle version" >&5
+echo "configure:62466: checking Oracle version" >&5
   if test -s "$OCI8_DIR/orainst/unix.rgs"; then
     OCI8_ORACLE_VERSION=`grep '"ocommon"' $OCI8_DIR/orainst/unix.rgs | $PHP_OCI8_SED 's/  */:/g' | cut -d: -f 6 | cut -c 2-4`
     test -z "$OCI8_ORACLE_VERSION" && OCI8_ORACLE_VERSION=7.3
@@ -62591,7 +62592,7 @@ echo "configure:62465: checking Oracle version" >&5
   done
 
   echo $ac_n "checking for OCIEnvNlsCreate in -lclntsh""... $ac_c" 1>&6
-echo "configure:62595: checking for OCIEnvNlsCreate in -lclntsh" >&5
+echo "configure:62596: checking for OCIEnvNlsCreate in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIEnvNlsCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -62599,7 +62600,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 62603 "configure"
+#line 62604 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -62610,7 +62611,7 @@ int main() {
 OCIEnvNlsCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:62614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:62615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -63047,7 +63048,7 @@ EOF
   else
             
     echo $ac_n "checking Oracle Instant Client directory""... $ac_c" 1>&6
-echo "configure:63051: checking Oracle Instant Client directory" >&5
+echo "configure:63052: checking Oracle Instant Client directory" >&5
 
     if test "$PHP_OCI8_INSTANT_CLIENT" = "yes"; then
                                     PHP_OCI8_INSTANT_CLIENT=`ls -d /usr/lib/oracle/*/client${PHP_OCI8_IC_LIBDIR_SUFFIX}/lib/libclntsh.* 2> /dev/null | tail -1 | $PHP_OCI8_SED -e 's#/libclntsh[^/]*##'`
@@ -63060,7 +63061,7 @@ echo "configure:63051: checking Oracle Instant Client directory" >&5
     OCI8_DIR=$PHP_OCI8_INSTANT_CLIENT
 
     echo $ac_n "checking Oracle Instant Client SDK header directory""... $ac_c" 1>&6
-echo "configure:63064: checking Oracle Instant Client SDK header directory" >&5
+echo "configure:63065: checking Oracle Instant Client SDK header directory" >&5
 
         OCISDKRPMINC=`echo "$PHP_OCI8_INSTANT_CLIENT" | $PHP_OCI8_SED -e 's!^/usr/lib/oracle/\(.*\)/client\('${PHP_OCI8_IC_LIBDIR_SUFFIX}'\)*/lib/*$!/usr/include/oracle/\1/client\2!'`
 
@@ -63269,7 +63270,7 @@ echo "configure:63064: checking Oracle Instant Client SDK header directory" >&5
 
     
   echo $ac_n "checking Oracle Instant Client version""... $ac_c" 1>&6
-echo "configure:63273: checking Oracle Instant Client version" >&5
+echo "configure:63274: checking Oracle Instant Client version" >&5
   if test -f $PHP_OCI8_INSTANT_CLIENT/libnnz11.$SHLIB_SUFFIX_NAME; then
     if test -f $PHP_OCI8_INSTANT_CLIENT/libclntsh.$SHLIB_SUFFIX_NAME.11.1; then
       if test ! -f $PHP_OCI8_INSTANT_CLIENT/libclntsh.$SHLIB_SUFFIX_NAME; then
@@ -63748,7 +63749,7 @@ esac
 
   if test "$PHP_ADABAS" != "no"; then
     echo $ac_n "checking for Adabas support""... $ac_c" 1>&6
-echo "configure:63752: checking for Adabas support" >&5
+echo "configure:63753: checking for Adabas support" >&5
     if test "$PHP_ADABAS" = "yes"; then
       PHP_ADABAS=/usr/local
     fi
@@ -63951,7 +63952,7 @@ esac
 
   if test "$PHP_SAPDB" != "no"; then
     echo $ac_n "checking for SAP DB support""... $ac_c" 1>&6
-echo "configure:63955: checking for SAP DB support" >&5
+echo "configure:63956: checking for SAP DB support" >&5
     if test "$PHP_SAPDB" = "yes"; then
       PHP_SAPDB=/usr/local
     fi
@@ -64084,7 +64085,7 @@ esac
 
   if test "$PHP_SOLID" != "no"; then
     echo $ac_n "checking for Solid support""... $ac_c" 1>&6
-echo "configure:64088: checking for Solid support" >&5
+echo "configure:64089: checking for Solid support" >&5
     if test "$PHP_SOLID" = "yes"; then
       PHP_SOLID=/usr/local/solid
     fi
@@ -64111,7 +64112,7 @@ EOF
     echo "$ac_t""$ext_output" 1>&6
     
   echo $ac_n "checking Solid library file""... $ac_c" 1>&6
-echo "configure:64115: checking Solid library file" >&5  
+echo "configure:64116: checking Solid library file" >&5  
   ac_solid_uname_r=`uname -r 2>/dev/null`
   ac_solid_uname_s=`uname -s 2>/dev/null`
   case $ac_solid_uname_s in
@@ -64232,7 +64233,7 @@ esac
 
   if test "$PHP_IBM_DB2" != "no"; then
     echo $ac_n "checking for IBM DB2 support""... $ac_c" 1>&6
-echo "configure:64236: checking for IBM DB2 support" >&5
+echo "configure:64237: checking for IBM DB2 support" >&5
     if test "$PHP_IBM_DB2" = "yes"; then
       ODBC_INCDIR=/home/db2inst1/sqllib/include
       ODBC_LIBDIR=/home/db2inst1/sqllib/lib
@@ -64263,7 +64264,7 @@ fi
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 64267 "configure"
+#line 64268 "configure"
 #include "confdefs.h"
 
     
@@ -64274,7 +64275,7 @@ else
     }
   
 EOF
-if { (eval echo configure:64278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:64279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -64355,7 +64356,7 @@ esac
 
   if test "$PHP_ODBCROUTER" != "no"; then
     echo $ac_n "checking for ODBCRouter.com support""... $ac_c" 1>&6
-echo "configure:64359: checking for ODBCRouter.com support" >&5
+echo "configure:64360: checking for ODBCRouter.com support" >&5
     if test "$PHP_ODBCROUTER" = "yes"; then
       PHP_ODBCROUTER=/usr
     fi
@@ -64419,7 +64420,7 @@ esac
 
   if test "$PHP_EMPRESS" != "no"; then
     echo $ac_n "checking for Empress support""... $ac_c" 1>&6
-echo "configure:64423: checking for Empress support" >&5
+echo "configure:64424: checking for Empress support" >&5
     if test "$PHP_EMPRESS" = "yes"; then
       ODBC_INCDIR=$EMPRESSPATH/include/odbc
       ODBC_LIBDIR=$EMPRESSPATH/shlib
@@ -64437,7 +64438,7 @@ EOF
     echo "$ac_t""$ext_output" 1>&6
     
   echo $ac_n "checking Empress library file""... $ac_c" 1>&6
-echo "configure:64441: checking Empress library file" >&5
+echo "configure:64442: checking Empress library file" >&5
   ODBC_LIBS=`echo $ODBC_LIBDIR/libempodbccl.so | cut -d' ' -f1`
   if test ! -f $ODBC_LIBS; then
     ODBC_LIBS=`echo $ODBC_LIBDIR/libempodbccl.so | cut -d' ' -f1`
@@ -64493,7 +64494,7 @@ esac
 
   if test "$PHP_EMPRESS_BCS" != "no"; then
     echo $ac_n "checking for Empress local access support""... $ac_c" 1>&6
-echo "configure:64497: checking for Empress local access support" >&5
+echo "configure:64498: checking for Empress local access support" >&5
     if test "$PHP_EMPRESS_BCS" = "yes"; then
       ODBC_INCDIR=$EMPRESSPATH/include/odbc
       ODBC_LIBDIR=$EMPRESSPATH/shlib
@@ -64527,7 +64528,7 @@ EOF
     echo "$ac_t""$ext_output" 1>&6
     
   echo $ac_n "checking Empress local access library file""... $ac_c" 1>&6
-echo "configure:64531: checking Empress local access library file" >&5
+echo "configure:64532: checking Empress local access library file" >&5
   ODBCBCS_LIBS=`echo $ODBC_LIBDIR/libempodbcbcs.a | cut -d' ' -f1`
   if test ! -f $ODBCBCS_LIBS; then
     ODBCBCS_LIBS=`echo $ODBC_LIBDIR/libempodbcbcs.a | cut -d' ' -f1`
@@ -64583,7 +64584,7 @@ esac
   
   if test "$PHP_BIRDSTEP" != "no"; then
     echo $ac_n "checking for Birdstep support""... $ac_c" 1>&6
-echo "configure:64587: checking for Birdstep support" >&5
+echo "configure:64588: checking for Birdstep support" >&5
     if test "$PHP_BIRDSTEP" = "yes"; then
         ODBC_INCDIR=/usr/local/birdstep/include
         ODBC_LIBDIR=/usr/local/birdstep/lib
@@ -64695,7 +64696,7 @@ esac
 
   if test "$PHP_CUSTOM_ODBC" != "no"; then
     echo $ac_n "checking for a custom ODBC support""... $ac_c" 1>&6
-echo "configure:64699: checking for a custom ODBC support" >&5
+echo "configure:64700: checking for a custom ODBC support" >&5
     if test "$PHP_CUSTOM_ODBC" = "yes"; then
       PHP_CUSTOM_ODBC=/usr/local
     fi
@@ -64759,7 +64760,7 @@ esac
 
   if test "$PHP_IODBC" != "no"; then
     echo $ac_n "checking for iODBC support""... $ac_c" 1>&6
-echo "configure:64763: checking for iODBC support" >&5
+echo "configure:64764: checking for iODBC support" >&5
     if test "$PHP_IODBC" = "yes"; then
       PHP_IODBC=/usr/local
     fi
@@ -64905,7 +64906,7 @@ esac
 
   if test "$PHP_ESOOB" != "no"; then
     echo $ac_n "checking for Easysoft ODBC-ODBC Bridge support""... $ac_c" 1>&6
-echo "configure:64909: checking for Easysoft ODBC-ODBC Bridge support" >&5
+echo "configure:64910: checking for Easysoft ODBC-ODBC Bridge support" >&5
     if test "$PHP_ESOOB" = "yes"; then
       PHP_ESOOB=/usr/local/easysoft/oob/client
     fi
@@ -64969,7 +64970,7 @@ esac
 
   if test "$PHP_UNIXODBC" != "no"; then
     echo $ac_n "checking for unixODBC support""... $ac_c" 1>&6
-echo "configure:64973: checking for unixODBC support" >&5
+echo "configure:64974: checking for unixODBC support" >&5
     if test "$PHP_UNIXODBC" = "yes"; then
       PHP_UNIXODBC=/usr/local
     fi
@@ -65038,7 +65039,7 @@ esac
 
   if test "$PHP_DBMAKER" != "no"; then
     echo $ac_n "checking for DBMaker support""... $ac_c" 1>&6
-echo "configure:65042: checking for DBMaker support" >&5
+echo "configure:65043: checking for DBMaker support" >&5
     if test "$PHP_DBMAKER" = "yes"; then
       # find dbmaker's home directory
       DBMAKER_HOME=`grep "^dbmaker:" /etc/passwd | $AWK -F: '{print $6}'`
@@ -65600,7 +65601,7 @@ fi
 php_enable_pcntl=no
 
 echo $ac_n "checking whether to enable pcntl support""... $ac_c" 1>&6
-echo "configure:65604: checking whether to enable pcntl support" >&5
+echo "configure:65605: checking whether to enable pcntl support" >&5
 # Check whether --enable-pcntl or --disable-pcntl was given.
 if test "${enable_pcntl+set}" = set; then
   enableval="$enable_pcntl"
@@ -65644,12 +65645,12 @@ if test "$PHP_PCNTL" != "no"; then
   for ac_func in fork
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:65648: checking for $ac_func" >&5
+echo "configure:65649: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 65653 "configure"
+#line 65654 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -65672,7 +65673,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:65676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:65677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -65703,12 +65704,12 @@ done
   for ac_func in waitpid
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:65707: checking for $ac_func" >&5
+echo "configure:65708: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 65712 "configure"
+#line 65713 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -65731,7 +65732,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:65735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:65736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -65762,12 +65763,12 @@ done
   for ac_func in sigaction
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:65766: checking for $ac_func" >&5
+echo "configure:65767: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 65771 "configure"
+#line 65772 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -65790,7 +65791,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:65794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:65795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -65821,12 +65822,12 @@ done
   for ac_func in getpriority setpriority wait3 sigprocmask sigwaitinfo sigtimedwait
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:65825: checking for $ac_func" >&5
+echo "configure:65826: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 65830 "configure"
+#line 65831 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -65849,7 +65850,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:65853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:65854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -66174,7 +66175,7 @@ fi
 php_enable_pdo=yes
 
 echo $ac_n "checking whether to enable PDO support""... $ac_c" 1>&6
-echo "configure:66178: checking whether to enable PDO support" >&5
+echo "configure:66179: checking whether to enable PDO support" >&5
 # Check whether --enable-pdo or --disable-pdo was given.
 if test "${enable_pdo+set}" = set; then
   enableval="$enable_pdo"
@@ -66608,7 +66609,7 @@ fi
 php_with_pdo_dblib=no
 
 echo $ac_n "checking for PDO_DBLIB support via FreeTDS""... $ac_c" 1>&6
-echo "configure:66612: checking for PDO_DBLIB support via FreeTDS" >&5
+echo "configure:66613: checking for PDO_DBLIB support via FreeTDS" >&5
 # Check whether --with-pdo-dblib or --without-pdo-dblib was given.
 if test "${with_pdo_dblib+set}" = set; then
   withval="$with_pdo_dblib"
@@ -66825,13 +66826,13 @@ if test "$PHP_PDO_DBLIB" != "no"; then
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:66829: checking for PDO includes" >&5
+echo "configure:66830: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:66835: checking for PDO includes" >&5
+echo "configure:66836: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -67145,7 +67146,7 @@ EOF
   fi
 
   echo $ac_n "checking for dnet_addr in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:67149: checking for dnet_addr in -ldnet_stub" >&5
+echo "configure:67150: checking for dnet_addr in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_addr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -67153,7 +67154,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 67157 "configure"
+#line 67158 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -67164,7 +67165,7 @@ int main() {
 dnet_addr()
 ; return 0; }
 EOF
-if { (eval echo configure:67168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:67169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -67325,7 +67326,7 @@ fi
 php_with_pdo_firebird=no
 
 echo $ac_n "checking for Firebird support for PDO""... $ac_c" 1>&6
-echo "configure:67329: checking for Firebird support for PDO" >&5
+echo "configure:67330: checking for Firebird support for PDO" >&5
 # Check whether --with-pdo-firebird or --without-pdo-firebird was given.
 if test "${with_pdo_firebird+set}" = set; then
   withval="$with_pdo_firebird"
@@ -67479,7 +67480,7 @@ if test "$PHP_PDO_FIREBIRD" != "no"; then
   done
 
   echo $ac_n "checking for isc_detach_database in -lfbclient""... $ac_c" 1>&6
-echo "configure:67483: checking for isc_detach_database in -lfbclient" >&5
+echo "configure:67484: checking for isc_detach_database in -lfbclient" >&5
 ac_lib_var=`echo fbclient'_'isc_detach_database | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -67487,7 +67488,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lfbclient  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 67491 "configure"
+#line 67492 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -67498,7 +67499,7 @@ int main() {
 isc_detach_database()
 ; return 0; }
 EOF
-if { (eval echo configure:67502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:67503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -67625,7 +67626,7 @@ else
   done
 
   echo $ac_n "checking for isc_detach_database in -lgds""... $ac_c" 1>&6
-echo "configure:67629: checking for isc_detach_database in -lgds" >&5
+echo "configure:67630: checking for isc_detach_database in -lgds" >&5
 ac_lib_var=`echo gds'_'isc_detach_database | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -67633,7 +67634,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgds  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 67637 "configure"
+#line 67638 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -67644,7 +67645,7 @@ int main() {
 isc_detach_database()
 ; return 0; }
 EOF
-if { (eval echo configure:67648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:67649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -67771,7 +67772,7 @@ else
   done
 
   echo $ac_n "checking for isc_detach_database in -lib_util""... $ac_c" 1>&6
-echo "configure:67775: checking for isc_detach_database in -lib_util" >&5
+echo "configure:67776: checking for isc_detach_database in -lib_util" >&5
 ac_lib_var=`echo ib_util'_'isc_detach_database | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -67779,7 +67780,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lib_util  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 67783 "configure"
+#line 67784 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -67790,7 +67791,7 @@ int main() {
 isc_detach_database()
 ; return 0; }
 EOF
-if { (eval echo configure:67794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:67795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -67835,13 +67836,13 @@ fi
  
   
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:67839: checking for PDO includes" >&5
+echo "configure:67840: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:67845: checking for PDO includes" >&5
+echo "configure:67846: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -68313,7 +68314,7 @@ fi
 php_with_pdo_mysql=no
 
 echo $ac_n "checking for MySQL support for PDO""... $ac_c" 1>&6
-echo "configure:68317: checking for MySQL support for PDO" >&5
+echo "configure:68318: checking for MySQL support for PDO" >&5
 # Check whether --with-pdo-mysql or --without-pdo-mysql was given.
 if test "${with_pdo_mysql+set}" = set; then
   withval="$with_pdo_mysql"
@@ -68358,7 +68359,7 @@ if test -z "$PHP_ZLIB_DIR"; then
 php_with_zlib_dir=no
 
 echo $ac_n "checking for the location of libz""... $ac_c" 1>&6
-echo "configure:68362: checking for the location of libz" >&5
+echo "configure:68363: checking for the location of libz" >&5
 # Check whether --with-zlib-dir or --without-zlib-dir was given.
 if test "${with_zlib_dir+set}" = set; then
   withval="$with_zlib_dir"
@@ -68422,14 +68423,14 @@ EOF
 
 
     echo $ac_n "checking for mysql_config""... $ac_c" 1>&6
-echo "configure:68426: checking for mysql_config" >&5
+echo "configure:68427: checking for mysql_config" >&5
     if test -n "$PDO_MYSQL_CONFIG"; then
       echo "$ac_t""$PDO_MYSQL_CONFIG" 1>&6
       if test "x$SED" = "x"; then
         # Extract the first word of "sed", so it can be a program name with args.
 set dummy sed; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:68433: checking for $ac_word" >&5
+echo "configure:68434: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SED'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -68473,7 +68474,7 @@ fi
     elif test -n "$PDO_MYSQL_DIR"; then
       echo "$ac_t""not found" 1>&6
       echo $ac_n "checking for mysql install under $PDO_MYSQL_DIR""... $ac_c" 1>&6
-echo "configure:68477: checking for mysql install under $PDO_MYSQL_DIR" >&5
+echo "configure:68478: checking for mysql install under $PDO_MYSQL_DIR" >&5
       if test -r $PDO_MYSQL_DIR/include/mysql; then
         PDO_MYSQL_INC_DIR=$PDO_MYSQL_DIR/include/mysql
       else
@@ -68627,7 +68628,7 @@ echo "configure:68477: checking for mysql install under $PDO_MYSQL_DIR" >&5
   done
 
   echo $ac_n "checking for mysql_query in -l$PDO_MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:68631: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
+echo "configure:68632: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $PDO_MYSQL_LIBNAME'_'mysql_query | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -68635,7 +68636,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$PDO_MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 68639 "configure"
+#line 68640 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -68646,7 +68647,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:68650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:68651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -68999,7 +69000,7 @@ else
   done
 
   echo $ac_n "checking for mysql_query in -l$PDO_MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:69003: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
+echo "configure:69004: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $PDO_MYSQL_LIBNAME'_'mysql_query | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -69007,7 +69008,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$PDO_MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 69011 "configure"
+#line 69012 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -69018,7 +69019,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:69022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:69023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -69173,7 +69174,7 @@ fi
   done
 
   echo $ac_n "checking for mysql_query in -l$PDO_MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:69177: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
+echo "configure:69178: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $PDO_MYSQL_LIBNAME'_'mysql_query | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -69181,7 +69182,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$PDO_MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 69185 "configure"
+#line 69186 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -69192,7 +69193,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:69196: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:69197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -69366,12 +69367,12 @@ fi
     for ac_func in mysql_commit mysql_stmt_prepare mysql_next_result mysql_sqlstate
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:69370: checking for $ac_func" >&5
+echo "configure:69371: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 69375 "configure"
+#line 69376 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -69394,7 +69395,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:69398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:69399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -69424,13 +69425,13 @@ done
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:69428: checking for PDO includes" >&5
+echo "configure:69429: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:69434: checking for PDO includes" >&5
+echo "configure:69435: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -69815,7 +69816,7 @@ SUPPORTED_LIB_VERS="9.0 10.1 11.1"  # This caters for all Oracle 9.x, 10.x and 1
 php_with_pdo_oci=no
 
 echo $ac_n "checking Oracle OCI support for PDO""... $ac_c" 1>&6
-echo "configure:69819: checking Oracle OCI support for PDO" >&5
+echo "configure:69820: checking Oracle OCI support for PDO" >&5
 # Check whether --with-pdo-oci or --without-pdo-oci was given.
 if test "${with_pdo_oci+set}" = set; then
   withval="$with_pdo_oci"
@@ -69862,7 +69863,7 @@ if test "$PHP_PDO_OCI" != "no"; then
   fi
 
   echo $ac_n "checking Oracle Install-Dir""... $ac_c" 1>&6
-echo "configure:69866: checking Oracle Install-Dir" >&5
+echo "configure:69867: checking Oracle Install-Dir" >&5
   if test "$PHP_PDO_OCI" = "yes" || test -z "$PHP_PDO_OCI"; then
     PDO_OCI_DIR=$ORACLE_HOME
   else
@@ -69871,7 +69872,7 @@ echo "configure:69866: checking Oracle Install-Dir" >&5
   echo "$ac_t""$PHP_PDO_OCI" 1>&6
 
   echo $ac_n "checking if that is sane""... $ac_c" 1>&6
-echo "configure:69875: checking if that is sane" >&5
+echo "configure:69876: checking if that is sane" >&5
   if test -z "$PDO_OCI_DIR"; then
     { echo "configure: error: 
 You need to tell me where to find your Oracle Instant Client SDK, or set ORACLE_HOME.
@@ -69884,7 +69885,7 @@ You need to tell me where to find your Oracle Instant Client SDK, or set ORACLE_
     PDO_OCI_IC_PREFIX="`echo $PDO_OCI_DIR | cut -d, -f2`"
     PDO_OCI_IC_VERS="`echo $PDO_OCI_DIR | cut -d, -f3`"
     echo $ac_n "checking for oci.h""... $ac_c" 1>&6
-echo "configure:69888: checking for oci.h" >&5
+echo "configure:69889: checking for oci.h" >&5
     if test -f $PDO_OCI_IC_PREFIX/include/oracle/$PDO_OCI_IC_VERS/client/oci.h ; then
       
   if test "$PDO_OCI_IC_PREFIX/include/oracle/$PDO_OCI_IC_VERS/client" != "/usr/include"; then
@@ -70033,7 +70034,7 @@ echo "configure:69888: checking for oci.h" >&5
   else
     
   echo $ac_n "checking size of long int""... $ac_c" 1>&6
-echo "configure:70037: checking size of long int" >&5
+echo "configure:70038: checking size of long int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -70041,7 +70042,7 @@ else
   ac_cv_sizeof_long_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 70045 "configure"
+#line 70046 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -70052,7 +70053,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:70056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:70057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_int=`cat conftestval`
 else
@@ -70072,7 +70073,7 @@ EOF
 
 
   echo $ac_n "checking if we're on a 64-bit platform""... $ac_c" 1>&6
-echo "configure:70076: checking if we're on a 64-bit platform" >&5
+echo "configure:70077: checking if we're on a 64-bit platform" >&5
   if test "$ac_cv_sizeof_long_int" = "4" ; then
     echo "$ac_t""no" 1>&6
     TMP_PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib32"
@@ -70082,7 +70083,7 @@ echo "configure:70076: checking if we're on a 64-bit platform" >&5
   fi
 
   echo $ac_n "checking OCI8 libraries dir""... $ac_c" 1>&6
-echo "configure:70086: checking OCI8 libraries dir" >&5
+echo "configure:70087: checking OCI8 libraries dir" >&5
   if test -d "$PDO_OCI_DIR/lib" && test ! -d "$PDO_OCI_DIR/lib32"; then
     PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib"
   elif test ! -d "$PDO_OCI_DIR/lib" && test -d "$PDO_OCI_DIR/lib32"; then
@@ -70449,7 +70450,7 @@ echo "configure:70086: checking OCI8 libraries dir" >&5
     fi
     
   echo $ac_n "checking Oracle version""... $ac_c" 1>&6
-echo "configure:70453: checking Oracle version" >&5
+echo "configure:70454: checking Oracle version" >&5
   for OCI_VER in $SUPPORTED_LIB_VERS; do
     if test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.$OCI_VER; then
       PDO_OCI_VERSION="$OCI_VER"
@@ -70631,7 +70632,7 @@ echo "configure:70453: checking Oracle version" >&5
   done
 
   echo $ac_n "checking for OCIEnvCreate in -lclntsh""... $ac_c" 1>&6
-echo "configure:70635: checking for OCIEnvCreate in -lclntsh" >&5
+echo "configure:70636: checking for OCIEnvCreate in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIEnvCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -70639,7 +70640,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 70643 "configure"
+#line 70644 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -70650,7 +70651,7 @@ int main() {
 OCIEnvCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:70654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:70655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -70784,7 +70785,7 @@ fi
   done
 
   echo $ac_n "checking for OCIEnvNlsCreate in -lclntsh""... $ac_c" 1>&6
-echo "configure:70788: checking for OCIEnvNlsCreate in -lclntsh" >&5
+echo "configure:70789: checking for OCIEnvNlsCreate in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIEnvNlsCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -70792,7 +70793,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 70796 "configure"
+#line 70797 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -70803,7 +70804,7 @@ int main() {
 OCIEnvNlsCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:70807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:70808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -70937,7 +70938,7 @@ fi
   done
 
   echo $ac_n "checking for OCILobIsTemporary in -lclntsh""... $ac_c" 1>&6
-echo "configure:70941: checking for OCILobIsTemporary in -lclntsh" >&5
+echo "configure:70942: checking for OCILobIsTemporary in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCILobIsTemporary | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -70945,7 +70946,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 70949 "configure"
+#line 70950 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -70956,7 +70957,7 @@ int main() {
 OCILobIsTemporary()
 ; return 0; }
 EOF
-if { (eval echo configure:70960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:70961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -71086,7 +71087,7 @@ else
   done
 
   echo $ac_n "checking for OCILobIsTemporary in -locijdbc8""... $ac_c" 1>&6
-echo "configure:71090: checking for OCILobIsTemporary in -locijdbc8" >&5
+echo "configure:71091: checking for OCILobIsTemporary in -locijdbc8" >&5
 ac_lib_var=`echo ocijdbc8'_'OCILobIsTemporary | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -71094,7 +71095,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-locijdbc8  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 71098 "configure"
+#line 71099 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -71105,7 +71106,7 @@ int main() {
 OCILobIsTemporary()
 ; return 0; }
 EOF
-if { (eval echo configure:71109: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:71110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -71266,7 +71267,7 @@ fi
   done
 
   echo $ac_n "checking for OCICollAssign in -lclntsh""... $ac_c" 1>&6
-echo "configure:71270: checking for OCICollAssign in -lclntsh" >&5
+echo "configure:71271: checking for OCICollAssign in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCICollAssign | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -71274,7 +71275,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 71278 "configure"
+#line 71279 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -71285,7 +71286,7 @@ int main() {
 OCICollAssign()
 ; return 0; }
 EOF
-if { (eval echo configure:71289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:71290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -71419,7 +71420,7 @@ fi
   done
 
   echo $ac_n "checking for OCIStmtFetch2 in -lclntsh""... $ac_c" 1>&6
-echo "configure:71423: checking for OCIStmtFetch2 in -lclntsh" >&5
+echo "configure:71424: checking for OCIStmtFetch2 in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIStmtFetch2 | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -71427,7 +71428,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 71431 "configure"
+#line 71432 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -71438,7 +71439,7 @@ int main() {
 OCIStmtFetch2()
 ; return 0; }
 EOF
-if { (eval echo configure:71442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:71443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -71477,13 +71478,13 @@ fi
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:71481: checking for PDO includes" >&5
+echo "configure:71482: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:71487: checking for PDO includes" >&5
+echo "configure:71488: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -71851,7 +71852,7 @@ fi
 php_with_pdo_odbc=no
 
 echo $ac_n "checking for ODBC v3 support for PDO""... $ac_c" 1>&6
-echo "configure:71855: checking for ODBC v3 support for PDO" >&5
+echo "configure:71856: checking for ODBC v3 support for PDO" >&5
 # Check whether --with-pdo-odbc or --without-pdo-odbc was given.
 if test "${with_pdo_odbc+set}" = set; then
   withval="$with_pdo_odbc"
@@ -71903,13 +71904,13 @@ if test "$PHP_PDO_ODBC" != "no"; then
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:71907: checking for PDO includes" >&5
+echo "configure:71908: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:71913: checking for PDO includes" >&5
+echo "configure:71914: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -71930,7 +71931,7 @@ echo "$ac_t""$pdo_inc_path" 1>&6
   
 
   echo $ac_n "checking for selected PDO ODBC flavour""... $ac_c" 1>&6
-echo "configure:71934: checking for selected PDO ODBC flavour" >&5
+echo "configure:71935: checking for selected PDO ODBC flavour" >&5
 
   pdo_odbc_flavour="`echo $PHP_PDO_ODBC | cut -d, -f1`"
   pdo_odbc_dir="`echo $PHP_PDO_ODBC | cut -d, -f2`"
@@ -72009,7 +72010,7 @@ echo "configure:71934: checking for selected PDO ODBC flavour" >&5
 
   
   echo $ac_n "checking for odbc.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72013: checking for odbc.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72014: checking for odbc.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/odbc.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72023,7 +72024,7 @@ EOF
 
   
   echo $ac_n "checking for odbcsdk.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72027: checking for odbcsdk.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72028: checking for odbcsdk.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/odbcsdk.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72037,7 +72038,7 @@ EOF
 
   
   echo $ac_n "checking for iodbc.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72041: checking for iodbc.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72042: checking for iodbc.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/iodbc.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72051,7 +72052,7 @@ EOF
 
   
   echo $ac_n "checking for sqlunix.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72055: checking for sqlunix.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72056: checking for sqlunix.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sqlunix.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72065,7 +72066,7 @@ EOF
 
   
   echo $ac_n "checking for sqltypes.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72069: checking for sqltypes.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72070: checking for sqltypes.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sqltypes.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72079,7 +72080,7 @@ EOF
 
   
   echo $ac_n "checking for sqlucode.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72083: checking for sqlucode.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72084: checking for sqlucode.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sqlucode.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72093,7 +72094,7 @@ EOF
 
   
   echo $ac_n "checking for sql.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72097: checking for sql.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72098: checking for sql.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sql.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72107,7 +72108,7 @@ EOF
 
   
   echo $ac_n "checking for isql.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72111: checking for isql.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72112: checking for isql.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/isql.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72121,7 +72122,7 @@ EOF
 
   
   echo $ac_n "checking for sqlext.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72125: checking for sqlext.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72126: checking for sqlext.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sqlext.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72135,7 +72136,7 @@ EOF
 
   
   echo $ac_n "checking for isqlext.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72139: checking for isqlext.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72140: checking for isqlext.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/isqlext.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72149,7 +72150,7 @@ EOF
 
   
   echo $ac_n "checking for udbcext.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72153: checking for udbcext.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72154: checking for udbcext.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/udbcext.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72163,7 +72164,7 @@ EOF
 
   
   echo $ac_n "checking for sqlcli1.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72167: checking for sqlcli1.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72168: checking for sqlcli1.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sqlcli1.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72177,7 +72178,7 @@ EOF
 
   
   echo $ac_n "checking for LibraryManager.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72181: checking for LibraryManager.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72182: checking for LibraryManager.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/LibraryManager.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72191,7 +72192,7 @@ EOF
 
   
   echo $ac_n "checking for cli0core.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72195: checking for cli0core.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72196: checking for cli0core.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/cli0core.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72205,7 +72206,7 @@ EOF
 
   
   echo $ac_n "checking for cli0ext.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72209: checking for cli0ext.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72210: checking for cli0ext.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/cli0ext.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72219,7 +72220,7 @@ EOF
 
   
   echo $ac_n "checking for cli0cli.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72223: checking for cli0cli.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72224: checking for cli0cli.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/cli0cli.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72233,7 +72234,7 @@ EOF
 
   
   echo $ac_n "checking for cli0defs.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72237: checking for cli0defs.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72238: checking for cli0defs.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/cli0defs.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72247,7 +72248,7 @@ EOF
 
   
   echo $ac_n "checking for cli0env.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:72251: checking for cli0env.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:72252: checking for cli0env.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/cli0env.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -72453,7 +72454,7 @@ EOF
   done
 
   echo $ac_n "checking for SQLBindCol in -l$pdo_odbc_def_lib""... $ac_c" 1>&6
-echo "configure:72457: checking for SQLBindCol in -l$pdo_odbc_def_lib" >&5
+echo "configure:72458: checking for SQLBindCol in -l$pdo_odbc_def_lib" >&5
 ac_lib_var=`echo $pdo_odbc_def_lib'_'SQLBindCol | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -72461,7 +72462,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$pdo_odbc_def_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 72465 "configure"
+#line 72466 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -72472,7 +72473,7 @@ int main() {
 SQLBindCol()
 ; return 0; }
 EOF
-if { (eval echo configure:72476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:72477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -72587,7 +72588,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   done
 
   echo $ac_n "checking for SQLAllocHandle in -l$pdo_odbc_def_lib""... $ac_c" 1>&6
-echo "configure:72591: checking for SQLAllocHandle in -l$pdo_odbc_def_lib" >&5
+echo "configure:72592: checking for SQLAllocHandle in -l$pdo_odbc_def_lib" >&5
 ac_lib_var=`echo $pdo_odbc_def_lib'_'SQLAllocHandle | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -72595,7 +72596,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$pdo_odbc_def_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 72599 "configure"
+#line 72600 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -72606,7 +72607,7 @@ int main() {
 SQLAllocHandle()
 ; return 0; }
 EOF
-if { (eval echo configure:72610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:72611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -72980,7 +72981,7 @@ fi
 php_with_pdo_pgsql=no
 
 echo $ac_n "checking for PostgreSQL support for PDO""... $ac_c" 1>&6
-echo "configure:72984: checking for PostgreSQL support for PDO" >&5
+echo "configure:72985: checking for PostgreSQL support for PDO" >&5
 # Check whether --with-pdo-pgsql or --without-pdo-pgsql was given.
 if test "${with_pdo_pgsql+set}" = set; then
   withval="$with_pdo_pgsql"
@@ -73039,7 +73040,7 @@ if test "$PHP_PDO_PGSQL" != "no"; then
 
 
   echo $ac_n "checking for pg_config""... $ac_c" 1>&6
-echo "configure:73043: checking for pg_config" >&5
+echo "configure:73044: checking for pg_config" >&5
   for i in $PHP_PDO_PGSQL $PHP_PDO_PGSQL/bin /usr/local/pgsql/bin /usr/local/bin /usr/bin ""; do
     if test -x $i/pg_config; then
       PG_CONFIG="$i/pg_config"
@@ -73103,13 +73104,13 @@ EOF
 
 
   echo $ac_n "checking for openssl dependencies""... $ac_c" 1>&6
-echo "configure:73107: checking for openssl dependencies" >&5
+echo "configure:73108: checking for openssl dependencies" >&5
   if grep -q openssl $PGSQL_INCLUDE/libpq-fe.h ; then
     echo "$ac_t""yes" 1>&6
         # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:73113: checking for $ac_word" >&5
+echo "configure:73114: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -73153,7 +73154,7 @@ fi
   old_LDFLAGS=$LDFLAGS
   LDFLAGS="-L$PGSQL_LIBDIR $LDFLAGS"
   echo $ac_n "checking for PQparameterStatus in -lpq""... $ac_c" 1>&6
-echo "configure:73157: checking for PQparameterStatus in -lpq" >&5
+echo "configure:73158: checking for PQparameterStatus in -lpq" >&5
 ac_lib_var=`echo pq'_'PQparameterStatus | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -73161,7 +73162,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 73165 "configure"
+#line 73166 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -73172,7 +73173,7 @@ int main() {
 PQparameterStatus()
 ; return 0; }
 EOF
-if { (eval echo configure:73176: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:73177: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -73201,7 +73202,7 @@ fi
 
 
   echo $ac_n "checking for PQprepare in -lpq""... $ac_c" 1>&6
-echo "configure:73205: checking for PQprepare in -lpq" >&5
+echo "configure:73206: checking for PQprepare in -lpq" >&5
 ac_lib_var=`echo pq'_'PQprepare | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -73209,7 +73210,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 73213 "configure"
+#line 73214 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -73220,7 +73221,7 @@ int main() {
 PQprepare()
 ; return 0; }
 EOF
-if { (eval echo configure:73224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:73225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -73244,7 +73245,7 @@ else
 fi
 
   echo $ac_n "checking for PQescapeStringConn in -lpq""... $ac_c" 1>&6
-echo "configure:73248: checking for PQescapeStringConn in -lpq" >&5
+echo "configure:73249: checking for PQescapeStringConn in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeStringConn | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -73252,7 +73253,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 73256 "configure"
+#line 73257 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -73263,7 +73264,7 @@ int main() {
 PQescapeStringConn()
 ; return 0; }
 EOF
-if { (eval echo configure:73267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:73268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -73287,7 +73288,7 @@ else
 fi
 
   echo $ac_n "checking for PQescapeByteaConn in -lpq""... $ac_c" 1>&6
-echo "configure:73291: checking for PQescapeByteaConn in -lpq" >&5
+echo "configure:73292: checking for PQescapeByteaConn in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeByteaConn | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -73295,7 +73296,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 73299 "configure"
+#line 73300 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -73306,7 +73307,7 @@ int main() {
 PQescapeByteaConn()
 ; return 0; }
 EOF
-if { (eval echo configure:73310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:73311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -73331,7 +73332,7 @@ fi
 
 
   echo $ac_n "checking for pg_encoding_to_char in -lpq""... $ac_c" 1>&6
-echo "configure:73335: checking for pg_encoding_to_char in -lpq" >&5
+echo "configure:73336: checking for pg_encoding_to_char in -lpq" >&5
 ac_lib_var=`echo pq'_'pg_encoding_to_char | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -73339,7 +73340,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 73343 "configure"
+#line 73344 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -73350,7 +73351,7 @@ int main() {
 pg_encoding_to_char()
 ; return 0; }
 EOF
-if { (eval echo configure:73354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:73355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -73514,13 +73515,13 @@ fi
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:73518: checking for PDO includes" >&5
+echo "configure:73519: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:73524: checking for PDO includes" >&5
+echo "configure:73525: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -73860,7 +73861,7 @@ fi
 php_with_pdo_sqlite=$PHP_PDO
 
 echo $ac_n "checking for sqlite 3 support for PDO""... $ac_c" 1>&6
-echo "configure:73864: checking for sqlite 3 support for PDO" >&5
+echo "configure:73865: checking for sqlite 3 support for PDO" >&5
 # Check whether --with-pdo-sqlite or --without-pdo-sqlite was given.
 if test "${with_pdo_sqlite+set}" = set; then
   withval="$with_pdo_sqlite"
@@ -73909,13 +73910,13 @@ if test "$PHP_PDO_SQLITE" != "no"; then
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:73913: checking for PDO includes" >&5
+echo "configure:73914: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:73919: checking for PDO includes" >&5
+echo "configure:73920: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -73944,7 +73945,7 @@ echo "$ac_t""$pdo_inc_path" 1>&6
       PDO_SQLITE_DIR=$PHP_PDO_SQLITE
     else # search default path list
       echo $ac_n "checking for sqlite3 files in default path""... $ac_c" 1>&6
-echo "configure:73948: checking for sqlite3 files in default path" >&5
+echo "configure:73949: checking for sqlite3 files in default path" >&5
       for i in $SEARCH_PATH ; do
         if test -r $i/$SEARCH_FOR; then
           PDO_SQLITE_DIR=$i
@@ -74090,7 +74091,7 @@ echo "configure:73948: checking for sqlite3 files in default path" >&5
   done
 
   echo $ac_n "checking for $LIBSYMBOL in -l$LIBNAME""... $ac_c" 1>&6
-echo "configure:74094: checking for $LIBSYMBOL in -l$LIBNAME" >&5
+echo "configure:74095: checking for $LIBSYMBOL in -l$LIBNAME" >&5
 ac_lib_var=`echo $LIBNAME'_'$LIBSYMBOL | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -74098,7 +74099,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 74102 "configure"
+#line 74103 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -74109,7 +74110,7 @@ int main() {
 $LIBSYMBOL()
 ; return 0; }
 EOF
-if { (eval echo configure:74113: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:74114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -74339,7 +74340,7 @@ fi
   done
 
   echo $ac_n "checking for sqlite3_key in -lsqlite3""... $ac_c" 1>&6
-echo "configure:74343: checking for sqlite3_key in -lsqlite3" >&5
+echo "configure:74344: checking for sqlite3_key in -lsqlite3" >&5
 ac_lib_var=`echo sqlite3'_'sqlite3_key | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -74347,7 +74348,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsqlite3  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 74351 "configure"
+#line 74352 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -74358,7 +74359,7 @@ int main() {
 sqlite3_key()
 ; return 0; }
 EOF
-if { (eval echo configure:74362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:74363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75099,12 +75100,12 @@ but you've either not enabled sqlite3, or have disabled it.
       for ac_func in usleep nanosleep
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:75103: checking for $ac_func" >&5
+echo "configure:75104: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 75108 "configure"
+#line 75109 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -75127,7 +75128,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:75131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -75155,17 +75156,17 @@ done
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:75159: checking for $ac_hdr" >&5
+echo "configure:75160: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 75164 "configure"
+#line 75165 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:75169: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:75170: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -75289,7 +75290,7 @@ done
   done
 
   echo $ac_n "checking for fdatasync in -lrt""... $ac_c" 1>&6
-echo "configure:75293: checking for fdatasync in -lrt" >&5
+echo "configure:75294: checking for fdatasync in -lrt" >&5
 ac_lib_var=`echo rt'_'fdatasync | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75297,7 +75298,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lrt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75301 "configure"
+#line 75302 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75308,7 +75309,7 @@ int main() {
 fdatasync()
 ; return 0; }
 EOF
-if { (eval echo configure:75312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75389,7 +75390,7 @@ fi
 php_with_pgsql=no
 
 echo $ac_n "checking for PostgreSQL support""... $ac_c" 1>&6
-echo "configure:75393: checking for PostgreSQL support" >&5
+echo "configure:75394: checking for PostgreSQL support" >&5
 # Check whether --with-pgsql or --without-pgsql was given.
 if test "${with_pgsql+set}" = set; then
   withval="$with_pgsql"
@@ -75443,7 +75444,7 @@ if test "$PHP_PGSQL" != "no"; then
 
 
   echo $ac_n "checking for pg_config""... $ac_c" 1>&6
-echo "configure:75447: checking for pg_config" >&5
+echo "configure:75448: checking for pg_config" >&5
   for i in $PHP_PGSQL $PHP_PGSQL/bin /usr/local/pgsql/bin /usr/local/bin /usr/bin ""; do
 	if test -x $i/pg_config; then
       PG_CONFIG="$i/pg_config"
@@ -75511,7 +75512,7 @@ EOF
   old_LDFLAGS=$LDFLAGS
   LDFLAGS="-L$PGSQL_LIBDIR $LDFLAGS"
   echo $ac_n "checking for PQescapeString in -lpq""... $ac_c" 1>&6
-echo "configure:75515: checking for PQescapeString in -lpq" >&5
+echo "configure:75516: checking for PQescapeString in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeString | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75519,7 +75520,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75523 "configure"
+#line 75524 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75530,7 +75531,7 @@ int main() {
 PQescapeString()
 ; return 0; }
 EOF
-if { (eval echo configure:75534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75554,7 +75555,7 @@ else
 fi
 
   echo $ac_n "checking for PQunescapeBytea in -lpq""... $ac_c" 1>&6
-echo "configure:75558: checking for PQunescapeBytea in -lpq" >&5
+echo "configure:75559: checking for PQunescapeBytea in -lpq" >&5
 ac_lib_var=`echo pq'_'PQunescapeBytea | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75562,7 +75563,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75566 "configure"
+#line 75567 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75573,7 +75574,7 @@ int main() {
 PQunescapeBytea()
 ; return 0; }
 EOF
-if { (eval echo configure:75577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75597,7 +75598,7 @@ else
 fi
 
   echo $ac_n "checking for PQsetnonblocking in -lpq""... $ac_c" 1>&6
-echo "configure:75601: checking for PQsetnonblocking in -lpq" >&5
+echo "configure:75602: checking for PQsetnonblocking in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsetnonblocking | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75605,7 +75606,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75609 "configure"
+#line 75610 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75616,7 +75617,7 @@ int main() {
 PQsetnonblocking()
 ; return 0; }
 EOF
-if { (eval echo configure:75620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75640,7 +75641,7 @@ else
 fi
 
   echo $ac_n "checking for PQcmdTuples in -lpq""... $ac_c" 1>&6
-echo "configure:75644: checking for PQcmdTuples in -lpq" >&5
+echo "configure:75645: checking for PQcmdTuples in -lpq" >&5
 ac_lib_var=`echo pq'_'PQcmdTuples | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75648,7 +75649,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75652 "configure"
+#line 75653 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75659,7 +75660,7 @@ int main() {
 PQcmdTuples()
 ; return 0; }
 EOF
-if { (eval echo configure:75663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75683,7 +75684,7 @@ else
 fi
 
   echo $ac_n "checking for PQoidValue in -lpq""... $ac_c" 1>&6
-echo "configure:75687: checking for PQoidValue in -lpq" >&5
+echo "configure:75688: checking for PQoidValue in -lpq" >&5
 ac_lib_var=`echo pq'_'PQoidValue | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75691,7 +75692,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75695 "configure"
+#line 75696 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75702,7 +75703,7 @@ int main() {
 PQoidValue()
 ; return 0; }
 EOF
-if { (eval echo configure:75706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75726,7 +75727,7 @@ else
 fi
 
   echo $ac_n "checking for PQclientEncoding in -lpq""... $ac_c" 1>&6
-echo "configure:75730: checking for PQclientEncoding in -lpq" >&5
+echo "configure:75731: checking for PQclientEncoding in -lpq" >&5
 ac_lib_var=`echo pq'_'PQclientEncoding | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75734,7 +75735,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75738 "configure"
+#line 75739 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75745,7 +75746,7 @@ int main() {
 PQclientEncoding()
 ; return 0; }
 EOF
-if { (eval echo configure:75749: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75769,7 +75770,7 @@ else
 fi
 
   echo $ac_n "checking for PQparameterStatus in -lpq""... $ac_c" 1>&6
-echo "configure:75773: checking for PQparameterStatus in -lpq" >&5
+echo "configure:75774: checking for PQparameterStatus in -lpq" >&5
 ac_lib_var=`echo pq'_'PQparameterStatus | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75777,7 +75778,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75781 "configure"
+#line 75782 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75788,7 +75789,7 @@ int main() {
 PQparameterStatus()
 ; return 0; }
 EOF
-if { (eval echo configure:75792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75812,7 +75813,7 @@ else
 fi
 
   echo $ac_n "checking for PQprotocolVersion in -lpq""... $ac_c" 1>&6
-echo "configure:75816: checking for PQprotocolVersion in -lpq" >&5
+echo "configure:75817: checking for PQprotocolVersion in -lpq" >&5
 ac_lib_var=`echo pq'_'PQprotocolVersion | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75820,7 +75821,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75824 "configure"
+#line 75825 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75831,7 +75832,7 @@ int main() {
 PQprotocolVersion()
 ; return 0; }
 EOF
-if { (eval echo configure:75835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75855,7 +75856,7 @@ else
 fi
 
   echo $ac_n "checking for PQtransactionStatus in -lpq""... $ac_c" 1>&6
-echo "configure:75859: checking for PQtransactionStatus in -lpq" >&5
+echo "configure:75860: checking for PQtransactionStatus in -lpq" >&5
 ac_lib_var=`echo pq'_'PQtransactionStatus | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75863,7 +75864,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75867 "configure"
+#line 75868 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75874,7 +75875,7 @@ int main() {
 PQtransactionStatus()
 ; return 0; }
 EOF
-if { (eval echo configure:75878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75898,7 +75899,7 @@ else
 fi
 
   echo $ac_n "checking for PQexecParams in -lpq""... $ac_c" 1>&6
-echo "configure:75902: checking for PQexecParams in -lpq" >&5
+echo "configure:75903: checking for PQexecParams in -lpq" >&5
 ac_lib_var=`echo pq'_'PQexecParams | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75906,7 +75907,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75910 "configure"
+#line 75911 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75917,7 +75918,7 @@ int main() {
 PQexecParams()
 ; return 0; }
 EOF
-if { (eval echo configure:75921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75941,7 +75942,7 @@ else
 fi
 
   echo $ac_n "checking for PQprepare in -lpq""... $ac_c" 1>&6
-echo "configure:75945: checking for PQprepare in -lpq" >&5
+echo "configure:75946: checking for PQprepare in -lpq" >&5
 ac_lib_var=`echo pq'_'PQprepare | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75949,7 +75950,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75953 "configure"
+#line 75954 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75960,7 +75961,7 @@ int main() {
 PQprepare()
 ; return 0; }
 EOF
-if { (eval echo configure:75964: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75984,7 +75985,7 @@ else
 fi
 
   echo $ac_n "checking for PQexecPrepared in -lpq""... $ac_c" 1>&6
-echo "configure:75988: checking for PQexecPrepared in -lpq" >&5
+echo "configure:75989: checking for PQexecPrepared in -lpq" >&5
 ac_lib_var=`echo pq'_'PQexecPrepared | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75992,7 +75993,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75996 "configure"
+#line 75997 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76003,7 +76004,7 @@ int main() {
 PQexecPrepared()
 ; return 0; }
 EOF
-if { (eval echo configure:76007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76027,7 +76028,7 @@ else
 fi
 
   echo $ac_n "checking for PQresultErrorField in -lpq""... $ac_c" 1>&6
-echo "configure:76031: checking for PQresultErrorField in -lpq" >&5
+echo "configure:76032: checking for PQresultErrorField in -lpq" >&5
 ac_lib_var=`echo pq'_'PQresultErrorField | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76035,7 +76036,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76039 "configure"
+#line 76040 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76046,7 +76047,7 @@ int main() {
 PQresultErrorField()
 ; return 0; }
 EOF
-if { (eval echo configure:76050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76070,7 +76071,7 @@ else
 fi
 
   echo $ac_n "checking for PQsendQueryParams in -lpq""... $ac_c" 1>&6
-echo "configure:76074: checking for PQsendQueryParams in -lpq" >&5
+echo "configure:76075: checking for PQsendQueryParams in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsendQueryParams | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76078,7 +76079,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76082 "configure"
+#line 76083 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76089,7 +76090,7 @@ int main() {
 PQsendQueryParams()
 ; return 0; }
 EOF
-if { (eval echo configure:76093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76113,7 +76114,7 @@ else
 fi
 
   echo $ac_n "checking for PQsendPrepare in -lpq""... $ac_c" 1>&6
-echo "configure:76117: checking for PQsendPrepare in -lpq" >&5
+echo "configure:76118: checking for PQsendPrepare in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsendPrepare | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76121,7 +76122,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76125 "configure"
+#line 76126 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76132,7 +76133,7 @@ int main() {
 PQsendPrepare()
 ; return 0; }
 EOF
-if { (eval echo configure:76136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76156,7 +76157,7 @@ else
 fi
 
   echo $ac_n "checking for PQsendQueryPrepared in -lpq""... $ac_c" 1>&6
-echo "configure:76160: checking for PQsendQueryPrepared in -lpq" >&5
+echo "configure:76161: checking for PQsendQueryPrepared in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsendQueryPrepared | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76164,7 +76165,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76168 "configure"
+#line 76169 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76175,7 +76176,7 @@ int main() {
 PQsendQueryPrepared()
 ; return 0; }
 EOF
-if { (eval echo configure:76179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76180: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76199,7 +76200,7 @@ else
 fi
 
   echo $ac_n "checking for PQputCopyData in -lpq""... $ac_c" 1>&6
-echo "configure:76203: checking for PQputCopyData in -lpq" >&5
+echo "configure:76204: checking for PQputCopyData in -lpq" >&5
 ac_lib_var=`echo pq'_'PQputCopyData | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76207,7 +76208,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76211 "configure"
+#line 76212 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76218,7 +76219,7 @@ int main() {
 PQputCopyData()
 ; return 0; }
 EOF
-if { (eval echo configure:76222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76242,7 +76243,7 @@ else
 fi
 
   echo $ac_n "checking for PQputCopyEnd in -lpq""... $ac_c" 1>&6
-echo "configure:76246: checking for PQputCopyEnd in -lpq" >&5
+echo "configure:76247: checking for PQputCopyEnd in -lpq" >&5
 ac_lib_var=`echo pq'_'PQputCopyEnd | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76250,7 +76251,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76254 "configure"
+#line 76255 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76261,7 +76262,7 @@ int main() {
 PQputCopyEnd()
 ; return 0; }
 EOF
-if { (eval echo configure:76265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76285,7 +76286,7 @@ else
 fi
 
   echo $ac_n "checking for PQgetCopyData in -lpq""... $ac_c" 1>&6
-echo "configure:76289: checking for PQgetCopyData in -lpq" >&5
+echo "configure:76290: checking for PQgetCopyData in -lpq" >&5
 ac_lib_var=`echo pq'_'PQgetCopyData | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76293,7 +76294,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76297 "configure"
+#line 76298 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76304,7 +76305,7 @@ int main() {
 PQgetCopyData()
 ; return 0; }
 EOF
-if { (eval echo configure:76308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76328,7 +76329,7 @@ else
 fi
 
   echo $ac_n "checking for PQfreemem in -lpq""... $ac_c" 1>&6
-echo "configure:76332: checking for PQfreemem in -lpq" >&5
+echo "configure:76333: checking for PQfreemem in -lpq" >&5
 ac_lib_var=`echo pq'_'PQfreemem | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76336,7 +76337,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76340 "configure"
+#line 76341 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76347,7 +76348,7 @@ int main() {
 PQfreemem()
 ; return 0; }
 EOF
-if { (eval echo configure:76351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76371,7 +76372,7 @@ else
 fi
 
   echo $ac_n "checking for PQsetErrorVerbosity in -lpq""... $ac_c" 1>&6
-echo "configure:76375: checking for PQsetErrorVerbosity in -lpq" >&5
+echo "configure:76376: checking for PQsetErrorVerbosity in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsetErrorVerbosity | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76379,7 +76380,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76383 "configure"
+#line 76384 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76390,7 +76391,7 @@ int main() {
 PQsetErrorVerbosity()
 ; return 0; }
 EOF
-if { (eval echo configure:76394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76414,7 +76415,7 @@ else
 fi
 
   echo $ac_n "checking for PQftable in -lpq""... $ac_c" 1>&6
-echo "configure:76418: checking for PQftable in -lpq" >&5
+echo "configure:76419: checking for PQftable in -lpq" >&5
 ac_lib_var=`echo pq'_'PQftable | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76422,7 +76423,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76426 "configure"
+#line 76427 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76433,7 +76434,7 @@ int main() {
 PQftable()
 ; return 0; }
 EOF
-if { (eval echo configure:76437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76457,7 +76458,7 @@ else
 fi
 
   echo $ac_n "checking for PQescapeStringConn in -lpq""... $ac_c" 1>&6
-echo "configure:76461: checking for PQescapeStringConn in -lpq" >&5
+echo "configure:76462: checking for PQescapeStringConn in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeStringConn | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76465,7 +76466,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76469 "configure"
+#line 76470 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76476,7 +76477,7 @@ int main() {
 PQescapeStringConn()
 ; return 0; }
 EOF
-if { (eval echo configure:76480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76500,7 +76501,7 @@ else
 fi
 
   echo $ac_n "checking for PQescapeByteaConn in -lpq""... $ac_c" 1>&6
-echo "configure:76504: checking for PQescapeByteaConn in -lpq" >&5
+echo "configure:76505: checking for PQescapeByteaConn in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeByteaConn | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76508,7 +76509,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76512 "configure"
+#line 76513 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76519,7 +76520,7 @@ int main() {
 PQescapeByteaConn()
 ; return 0; }
 EOF
-if { (eval echo configure:76523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76543,7 +76544,7 @@ else
 fi
 
   echo $ac_n "checking for pg_encoding_to_char in -lpq""... $ac_c" 1>&6
-echo "configure:76547: checking for pg_encoding_to_char in -lpq" >&5
+echo "configure:76548: checking for pg_encoding_to_char in -lpq" >&5
 ac_lib_var=`echo pq'_'pg_encoding_to_char | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76551,7 +76552,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76555 "configure"
+#line 76556 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76562,7 +76563,7 @@ int main() {
 pg_encoding_to_char()
 ; return 0; }
 EOF
-if { (eval echo configure:76566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76586,7 +76587,7 @@ else
 fi
 
   echo $ac_n "checking for lo_create in -lpq""... $ac_c" 1>&6
-echo "configure:76590: checking for lo_create in -lpq" >&5
+echo "configure:76591: checking for lo_create in -lpq" >&5
 ac_lib_var=`echo pq'_'lo_create | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76594,7 +76595,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76598 "configure"
+#line 76599 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76605,7 +76606,7 @@ int main() {
 lo_create()
 ; return 0; }
 EOF
-if { (eval echo configure:76609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76629,7 +76630,7 @@ else
 fi
 
   echo $ac_n "checking for lo_import_with_oid in -lpq""... $ac_c" 1>&6
-echo "configure:76633: checking for lo_import_with_oid in -lpq" >&5
+echo "configure:76634: checking for lo_import_with_oid in -lpq" >&5
 ac_lib_var=`echo pq'_'lo_import_with_oid | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76637,7 +76638,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76641 "configure"
+#line 76642 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76648,7 +76649,7 @@ int main() {
 lo_import_with_oid()
 ; return 0; }
 EOF
-if { (eval echo configure:76652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77108,7 +77109,7 @@ fi
 php_enable_phar=yes
 
 echo $ac_n "checking for phar archive support""... $ac_c" 1>&6
-echo "configure:77112: checking for phar archive support" >&5
+echo "configure:77113: checking for phar archive support" >&5
 # Check whether --enable-phar or --disable-phar was given.
 if test "${enable_phar+set}" = set; then
   enableval="$enable_phar"
@@ -77442,7 +77443,7 @@ EOF
   fi
 
   echo $ac_n "checking for phar openssl support""... $ac_c" 1>&6
-echo "configure:77446: checking for phar openssl support" >&5
+echo "configure:77447: checking for phar openssl support" >&5
   if test "$PHP_HASH_SHARED" != "yes"; then
     if test "$PHP_HASH" != "no"; then
       cat >> confdefs.h <<\EOF
@@ -77517,7 +77518,7 @@ fi
 php_enable_posix=yes
 
 echo $ac_n "checking whether to enable POSIX-like functions""... $ac_c" 1>&6
-echo "configure:77521: checking whether to enable POSIX-like functions" >&5
+echo "configure:77522: checking whether to enable POSIX-like functions" >&5
 # Check whether --enable-posix or --disable-posix was given.
 if test "${enable_posix+set}" = set; then
   enableval="$enable_posix"
@@ -77859,17 +77860,17 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:77863: checking for $ac_hdr" >&5
+echo "configure:77864: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 77868 "configure"
+#line 77869 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:77873: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:77874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -77899,12 +77900,12 @@ done
   for ac_func in seteuid setegid setsid getsid setpgid getpgid ctermid mkfifo mknod getrlimit getlogin getgroups makedev initgroups getpwuid_r getgrgid_r
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:77903: checking for $ac_func" >&5
+echo "configure:77904: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 77908 "configure"
+#line 77909 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -77927,7 +77928,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:77931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -77953,14 +77954,14 @@ done
 
 
   echo $ac_n "checking for working ttyname_r() implementation""... $ac_c" 1>&6
-echo "configure:77957: checking for working ttyname_r() implementation" >&5
+echo "configure:77958: checking for working ttyname_r() implementation" >&5
   if test "$cross_compiling" = yes; then
   
     echo "$ac_t""no, cannot detect working ttyname_r() when cross compiling. posix_ttyname() will be thread-unsafe" 1>&6
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 77964 "configure"
+#line 77965 "configure"
 #include "confdefs.h"
 
 #include <unistd.h>
@@ -77973,7 +77974,7 @@ int main(int argc, char *argv[])
 }
   
 EOF
-if { (eval echo configure:77977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:77978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     echo "$ac_t""yes" 1>&6
@@ -77995,13 +77996,13 @@ fi
 
 
   echo $ac_n "checking for utsname.domainname""... $ac_c" 1>&6
-echo "configure:77999: checking for utsname.domainname" >&5
+echo "configure:78000: checking for utsname.domainname" >&5
 if eval "test \"`echo '$''{'ac_cv_have_utsname_domainname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 78005 "configure"
+#line 78006 "configure"
 #include "confdefs.h"
 
       #define _GNU_SOURCE
@@ -78013,7 +78014,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:78017: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:78018: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       ac_cv_have_utsname_domainname=yes
@@ -78044,7 +78045,7 @@ fi
 php_with_pspell=no
 
 echo $ac_n "checking for PSPELL support""... $ac_c" 1>&6
-echo "configure:78048: checking for PSPELL support" >&5
+echo "configure:78049: checking for PSPELL support" >&5
 # Check whether --with-pspell or --without-pspell was given.
 if test "${with_pspell+set}" = set; then
   withval="$with_pspell"
@@ -78594,7 +78595,7 @@ EOF
   done
 
   echo $ac_n "checking for new_aspell_config in -laspell""... $ac_c" 1>&6
-echo "configure:78598: checking for new_aspell_config in -laspell" >&5
+echo "configure:78599: checking for new_aspell_config in -laspell" >&5
 ac_lib_var=`echo aspell'_'new_aspell_config | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -78602,7 +78603,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-laspell  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 78606 "configure"
+#line 78607 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -78613,7 +78614,7 @@ int main() {
 new_aspell_config()
 ; return 0; }
 EOF
-if { (eval echo configure:78617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:78618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -78787,7 +78788,7 @@ fi
 php_with_libedit=no
 
 echo $ac_n "checking for libedit readline replacement""... $ac_c" 1>&6
-echo "configure:78791: checking for libedit readline replacement" >&5
+echo "configure:78792: checking for libedit readline replacement" >&5
 # Check whether --with-libedit or --without-libedit was given.
 if test "${with_libedit+set}" = set; then
   withval="$with_libedit"
@@ -78832,7 +78833,7 @@ if test "$PHP_LIBEDIT" = "no"; then
 php_with_readline=no
 
 echo $ac_n "checking for readline support""... $ac_c" 1>&6
-echo "configure:78836: checking for readline support" >&5
+echo "configure:78837: checking for readline support" >&5
 # Check whether --with-readline or --without-readline was given.
 if test "${with_readline+set}" = set; then
   withval="$with_readline"
@@ -78918,7 +78919,7 @@ if test "$PHP_READLINE" && test "$PHP_READLINE" != "no"; then
 
   PHP_READLINE_LIBS=""
   echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:78922: checking for tgetent in -lncurses" >&5
+echo "configure:78923: checking for tgetent in -lncurses" >&5
 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -78926,7 +78927,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lncurses  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 78930 "configure"
+#line 78931 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -78937,7 +78938,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:78941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:78942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -78982,7 +78983,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
-echo "configure:78986: checking for tgetent in -ltermcap" >&5
+echo "configure:78987: checking for tgetent in -ltermcap" >&5
 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -78990,7 +78991,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ltermcap  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 78994 "configure"
+#line 78995 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -79001,7 +79002,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:79005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:79006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -79148,7 +79149,7 @@ fi
   done
 
   echo $ac_n "checking for readline in -lreadline""... $ac_c" 1>&6
-echo "configure:79152: checking for readline in -lreadline" >&5
+echo "configure:79153: checking for readline in -lreadline" >&5
 ac_lib_var=`echo readline'_'readline | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -79156,7 +79157,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lreadline  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 79160 "configure"
+#line 79161 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -79167,7 +79168,7 @@ int main() {
 readline()
 ; return 0; }
 EOF
-if { (eval echo configure:79171: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:79172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -79396,7 +79397,7 @@ fi
   done
 
   echo $ac_n "checking for rl_pending_input in -lreadline""... $ac_c" 1>&6
-echo "configure:79400: checking for rl_pending_input in -lreadline" >&5
+echo "configure:79401: checking for rl_pending_input in -lreadline" >&5
 ac_lib_var=`echo readline'_'rl_pending_input | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -79404,7 +79405,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lreadline  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 79408 "configure"
+#line 79409 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -79415,7 +79416,7 @@ int main() {
 rl_pending_input()
 ; return 0; }
 EOF
-if { (eval echo configure:79419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:79420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -79546,7 +79547,7 @@ fi
   done
 
   echo $ac_n "checking for rl_callback_read_char in -lreadline""... $ac_c" 1>&6
-echo "configure:79550: checking for rl_callback_read_char in -lreadline" >&5
+echo "configure:79551: checking for rl_callback_read_char in -lreadline" >&5
 ac_lib_var=`echo readline'_'rl_callback_read_char | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -79554,7 +79555,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lreadline  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 79558 "configure"
+#line 79559 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -79565,7 +79566,7 @@ int main() {
 rl_callback_read_char()
 ; return 0; }
 EOF
-if { (eval echo configure:79569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:79570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -79649,7 +79650,7 @@ elif test "$PHP_LIBEDIT" != "no"; then
 
 
   echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:79653: checking for tgetent in -lncurses" >&5
+echo "configure:79654: checking for tgetent in -lncurses" >&5
 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -79657,7 +79658,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lncurses  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 79661 "configure"
+#line 79662 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -79668,7 +79669,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:79672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:79673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -79712,7 +79713,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
-echo "configure:79716: checking for tgetent in -ltermcap" >&5
+echo "configure:79717: checking for tgetent in -ltermcap" >&5
 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -79720,7 +79721,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ltermcap  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 79724 "configure"
+#line 79725 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -79731,7 +79732,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:79735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:79736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -79877,7 +79878,7 @@ fi
   done
 
   echo $ac_n "checking for readline in -ledit""... $ac_c" 1>&6
-echo "configure:79881: checking for readline in -ledit" >&5
+echo "configure:79882: checking for readline in -ledit" >&5
 ac_lib_var=`echo edit'_'readline | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -79885,7 +79886,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ledit  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 79889 "configure"
+#line 79890 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -79896,7 +79897,7 @@ int main() {
 readline()
 ; return 0; }
 EOF
-if { (eval echo configure:79900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:79901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80037,12 +80038,12 @@ if test "$PHP_READLINE" != "no" || test "$PHP_LIBEDIT" != "no"; then
   for ac_func in rl_completion_matches
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:80041: checking for $ac_func" >&5
+echo "configure:80042: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 80046 "configure"
+#line 80047 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -80065,7 +80066,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:80069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -80391,7 +80392,7 @@ fi
 php_with_recode=no
 
 echo $ac_n "checking for recode support""... $ac_c" 1>&6
-echo "configure:80395: checking for recode support" >&5
+echo "configure:80396: checking for recode support" >&5
 # Check whether --with-recode or --without-recode was given.
 if test "${with_recode+set}" = set; then
   withval="$with_recode"
@@ -80555,7 +80556,7 @@ if test "$PHP_RECODE" != "no"; then
   done
 
   echo $ac_n "checking for recode_format_table in -lrecode""... $ac_c" 1>&6
-echo "configure:80559: checking for recode_format_table in -lrecode" >&5
+echo "configure:80560: checking for recode_format_table in -lrecode" >&5
 ac_lib_var=`echo recode'_'recode_format_table | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80563,7 +80564,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lrecode  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80567 "configure"
+#line 80568 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80574,7 +80575,7 @@ int main() {
 recode_format_table()
 ; return 0; }
 EOF
-if { (eval echo configure:80578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80704,7 +80705,7 @@ else
     LDFLAGS="$LDFLAGS -L$RECODE_DIR/$RECODE_LIB"
     LIBS="$LIBS -lrecode"
     cat > conftest.$ac_ext <<EOF
-#line 80708 "configure"
+#line 80709 "configure"
 #include "confdefs.h"
 
 char *program_name;
@@ -80715,7 +80716,7 @@ recode_format_table();
     
 ; return 0; }
 EOF
-if { (eval echo configure:80719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
       
@@ -80878,17 +80879,17 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:80882: checking for $ac_hdr" >&5
+echo "configure:80883: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 80887 "configure"
+#line 80888 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:80892: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:80893: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -81511,7 +81512,7 @@ EOF
 php_enable_session=yes
 
 echo $ac_n "checking whether to enable PHP sessions""... $ac_c" 1>&6
-echo "configure:81515: checking whether to enable PHP sessions" >&5
+echo "configure:81516: checking whether to enable PHP sessions" >&5
 # Check whether --enable-session or --disable-session was given.
 if test "${enable_session+set}" = set; then
   enableval="$enable_session"
@@ -81555,7 +81556,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_mm=no
 
 echo $ac_n "checking for mm support""... $ac_c" 1>&6
-echo "configure:81559: checking for mm support" >&5
+echo "configure:81560: checking for mm support" >&5
 # Check whether --with-mm or --without-mm was given.
 if test "${with_mm+set}" = set; then
   withval="$with_mm"
@@ -81577,7 +81578,7 @@ echo "$ac_t""$ext_output" 1>&6
 if test "$PHP_SESSION" != "no"; then
   
   echo $ac_n "checking whether pwrite works""... $ac_c" 1>&6
-echo "configure:81581: checking whether pwrite works" >&5
+echo "configure:81582: checking whether pwrite works" >&5
 if eval "test \"`echo '$''{'ac_cv_pwrite'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -81589,7 +81590,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 81593 "configure"
+#line 81594 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -81610,7 +81611,7 @@ else
 
   
 EOF
-if { (eval echo configure:81614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:81615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_cv_pwrite=yes
@@ -81635,7 +81636,7 @@ fi
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 81639 "configure"
+#line 81640 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -81656,7 +81657,7 @@ ssize_t pwrite(int, void *, size_t, off64_t);
 
   
 EOF
-if { (eval echo configure:81660: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:81661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_cv_pwrite=yes
@@ -81697,7 +81698,7 @@ EOF
 
   
   echo $ac_n "checking whether pread works""... $ac_c" 1>&6
-echo "configure:81701: checking whether pread works" >&5
+echo "configure:81702: checking whether pread works" >&5
 if eval "test \"`echo '$''{'ac_cv_pread'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -81710,7 +81711,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 81714 "configure"
+#line 81715 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -81730,7 +81731,7 @@ else
     }
   
 EOF
-if { (eval echo configure:81734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:81735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_cv_pread=yes
@@ -81757,7 +81758,7 @@ fi
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 81761 "configure"
+#line 81762 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -81777,7 +81778,7 @@ ssize_t pread(int, void *, size_t, off64_t);
     }
   
 EOF
-if { (eval echo configure:81781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:81782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_cv_pread=yes
@@ -82341,7 +82342,7 @@ fi
 php_enable_shmop=no
 
 echo $ac_n "checking whether to enable shmop support""... $ac_c" 1>&6
-echo "configure:82345: checking whether to enable shmop support" >&5
+echo "configure:82346: checking whether to enable shmop support" >&5
 # Check whether --enable-shmop or --disable-shmop was given.
 if test "${enable_shmop+set}" = set; then
   enableval="$enable_shmop"
@@ -82685,7 +82686,7 @@ fi
 php_enable_simplexml=yes
 
 echo $ac_n "checking whether to enable SimpleXML support""... $ac_c" 1>&6
-echo "configure:82689: checking whether to enable SimpleXML support" >&5
+echo "configure:82690: checking whether to enable SimpleXML support" >&5
 # Check whether --enable-simplexml or --disable-simplexml was given.
 if test "${enable_simplexml+set}" = set; then
   enableval="$enable_simplexml"
@@ -82730,7 +82731,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:82734: checking libxml2 install dir" >&5
+echo "configure:82735: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -82758,7 +82759,7 @@ if test "$PHP_SIMPLEXML" != "no"; then
 
   
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:82762: checking for xml2-config path" >&5
+echo "configure:82763: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -82916,7 +82917,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:82920: checking whether libxml build works" >&5
+echo "configure:82921: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -82932,7 +82933,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 82936 "configure"
+#line 82937 "configure"
 #include "confdefs.h"
 
     
@@ -82943,7 +82944,7 @@ else
     }
   
 EOF
-if { (eval echo configure:82947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:82948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -83331,7 +83332,7 @@ fi
 php_with_snmp=no
 
 echo $ac_n "checking for SNMP support""... $ac_c" 1>&6
-echo "configure:83335: checking for SNMP support" >&5
+echo "configure:83336: checking for SNMP support" >&5
 # Check whether --with-snmp or --without-snmp was given.
 if test "${with_snmp+set}" = set; then
   withval="$with_snmp"
@@ -83375,7 +83376,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_openssl_dir=no
 
 echo $ac_n "checking OpenSSL dir for SNMP""... $ac_c" 1>&6
-echo "configure:83379: checking OpenSSL dir for SNMP" >&5
+echo "configure:83380: checking OpenSSL dir for SNMP" >&5
 # Check whether --with-openssl-dir or --without-openssl-dir was given.
 if test "${with_openssl_dir+set}" = set; then
   withval="$with_openssl_dir"
@@ -83398,7 +83399,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_ucd_snmp_hack=no
 
 echo $ac_n "checking whether to enable UCD SNMP hack""... $ac_c" 1>&6
-echo "configure:83402: checking whether to enable UCD SNMP hack" >&5
+echo "configure:83403: checking whether to enable UCD SNMP hack" >&5
 # Check whether --enable-ucd-snmp-hack or --disable-ucd-snmp-hack was given.
 if test "${enable_ucd_snmp_hack+set}" = set; then
   enableval="$enable_ucd_snmp_hack"
@@ -83423,7 +83424,7 @@ if test "$PHP_SNMP" != "no"; then
     # Extract the first word of "net-snmp-config", so it can be a program name with args.
 set dummy net-snmp-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:83427: checking for $ac_word" >&5
+echo "configure:83428: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SNMP_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -83624,17 +83625,17 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:83628: checking for $ac_hdr" >&5
+echo "configure:83629: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 83633 "configure"
+#line 83634 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:83638: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:83639: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -83662,9 +83663,9 @@ done
 
     if test "$ac_cv_header_default_store_h" = "yes"; then
       echo $ac_n "checking for OpenSSL support in SNMP libraries""... $ac_c" 1>&6
-echo "configure:83666: checking for OpenSSL support in SNMP libraries" >&5
+echo "configure:83667: checking for OpenSSL support in SNMP libraries" >&5
       cat > conftest.$ac_ext <<EOF
-#line 83668 "configure"
+#line 83669 "configure"
 #include "confdefs.h"
 
 #include <ucd-snmp-config.h>
@@ -83719,7 +83720,7 @@ rm -f conftest*
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:83723: checking for $ac_word" >&5
+echo "configure:83724: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -83924,9 +83925,9 @@ fi
     old_CPPFLAGS=$CPPFLAGS
     CPPFLAGS=-I$OPENSSL_INCDIR
     echo $ac_n "checking for OpenSSL version""... $ac_c" 1>&6
-echo "configure:83928: checking for OpenSSL version" >&5
+echo "configure:83929: checking for OpenSSL version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 83930 "configure"
+#line 83931 "configure"
 #include "confdefs.h"
 
 #include <openssl/opensslv.h>
@@ -84081,7 +84082,7 @@ rm -f conftest*
   done
 
   echo $ac_n "checking for CRYPTO_free in -lcrypto""... $ac_c" 1>&6
-echo "configure:84085: checking for CRYPTO_free in -lcrypto" >&5
+echo "configure:84086: checking for CRYPTO_free in -lcrypto" >&5
 ac_lib_var=`echo crypto'_'CRYPTO_free | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -84089,7 +84090,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypto  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 84093 "configure"
+#line 84094 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -84100,7 +84101,7 @@ int main() {
 CRYPTO_free()
 ; return 0; }
 EOF
-if { (eval echo configure:84104: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:84105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -84257,7 +84258,7 @@ fi
   done
 
   echo $ac_n "checking for SSL_CTX_set_ssl_version in -lssl""... $ac_c" 1>&6
-echo "configure:84261: checking for SSL_CTX_set_ssl_version in -lssl" >&5
+echo "configure:84262: checking for SSL_CTX_set_ssl_version in -lssl" >&5
 ac_lib_var=`echo ssl'_'SSL_CTX_set_ssl_version | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -84265,7 +84266,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lssl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 84269 "configure"
+#line 84270 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -84276,7 +84277,7 @@ int main() {
 SSL_CTX_set_ssl_version()
 ; return 0; }
 EOF
-if { (eval echo configure:84280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:84281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -84389,7 +84390,7 @@ else
     fi
 
     echo $ac_n "checking for kstat_read in -lkstat""... $ac_c" 1>&6
-echo "configure:84393: checking for kstat_read in -lkstat" >&5
+echo "configure:84394: checking for kstat_read in -lkstat" >&5
 ac_lib_var=`echo kstat'_'kstat_read | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -84397,7 +84398,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lkstat  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 84401 "configure"
+#line 84402 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -84408,7 +84409,7 @@ int main() {
 kstat_read()
 ; return 0; }
 EOF
-if { (eval echo configure:84412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:84413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -84679,7 +84680,7 @@ fi
   done
 
   echo $ac_n "checking for snmp_parse_oid in -l$SNMP_LIBNAME""... $ac_c" 1>&6
-echo "configure:84683: checking for snmp_parse_oid in -l$SNMP_LIBNAME" >&5
+echo "configure:84684: checking for snmp_parse_oid in -l$SNMP_LIBNAME" >&5
 ac_lib_var=`echo $SNMP_LIBNAME'_'snmp_parse_oid | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -84687,7 +84688,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$SNMP_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 84691 "configure"
+#line 84692 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -84698,7 +84699,7 @@ int main() {
 snmp_parse_oid()
 ; return 0; }
 EOF
-if { (eval echo configure:84702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:84703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -84832,7 +84833,7 @@ fi
   done
 
   echo $ac_n "checking for init_snmp in -l$SNMP_LIBNAME""... $ac_c" 1>&6
-echo "configure:84836: checking for init_snmp in -l$SNMP_LIBNAME" >&5
+echo "configure:84837: checking for init_snmp in -l$SNMP_LIBNAME" >&5
 ac_lib_var=`echo $SNMP_LIBNAME'_'init_snmp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -84840,7 +84841,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$SNMP_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 84844 "configure"
+#line 84845 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -84851,7 +84852,7 @@ int main() {
 init_snmp()
 ; return 0; }
 EOF
-if { (eval echo configure:84855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:84856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -85198,7 +85199,7 @@ fi
 php_enable_soap=no
 
 echo $ac_n "checking whether to enable SOAP support""... $ac_c" 1>&6
-echo "configure:85202: checking whether to enable SOAP support" >&5
+echo "configure:85203: checking whether to enable SOAP support" >&5
 # Check whether --enable-soap or --disable-soap was given.
 if test "${enable_soap+set}" = set; then
   enableval="$enable_soap"
@@ -85243,7 +85244,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:85247: checking libxml2 install dir" >&5
+echo "configure:85248: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -85271,7 +85272,7 @@ if test "$PHP_SOAP" != "no"; then
 
   
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:85275: checking for xml2-config path" >&5
+echo "configure:85276: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -85429,7 +85430,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:85433: checking whether libxml build works" >&5
+echo "configure:85434: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -85445,7 +85446,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 85449 "configure"
+#line 85450 "configure"
 #include "confdefs.h"
 
     
@@ -85456,7 +85457,7 @@ else
     }
   
 EOF
-if { (eval echo configure:85460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:85461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -85806,7 +85807,7 @@ fi
 php_enable_sockets=no
 
 echo $ac_n "checking whether to enable sockets support""... $ac_c" 1>&6
-echo "configure:85810: checking whether to enable sockets support" >&5
+echo "configure:85811: checking whether to enable sockets support" >&5
 # Check whether --enable-sockets or --disable-sockets was given.
 if test "${enable_sockets+set}" = set; then
   enableval="$enable_sockets"
@@ -85848,13 +85849,13 @@ echo "$ac_t""$ext_output" 1>&6
 
 if test "$PHP_SOCKETS" != "no"; then
     echo $ac_n "checking for struct cmsghdr""... $ac_c" 1>&6
-echo "configure:85852: checking for struct cmsghdr" >&5
+echo "configure:85853: checking for struct cmsghdr" >&5
 if eval "test \"`echo '$''{'ac_cv_cmsghdr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 85858 "configure"
+#line 85859 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -85863,7 +85864,7 @@ int main() {
 struct cmsghdr s; s
 ; return 0; }
 EOF
-if { (eval echo configure:85867: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:85868: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cmsghdr=yes
 else
@@ -85888,12 +85889,12 @@ EOF
   for ac_func in hstrerror socketpair
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:85892: checking for $ac_func" >&5
+echo "configure:85893: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 85897 "configure"
+#line 85898 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -85916,7 +85917,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:85920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:85921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -85944,17 +85945,17 @@ done
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:85948: checking for $ac_hdr" >&5
+echo "configure:85949: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 85953 "configure"
+#line 85954 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:85958: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:85959: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -85981,7 +85982,7 @@ fi
 done
 
   cat > conftest.$ac_ext <<EOF
-#line 85985 "configure"
+#line 85986 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -85991,7 +85992,7 @@ int main() {
 static struct msghdr tp; int n = (int) tp.msg_flags; return n
 ; return 0; }
 EOF
-if { (eval echo configure:85995: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:85996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -86325,7 +86326,7 @@ fi
 
 
   echo $ac_n "checking whether zend_object_value is packed""... $ac_c" 1>&6
-echo "configure:86329: checking whether zend_object_value is packed" >&5
+echo "configure:86330: checking whether zend_object_value is packed" >&5
   old_CPPFLAGS=$CPPFLAGS
   CPPFLAGS="$INCLUDES -I$abs_srcdir $CPPFLAGS"
   if test "$cross_compiling" = yes; then
@@ -86335,7 +86336,7 @@ echo "configure:86329: checking whether zend_object_value is packed" >&5
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 86339 "configure"
+#line 86340 "configure"
 #include "confdefs.h"
 
 #include "Zend/zend_types.h"
@@ -86344,7 +86345,7 @@ int main(int argc, char **argv) {
 }
   
 EOF
-if { (eval echo configure:86348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:86349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_result=1
@@ -86708,7 +86709,7 @@ but you've either not enabled pcre, or have disabled it.
 php_with_sqlite=yes
 
 echo $ac_n "checking for sqlite support""... $ac_c" 1>&6
-echo "configure:86712: checking for sqlite support" >&5
+echo "configure:86713: checking for sqlite support" >&5
 # Check whether --with-sqlite or --without-sqlite was given.
 if test "${with_sqlite+set}" = set; then
   withval="$with_sqlite"
@@ -86752,7 +86753,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_sqlite_utf8=no
 
 echo $ac_n "checking whether to enable UTF-8 support in sqlite (default: ISO-8859-1)""... $ac_c" 1>&6
-echo "configure:86756: checking whether to enable UTF-8 support in sqlite (default: ISO-8859-1)" >&5
+echo "configure:86757: checking whether to enable UTF-8 support in sqlite (default: ISO-8859-1)" >&5
 # Check whether --enable-sqlite-utf8 or --disable-sqlite-utf8 was given.
 if test "${enable_sqlite_utf8+set}" = set; then
   enableval="$enable_sqlite_utf8"
@@ -86780,13 +86781,13 @@ if test "$PHP_SQLITE" != "no"; then
   if test "$PHP_PDO" != "no"; then
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:86784: checking for PDO includes" >&5
+echo "configure:86785: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:86790: checking for PDO includes" >&5
+echo "configure:86791: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -86820,7 +86821,7 @@ EOF
       SQLITE_DIR=$PHP_SQLITE
     else # search default path list
       echo $ac_n "checking for sqlite files in default path""... $ac_c" 1>&6
-echo "configure:86824: checking for sqlite files in default path" >&5
+echo "configure:86825: checking for sqlite files in default path" >&5
       for i in $SEARCH_PATH ; do
         if test -r $i/$SEARCH_FOR; then
           SQLITE_DIR=$i
@@ -86932,7 +86933,7 @@ echo "configure:86824: checking for sqlite files in default path" >&5
   done
 
   echo $ac_n "checking for sqlite_open in -lsqlite""... $ac_c" 1>&6
-echo "configure:86936: checking for sqlite_open in -lsqlite" >&5
+echo "configure:86937: checking for sqlite_open in -lsqlite" >&5
 ac_lib_var=`echo sqlite'_'sqlite_open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -86940,7 +86941,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsqlite  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 86944 "configure"
+#line 86945 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -86951,7 +86952,7 @@ int main() {
 sqlite_open()
 ; return 0; }
 EOF
-if { (eval echo configure:86955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:86956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -87124,7 +87125,7 @@ fi
   # Extract the first word of "lemon", so it can be a program name with args.
 set dummy lemon; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:87128: checking for $ac_word" >&5
+echo "configure:87129: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LEMON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -87152,7 +87153,7 @@ fi
 
   if test "$LEMON"; then
     echo $ac_n "checking for lemon version""... $ac_c" 1>&6
-echo "configure:87156: checking for lemon version" >&5
+echo "configure:87157: checking for lemon version" >&5
 if eval "test \"`echo '$''{'php_cv_lemon_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -87565,7 +87566,7 @@ but you've either not enabled pdo, or have disabled it.
   
 
     echo $ac_n "checking size of char *""... $ac_c" 1>&6
-echo "configure:87569: checking size of char *" >&5
+echo "configure:87570: checking size of char *" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_char_p'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -87573,7 +87574,7 @@ else
   ac_cv_sizeof_char_p=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 87577 "configure"
+#line 87578 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -87584,7 +87585,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:87588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:87589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_char_p=`cat conftestval`
 else
@@ -87646,12 +87647,12 @@ EOF
   for ac_func in usleep nanosleep
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:87650: checking for $ac_func" >&5
+echo "configure:87651: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 87655 "configure"
+#line 87656 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -87674,7 +87675,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:87678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:87679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -87702,17 +87703,17 @@ done
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:87706: checking for $ac_hdr" >&5
+echo "configure:87707: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 87711 "configure"
+#line 87712 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:87716: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:87717: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -87743,7 +87744,7 @@ fi
 
 
 echo $ac_n "checking whether flush should be called explicitly after a buffered io""... $ac_c" 1>&6
-echo "configure:87747: checking whether flush should be called explicitly after a buffered io" >&5
+echo "configure:87748: checking whether flush should be called explicitly after a buffered io" >&5
 if eval "test \"`echo '$''{'ac_cv_flush_io'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -87754,7 +87755,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 87758 "configure"
+#line 87759 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -87792,7 +87793,7 @@ int main(int argc, char **argv)
 }
 
 EOF
-if { (eval echo configure:87796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:87797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_flush_io=no
@@ -87820,7 +87821,7 @@ fi
 
 if test "$ac_cv_func_crypt" = "no"; then
   echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:87824: checking for crypt in -lcrypt" >&5
+echo "configure:87825: checking for crypt in -lcrypt" >&5
 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -87828,7 +87829,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 87832 "configure"
+#line 87833 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -87839,7 +87840,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:87843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:87844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -87868,7 +87869,7 @@ fi
 fi
   
 echo $ac_n "checking for standard DES crypt""... $ac_c" 1>&6
-echo "configure:87872: checking for standard DES crypt" >&5
+echo "configure:87873: checking for standard DES crypt" >&5
 if eval "test \"`echo '$''{'ac_cv_crypt_des'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -87879,7 +87880,7 @@ else
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 87883 "configure"
+#line 87884 "configure"
 #include "confdefs.h"
 
 #if HAVE_UNISTD_H
@@ -87898,7 +87899,7 @@ main() {
 #endif
 }
 EOF
-if { (eval echo configure:87902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:87903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_crypt_des=yes
@@ -87919,7 +87920,7 @@ fi
 echo "$ac_t""$ac_cv_crypt_des" 1>&6
 
 echo $ac_n "checking for extended DES crypt""... $ac_c" 1>&6
-echo "configure:87923: checking for extended DES crypt" >&5
+echo "configure:87924: checking for extended DES crypt" >&5
 if eval "test \"`echo '$''{'ac_cv_crypt_ext_des'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -87930,7 +87931,7 @@ else
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 87934 "configure"
+#line 87935 "configure"
 #include "confdefs.h"
 
 #if HAVE_UNISTD_H
@@ -87949,7 +87950,7 @@ main() {
 #endif
 }
 EOF
-if { (eval echo configure:87953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:87954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_crypt_ext_des=yes
@@ -87970,7 +87971,7 @@ fi
 echo "$ac_t""$ac_cv_crypt_ext_des" 1>&6
 
 echo $ac_n "checking for MD5 crypt""... $ac_c" 1>&6
-echo "configure:87974: checking for MD5 crypt" >&5
+echo "configure:87975: checking for MD5 crypt" >&5
 if eval "test \"`echo '$''{'ac_cv_crypt_md5'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -87981,7 +87982,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 87985 "configure"
+#line 87986 "configure"
 #include "confdefs.h"
 
 #if HAVE_UNISTD_H
@@ -88009,7 +88010,7 @@ main() {
 #endif
 }
 EOF
-if { (eval echo configure:88013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:88014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_crypt_md5=yes
@@ -88030,7 +88031,7 @@ fi
 echo "$ac_t""$ac_cv_crypt_md5" 1>&6
 
 echo $ac_n "checking for Blowfish crypt""... $ac_c" 1>&6
-echo "configure:88034: checking for Blowfish crypt" >&5
+echo "configure:88035: checking for Blowfish crypt" >&5
 if eval "test \"`echo '$''{'ac_cv_crypt_blowfish'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -88041,7 +88042,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 88045 "configure"
+#line 88046 "configure"
 #include "confdefs.h"
 
 #if HAVE_UNISTD_H
@@ -88066,7 +88067,7 @@ main() {
 #endif
 }
 EOF
-if { (eval echo configure:88070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:88071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_crypt_blowfish=yes
@@ -88087,7 +88088,7 @@ fi
 echo "$ac_t""$ac_cv_crypt_blowfish" 1>&6
 
 echo $ac_n "checking for SHA512 crypt""... $ac_c" 1>&6
-echo "configure:88091: checking for SHA512 crypt" >&5
+echo "configure:88092: checking for SHA512 crypt" >&5
 if eval "test \"`echo '$''{'ac_cv_crypt_SHA512'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -88098,7 +88099,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 88102 "configure"
+#line 88103 "configure"
 #include "confdefs.h"
 
 #if HAVE_UNISTD_H
@@ -88122,7 +88123,7 @@ main() {
 #endif
 }
 EOF
-if { (eval echo configure:88126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:88127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_crypt_SHA512=yes
@@ -88143,7 +88144,7 @@ fi
 echo "$ac_t""$ac_cv_crypt_SHA512" 1>&6
 
 echo $ac_n "checking for SHA256 crypt""... $ac_c" 1>&6
-echo "configure:88147: checking for SHA256 crypt" >&5
+echo "configure:88148: checking for SHA256 crypt" >&5
 if eval "test \"`echo '$''{'ac_cv_crypt_SHA256'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -88154,7 +88155,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 88158 "configure"
+#line 88159 "configure"
 #include "confdefs.h"
 
 #if HAVE_UNISTD_H
@@ -88178,7 +88179,7 @@ main() {
 #endif
 }
 EOF
-if { (eval echo configure:88182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:88183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_crypt_SHA256=yes
@@ -88202,13 +88203,13 @@ echo "$ac_t""$ac_cv_crypt_SHA256" 1>&6
 if test "$ac_cv_crypt_blowfish" = "no" || test "$ac_cv_crypt_des" = "no" || test "$ac_cv_crypt_ext_des" = "no" || test "x$php_crypt_r" = "x0"; then
 
         echo $ac_n "checking whether the compiler supports __alignof__""... $ac_c" 1>&6
-echo "configure:88206: checking whether the compiler supports __alignof__" >&5
+echo "configure:88207: checking whether the compiler supports __alignof__" >&5
 if eval "test \"`echo '$''{'ac_cv_alignof_exists'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 88212 "configure"
+#line 88213 "configure"
 #include "confdefs.h"
 
   
@@ -88218,7 +88219,7 @@ int main() {
   
 ; return 0; }
 EOF
-if { (eval echo configure:88222: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:88223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     ac_cv_alignof_exists=yes
@@ -88243,13 +88244,13 @@ EOF
   fi
 
         echo $ac_n "checking whether the compiler supports aligned attribute""... $ac_c" 1>&6
-echo "configure:88247: checking whether the compiler supports aligned attribute" >&5
+echo "configure:88248: checking whether the compiler supports aligned attribute" >&5
 if eval "test \"`echo '$''{'ac_cv_attribute_aligned'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 88253 "configure"
+#line 88254 "configure"
 #include "confdefs.h"
 
   
@@ -88259,7 +88260,7 @@ int main() {
   
 ; return 0; }
 EOF
-if { (eval echo configure:88263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:88264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     ac_cv_attribute_aligned=yes
@@ -88438,12 +88439,12 @@ fi
 for ac_func in getcwd getwd asinh acosh atanh log1p hypot glob strfmon nice fpclass isinf isnan mempcpy strpncpy
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:88442: checking for $ac_func" >&5
+echo "configure:88443: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 88447 "configure"
+#line 88448 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -88466,7 +88467,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:88470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -88491,7 +88492,7 @@ fi
 done
 
 echo $ac_n "checking for working fnmatch""... $ac_c" 1>&6
-echo "configure:88495: checking for working fnmatch" >&5
+echo "configure:88496: checking for working fnmatch" >&5
 if eval "test \"`echo '$''{'ac_cv_func_fnmatch_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -88502,11 +88503,11 @@ if test "$cross_compiling" = yes; then
   ac_cv_func_fnmatch_works=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 88506 "configure"
+#line 88507 "configure"
 #include "confdefs.h"
 main() { exit (fnmatch ("a*", "abc", 0) != 0); }
 EOF
-if { (eval echo configure:88510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:88511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_fnmatch_works=yes
 else
@@ -88533,12 +88534,12 @@ fi
 for ac_func in fork CreateProcess
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:88537: checking for $ac_func" >&5
+echo "configure:88538: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 88542 "configure"
+#line 88543 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -88561,7 +88562,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:88565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -88591,7 +88592,7 @@ fi
 done
 
 echo $ac_n "checking if your OS can spawn processes with inherited handles""... $ac_c" 1>&6
-echo "configure:88595: checking if your OS can spawn processes with inherited handles" >&5
+echo "configure:88596: checking if your OS can spawn processes with inherited handles" >&5
 if test "$php_can_support_proc_open" = "yes"; then
   echo "$ac_t""yes" 1>&6
   cat >> confdefs.h <<\EOF
@@ -88615,12 +88616,12 @@ fi
   unset found
   
   echo $ac_n "checking for res_nsearch""... $ac_c" 1>&6
-echo "configure:88619: checking for res_nsearch" >&5
+echo "configure:88620: checking for res_nsearch" >&5
 if eval "test \"`echo '$''{'ac_cv_func_res_nsearch'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 88624 "configure"
+#line 88625 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char res_nsearch(); below.  */
@@ -88643,7 +88644,7 @@ res_nsearch();
 
 ; return 0; }
 EOF
-if { (eval echo configure:88647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_res_nsearch=yes"
 else
@@ -88661,12 +88662,12 @@ if eval "test \"`echo '$ac_cv_func_'res_nsearch`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __res_nsearch""... $ac_c" 1>&6
-echo "configure:88665: checking for __res_nsearch" >&5
+echo "configure:88666: checking for __res_nsearch" >&5
 if eval "test \"`echo '$''{'ac_cv_func___res_nsearch'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 88670 "configure"
+#line 88671 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __res_nsearch(); below.  */
@@ -88689,7 +88690,7 @@ __res_nsearch();
 
 ; return 0; }
 EOF
-if { (eval echo configure:88693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___res_nsearch=yes"
 else
@@ -88727,7 +88728,7 @@ EOF
   unset ac_cv_lib_resolv___res_nsearch
   unset found
   echo $ac_n "checking for res_nsearch in -lresolv""... $ac_c" 1>&6
-echo "configure:88731: checking for res_nsearch in -lresolv" >&5
+echo "configure:88732: checking for res_nsearch in -lresolv" >&5
 ac_lib_var=`echo resolv'_'res_nsearch | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -88735,7 +88736,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 88739 "configure"
+#line 88740 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -88746,7 +88747,7 @@ int main() {
 res_nsearch()
 ; return 0; }
 EOF
-if { (eval echo configure:88750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -88766,7 +88767,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_nsearch in -lresolv""... $ac_c" 1>&6
-echo "configure:88770: checking for __res_nsearch in -lresolv" >&5
+echo "configure:88771: checking for __res_nsearch in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__res_nsearch | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -88774,7 +88775,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 88778 "configure"
+#line 88779 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -88785,7 +88786,7 @@ int main() {
 __res_nsearch()
 ; return 0; }
 EOF
-if { (eval echo configure:88789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -88817,11 +88818,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 88821 "configure"
+#line 88822 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:88825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:88826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -88863,7 +88864,7 @@ EOF
   unset ac_cv_lib_bind___res_nsearch
   unset found
   echo $ac_n "checking for res_nsearch in -lbind""... $ac_c" 1>&6
-echo "configure:88867: checking for res_nsearch in -lbind" >&5
+echo "configure:88868: checking for res_nsearch in -lbind" >&5
 ac_lib_var=`echo bind'_'res_nsearch | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -88871,7 +88872,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 88875 "configure"
+#line 88876 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -88882,7 +88883,7 @@ int main() {
 res_nsearch()
 ; return 0; }
 EOF
-if { (eval echo configure:88886: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88887: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -88902,7 +88903,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_nsearch in -lbind""... $ac_c" 1>&6
-echo "configure:88906: checking for __res_nsearch in -lbind" >&5
+echo "configure:88907: checking for __res_nsearch in -lbind" >&5
 ac_lib_var=`echo bind'_'__res_nsearch | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -88910,7 +88911,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 88914 "configure"
+#line 88915 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -88921,7 +88922,7 @@ int main() {
 __res_nsearch()
 ; return 0; }
 EOF
-if { (eval echo configure:88925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -88953,11 +88954,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 88957 "configure"
+#line 88958 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:88961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:88962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -88999,7 +89000,7 @@ EOF
   unset ac_cv_lib_socket___res_nsearch
   unset found
   echo $ac_n "checking for res_nsearch in -lsocket""... $ac_c" 1>&6
-echo "configure:89003: checking for res_nsearch in -lsocket" >&5
+echo "configure:89004: checking for res_nsearch in -lsocket" >&5
 ac_lib_var=`echo socket'_'res_nsearch | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89007,7 +89008,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89011 "configure"
+#line 89012 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89018,7 +89019,7 @@ int main() {
 res_nsearch()
 ; return 0; }
 EOF
-if { (eval echo configure:89022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89038,7 +89039,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_nsearch in -lsocket""... $ac_c" 1>&6
-echo "configure:89042: checking for __res_nsearch in -lsocket" >&5
+echo "configure:89043: checking for __res_nsearch in -lsocket" >&5
 ac_lib_var=`echo socket'_'__res_nsearch | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89046,7 +89047,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89050 "configure"
+#line 89051 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89057,7 +89058,7 @@ int main() {
 __res_nsearch()
 ; return 0; }
 EOF
-if { (eval echo configure:89061: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89089,11 +89090,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 89093 "configure"
+#line 89094 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:89097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:89098: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -89150,12 +89151,12 @@ EOF
   unset found
   
   echo $ac_n "checking for dns_search""... $ac_c" 1>&6
-echo "configure:89154: checking for dns_search" >&5
+echo "configure:89155: checking for dns_search" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dns_search'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 89159 "configure"
+#line 89160 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dns_search(); below.  */
@@ -89178,7 +89179,7 @@ dns_search();
 
 ; return 0; }
 EOF
-if { (eval echo configure:89182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dns_search=yes"
 else
@@ -89196,12 +89197,12 @@ if eval "test \"`echo '$ac_cv_func_'dns_search`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __dns_search""... $ac_c" 1>&6
-echo "configure:89200: checking for __dns_search" >&5
+echo "configure:89201: checking for __dns_search" >&5
 if eval "test \"`echo '$''{'ac_cv_func___dns_search'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 89205 "configure"
+#line 89206 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __dns_search(); below.  */
@@ -89224,7 +89225,7 @@ __dns_search();
 
 ; return 0; }
 EOF
-if { (eval echo configure:89228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___dns_search=yes"
 else
@@ -89262,7 +89263,7 @@ EOF
   unset ac_cv_lib_resolv___dns_search
   unset found
   echo $ac_n "checking for dns_search in -lresolv""... $ac_c" 1>&6
-echo "configure:89266: checking for dns_search in -lresolv" >&5
+echo "configure:89267: checking for dns_search in -lresolv" >&5
 ac_lib_var=`echo resolv'_'dns_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89270,7 +89271,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89274 "configure"
+#line 89275 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89281,7 +89282,7 @@ int main() {
 dns_search()
 ; return 0; }
 EOF
-if { (eval echo configure:89285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89301,7 +89302,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dns_search in -lresolv""... $ac_c" 1>&6
-echo "configure:89305: checking for __dns_search in -lresolv" >&5
+echo "configure:89306: checking for __dns_search in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__dns_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89309,7 +89310,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89313 "configure"
+#line 89314 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89320,7 +89321,7 @@ int main() {
 __dns_search()
 ; return 0; }
 EOF
-if { (eval echo configure:89324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89352,11 +89353,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 89356 "configure"
+#line 89357 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:89360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:89361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -89398,7 +89399,7 @@ EOF
   unset ac_cv_lib_bind___dns_search
   unset found
   echo $ac_n "checking for dns_search in -lbind""... $ac_c" 1>&6
-echo "configure:89402: checking for dns_search in -lbind" >&5
+echo "configure:89403: checking for dns_search in -lbind" >&5
 ac_lib_var=`echo bind'_'dns_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89406,7 +89407,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89410 "configure"
+#line 89411 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89417,7 +89418,7 @@ int main() {
 dns_search()
 ; return 0; }
 EOF
-if { (eval echo configure:89421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89437,7 +89438,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dns_search in -lbind""... $ac_c" 1>&6
-echo "configure:89441: checking for __dns_search in -lbind" >&5
+echo "configure:89442: checking for __dns_search in -lbind" >&5
 ac_lib_var=`echo bind'_'__dns_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89445,7 +89446,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89449 "configure"
+#line 89450 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89456,7 +89457,7 @@ int main() {
 __dns_search()
 ; return 0; }
 EOF
-if { (eval echo configure:89460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89488,11 +89489,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 89492 "configure"
+#line 89493 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:89496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:89497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -89534,7 +89535,7 @@ EOF
   unset ac_cv_lib_socket___dns_search
   unset found
   echo $ac_n "checking for dns_search in -lsocket""... $ac_c" 1>&6
-echo "configure:89538: checking for dns_search in -lsocket" >&5
+echo "configure:89539: checking for dns_search in -lsocket" >&5
 ac_lib_var=`echo socket'_'dns_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89542,7 +89543,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89546 "configure"
+#line 89547 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89553,7 +89554,7 @@ int main() {
 dns_search()
 ; return 0; }
 EOF
-if { (eval echo configure:89557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89573,7 +89574,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dns_search in -lsocket""... $ac_c" 1>&6
-echo "configure:89577: checking for __dns_search in -lsocket" >&5
+echo "configure:89578: checking for __dns_search in -lsocket" >&5
 ac_lib_var=`echo socket'_'__dns_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89581,7 +89582,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89585 "configure"
+#line 89586 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89592,7 +89593,7 @@ int main() {
 __dns_search()
 ; return 0; }
 EOF
-if { (eval echo configure:89596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89624,11 +89625,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 89628 "configure"
+#line 89629 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:89632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:89633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -89685,12 +89686,12 @@ EOF
   unset found
   
   echo $ac_n "checking for dn_expand""... $ac_c" 1>&6
-echo "configure:89689: checking for dn_expand" >&5
+echo "configure:89690: checking for dn_expand" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dn_expand'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 89694 "configure"
+#line 89695 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dn_expand(); below.  */
@@ -89713,7 +89714,7 @@ dn_expand();
 
 ; return 0; }
 EOF
-if { (eval echo configure:89717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dn_expand=yes"
 else
@@ -89731,12 +89732,12 @@ if eval "test \"`echo '$ac_cv_func_'dn_expand`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __dn_expand""... $ac_c" 1>&6
-echo "configure:89735: checking for __dn_expand" >&5
+echo "configure:89736: checking for __dn_expand" >&5
 if eval "test \"`echo '$''{'ac_cv_func___dn_expand'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 89740 "configure"
+#line 89741 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __dn_expand(); below.  */
@@ -89759,7 +89760,7 @@ __dn_expand();
 
 ; return 0; }
 EOF
-if { (eval echo configure:89763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___dn_expand=yes"
 else
@@ -89797,7 +89798,7 @@ EOF
   unset ac_cv_lib_resolv___dn_expand
   unset found
   echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6
-echo "configure:89801: checking for dn_expand in -lresolv" >&5
+echo "configure:89802: checking for dn_expand in -lresolv" >&5
 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89805,7 +89806,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89809 "configure"
+#line 89810 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89816,7 +89817,7 @@ int main() {
 dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:89820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89836,7 +89837,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_expand in -lresolv""... $ac_c" 1>&6
-echo "configure:89840: checking for __dn_expand in -lresolv" >&5
+echo "configure:89841: checking for __dn_expand in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89844,7 +89845,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89848 "configure"
+#line 89849 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89855,7 +89856,7 @@ int main() {
 __dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:89859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89887,11 +89888,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 89891 "configure"
+#line 89892 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:89895: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:89896: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -89933,7 +89934,7 @@ EOF
   unset ac_cv_lib_bind___dn_expand
   unset found
   echo $ac_n "checking for dn_expand in -lbind""... $ac_c" 1>&6
-echo "configure:89937: checking for dn_expand in -lbind" >&5
+echo "configure:89938: checking for dn_expand in -lbind" >&5
 ac_lib_var=`echo bind'_'dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89941,7 +89942,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89945 "configure"
+#line 89946 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89952,7 +89953,7 @@ int main() {
 dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:89956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89972,7 +89973,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_expand in -lbind""... $ac_c" 1>&6
-echo "configure:89976: checking for __dn_expand in -lbind" >&5
+echo "configure:89977: checking for __dn_expand in -lbind" >&5
 ac_lib_var=`echo bind'_'__dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -89980,7 +89981,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89984 "configure"
+#line 89985 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89991,7 +89992,7 @@ int main() {
 __dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:89995: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:89996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90023,11 +90024,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 90027 "configure"
+#line 90028 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:90031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:90032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -90069,7 +90070,7 @@ EOF
   unset ac_cv_lib_socket___dn_expand
   unset found
   echo $ac_n "checking for dn_expand in -lsocket""... $ac_c" 1>&6
-echo "configure:90073: checking for dn_expand in -lsocket" >&5
+echo "configure:90074: checking for dn_expand in -lsocket" >&5
 ac_lib_var=`echo socket'_'dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -90077,7 +90078,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 90081 "configure"
+#line 90082 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -90088,7 +90089,7 @@ int main() {
 dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:90092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90108,7 +90109,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_expand in -lsocket""... $ac_c" 1>&6
-echo "configure:90112: checking for __dn_expand in -lsocket" >&5
+echo "configure:90113: checking for __dn_expand in -lsocket" >&5
 ac_lib_var=`echo socket'_'__dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -90116,7 +90117,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 90120 "configure"
+#line 90121 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -90127,7 +90128,7 @@ int main() {
 __dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:90131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90159,11 +90160,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 90163 "configure"
+#line 90164 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:90167: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:90168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -90220,12 +90221,12 @@ EOF
   unset found
   
   echo $ac_n "checking for dn_skipname""... $ac_c" 1>&6
-echo "configure:90224: checking for dn_skipname" >&5
+echo "configure:90225: checking for dn_skipname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dn_skipname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 90229 "configure"
+#line 90230 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dn_skipname(); below.  */
@@ -90248,7 +90249,7 @@ dn_skipname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:90252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dn_skipname=yes"
 else
@@ -90266,12 +90267,12 @@ if eval "test \"`echo '$ac_cv_func_'dn_skipname`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __dn_skipname""... $ac_c" 1>&6
-echo "configure:90270: checking for __dn_skipname" >&5
+echo "configure:90271: checking for __dn_skipname" >&5
 if eval "test \"`echo '$''{'ac_cv_func___dn_skipname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 90275 "configure"
+#line 90276 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __dn_skipname(); below.  */
@@ -90294,7 +90295,7 @@ __dn_skipname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:90298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90299: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___dn_skipname=yes"
 else
@@ -90332,7 +90333,7 @@ EOF
   unset ac_cv_lib_resolv___dn_skipname
   unset found
   echo $ac_n "checking for dn_skipname in -lresolv""... $ac_c" 1>&6
-echo "configure:90336: checking for dn_skipname in -lresolv" >&5
+echo "configure:90337: checking for dn_skipname in -lresolv" >&5
 ac_lib_var=`echo resolv'_'dn_skipname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -90340,7 +90341,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 90344 "configure"
+#line 90345 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -90351,7 +90352,7 @@ int main() {
 dn_skipname()
 ; return 0; }
 EOF
-if { (eval echo configure:90355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90371,7 +90372,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_skipname in -lresolv""... $ac_c" 1>&6
-echo "configure:90375: checking for __dn_skipname in -lresolv" >&5
+echo "configure:90376: checking for __dn_skipname in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__dn_skipname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -90379,7 +90380,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 90383 "configure"
+#line 90384 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -90390,7 +90391,7 @@ int main() {
 __dn_skipname()
 ; return 0; }
 EOF
-if { (eval echo configure:90394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90422,11 +90423,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 90426 "configure"
+#line 90427 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:90430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:90431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -90468,7 +90469,7 @@ EOF
   unset ac_cv_lib_bind___dn_skipname
   unset found
   echo $ac_n "checking for dn_skipname in -lbind""... $ac_c" 1>&6
-echo "configure:90472: checking for dn_skipname in -lbind" >&5
+echo "configure:90473: checking for dn_skipname in -lbind" >&5
 ac_lib_var=`echo bind'_'dn_skipname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -90476,7 +90477,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 90480 "configure"
+#line 90481 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -90487,7 +90488,7 @@ int main() {
 dn_skipname()
 ; return 0; }
 EOF
-if { (eval echo configure:90491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90507,7 +90508,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_skipname in -lbind""... $ac_c" 1>&6
-echo "configure:90511: checking for __dn_skipname in -lbind" >&5
+echo "configure:90512: checking for __dn_skipname in -lbind" >&5
 ac_lib_var=`echo bind'_'__dn_skipname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -90515,7 +90516,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 90519 "configure"
+#line 90520 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -90526,7 +90527,7 @@ int main() {
 __dn_skipname()
 ; return 0; }
 EOF
-if { (eval echo configure:90530: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90558,11 +90559,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 90562 "configure"
+#line 90563 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:90566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:90567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -90604,7 +90605,7 @@ EOF
   unset ac_cv_lib_socket___dn_skipname
   unset found
   echo $ac_n "checking for dn_skipname in -lsocket""... $ac_c" 1>&6
-echo "configure:90608: checking for dn_skipname in -lsocket" >&5
+echo "configure:90609: checking for dn_skipname in -lsocket" >&5
 ac_lib_var=`echo socket'_'dn_skipname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -90612,7 +90613,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 90616 "configure"
+#line 90617 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -90623,7 +90624,7 @@ int main() {
 dn_skipname()
 ; return 0; }
 EOF
-if { (eval echo configure:90627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90643,7 +90644,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_skipname in -lsocket""... $ac_c" 1>&6
-echo "configure:90647: checking for __dn_skipname in -lsocket" >&5
+echo "configure:90648: checking for __dn_skipname in -lsocket" >&5
 ac_lib_var=`echo socket'_'__dn_skipname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -90651,7 +90652,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 90655 "configure"
+#line 90656 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -90662,7 +90663,7 @@ int main() {
 __dn_skipname()
 ; return 0; }
 EOF
-if { (eval echo configure:90666: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90694,11 +90695,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 90698 "configure"
+#line 90699 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:90702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:90703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -90757,12 +90758,12 @@ EOF
   unset found
   
   echo $ac_n "checking for res_search""... $ac_c" 1>&6
-echo "configure:90761: checking for res_search" >&5
+echo "configure:90762: checking for res_search" >&5
 if eval "test \"`echo '$''{'ac_cv_func_res_search'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 90766 "configure"
+#line 90767 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char res_search(); below.  */
@@ -90785,7 +90786,7 @@ res_search();
 
 ; return 0; }
 EOF
-if { (eval echo configure:90789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_res_search=yes"
 else
@@ -90803,12 +90804,12 @@ if eval "test \"`echo '$ac_cv_func_'res_search`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __res_search""... $ac_c" 1>&6
-echo "configure:90807: checking for __res_search" >&5
+echo "configure:90808: checking for __res_search" >&5
 if eval "test \"`echo '$''{'ac_cv_func___res_search'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 90812 "configure"
+#line 90813 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __res_search(); below.  */
@@ -90831,7 +90832,7 @@ __res_search();
 
 ; return 0; }
 EOF
-if { (eval echo configure:90835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___res_search=yes"
 else
@@ -90869,7 +90870,7 @@ EOF
   unset ac_cv_lib_resolv___res_search
   unset found
   echo $ac_n "checking for res_search in -lresolv""... $ac_c" 1>&6
-echo "configure:90873: checking for res_search in -lresolv" >&5
+echo "configure:90874: checking for res_search in -lresolv" >&5
 ac_lib_var=`echo resolv'_'res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -90877,7 +90878,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 90881 "configure"
+#line 90882 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -90888,7 +90889,7 @@ int main() {
 res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:90892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90908,7 +90909,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_search in -lresolv""... $ac_c" 1>&6
-echo "configure:90912: checking for __res_search in -lresolv" >&5
+echo "configure:90913: checking for __res_search in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -90916,7 +90917,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 90920 "configure"
+#line 90921 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -90927,7 +90928,7 @@ int main() {
 __res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:90931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -90959,11 +90960,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 90963 "configure"
+#line 90964 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:90967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:90968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -91005,7 +91006,7 @@ EOF
   unset ac_cv_lib_bind___res_search
   unset found
   echo $ac_n "checking for res_search in -lbind""... $ac_c" 1>&6
-echo "configure:91009: checking for res_search in -lbind" >&5
+echo "configure:91010: checking for res_search in -lbind" >&5
 ac_lib_var=`echo bind'_'res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -91013,7 +91014,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 91017 "configure"
+#line 91018 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -91024,7 +91025,7 @@ int main() {
 res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:91028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:91029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -91044,7 +91045,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_search in -lbind""... $ac_c" 1>&6
-echo "configure:91048: checking for __res_search in -lbind" >&5
+echo "configure:91049: checking for __res_search in -lbind" >&5
 ac_lib_var=`echo bind'_'__res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -91052,7 +91053,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 91056 "configure"
+#line 91057 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -91063,7 +91064,7 @@ int main() {
 __res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:91067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:91068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -91095,11 +91096,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 91099 "configure"
+#line 91100 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:91103: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:91104: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -91141,7 +91142,7 @@ EOF
   unset ac_cv_lib_socket___res_search
   unset found
   echo $ac_n "checking for res_search in -lsocket""... $ac_c" 1>&6
-echo "configure:91145: checking for res_search in -lsocket" >&5
+echo "configure:91146: checking for res_search in -lsocket" >&5
 ac_lib_var=`echo socket'_'res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -91149,7 +91150,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 91153 "configure"
+#line 91154 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -91160,7 +91161,7 @@ int main() {
 res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:91164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:91165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -91180,7 +91181,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_search in -lsocket""... $ac_c" 1>&6
-echo "configure:91184: checking for __res_search in -lsocket" >&5
+echo "configure:91185: checking for __res_search in -lsocket" >&5
 ac_lib_var=`echo socket'_'__res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -91188,7 +91189,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 91192 "configure"
+#line 91193 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -91199,7 +91200,7 @@ int main() {
 __res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:91203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:91204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -91231,11 +91232,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 91235 "configure"
+#line 91236 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:91239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:91240: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -91288,7 +91289,7 @@ EOF
 
 
 echo $ac_n "checking whether atof() accepts NAN""... $ac_c" 1>&6
-echo "configure:91292: checking whether atof() accepts NAN" >&5
+echo "configure:91293: checking whether atof() accepts NAN" >&5
 if eval "test \"`echo '$''{'ac_cv_atof_accept_nan'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -91299,7 +91300,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 91303 "configure"
+#line 91304 "configure"
 #include "confdefs.h"
 
 #include <math.h>
@@ -91319,7 +91320,7 @@ int main(int argc, char** argv)
 }
 
 EOF
-if { (eval echo configure:91323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:91324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_atof_accept_nan=yes
@@ -91346,7 +91347,7 @@ EOF
 fi
 
 echo $ac_n "checking whether atof() accepts INF""... $ac_c" 1>&6
-echo "configure:91350: checking whether atof() accepts INF" >&5
+echo "configure:91351: checking whether atof() accepts INF" >&5
 if eval "test \"`echo '$''{'ac_cv_atof_accept_inf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -91357,7 +91358,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 91361 "configure"
+#line 91362 "configure"
 #include "confdefs.h"
 
 #include <math.h>
@@ -91380,7 +91381,7 @@ int main(int argc, char** argv)
 }
 
 EOF
-if { (eval echo configure:91384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:91385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_atof_accept_inf=yes
@@ -91407,7 +91408,7 @@ EOF
 fi
 
 echo $ac_n "checking whether HUGE_VAL == INF""... $ac_c" 1>&6
-echo "configure:91411: checking whether HUGE_VAL == INF" >&5
+echo "configure:91412: checking whether HUGE_VAL == INF" >&5
 if eval "test \"`echo '$''{'ac_cv_huge_val_inf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -91418,7 +91419,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 91422 "configure"
+#line 91423 "configure"
 #include "confdefs.h"
 
 #include <math.h>
@@ -91441,7 +91442,7 @@ int main(int argc, char** argv)
 }
 
 EOF
-if { (eval echo configure:91445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:91446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_huge_val_inf=yes
@@ -91468,7 +91469,7 @@ EOF
 fi
 
 echo $ac_n "checking whether HUGE_VAL + -HUGEVAL == NAN""... $ac_c" 1>&6
-echo "configure:91472: checking whether HUGE_VAL + -HUGEVAL == NAN" >&5
+echo "configure:91473: checking whether HUGE_VAL + -HUGEVAL == NAN" >&5
 if eval "test \"`echo '$''{'ac_cv_huge_val_nan'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -91479,7 +91480,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 91483 "configure"
+#line 91484 "configure"
 #include "confdefs.h"
 
 #include <math.h>
@@ -91504,7 +91505,7 @@ int main(int argc, char** argv)
 }
 
 EOF
-if { (eval echo configure:91508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:91509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_huge_val_nan=yes
@@ -91531,13 +91532,13 @@ EOF
 fi
 
 echo $ac_n "checking whether strptime() declaration fails""... $ac_c" 1>&6
-echo "configure:91535: checking whether strptime() declaration fails" >&5
+echo "configure:91536: checking whether strptime() declaration fails" >&5
 if eval "test \"`echo '$''{'ac_cv_strptime_decl_fails'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 91541 "configure"
+#line 91542 "configure"
 #include "confdefs.h"
 
 #include <time.h>
@@ -91553,7 +91554,7 @@ int strptime(const char *s, const char *format, struct tm *tm);
 
 ; return 0; }
 EOF
-if { (eval echo configure:91557: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:91558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
   ac_cv_strptime_decl_fails=no
@@ -91581,17 +91582,17 @@ for ac_hdr in wchar.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:91585: checking for $ac_hdr" >&5
+echo "configure:91586: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 91590 "configure"
+#line 91591 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:91595: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:91596: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -91620,12 +91621,12 @@ done
 for ac_func in mblen
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:91624: checking for $ac_func" >&5
+echo "configure:91625: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 91629 "configure"
+#line 91630 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -91648,7 +91649,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:91652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:91653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -91675,12 +91676,12 @@ done
 for ac_func in mbrlen mbsinit
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:91679: checking for $ac_func" >&5
+echo "configure:91680: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 91684 "configure"
+#line 91685 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -91703,7 +91704,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:91707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:91708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -91728,13 +91729,13 @@ fi
 done
 
 echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:91732: checking for mbstate_t" >&5
+echo "configure:91733: checking for mbstate_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_mbstate_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 91738 "configure"
+#line 91739 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_WCHAR_H
@@ -91747,7 +91748,7 @@ int __tmp__() { mbstate_t a; }
 
 ; return 0; }
 EOF
-if { (eval echo configure:91751: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:91752: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
   ac_cv_type_mbstate_t=yes
@@ -91775,17 +91776,17 @@ for ac_hdr in atomic.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:91779: checking for $ac_hdr" >&5
+echo "configure:91780: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 91784 "configure"
+#line 91785 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:91789: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:91790: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -92175,7 +92176,7 @@ EOF
 php_with_sybase_ct=no
 
 echo $ac_n "checking for Sybase-CT support""... $ac_c" 1>&6
-echo "configure:92179: checking for Sybase-CT support" >&5
+echo "configure:92180: checking for Sybase-CT support" >&5
 # Check whether --with-sybase-ct or --without-sybase-ct was given.
 if test "${with_sybase_ct+set}" = set; then
   withval="$with_sybase_ct"
@@ -92827,7 +92828,7 @@ EOF
   done
 
   echo $ac_n "checking for netg_errstr in -lsybtcl64""... $ac_c" 1>&6
-echo "configure:92831: checking for netg_errstr in -lsybtcl64" >&5
+echo "configure:92832: checking for netg_errstr in -lsybtcl64" >&5
 ac_lib_var=`echo sybtcl64'_'netg_errstr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -92835,7 +92836,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsybtcl64  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 92839 "configure"
+#line 92840 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -92846,7 +92847,7 @@ int main() {
 netg_errstr()
 ; return 0; }
 EOF
-if { (eval echo configure:92850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:92851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93021,7 +93022,7 @@ fi
   done
 
   echo $ac_n "checking for insck__getVdate in -linsck64""... $ac_c" 1>&6
-echo "configure:93025: checking for insck__getVdate in -linsck64" >&5
+echo "configure:93026: checking for insck__getVdate in -linsck64" >&5
 ac_lib_var=`echo insck64'_'insck__getVdate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93029,7 +93030,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-linsck64  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93033 "configure"
+#line 93034 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93040,7 +93041,7 @@ int main() {
 insck__getVdate()
 ; return 0; }
 EOF
-if { (eval echo configure:93044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93188,7 +93189,7 @@ fi
   done
 
   echo $ac_n "checking for bsd_tcp in -linsck64""... $ac_c" 1>&6
-echo "configure:93192: checking for bsd_tcp in -linsck64" >&5
+echo "configure:93193: checking for bsd_tcp in -linsck64" >&5
 ac_lib_var=`echo insck64'_'bsd_tcp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93196,7 +93197,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-linsck64  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93200 "configure"
+#line 93201 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93207,7 +93208,7 @@ int main() {
 bsd_tcp()
 ; return 0; }
 EOF
-if { (eval echo configure:93211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93453,7 +93454,7 @@ fi
   done
 
   echo $ac_n "checking for netg_errstr in -lsybtcl""... $ac_c" 1>&6
-echo "configure:93457: checking for netg_errstr in -lsybtcl" >&5
+echo "configure:93458: checking for netg_errstr in -lsybtcl" >&5
 ac_lib_var=`echo sybtcl'_'netg_errstr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93461,7 +93462,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsybtcl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93465 "configure"
+#line 93466 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93472,7 +93473,7 @@ int main() {
 netg_errstr()
 ; return 0; }
 EOF
-if { (eval echo configure:93476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93647,7 +93648,7 @@ fi
   done
 
   echo $ac_n "checking for insck__getVdate in -linsck""... $ac_c" 1>&6
-echo "configure:93651: checking for insck__getVdate in -linsck" >&5
+echo "configure:93652: checking for insck__getVdate in -linsck" >&5
 ac_lib_var=`echo insck'_'insck__getVdate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93655,7 +93656,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-linsck  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93659 "configure"
+#line 93660 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93666,7 +93667,7 @@ int main() {
 insck__getVdate()
 ; return 0; }
 EOF
-if { (eval echo configure:93670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93814,7 +93815,7 @@ fi
   done
 
   echo $ac_n "checking for bsd_tcp in -linsck""... $ac_c" 1>&6
-echo "configure:93818: checking for bsd_tcp in -linsck" >&5
+echo "configure:93819: checking for bsd_tcp in -linsck" >&5
 ac_lib_var=`echo insck'_'bsd_tcp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93822,7 +93823,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-linsck  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93826 "configure"
+#line 93827 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93833,7 +93834,7 @@ int main() {
 bsd_tcp()
 ; return 0; }
 EOF
-if { (eval echo configure:93837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -94079,7 +94080,7 @@ fi
   done
 
   echo $ac_n "checking for netg_errstr in -ltcl""... $ac_c" 1>&6
-echo "configure:94083: checking for netg_errstr in -ltcl" >&5
+echo "configure:94084: checking for netg_errstr in -ltcl" >&5
 ac_lib_var=`echo tcl'_'netg_errstr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -94087,7 +94088,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ltcl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 94091 "configure"
+#line 94092 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -94098,7 +94099,7 @@ int main() {
 netg_errstr()
 ; return 0; }
 EOF
-if { (eval echo configure:94102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:94103: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -94273,7 +94274,7 @@ fi
   done
 
   echo $ac_n "checking for insck__getVdate in -linsck""... $ac_c" 1>&6
-echo "configure:94277: checking for insck__getVdate in -linsck" >&5
+echo "configure:94278: checking for insck__getVdate in -linsck" >&5
 ac_lib_var=`echo insck'_'insck__getVdate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -94281,7 +94282,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-linsck  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 94285 "configure"
+#line 94286 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -94292,7 +94293,7 @@ int main() {
 insck__getVdate()
 ; return 0; }
 EOF
-if { (eval echo configure:94296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:94297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -94440,7 +94441,7 @@ fi
   done
 
   echo $ac_n "checking for bsd_tcp in -linsck""... $ac_c" 1>&6
-echo "configure:94444: checking for bsd_tcp in -linsck" >&5
+echo "configure:94445: checking for bsd_tcp in -linsck" >&5
 ac_lib_var=`echo insck'_'bsd_tcp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -94448,7 +94449,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-linsck  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 94452 "configure"
+#line 94453 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -94459,7 +94460,7 @@ int main() {
 bsd_tcp()
 ; return 0; }
 EOF
-if { (eval echo configure:94463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:94464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -94519,7 +94520,7 @@ fi
 php_enable_sysvmsg=no
 
 echo $ac_n "checking whether to enable System V IPC support""... $ac_c" 1>&6
-echo "configure:94523: checking whether to enable System V IPC support" >&5
+echo "configure:94524: checking whether to enable System V IPC support" >&5
 # Check whether --enable-sysvmsg or --disable-sysvmsg was given.
 if test "${enable_sysvmsg+set}" = set; then
   enableval="$enable_sysvmsg"
@@ -94562,17 +94563,17 @@ echo "$ac_t""$ext_output" 1>&6
 if test "$PHP_SYSVMSG" != "no"; then
   ac_safe=`echo "sys/msg.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/msg.h""... $ac_c" 1>&6
-echo "configure:94566: checking for sys/msg.h" >&5
+echo "configure:94567: checking for sys/msg.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 94571 "configure"
+#line 94572 "configure"
 #include "confdefs.h"
 #include <sys/msg.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:94576: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:94577: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -94899,7 +94900,7 @@ fi
 php_enable_sysvsem=no
 
 echo $ac_n "checking whether to enable System V semaphore support""... $ac_c" 1>&6
-echo "configure:94903: checking whether to enable System V semaphore support" >&5
+echo "configure:94904: checking whether to enable System V semaphore support" >&5
 # Check whether --enable-sysvsem or --disable-sysvsem was given.
 if test "${enable_sysvsem+set}" = set; then
   enableval="$enable_sysvsem"
@@ -95237,12 +95238,12 @@ EOF
 EOF
 
  echo $ac_n "checking for union semun""... $ac_c" 1>&6
-echo "configure:95241: checking for union semun" >&5
+echo "configure:95242: checking for union semun" >&5
 if eval "test \"`echo '$''{'php_cv_semun'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 95246 "configure"
+#line 95247 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -95253,7 +95254,7 @@ int main() {
 union semun x;
 ; return 0; }
 EOF
-if { (eval echo configure:95257: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:95258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
      php_cv_semun=yes
@@ -95289,7 +95290,7 @@ fi
 php_enable_sysvshm=no
 
 echo $ac_n "checking whether to enable System V shared memory support""... $ac_c" 1>&6
-echo "configure:95293: checking whether to enable System V shared memory support" >&5
+echo "configure:95294: checking whether to enable System V shared memory support" >&5
 # Check whether --enable-sysvshm or --disable-sysvshm was given.
 if test "${enable_sysvshm+set}" = set; then
   enableval="$enable_sysvshm"
@@ -95633,7 +95634,7 @@ fi
 php_with_tidy=no
 
 echo $ac_n "checking for TIDY support""... $ac_c" 1>&6
-echo "configure:95637: checking for TIDY support" >&5
+echo "configure:95638: checking for TIDY support" >&5
 # Check whether --with-tidy or --without-tidy was given.
 if test "${with_tidy+set}" = set; then
   withval="$with_tidy"
@@ -95922,7 +95923,7 @@ if test "$PHP_TIDY" != "no"; then
   done
 
   echo $ac_n "checking for tidyOptGetDoc in -ltidy""... $ac_c" 1>&6
-echo "configure:95926: checking for tidyOptGetDoc in -ltidy" >&5
+echo "configure:95927: checking for tidyOptGetDoc in -ltidy" >&5
 ac_lib_var=`echo tidy'_'tidyOptGetDoc | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -95930,7 +95931,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ltidy  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 95934 "configure"
+#line 95935 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -95941,7 +95942,7 @@ int main() {
 tidyOptGetDoc()
 ; return 0; }
 EOF
-if { (eval echo configure:95945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:95946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -96285,7 +96286,7 @@ fi
 php_enable_tokenizer=yes
 
 echo $ac_n "checking whether to enable tokenizer support""... $ac_c" 1>&6
-echo "configure:96289: checking whether to enable tokenizer support" >&5
+echo "configure:96290: checking whether to enable tokenizer support" >&5
 # Check whether --enable-tokenizer or --disable-tokenizer was given.
 if test "${enable_tokenizer+set}" = set; then
   enableval="$enable_tokenizer"
@@ -96631,7 +96632,7 @@ fi
 php_enable_wddx=no
 
 echo $ac_n "checking whether to enable WDDX support""... $ac_c" 1>&6
-echo "configure:96635: checking whether to enable WDDX support" >&5
+echo "configure:96636: checking whether to enable WDDX support" >&5
 # Check whether --enable-wddx or --disable-wddx was given.
 if test "${enable_wddx+set}" = set; then
   enableval="$enable_wddx"
@@ -96676,7 +96677,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:96680: checking libxml2 install dir" >&5
+echo "configure:96681: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -96700,7 +96701,7 @@ fi
 php_with_libexpat_dir=no
 
 echo $ac_n "checking libexpat dir for WDDX""... $ac_c" 1>&6
-echo "configure:96704: checking libexpat dir for WDDX" >&5
+echo "configure:96705: checking libexpat dir for WDDX" >&5
 # Check whether --with-libexpat-dir or --without-libexpat-dir was given.
 if test "${with_libexpat_dir+set}" = set; then
   withval="$with_libexpat_dir"
@@ -96728,7 +96729,7 @@ if test "$PHP_WDDX" != "no"; then
 
     
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:96732: checking for xml2-config path" >&5
+echo "configure:96733: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -96886,7 +96887,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:96890: checking whether libxml build works" >&5
+echo "configure:96891: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -96902,7 +96903,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 96906 "configure"
+#line 96907 "configure"
 #include "confdefs.h"
 
     
@@ -96913,7 +96914,7 @@ else
     }
   
 EOF
-if { (eval echo configure:96917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:96918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -97480,7 +97481,7 @@ fi
 php_enable_xml=yes
 
 echo $ac_n "checking whether to enable XML support""... $ac_c" 1>&6
-echo "configure:97484: checking whether to enable XML support" >&5
+echo "configure:97485: checking whether to enable XML support" >&5
 # Check whether --enable-xml or --disable-xml was given.
 if test "${enable_xml+set}" = set; then
   enableval="$enable_xml"
@@ -97525,7 +97526,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:97529: checking libxml2 install dir" >&5
+echo "configure:97530: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -97549,7 +97550,7 @@ fi
 php_with_libexpat_dir=no
 
 echo $ac_n "checking libexpat install dir""... $ac_c" 1>&6
-echo "configure:97553: checking libexpat install dir" >&5
+echo "configure:97554: checking libexpat install dir" >&5
 # Check whether --with-libexpat-dir or --without-libexpat-dir was given.
 if test "${with_libexpat_dir+set}" = set; then
   withval="$with_libexpat_dir"
@@ -97578,7 +97579,7 @@ if test "$PHP_XML" != "no"; then
 
     
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:97582: checking for xml2-config path" >&5
+echo "configure:97583: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -97736,7 +97737,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:97740: checking whether libxml build works" >&5
+echo "configure:97741: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -97752,7 +97753,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 97756 "configure"
+#line 97757 "configure"
 #include "confdefs.h"
 
     
@@ -97763,7 +97764,7 @@ else
     }
   
 EOF
-if { (eval echo configure:97767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:97768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -98299,7 +98300,7 @@ fi
 php_enable_xmlreader=yes
 
 echo $ac_n "checking whether to enable XMLReader support""... $ac_c" 1>&6
-echo "configure:98303: checking whether to enable XMLReader support" >&5
+echo "configure:98304: checking whether to enable XMLReader support" >&5
 # Check whether --enable-xmlreader or --disable-xmlreader was given.
 if test "${enable_xmlreader+set}" = set; then
   enableval="$enable_xmlreader"
@@ -98344,7 +98345,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:98348: checking libxml2 install dir" >&5
+echo "configure:98349: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -98372,7 +98373,7 @@ if test "$PHP_XMLREADER" != "no"; then
 
   
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:98376: checking for xml2-config path" >&5
+echo "configure:98377: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -98530,7 +98531,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:98534: checking whether libxml build works" >&5
+echo "configure:98535: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -98546,7 +98547,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 98550 "configure"
+#line 98551 "configure"
 #include "confdefs.h"
 
     
@@ -98557,7 +98558,7 @@ else
     }
   
 EOF
-if { (eval echo configure:98561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:98562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -98939,7 +98940,7 @@ fi
 php_with_xmlrpc=no
 
 echo $ac_n "checking for XMLRPC-EPI support""... $ac_c" 1>&6
-echo "configure:98943: checking for XMLRPC-EPI support" >&5
+echo "configure:98944: checking for XMLRPC-EPI support" >&5
 # Check whether --with-xmlrpc or --without-xmlrpc was given.
 if test "${with_xmlrpc+set}" = set; then
   withval="$with_xmlrpc"
@@ -98984,7 +98985,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:98988: checking libxml2 install dir" >&5
+echo "configure:98989: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -99008,7 +99009,7 @@ fi
 php_with_libexpat_dir=no
 
 echo $ac_n "checking libexpat dir for XMLRPC-EPI""... $ac_c" 1>&6
-echo "configure:99012: checking libexpat dir for XMLRPC-EPI" >&5
+echo "configure:99013: checking libexpat dir for XMLRPC-EPI" >&5
 # Check whether --with-libexpat-dir or --without-libexpat-dir was given.
 if test "${with_libexpat_dir+set}" = set; then
   withval="$with_libexpat_dir"
@@ -99031,7 +99032,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_iconv_dir=no
 
 echo $ac_n "checking iconv dir for XMLRPC-EPI""... $ac_c" 1>&6
-echo "configure:99035: checking iconv dir for XMLRPC-EPI" >&5
+echo "configure:99036: checking iconv dir for XMLRPC-EPI" >&5
 # Check whether --with-iconv-dir or --without-iconv-dir was given.
 if test "${with_iconv_dir+set}" = set; then
   withval="$with_iconv_dir"
@@ -99087,7 +99088,7 @@ EOF
 
     
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:99091: checking for xml2-config path" >&5
+echo "configure:99092: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -99245,7 +99246,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:99249: checking whether libxml build works" >&5
+echo "configure:99250: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -99261,7 +99262,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 99265 "configure"
+#line 99266 "configure"
 #include "confdefs.h"
 
     
@@ -99272,7 +99273,7 @@ else
     }
   
 EOF
-if { (eval echo configure:99276: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:99277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -99541,12 +99542,12 @@ EOF
 
         if test "$PHP_ICONV" = "yes"; then
     echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:99545: checking for iconv" >&5
+echo "configure:99546: checking for iconv" >&5
 if eval "test \"`echo '$''{'ac_cv_func_iconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 99550 "configure"
+#line 99551 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char iconv(); below.  */
@@ -99569,7 +99570,7 @@ iconv();
 
 ; return 0; }
 EOF
-if { (eval echo configure:99573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:99574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_iconv=yes"
 else
@@ -99590,12 +99591,12 @@ else
   echo "$ac_t""no" 1>&6
 
       echo $ac_n "checking for libiconv""... $ac_c" 1>&6
-echo "configure:99594: checking for libiconv" >&5
+echo "configure:99595: checking for libiconv" >&5
 if eval "test \"`echo '$''{'ac_cv_func_libiconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 99599 "configure"
+#line 99600 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char libiconv(); below.  */
@@ -99618,7 +99619,7 @@ libiconv();
 
 ; return 0; }
 EOF
-if { (eval echo configure:99622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:99623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_libiconv=yes"
 else
@@ -99774,7 +99775,7 @@ EOF
   done
 
   echo $ac_n "checking for libiconv in -l$iconv_lib_name""... $ac_c" 1>&6
-echo "configure:99778: checking for libiconv in -l$iconv_lib_name" >&5
+echo "configure:99779: checking for libiconv in -l$iconv_lib_name" >&5
 ac_lib_var=`echo $iconv_lib_name'_'libiconv | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -99782,7 +99783,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$iconv_lib_name  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 99786 "configure"
+#line 99787 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -99793,7 +99794,7 @@ int main() {
 libiconv()
 ; return 0; }
 EOF
-if { (eval echo configure:99797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:99798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -99934,7 +99935,7 @@ else
   done
 
   echo $ac_n "checking for iconv in -l$iconv_lib_name""... $ac_c" 1>&6
-echo "configure:99938: checking for iconv in -l$iconv_lib_name" >&5
+echo "configure:99939: checking for iconv in -l$iconv_lib_name" >&5
 ac_lib_var=`echo $iconv_lib_name'_'iconv | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -99942,7 +99943,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$iconv_lib_name  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 99946 "configure"
+#line 99947 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -99953,7 +99954,7 @@ int main() {
 iconv()
 ; return 0; }
 EOF
-if { (eval echo configure:99957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:99958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -100143,7 +100144,7 @@ if test "$PHP_XMLRPC" = "yes"; then
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:100147: checking for $ac_word" >&5
+echo "configure:100148: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -100171,21 +100172,21 @@ else
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:100175: checking for inline" >&5
+echo "configure:100176: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 100182 "configure"
+#line 100183 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:100189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:100190: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -100223,12 +100224,12 @@ EOF
 
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:100227: checking for ANSI C header files" >&5
+echo "configure:100228: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 100232 "configure"
+#line 100233 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -100236,7 +100237,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:100240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:100241: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -100253,7 +100254,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 100257 "configure"
+#line 100258 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -100271,7 +100272,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 100275 "configure"
+#line 100276 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -100292,7 +100293,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 100296 "configure"
+#line 100297 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -100303,7 +100304,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:100307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:100308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -100330,17 +100331,17 @@ for ac_hdr in xmlparse.h xmltok.h stdlib.h strings.h string.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:100334: checking for $ac_hdr" >&5
+echo "configure:100335: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 100339 "configure"
+#line 100340 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:100344: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:100345: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -100372,7 +100373,7 @@ done
 
 
 echo $ac_n "checking size of char""... $ac_c" 1>&6
-echo "configure:100376: checking size of char" >&5
+echo "configure:100377: checking size of char" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -100380,7 +100381,7 @@ else
   ac_cv_sizeof_char=1
 else
   cat > conftest.$ac_ext <<EOF
-#line 100384 "configure"
+#line 100385 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -100391,7 +100392,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:100395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:100396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_char=`cat conftestval`
 else
@@ -100412,7 +100413,7 @@ EOF
 
 
 echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:100416: checking size of int" >&5
+echo "configure:100417: checking size of int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -100420,7 +100421,7 @@ else
   ac_cv_sizeof_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 100424 "configure"
+#line 100425 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -100431,7 +100432,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:100435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:100436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -100451,7 +100452,7 @@ EOF
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:100455: checking size of long" >&5
+echo "configure:100456: checking size of long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -100459,7 +100460,7 @@ else
   ac_cv_sizeof_long=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 100463 "configure"
+#line 100464 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -100470,7 +100471,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:100474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:100475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -100490,7 +100491,7 @@ EOF
 
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:100494: checking size of long long" >&5
+echo "configure:100495: checking size of long long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -100498,7 +100499,7 @@ else
   ac_cv_sizeof_long_long=8
 else
   cat > conftest.$ac_ext <<EOF
-#line 100502 "configure"
+#line 100503 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -100509,7 +100510,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:100513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:100514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_long=`cat conftestval`
 else
@@ -100529,12 +100530,12 @@ EOF
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:100533: checking for size_t" >&5
+echo "configure:100534: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 100538 "configure"
+#line 100539 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -100562,12 +100563,12 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:100566: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:100567: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 100571 "configure"
+#line 100572 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -100576,7 +100577,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:100580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:100581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -100597,12 +100598,12 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:100601: checking for uid_t in sys/types.h" >&5
+echo "configure:100602: checking for uid_t in sys/types.h" >&5
 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 100606 "configure"
+#line 100607 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -100642,12 +100643,12 @@ for ac_func in \
  memcpy memmove
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:100646: checking for $ac_func" >&5
+echo "configure:100647: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 100651 "configure"
+#line 100652 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -100670,7 +100671,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:100674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:100675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -101024,7 +101025,7 @@ elif test "$PHP_XMLRPC" != "no"; then
     XMLRPC_DIR=$PHP_XMLRPC/include/xmlrpc-epi
   else
     echo $ac_n "checking for XMLRPC-EPI in default path""... $ac_c" 1>&6
-echo "configure:101028: checking for XMLRPC-EPI in default path" >&5
+echo "configure:101029: checking for XMLRPC-EPI in default path" >&5
     for i in /usr/local /usr; do
       if test -r $i/include/xmlrpc.h; then
         XMLRPC_DIR=$i/include
@@ -101467,7 +101468,7 @@ fi
 php_enable_xmlwriter=yes
 
 echo $ac_n "checking whether to enable XMLWriter support""... $ac_c" 1>&6
-echo "configure:101471: checking whether to enable XMLWriter support" >&5
+echo "configure:101472: checking whether to enable XMLWriter support" >&5
 # Check whether --enable-xmlwriter or --disable-xmlwriter was given.
 if test "${enable_xmlwriter+set}" = set; then
   enableval="$enable_xmlwriter"
@@ -101512,7 +101513,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:101516: checking libxml2 install dir" >&5
+echo "configure:101517: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -101540,7 +101541,7 @@ if test "$PHP_XMLWRITER" != "no"; then
 
   
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:101544: checking for xml2-config path" >&5
+echo "configure:101545: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -101698,7 +101699,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:101702: checking whether libxml build works" >&5
+echo "configure:101703: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -101714,7 +101715,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 101718 "configure"
+#line 101719 "configure"
 #include "confdefs.h"
 
     
@@ -101725,7 +101726,7 @@ else
     }
   
 EOF
-if { (eval echo configure:101729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:101730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -102075,7 +102076,7 @@ fi
 php_with_xsl=no
 
 echo $ac_n "checking for XSL support""... $ac_c" 1>&6
-echo "configure:102079: checking for XSL support" >&5
+echo "configure:102080: checking for XSL support" >&5
 # Check whether --with-xsl or --without-xsl was given.
 if test "${with_xsl+set}" = set; then
   withval="$with_xsl"
@@ -102275,7 +102276,7 @@ if test "$PHP_XSL" != "no"; then
 
       
       echo $ac_n "checking for EXSLT support""... $ac_c" 1>&6
-echo "configure:102279: checking for EXSLT support" >&5
+echo "configure:102280: checking for EXSLT support" >&5
       for i in $PHP_XSL /usr/local /usr; do
         if test -r "$i/include/libexslt/exslt.h"; then
           PHP_XSL_EXSL_DIR=$i
@@ -102751,7 +102752,7 @@ fi
 php_enable_zip=no
 
 echo $ac_n "checking for zip archive read/writesupport""... $ac_c" 1>&6
-echo "configure:102755: checking for zip archive read/writesupport" >&5
+echo "configure:102756: checking for zip archive read/writesupport" >&5
 # Check whether --enable-zip or --disable-zip was given.
 if test "${enable_zip+set}" = set; then
   enableval="$enable_zip"
@@ -102796,7 +102797,7 @@ if test -z "$PHP_ZLIB_DIR"; then
 php_with_zlib_dir=no
 
 echo $ac_n "checking for the location of libz""... $ac_c" 1>&6
-echo "configure:102800: checking for the location of libz" >&5
+echo "configure:102801: checking for the location of libz" >&5
 # Check whether --with-zlib-dir or --without-zlib-dir was given.
 if test "${with_zlib_dir+set}" = set; then
   withval="$with_zlib_dir"
@@ -102820,7 +102821,7 @@ fi
 php_with_pcre_dir=no
 
 echo $ac_n "checking pcre install prefix""... $ac_c" 1>&6
-echo "configure:102824: checking pcre install prefix" >&5
+echo "configure:102825: checking pcre install prefix" >&5
 # Check whether --with-pcre-dir or --without-pcre-dir was given.
 if test "${with_pcre_dir+set}" = set; then
   withval="$with_pcre_dir"
@@ -102864,7 +102865,7 @@ if test "$PHP_ZIP" != "no"; then
   fi
 
     echo $ac_n "checking for the location of zlib""... $ac_c" 1>&6
-echo "configure:102868: checking for the location of zlib" >&5
+echo "configure:102869: checking for the location of zlib" >&5
   if test "$PHP_ZLIB_DIR" = "no"; then
     { echo "configure: error: zip support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located" 1>&2; exit 1; }
   else
@@ -103002,7 +103003,7 @@ echo "configure:102868: checking for the location of zlib" >&5
     old_CPPFLAGS=$CPPFLAGS
   CPPFLAGS=$INCLUDES
   cat > conftest.$ac_ext <<EOF
-#line 103006 "configure"
+#line 103007 "configure"
 #include "confdefs.h"
 
 #include <main/php_config.h>
@@ -103021,7 +103022,7 @@ else
   rm -rf conftest*
   
     cat > conftest.$ac_ext <<EOF
-#line 103025 "configure"
+#line 103026 "configure"
 #include "confdefs.h"
 
 #include <main/php_config.h>
@@ -103389,7 +103390,7 @@ fi
 php_enable_disable_mysqlnd_compression_support=yes
 
 echo $ac_n "checking whether to disable compressed protocol support in mysqlnd""... $ac_c" 1>&6
-echo "configure:103393: checking whether to disable compressed protocol support in mysqlnd" >&5
+echo "configure:103394: checking whether to disable compressed protocol support in mysqlnd" >&5
 # Check whether --enable-disable_mysqlnd_compression_support or --disable-disable_mysqlnd_compression_support was given.
 if test "${enable_disable_mysqlnd_compression_support+set}" = set; then
   enableval="$enable_disable_mysqlnd_compression_support"
@@ -103434,7 +103435,7 @@ if test -z "$PHP_ZLIB_DIR"; then
 php_with_zlib_dir=no
 
 echo $ac_n "checking for the location of libz""... $ac_c" 1>&6
-echo "configure:103438: checking for the location of libz" >&5
+echo "configure:103439: checking for the location of libz" >&5
 # Check whether --with-zlib-dir or --without-zlib-dir was given.
 if test "${with_zlib_dir+set}" = set; then
   withval="$with_zlib_dir"
@@ -103900,7 +103901,7 @@ if test "$PHP_MYSQLND_ENABLED" = "yes" || test "$PHP_MYSQLI" != "no"; then
     
   for php_typename in int8 uint8 int16 uint16 int32 uint32 uchar ulong int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t; do
     echo $ac_n "checking whether $php_typename exists""... $ac_c" 1>&6
-echo "configure:103904: checking whether $php_typename exists" >&5
+echo "configure:103905: checking whether $php_typename exists" >&5
     
   php_cache_value=php_cv_sizeof_$php_typename
   if eval "test \"`echo '$''{'php_cv_sizeof_$php_typename'+set}'`\" = set"; then
@@ -103917,7 +103918,7 @@ else
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 103921 "configure"
+#line 103922 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #if STDC_HEADERS
@@ -103947,7 +103948,7 @@ int main()
 }
   
 EOF
-if { (eval echo configure:103951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:103952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     eval $php_cache_value=`cat conftestval`
@@ -104087,7 +104088,7 @@ if test "$PHP_RECODE" != "no"; then
   done
 
   echo $ac_n "checking for hash_insert in -l$MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:104091: checking for hash_insert in -l$MYSQL_LIBNAME" >&5
+echo "configure:104092: checking for hash_insert in -l$MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $MYSQL_LIBNAME'_'hash_insert | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -104095,7 +104096,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 104099 "configure"
+#line 104100 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -104106,7 +104107,7 @@ int main() {
 hash_insert()
 ; return 0; }
 EOF
-if { (eval echo configure:104110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:104111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -104208,7 +104209,7 @@ fi
 php_with_pear=DEFAULT
 
 echo $ac_n "checking whether to install PEAR""... $ac_c" 1>&6
-echo "configure:104212: checking whether to install PEAR" >&5
+echo "configure:104213: checking whether to install PEAR" >&5
 # Check whether --with-pear or --without-pear was given.
 if test "${with_pear+set}" = set; then
   withval="$with_pear"
@@ -104310,7 +104311,7 @@ fi
   bison_version=none
   if test "$YACC"; then
     echo $ac_n "checking for bison version""... $ac_c" 1>&6
-echo "configure:104314: checking for bison version" >&5
+echo "configure:104315: checking for bison version" >&5
 if eval "test \"`echo '$''{'php_cv_bison_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -104366,17 +104367,17 @@ dlfcn.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:104370: checking for $ac_hdr" >&5
+echo "configure:104371: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104375 "configure"
+#line 104376 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:104380: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:104381: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -104404,12 +104405,12 @@ done
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:104408: checking for size_t" >&5
+echo "configure:104409: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104413 "configure"
+#line 104414 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -104437,12 +104438,12 @@ EOF
 fi
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:104441: checking return type of signal handlers" >&5
+echo "configure:104442: checking return type of signal handlers" >&5
 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104446 "configure"
+#line 104447 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -104459,7 +104460,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:104463: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:104464: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -104483,12 +104484,12 @@ EOF
 
 
 echo $ac_n "checking for uint""... $ac_c" 1>&6
-echo "configure:104487: checking for uint" >&5
+echo "configure:104488: checking for uint" >&5
 if eval "test \"`echo '$''{'ac_cv_type_uint'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104492 "configure"
+#line 104493 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -104516,12 +104517,12 @@ EOF
 fi
 
 echo $ac_n "checking for ulong""... $ac_c" 1>&6
-echo "configure:104520: checking for ulong" >&5
+echo "configure:104521: checking for ulong" >&5
 if eval "test \"`echo '$''{'ac_cv_type_ulong'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104525 "configure"
+#line 104526 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -104551,9 +104552,9 @@ fi
 
 
 echo $ac_n "checking for int32_t""... $ac_c" 1>&6
-echo "configure:104555: checking for int32_t" >&5
+echo "configure:104556: checking for int32_t" >&5
 cat > conftest.$ac_ext <<EOF
-#line 104557 "configure"
+#line 104558 "configure"
 #include "confdefs.h"
 
 #if HAVE_SYS_TYPES_H  
@@ -104572,7 +104573,7 @@ if (sizeof (int32_t))
 
 ; return 0; }
 EOF
-if { (eval echo configure:104576: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:104577: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
   cat >> confdefs.h <<EOF
@@ -104591,9 +104592,9 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for uint32_t""... $ac_c" 1>&6
-echo "configure:104595: checking for uint32_t" >&5
+echo "configure:104596: checking for uint32_t" >&5
 cat > conftest.$ac_ext <<EOF
-#line 104597 "configure"
+#line 104598 "configure"
 #include "confdefs.h"
 
 #if HAVE_SYS_TYPES_H  
@@ -104612,7 +104613,7 @@ if (sizeof (uint32_t))
 
 ; return 0; }
 EOF
-if { (eval echo configure:104616: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:104617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
   cat >> confdefs.h <<EOF
@@ -104631,12 +104632,12 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:104635: checking for vprintf" >&5
+echo "configure:104636: checking for vprintf" >&5
 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104640 "configure"
+#line 104641 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vprintf(); below.  */
@@ -104659,7 +104660,7 @@ vprintf();
 
 ; return 0; }
 EOF
-if { (eval echo configure:104663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:104664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_vprintf=yes"
 else
@@ -104683,12 +104684,12 @@ fi
 
 if test "$ac_cv_func_vprintf" != yes; then
 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:104687: checking for _doprnt" >&5
+echo "configure:104688: checking for _doprnt" >&5
 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104692 "configure"
+#line 104693 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _doprnt(); below.  */
@@ -104711,7 +104712,7 @@ _doprnt();
 
 ; return 0; }
 EOF
-if { (eval echo configure:104715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:104716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func__doprnt=yes"
 else
@@ -104736,7 +104737,7 @@ fi
 fi
 
 echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:104740: checking for 8-bit clean memcmp" >&5
+echo "configure:104741: checking for 8-bit clean memcmp" >&5
 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -104744,7 +104745,7 @@ else
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 104748 "configure"
+#line 104749 "configure"
 #include "confdefs.h"
 
 main()
@@ -104754,7 +104755,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:104758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:104759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_memcmp_clean=yes
 else
@@ -104774,19 +104775,19 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:104778: checking for working alloca.h" >&5
+echo "configure:104779: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104783 "configure"
+#line 104784 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:104790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:104791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -104807,12 +104808,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:104811: checking for alloca" >&5
+echo "configure:104812: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104816 "configure"
+#line 104817 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -104840,7 +104841,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:104844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:104845: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -104872,12 +104873,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:104876: checking whether alloca needs Cray hooks" >&5
+echo "configure:104877: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104881 "configure"
+#line 104882 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -104902,12 +104903,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:104906: checking for $ac_func" >&5
+echo "configure:104907: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 104911 "configure"
+#line 104912 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -104930,7 +104931,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:104934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:104935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -104957,7 +104958,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:104961: checking stack direction for C alloca" >&5
+echo "configure:104962: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -104965,7 +104966,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 104969 "configure"
+#line 104970 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -104984,7 +104985,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:104988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:104989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -105008,12 +105009,12 @@ fi
 for ac_func in memcpy strdup getpid kill strtod strtol finite fpclass sigsetjmp
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:105012: checking for $ac_func" >&5
+echo "configure:105013: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 105017 "configure"
+#line 105018 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -105036,7 +105037,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:105040: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:105041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -105062,7 +105063,7 @@ done
 
 
   echo $ac_n "checking whether sprintf is broken""... $ac_c" 1>&6
-echo "configure:105066: checking whether sprintf is broken" >&5
+echo "configure:105067: checking whether sprintf is broken" >&5
 if eval "test \"`echo '$''{'ac_cv_broken_sprintf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -105073,11 +105074,11 @@ else
     
 else
   cat > conftest.$ac_ext <<EOF
-#line 105077 "configure"
+#line 105078 "configure"
 #include "confdefs.h"
 main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }
 EOF
-if { (eval echo configure:105081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:105082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
       ac_cv_broken_sprintf=no
@@ -105111,12 +105112,12 @@ EOF
 for ac_func in finite isfinite isinf isnan
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:105115: checking for $ac_func" >&5
+echo "configure:105116: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 105120 "configure"
+#line 105121 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -105139,7 +105140,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:105143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:105144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -105166,13 +105167,13 @@ done
 
 
   echo $ac_n "checking whether fp_except is defined""... $ac_c" 1>&6
-echo "configure:105170: checking whether fp_except is defined" >&5
+echo "configure:105171: checking whether fp_except is defined" >&5
 if eval "test \"`echo '$''{'ac_cv_type_fp_except'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 105176 "configure"
+#line 105177 "configure"
 #include "confdefs.h"
 
 #include <floatingpoint.h>
@@ -105183,7 +105184,7 @@ fp_except x = (fp_except) 0;
 
 ; return 0; }
 EOF
-if { (eval echo configure:105187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:105188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
      ac_cv_type_fp_except=yes
@@ -105210,9 +105211,9 @@ EOF
 
 
   echo $ac_n "checking for usable _FPU_SETCW""... $ac_c" 1>&6
-echo "configure:105214: checking for usable _FPU_SETCW" >&5
+echo "configure:105215: checking for usable _FPU_SETCW" >&5
   cat > conftest.$ac_ext <<EOF
-#line 105216 "configure"
+#line 105217 "configure"
 #include "confdefs.h"
 
     #include <fpu_control.h>
@@ -105232,7 +105233,7 @@ int main() {
   
 ; return 0; }
 EOF
-if { (eval echo configure:105236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:105237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cfp_have__fpu_setcw=yes
 else
@@ -105253,9 +105254,9 @@ EOF
   fi
   
   echo $ac_n "checking for usable fpsetprec""... $ac_c" 1>&6
-echo "configure:105257: checking for usable fpsetprec" >&5
+echo "configure:105258: checking for usable fpsetprec" >&5
   cat > conftest.$ac_ext <<EOF
-#line 105259 "configure"
+#line 105260 "configure"
 #include "confdefs.h"
 
     #include <machine/ieeefp.h>
@@ -105274,7 +105275,7 @@ int main() {
   
 ; return 0; }
 EOF
-if { (eval echo configure:105278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:105279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cfp_have_fpsetprec=yes
 else
@@ -105295,9 +105296,9 @@ EOF
   fi
 
   echo $ac_n "checking for usable _controlfp""... $ac_c" 1>&6
-echo "configure:105299: checking for usable _controlfp" >&5
+echo "configure:105300: checking for usable _controlfp" >&5
   cat > conftest.$ac_ext <<EOF
-#line 105301 "configure"
+#line 105302 "configure"
 #include "confdefs.h"
 
     #include <float.h>
@@ -105316,7 +105317,7 @@ int main() {
   
 ; return 0; }
 EOF
-if { (eval echo configure:105320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:105321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cfp_have__controlfp=yes
 else
@@ -105337,9 +105338,9 @@ EOF
   fi
 
   echo $ac_n "checking for usable _controlfp_s""... $ac_c" 1>&6
-echo "configure:105341: checking for usable _controlfp_s" >&5
+echo "configure:105342: checking for usable _controlfp_s" >&5
   cat > conftest.$ac_ext <<EOF
-#line 105343 "configure"
+#line 105344 "configure"
 #include "confdefs.h"
 
    #include <float.h>
@@ -105359,7 +105360,7 @@ int main() {
   
 ; return 0; }
 EOF
-if { (eval echo configure:105363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:105364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cfp_have__controlfp_s=yes
 else
@@ -105380,9 +105381,9 @@ EOF
   fi
 
   echo $ac_n "checking whether FPU control word can be manipulated by inline assembler""... $ac_c" 1>&6
-echo "configure:105384: checking whether FPU control word can be manipulated by inline assembler" >&5
+echo "configure:105385: checking whether FPU control word can be manipulated by inline assembler" >&5
   cat > conftest.$ac_ext <<EOF
-#line 105386 "configure"
+#line 105387 "configure"
 #include "confdefs.h"
 
     /* nothing */
@@ -105404,7 +105405,7 @@ int main() {
   
 ; return 0; }
 EOF
-if { (eval echo configure:105408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:105409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cfp_have_fpu_inline_asm_x86=yes
 else
@@ -105426,7 +105427,7 @@ EOF
 
 
 echo $ac_n "checking whether double cast to long preserves least significant bits""... $ac_c" 1>&6
-echo "configure:105430: checking whether double cast to long preserves least significant bits" >&5
+echo "configure:105431: checking whether double cast to long preserves least significant bits" >&5
 
 if test "$cross_compiling" = yes; then
   
@@ -105434,7 +105435,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 105438 "configure"
+#line 105439 "configure"
 #include "confdefs.h"
 
 #include <limits.h>
@@ -105458,7 +105459,7 @@ int main()
 }
 
 EOF
-if { (eval echo configure:105462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:105463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   cat >> confdefs.h <<\EOF
@@ -105484,17 +105485,17 @@ for ac_hdr in dlfcn.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:105488: checking for $ac_hdr" >&5
+echo "configure:105489: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 105493 "configure"
+#line 105494 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:105498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:105499: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -105522,14 +105523,14 @@ done
 
 
 echo $ac_n "checking whether dlsym() requires a leading underscore in symbol names""... $ac_c" 1>&6
-echo "configure:105526: checking whether dlsym() requires a leading underscore in symbol names" >&5
+echo "configure:105527: checking whether dlsym() requires a leading underscore in symbol names" >&5
 if test "$cross_compiling" = yes; then :
   
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 105533 "configure"
+#line 105534 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -105592,7 +105593,7 @@ int main ()
     exit (status);
 }
 EOF
-  if { (eval echo configure:105596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  if { (eval echo configure:105597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -105675,23 +105676,23 @@ fi
 
 
 echo $ac_n "checking virtual machine dispatch method""... $ac_c" 1>&6
-echo "configure:105679: checking virtual machine dispatch method" >&5
+echo "configure:105680: checking virtual machine dispatch method" >&5
 echo "$ac_t""$PHP_ZEND_VM" 1>&6
 
 echo $ac_n "checking whether to enable thread-safety""... $ac_c" 1>&6
-echo "configure:105683: checking whether to enable thread-safety" >&5
+echo "configure:105684: checking whether to enable thread-safety" >&5
 echo "$ac_t""$ZEND_MAINTAINER_ZTS" 1>&6
 
 echo $ac_n "checking whether to enable inline optimization for GCC""... $ac_c" 1>&6
-echo "configure:105687: checking whether to enable inline optimization for GCC" >&5
+echo "configure:105688: checking whether to enable inline optimization for GCC" >&5
 echo "$ac_t""$ZEND_INLINE_OPTIMIZATION" 1>&6
 
 echo $ac_n "checking whether to enable Zend debugging""... $ac_c" 1>&6
-echo "configure:105691: checking whether to enable Zend debugging" >&5
+echo "configure:105692: checking whether to enable Zend debugging" >&5
 echo "$ac_t""$ZEND_DEBUG" 1>&6
 
 echo $ac_n "checking whether to enable Zend multibyte""... $ac_c" 1>&6
-echo "configure:105695: checking whether to enable Zend multibyte" >&5
+echo "configure:105696: checking whether to enable Zend multibyte" >&5
 echo "$ac_t""$ZEND_MULTIBYTE" 1>&6
 
 case $PHP_ZEND_VM in
@@ -105764,21 +105765,21 @@ fi
 
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:105768: checking for inline" >&5
+echo "configure:105769: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 105775 "configure"
+#line 105776 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:105782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:105783: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -105807,7 +105808,7 @@ esac
 
 
 echo $ac_n "checking target system is Darwin""... $ac_c" 1>&6
-echo "configure:105811: checking target system is Darwin" >&5
+echo "configure:105812: checking target system is Darwin" >&5
 if echo "$target" | grep "darwin" > /dev/null; then
   cat >> confdefs.h <<\EOF
 #define DARWIN 1
@@ -105819,7 +105820,7 @@ else
 fi
 
 echo $ac_n "checking for MM alignment and log values""... $ac_c" 1>&6
-echo "configure:105823: checking for MM alignment and log values" >&5
+echo "configure:105824: checking for MM alignment and log values" >&5
 
 if test "$cross_compiling" = yes; then
   
@@ -105827,7 +105828,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 105831 "configure"
+#line 105832 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -105863,7 +105864,7 @@ int main()
 }
 
 EOF
-if { (eval echo configure:105867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:105868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   LIBZEND_MM_ALIGN=`cat conftest.zend | cut -d ' ' -f 1`
@@ -105888,7 +105889,7 @@ fi
 echo "$ac_t""done" 1>&6
 
 echo $ac_n "checking for memory allocation using mmap(MAP_ANON)""... $ac_c" 1>&6
-echo "configure:105892: checking for memory allocation using mmap(MAP_ANON)" >&5
+echo "configure:105893: checking for memory allocation using mmap(MAP_ANON)" >&5
 
 if test "$cross_compiling" = yes; then
   
@@ -105896,7 +105897,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 105900 "configure"
+#line 105901 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -105932,7 +105933,7 @@ int main()
 }
 
 EOF
-if { (eval echo configure:105936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:105937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   cat >> confdefs.h <<\EOF
@@ -105954,7 +105955,7 @@ fi
 
 
 echo $ac_n "checking for memory allocation using mmap("/dev/zero")""... $ac_c" 1>&6
-echo "configure:105958: checking for memory allocation using mmap("/dev/zero")" >&5
+echo "configure:105959: checking for memory allocation using mmap("/dev/zero")" >&5
 
 if test "$cross_compiling" = yes; then
   
@@ -105962,7 +105963,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 105966 "configure"
+#line 105967 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -106008,7 +106009,7 @@ int main()
 }
 
 EOF
-if { (eval echo configure:106012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:106013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   cat >> confdefs.h <<\EOF
@@ -106032,12 +106033,12 @@ fi
 for ac_func in mremap
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:106036: checking for $ac_func" >&5
+echo "configure:106037: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106041 "configure"
+#line 106042 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -106060,7 +106061,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:106064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:106065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -106127,17 +106128,17 @@ for ac_hdr in stdarg.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:106131: checking for $ac_hdr" >&5
+echo "configure:106132: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106136 "configure"
+#line 106137 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:106141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:106142: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -106214,7 +106215,7 @@ if test "$TSRM_PTH" != "no"; then
   
 
 echo $ac_n "checking for GNU Pth""... $ac_c" 1>&6
-echo "configure:106218: checking for GNU Pth" >&5
+echo "configure:106219: checking for GNU Pth" >&5
 PTH_PREFIX="`$TSRM_PTH --prefix`"
 if test -z "$PTH_PREFIX"; then
   echo "$ac_t""Please check your Pth installation" 1>&6
@@ -106244,17 +106245,17 @@ elif test "$TSRM_ST" != "no"; then
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:106248: checking for $ac_hdr" >&5
+echo "configure:106249: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106253 "configure"
+#line 106254 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:106258: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:106259: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -106284,7 +106285,7 @@ done
 
   LIBS="$LIBS -lst"
   echo $ac_n "checking for SGI's State Threads""... $ac_c" 1>&6
-echo "configure:106288: checking for SGI's State Threads" >&5
+echo "configure:106289: checking for SGI's State Threads" >&5
   echo "$ac_t""yes" 1>&6
   cat >> confdefs.h <<\EOF
 #define TSRM_ST 1
@@ -106323,7 +106324,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 106327 "configure"
+#line 106328 "configure"
 #include "confdefs.h"
 
 #include <pthread.h>
@@ -106341,7 +106342,7 @@ int main() {
     return pthread_create(&thd, NULL, thread_routine, &data);
 } 
 EOF
-if { (eval echo configure:106345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:106346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   pthreads_working=yes
@@ -106361,7 +106362,7 @@ fi
   CFLAGS=$save_CFLAGS
 
   echo $ac_n "checking for pthreads_cflags""... $ac_c" 1>&6
-echo "configure:106365: checking for pthreads_cflags" >&5
+echo "configure:106366: checking for pthreads_cflags" >&5
 if eval "test \"`echo '$''{'ac_cv_pthreads_cflags'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -106383,7 +106384,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 106387 "configure"
+#line 106388 "configure"
 #include "confdefs.h"
 
 #include <pthread.h>
@@ -106401,7 +106402,7 @@ int main() {
     return pthread_create(&thd, NULL, thread_routine, &data);
 } 
 EOF
-if { (eval echo configure:106405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:106406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   pthreads_working=yes
@@ -106431,7 +106432,7 @@ fi
 echo "$ac_t""$ac_cv_pthreads_cflags" 1>&6
 
 echo $ac_n "checking for pthreads_lib""... $ac_c" 1>&6
-echo "configure:106435: checking for pthreads_lib" >&5
+echo "configure:106436: checking for pthreads_lib" >&5
 if eval "test \"`echo '$''{'ac_cv_pthreads_lib'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -106453,7 +106454,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 106457 "configure"
+#line 106458 "configure"
 #include "confdefs.h"
 
 #include <pthread.h>
@@ -106471,7 +106472,7 @@ int main() {
     return pthread_create(&thd, NULL, thread_routine, &data);
 } 
 EOF
-if { (eval echo configure:106475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:106476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   pthreads_working=yes
@@ -106522,7 +106523,7 @@ EOF
 
 
   echo $ac_n "checking for POSIX threads""... $ac_c" 1>&6
-echo "configure:106526: checking for POSIX threads" >&5
+echo "configure:106527: checking for POSIX threads" >&5
   echo "$ac_t""yes" 1>&6
 fi
 
@@ -107156,7 +107157,7 @@ fi
 
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:107160: checking build system type" >&5
+echo "configure:107161: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -107185,7 +107186,7 @@ ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
   echo $ac_n "checking for ld used by $CC""... $ac_c" 1>&6
-echo "configure:107189: checking for ld used by $CC" >&5
+echo "configure:107190: checking for ld used by $CC" >&5
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -107215,10 +107216,10 @@ echo "configure:107189: checking for ld used by $CC" >&5
   esac
 elif test "$with_gnu_ld" = yes; then
   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:107219: checking for GNU ld" >&5
+echo "configure:107220: checking for GNU ld" >&5
 else
   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:107222: checking for non-GNU ld" >&5
+echo "configure:107223: checking for non-GNU ld" >&5
 fi
 if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -107257,7 +107258,7 @@ else
 fi
 test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
 echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:107261: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:107262: checking if the linker ($LD) is GNU ld" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -107277,7 +107278,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:107281: checking for $LD option to reload object files" >&5
+echo "configure:107282: checking for $LD option to reload object files" >&5
 if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -107302,7 +107303,7 @@ case $host_os in
 esac
 
 echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:107306: checking for BSD-compatible nm" >&5
+echo "configure:107307: checking for BSD-compatible nm" >&5
 if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -107355,7 +107356,7 @@ echo "$ac_t""$lt_cv_path_NM" 1>&6
 NM="$lt_cv_path_NM"
 
 echo $ac_n "checking how to recognize dependent libraries""... $ac_c" 1>&6
-echo "configure:107359: checking how to recognize dependent libraries" >&5
+echo "configure:107360: checking how to recognize dependent libraries" >&5
 if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -107547,13 +107548,13 @@ deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:107551: checking for object suffix" >&5
+echo "configure:107552: checking for object suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   rm -f conftest*
 echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:107557: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:107558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -107573,7 +107574,7 @@ ac_objext=$ac_cv_objext
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:107577: checking for executable suffix" >&5
+echo "configure:107578: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -107583,7 +107584,7 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:107587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:107588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
       *.c | *.o | *.obj) ;;
@@ -107629,7 +107630,7 @@ case $host in
 ia64-*-hpux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo configure:107633: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  if { (eval echo configure:107634: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case `/usr/bin/file conftest.$ac_objext` in
     *ELF-32*)
       HPUX_IA64_MODE="32"
@@ -107643,8 +107644,8 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 107647 "configure"' > conftest.$ac_ext
-  if { (eval echo configure:107648: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  echo '#line 107648 "configure"' > conftest.$ac_ext
+  if { (eval echo configure:107649: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    if test "$lt_cv_prog_gnu_ld" = yes; then
     case `/usr/bin/file conftest.$ac_objext` in
     *32-bit*)
@@ -107678,7 +107679,7 @@ x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
 s390*-*linux*|sparc*-*linux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo configure:107682: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  if { (eval echo configure:107683: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case `/usr/bin/file conftest.o` in
     *32-bit*)
       case $host in
@@ -107728,7 +107729,7 @@ s390*-*linux*|sparc*-*linux*)
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:107732: checking whether the C compiler needs -belf" >&5
+echo "configure:107733: checking whether the C compiler needs -belf" >&5
 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -107741,14 +107742,14 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
 cross_compiling=$ac_cv_prog_cc_cross
 
      cat > conftest.$ac_ext <<EOF
-#line 107745 "configure"
+#line 107746 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:107752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:107753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   lt_cv_cc_needs_belf=yes
 else
@@ -107776,7 +107777,7 @@ echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
 sparc*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo configure:107780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  if { (eval echo configure:107781: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
@@ -107805,7 +107806,7 @@ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
     ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
     (test "X$CXX" != "Xg++"))) ; then
   echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:107809: checking how to run the C++ preprocessor" >&5
+echo "configure:107810: checking how to run the C++ preprocessor" >&5
 if test -z "$CXXCPP"; then
 if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -107818,12 +107819,12 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
 cross_compiling=$ac_cv_prog_cxx_cross
   CXXCPP="${CXX-g++} -E"
   cat > conftest.$ac_ext <<EOF
-#line 107822 "configure"
+#line 107823 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:107827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:107828: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -107853,7 +107854,7 @@ fi
 # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
 # find the maximum length of command line arguments
 echo $ac_n "checking the maximum length of command line arguments""... $ac_c" 1>&6
-echo "configure:107857: checking the maximum length of command line arguments" >&5
+echo "configure:107858: checking the maximum length of command line arguments" >&5
 if eval "test \"`echo '$''{'lt_cv_sys_max_cmd_len'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -107975,7 +107976,7 @@ fi
 
 # Check for command to grab the raw symbol name followed by C symbol from nm.
 echo $ac_n "checking command to parse $NM output from $compiler object""... $ac_c" 1>&6
-echo "configure:107979: checking command to parse $NM output from $compiler object" >&5
+echo "configure:107980: checking command to parse $NM output from $compiler object" >&5
 if eval "test \"`echo '$''{'lt_cv_sys_global_symbol_pipe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108079,10 +108080,10 @@ void nm_test_func(){}
 int main(){nm_test_var='a';nm_test_func();return(0);}
 EOF
 
-  if { (eval echo configure:108083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  if { (eval echo configure:108084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { (eval echo configure:108086: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then
+    if { (eval echo configure:108087: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
 	mv -f "$nlist"T "$nlist"
@@ -108133,7 +108134,7 @@ EOF
 	  lt_save_CFLAGS="$CFLAGS"
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
-	  if { (eval echo configure:108137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+	  if { (eval echo configure:108138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 	    pipe_works=yes
 	  fi
 	  LIBS="$lt_save_LIBS"
@@ -108173,7 +108174,7 @@ else
 fi
 
 echo $ac_n "checking for objdir""... $ac_c" 1>&6
-echo "configure:108177: checking for objdir" >&5
+echo "configure:108178: checking for objdir" >&5
 if eval "test \"`echo '$''{'lt_cv_objdir'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108239,7 +108240,7 @@ with_gnu_ld="$lt_cv_prog_gnu_ld"
 # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:108243: checking for $ac_word" >&5
+echo "configure:108244: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108271,7 +108272,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ar", so it can be a program name with args.
 set dummy ar; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:108275: checking for $ac_word" >&5
+echo "configure:108276: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108306,7 +108307,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:108310: checking for $ac_word" >&5
+echo "configure:108311: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108338,7 +108339,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:108342: checking for $ac_word" >&5
+echo "configure:108343: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108373,7 +108374,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:108377: checking for $ac_word" >&5
+echo "configure:108378: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108405,7 +108406,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:108409: checking for $ac_word" >&5
+echo "configure:108410: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108492,7 +108493,7 @@ case $deplibs_check_method in
 file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
     echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
-echo "configure:108496: checking for ${ac_tool_prefix}file" >&5
+echo "configure:108497: checking for ${ac_tool_prefix}file" >&5
 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108552,7 +108553,7 @@ fi
 if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
     echo $ac_n "checking for file""... $ac_c" 1>&6
-echo "configure:108556: checking for file" >&5
+echo "configure:108557: checking for file" >&5
 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108624,7 +108625,7 @@ esac
     # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
 set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:108628: checking for $ac_word" >&5
+echo "configure:108629: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_DSYMUTIL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108656,7 +108657,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "dsymutil", so it can be a program name with args.
 set dummy dsymutil; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:108660: checking for $ac_word" >&5
+echo "configure:108661: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_DSYMUTIL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108691,7 +108692,7 @@ fi
     # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
 set dummy ${ac_tool_prefix}nmedit; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:108695: checking for $ac_word" >&5
+echo "configure:108696: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_NMEDIT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108723,7 +108724,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "nmedit", so it can be a program name with args.
 set dummy nmedit; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:108727: checking for $ac_word" >&5
+echo "configure:108728: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_NMEDIT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108757,7 +108758,7 @@ fi
 
 
     echo $ac_n "checking for -single_module linker flag""... $ac_c" 1>&6
-echo "configure:108761: checking for -single_module linker flag" >&5
+echo "configure:108762: checking for -single_module linker flag" >&5
 if eval "test \"`echo '$''{'lt_cv_apple_cc_single_mod'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108780,7 +108781,7 @@ fi
 
 echo "$ac_t""$lt_cv_apple_cc_single_mod" 1>&6
     echo $ac_n "checking for -exported_symbols_list linker flag""... $ac_c" 1>&6
-echo "configure:108784: checking for -exported_symbols_list linker flag" >&5
+echo "configure:108785: checking for -exported_symbols_list linker flag" >&5
 if eval "test \"`echo '$''{'lt_cv_ld_exported_symbols_list'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108790,12 +108791,12 @@ else
       LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
       
 cat > conftest.$ac_ext <<EOF
-#line 108794 "configure"
+#line 108795 "configure"
 #include "confdefs.h"
 int main() {
 ; return 0; }
 EOF
-if { (eval echo configure:108799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:108800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  lt_cv_ld_exported_symbols_list=yes
   rm -rf conftest*
 else
@@ -108929,7 +108930,7 @@ if test "$GCC" = yes; then
 
   
 echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions""... $ac_c" 1>&6
-echo "configure:108933: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo "configure:108934: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_compiler_rtti_exceptions'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108946,11 +108947,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"configure:108950: $lt_compile\"" >&5)
+   (eval echo "\"configure:108951: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "configure:108954: \$? = $ac_status" >&5
+   echo "configure:108955: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -108979,7 +108980,7 @@ lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
 echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6
-echo "configure:108983: checking for $compiler option to produce PIC" >&5
+echo "configure:108984: checking for $compiler option to produce PIC" >&5
  
   if test "$GCC" = yes; then
     lt_prog_compiler_wl='-Wl,'
@@ -109226,7 +109227,7 @@ echo "$ac_t""$lt_prog_compiler_pic" 1>&6
 if test -n "$lt_prog_compiler_pic"; then
   
 echo $ac_n "checking if $compiler PIC flag $lt_prog_compiler_pic works""... $ac_c" 1>&6
-echo "configure:109230: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo "configure:109231: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_compiler_pic_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109243,11 +109244,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"configure:109247: $lt_compile\"" >&5)
+   (eval echo "\"configure:109248: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "configure:109251: \$? = $ac_status" >&5
+   echo "configure:109252: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -109289,7 +109290,7 @@ esac
 #
 wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
 echo $ac_n "checking if $compiler static flag $lt_tmp_static_flag works""... $ac_c" 1>&6
-echo "configure:109293: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo "configure:109294: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_compiler_static_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109327,7 +109328,7 @@ fi
 
 
 echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6
-echo "configure:109331: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo "configure:109332: checking if $compiler supports -c -o file.$ac_objext" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_compiler_c_o'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109347,11 +109348,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"configure:109351: $lt_compile\"" >&5)
+   (eval echo "\"configure:109352: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "configure:109355: \$? = $ac_status" >&5
+   echo "configure:109356: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -109381,7 +109382,7 @@ hard_links="nottested"
 if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
   # do not overwrite the value of need_locks provided by the user
   echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6
-echo "configure:109385: checking if we can lock with hard links" >&5
+echo "configure:109386: checking if we can lock with hard links" >&5
   hard_links=yes
   $rm conftest*
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
@@ -109398,7 +109399,7 @@ else
 fi
 
 echo $ac_n "checking whether the $compiler linker ($LD) supports shared libraries""... $ac_c" 1>&6
-echo "configure:109402: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo "configure:109403: checking whether the $compiler linker ($LD) supports shared libraries" >&5
 
   runpath_var=
   allow_undefined_flag=
@@ -109809,12 +109810,12 @@ _LT_EOF
        # Determine the default libpath from the value encoded in an empty executable.
        
 cat > conftest.$ac_ext <<EOF
-#line 109813 "configure"
+#line 109814 "configure"
 #include "confdefs.h"
 int main() {
 ; return 0; }
 EOF
-if { (eval echo configure:109818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:109819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
@@ -109847,12 +109848,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	 # Determine the default libpath from the value encoded in an empty executable.
 	 
 cat > conftest.$ac_ext <<EOF
-#line 109851 "configure"
+#line 109852 "configure"
 #include "confdefs.h"
 int main() {
 ; return 0; }
 EOF
-if { (eval echo configure:109856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:109857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
@@ -110342,11 +110343,11 @@ x|xyes)
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
       echo $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6
-echo "configure:110346: checking whether -lc should be explicitly linked in" >&5
+echo "configure:110347: checking whether -lc should be explicitly linked in" >&5
       $rm conftest*
       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { (eval echo configure:110350: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } 2>conftest.err; then
+      if { (eval echo configure:110351: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } 2>conftest.err; then
         soname=conftest
         lib=conftest
         libobjs=conftest.$ac_objext
@@ -110360,7 +110361,7 @@ echo "configure:110346: checking whether -lc should be explicitly linked in" >&5
         libname=conftest
         lt_save_allow_undefined_flag=$allow_undefined_flag
         allow_undefined_flag=
-        if { (eval echo configure:110364: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
+        if { (eval echo configure:110365: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
         then
 	  archive_cmds_need_lc=no
         else
@@ -110379,7 +110380,7 @@ echo "configure:110346: checking whether -lc should be explicitly linked in" >&5
 esac
 
 echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6
-echo "configure:110383: checking dynamic linker characteristics" >&5
+echo "configure:110384: checking dynamic linker characteristics" >&5
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
@@ -111004,7 +111005,7 @@ if test "$GCC" = yes; then
 fi
 
 echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6
-echo "configure:111008: checking how to hardcode library paths into programs" >&5
+echo "configure:111009: checking how to hardcode library paths into programs" >&5
 hardcode_action=
 if test -n "$hardcode_libdir_flag_spec" || \
    test -n "$runpath_var" || \
@@ -111042,7 +111043,7 @@ fi
 striplib=
 old_striplib=
 echo $ac_n "checking whether stripping libraries is possible""... $ac_c" 1>&6
-echo "configure:111046: checking whether stripping libraries is possible" >&5
+echo "configure:111047: checking whether stripping libraries is possible" >&5
 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
   test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
   test -z "$striplib" && striplib="$STRIP --strip-unneeded"
@@ -111093,7 +111094,7 @@ else
   darwin*)
   # if libdl is installed we need to link against it
     echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:111097: checking for dlopen in -ldl" >&5
+echo "configure:111098: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -111101,7 +111102,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 111105 "configure"
+#line 111106 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -111112,7 +111113,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:111116: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:111117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -111141,12 +111142,12 @@ fi
 
   *)
     echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "configure:111145: checking for shl_load" >&5
+echo "configure:111146: checking for shl_load" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 111150 "configure"
+#line 111151 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shl_load(); below.  */
@@ -111169,7 +111170,7 @@ shl_load();
 
 ; return 0; }
 EOF
-if { (eval echo configure:111173: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:111174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shl_load=yes"
 else
@@ -111187,7 +111188,7 @@ if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "configure:111191: checking for shl_load in -ldld" >&5
+echo "configure:111192: checking for shl_load in -ldld" >&5
 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -111195,7 +111196,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 111199 "configure"
+#line 111200 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -111206,7 +111207,7 @@ int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo configure:111210: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:111211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -111225,12 +111226,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "configure:111229: checking for dlopen" >&5
+echo "configure:111230: checking for dlopen" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 111234 "configure"
+#line 111235 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dlopen(); below.  */
@@ -111253,7 +111254,7 @@ dlopen();
 
 ; return 0; }
 EOF
-if { (eval echo configure:111257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:111258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dlopen=yes"
 else
@@ -111271,7 +111272,7 @@ if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:111275: checking for dlopen in -ldl" >&5
+echo "configure:111276: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -111279,7 +111280,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 111283 "configure"
+#line 111284 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -111290,7 +111291,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:111294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:111295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -111309,7 +111310,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6
-echo "configure:111313: checking for dlopen in -lsvld" >&5
+echo "configure:111314: checking for dlopen in -lsvld" >&5
 ac_lib_var=`echo svld'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -111317,7 +111318,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsvld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 111321 "configure"
+#line 111322 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -111328,7 +111329,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:111332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:111333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -111347,7 +111348,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "configure:111351: checking for dld_link in -ldld" >&5
+echo "configure:111352: checking for dld_link in -ldld" >&5
 ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -111355,7 +111356,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 111359 "configure"
+#line 111360 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -111366,7 +111367,7 @@ int main() {
 dld_link()
 ; return 0; }
 EOF
-if { (eval echo configure:111370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:111371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -111422,7 +111423,7 @@ fi
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "configure:111426: checking whether a program can dlopen itself" >&5
+echo "configure:111427: checking whether a program can dlopen itself" >&5
 if eval "test \"`echo '$''{'lt_cv_dlopen_self'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -111432,7 +111433,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 111436 "configure"
+#line 111437 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -111495,7 +111496,7 @@ int main ()
     exit (status);
 }
 EOF
-  if { (eval echo configure:111499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  if { (eval echo configure:111500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -111518,7 +111519,7 @@ echo "$ac_t""$lt_cv_dlopen_self" 1>&6
     if test "x$lt_cv_dlopen_self" = xyes; then
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "configure:111522: checking whether a statically linked program can dlopen itself" >&5
+echo "configure:111523: checking whether a statically linked program can dlopen itself" >&5
 if eval "test \"`echo '$''{'lt_cv_dlopen_self_static'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -111528,7 +111529,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 111532 "configure"
+#line 111533 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -111591,7 +111592,7 @@ int main ()
     exit (status);
 }
 EOF
-  if { (eval echo configure:111595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  if { (eval echo configure:111596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -111632,11 +111633,11 @@ fi
 
 # Report which library types will actually be built
 echo $ac_n "checking if libtool supports shared libraries""... $ac_c" 1>&6
-echo "configure:111636: checking if libtool supports shared libraries" >&5
+echo "configure:111637: checking if libtool supports shared libraries" >&5
 echo "$ac_t""$can_build_shared" 1>&6
 
 echo $ac_n "checking whether to build shared libraries""... $ac_c" 1>&6
-echo "configure:111640: checking whether to build shared libraries" >&5
+echo "configure:111641: checking whether to build shared libraries" >&5
 test "$can_build_shared" = "no" && enable_shared=no
 
 # On AIX, shared libraries and static libraries use the same namespace, and
@@ -111659,7 +111660,7 @@ esac
 echo "$ac_t""$enable_shared" 1>&6
 
 echo $ac_n "checking whether to build static libraries""... $ac_c" 1>&6
-echo "configure:111663: checking whether to build static libraries" >&5
+echo "configure:111664: checking whether to build static libraries" >&5
 # Make sure either enable_shared or enable_static is yes.
 test "$enable_shared" = yes || enable_static=yes
 echo "$ac_t""$enable_static" 1>&6
@@ -112345,7 +112346,7 @@ ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
   echo $ac_n "checking for ld used by $CC""... $ac_c" 1>&6
-echo "configure:112349: checking for ld used by $CC" >&5
+echo "configure:112350: checking for ld used by $CC" >&5
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -112375,10 +112376,10 @@ echo "configure:112349: checking for ld used by $CC" >&5
   esac
 elif test "$with_gnu_ld" = yes; then
   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:112379: checking for GNU ld" >&5
+echo "configure:112380: checking for GNU ld" >&5
 else
   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:112382: checking for non-GNU ld" >&5
+echo "configure:112383: checking for non-GNU ld" >&5
 fi
 if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -112417,7 +112418,7 @@ else
 fi
 test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
 echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:112421: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:112422: checking if the linker ($LD) is GNU ld" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -112483,7 +112484,7 @@ fi
 
 # PORTME: fill in a description of your system's C++ link characteristics
 echo $ac_n "checking whether the $compiler linker ($LD) supports shared libraries""... $ac_c" 1>&6
-echo "configure:112487: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo "configure:112488: checking whether the $compiler linker ($LD) supports shared libraries" >&5
 ld_shlibs_CXX=yes
 case $host_os in
   aix3*)
@@ -112581,12 +112582,12 @@ case $host_os in
       # Determine the default libpath from the value encoded in an empty executable.
       
 cat > conftest.$ac_ext <<EOF
-#line 112585 "configure"
+#line 112586 "configure"
 #include "confdefs.h"
 int main() {
 ; return 0; }
 EOF
-if { (eval echo configure:112590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:112591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
@@ -112620,12 +112621,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	# Determine the default libpath from the value encoded in an empty executable.
 	
 cat > conftest.$ac_ext <<EOF
-#line 112624 "configure"
+#line 112625 "configure"
 #include "confdefs.h"
 int main() {
 ; return 0; }
 EOF
-if { (eval echo configure:112629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:112630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
@@ -113392,7 +113393,7 @@ private:
 };
 EOF
 
-if { (eval echo configure:113396: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:113397: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   # Parse the compiler output and extract the necessary
   # objects, libraries and library flags.
 
@@ -113548,7 +113549,7 @@ lt_prog_compiler_pic_CXX=
 lt_prog_compiler_static_CXX=
 
 echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6
-echo "configure:113552: checking for $compiler option to produce PIC" >&5
+echo "configure:113553: checking for $compiler option to produce PIC" >&5
  
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -113845,7 +113846,7 @@ echo "$ac_t""$lt_prog_compiler_pic_CXX" 1>&6
 if test -n "$lt_prog_compiler_pic_CXX"; then
   
 echo $ac_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works""... $ac_c" 1>&6
-echo "configure:113849: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo "configure:113850: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_compiler_pic_works_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -113862,11 +113863,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"configure:113866: $lt_compile\"" >&5)
+   (eval echo "\"configure:113867: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "configure:113870: \$? = $ac_status" >&5
+   echo "configure:113871: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -113908,7 +113909,7 @@ esac
 #
 wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
 echo $ac_n "checking if $compiler static flag $lt_tmp_static_flag works""... $ac_c" 1>&6
-echo "configure:113912: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo "configure:113913: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_compiler_static_works_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -113946,7 +113947,7 @@ fi
 
 
 echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6
-echo "configure:113950: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo "configure:113951: checking if $compiler supports -c -o file.$ac_objext" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_compiler_c_o_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -113966,11 +113967,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"configure:113970: $lt_compile\"" >&5)
+   (eval echo "\"configure:113971: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "configure:113974: \$? = $ac_status" >&5
+   echo "configure:113975: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -114000,7 +114001,7 @@ hard_links="nottested"
 if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
   # do not overwrite the value of need_locks provided by the user
   echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6
-echo "configure:114004: checking if we can lock with hard links" >&5
+echo "configure:114005: checking if we can lock with hard links" >&5
   hard_links=yes
   $rm conftest*
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
@@ -114017,7 +114018,7 @@ else
 fi
 
 echo $ac_n "checking whether the $compiler linker ($LD) supports shared libraries""... $ac_c" 1>&6
-echo "configure:114021: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo "configure:114022: checking whether the $compiler linker ($LD) supports shared libraries" >&5
 
   export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
   case $host_os in
@@ -114063,11 +114064,11 @@ x|xyes)
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
       echo $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6
-echo "configure:114067: checking whether -lc should be explicitly linked in" >&5
+echo "configure:114068: checking whether -lc should be explicitly linked in" >&5
       $rm conftest*
       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { (eval echo configure:114071: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } 2>conftest.err; then
+      if { (eval echo configure:114072: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } 2>conftest.err; then
         soname=conftest
         lib=conftest
         libobjs=conftest.$ac_objext
@@ -114081,7 +114082,7 @@ echo "configure:114067: checking whether -lc should be explicitly linked in" >&5
         libname=conftest
         lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
         allow_undefined_flag_CXX=
-        if { (eval echo configure:114085: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
+        if { (eval echo configure:114086: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
         then
 	  archive_cmds_need_lc_CXX=no
         else
@@ -114100,7 +114101,7 @@ echo "configure:114067: checking whether -lc should be explicitly linked in" >&5
 esac
 
 echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6
-echo "configure:114104: checking dynamic linker characteristics" >&5
+echo "configure:114105: checking dynamic linker characteristics" >&5
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
@@ -114673,7 +114674,7 @@ if test "$GCC" = yes; then
 fi
 
 echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6
-echo "configure:114677: checking how to hardcode library paths into programs" >&5
+echo "configure:114678: checking how to hardcode library paths into programs" >&5
 hardcode_action_CXX=
 if test -n "$hardcode_libdir_flag_spec_CXX" || \
    test -n "$runpath_var_CXX" || \
diff --git a/configure.in b/configure.in
index 9056c67..7b6e2a8 100644
--- a/configure.in
+++ b/configure.in
@@ -1,4 +1,4 @@
-## $Id: configure.in 307133 2011-01-05 16:35:33Z johannes $ -*- autoconf -*-
+## $Id: configure.in 309329 2011-03-17 07:48:29Z johannes $ -*- autoconf -*-
 dnl ## Process this file with autoconf to produce a configure script.
 
 divert(1)
@@ -41,7 +41,7 @@ AC_CONFIG_HEADER(main/php_config.h)
 
 PHP_MAJOR_VERSION=5
 PHP_MINOR_VERSION=3
-PHP_RELEASE_VERSION=5
+PHP_RELEASE_VERSION=6
 PHP_EXTRA_VERSION=""
 PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION"
 PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION`
diff --git a/ext/bcmath/bcmath.c b/ext/bcmath/bcmath.c
index 85440d6..af3a926 100644
--- a/ext/bcmath/bcmath.c
+++ b/ext/bcmath/bcmath.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: bcmath.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: bcmath.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/bcmath/php_bcmath.h b/ext/bcmath/php_bcmath.h
index 888bb15..2b78ca9 100644
--- a/ext/bcmath/php_bcmath.h
+++ b/ext/bcmath/php_bcmath.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_bcmath.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_bcmath.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_BCMATH_H
 #define PHP_BCMATH_H
diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c
index f9cbe1b..b2b9b6d 100644
--- a/ext/bz2/bz2.c
+++ b/ext/bz2/bz2.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
  
-/* $Id: bz2.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: bz2.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/bz2/bz2_filter.c b/ext/bz2/bz2_filter.c
index 9daf498..e76e333 100644
--- a/ext/bz2/bz2_filter.c
+++ b/ext/bz2/bz2_filter.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: bz2_filter.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: bz2_filter.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/bz2/php_bz2.h b/ext/bz2/php_bz2.h
index c97a8e9..a35ba79 100644
--- a/ext/bz2/php_bz2.h
+++ b/ext/bz2/php_bz2.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_bz2.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_bz2.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_BZ2_H
 #define PHP_BZ2_H
diff --git a/ext/calendar/cal_unix.c b/ext/calendar/cal_unix.c
index 1a81f9d..0b7b9e8 100644
--- a/ext/calendar/cal_unix.c
+++ b/ext/calendar/cal_unix.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/calendar/calendar.c b/ext/calendar/calendar.c
index b23b892..422bfc6 100644
--- a/ext/calendar/calendar.c
+++ b/ext/calendar/calendar.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    |          Wez Furlong               <wez at thebrainroom.com>            |
    +----------------------------------------------------------------------+
  */
-/* $Id: calendar.c 303203 2010-09-09 06:41:23Z aharvey $ */
+/* $Id: calendar.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/calendar/easter.c b/ext/calendar/easter.c
index dd3c63f..703d08b 100644
--- a/ext/calendar/easter.c
+++ b/ext/calendar/easter.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/calendar/julian.c b/ext/calendar/julian.c
index 39bcbc7..17e7bcb 100644
--- a/ext/calendar/julian.c
+++ b/ext/calendar/julian.c
@@ -146,6 +146,7 @@
  **************************************************************************/
 
 #include "sdncal.h"
+#include <limits.h>
 
 #define JULIAN_SDN_OFFSET         32083
 #define DAYS_PER_5_MONTHS  153
@@ -164,15 +165,22 @@ void SdnToJulian(
 	int dayOfYear;
 
 	if (sdn <= 0) {
-		*pYear = 0;
-		*pMonth = 0;
-		*pDay = 0;
-		return;
+		goto fail;
 	}
-	temp = (sdn + JULIAN_SDN_OFFSET) * 4 - 1;
+	/* Check for overflow */
+	if (sdn > (LONG_MAX - JULIAN_SDN_OFFSET * 4 + 1) / 4 || sdn < LONG_MIN / 4) {
+		goto fail;
+	}
+	temp = sdn * 4 + (JULIAN_SDN_OFFSET * 4 - 1);
 
 	/* Calculate the year and day of year (1 <= dayOfYear <= 366). */
-	year = temp / DAYS_PER_4_YEARS;
+	{
+		long yearl = temp / DAYS_PER_4_YEARS;
+		if (yearl > INT_MAX || yearl < INT_MIN) {
+			goto fail;
+		}
+		year = (int) yearl;
+	}
 	dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1;
 
 	/* Calculate the month and day of month. */
@@ -196,6 +204,12 @@ void SdnToJulian(
 	*pYear = year;
 	*pMonth = month;
 	*pDay = day;
+	return;
+
+fail:
+	*pYear = 0;
+	*pMonth = 0;
+	*pDay = 0;
 }
 
 long int JulianToSdn(
diff --git a/ext/calendar/tests/bug53574.phpt b/ext/calendar/tests/bug53574.phpt
new file mode 100644
index 0000000..e426991
--- /dev/null
+++ b/ext/calendar/tests/bug53574.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Bug #53574 (Integer overflow in SdnToJulian; leads to segfault)
+--SKIPIF--
+<?php include 'skipif.inc'; ?>
+--FILE--
+<?php
+if (PHP_INT_MAX == 0x7FFFFFFF) {
+	$x = 882858043;
+} else {
+	$x = 3315881921229094912;
+}
+
+var_dump(cal_from_jd($x, CAL_JULIAN));
+--EXPECT--
+array(9) {
+  ["date"]=>
+  string(5) "0/0/0"
+  ["month"]=>
+  int(0)
+  ["day"]=>
+  int(0)
+  ["year"]=>
+  int(0)
+  ["dow"]=>
+  int(3)
+  ["abbrevdayname"]=>
+  string(3) "Wed"
+  ["dayname"]=>
+  string(9) "Wednesday"
+  ["abbrevmonth"]=>
+  string(0) ""
+  ["monthname"]=>
+  string(0) ""
+}
+
diff --git a/ext/com_dotnet/com_com.c b/ext/com_dotnet/com_com.c
index 9d36133..1584036 100644
--- a/ext/com_dotnet/com_com.c
+++ b/ext/com_dotnet/com_com.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_com.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_com.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/com_dotnet/com_dotnet.c b/ext/com_dotnet/com_dotnet.c
index 9625e04..049d954 100644
--- a/ext/com_dotnet/com_dotnet.c
+++ b/ext/com_dotnet/com_dotnet.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_dotnet.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_dotnet.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/com_dotnet/com_extension.c b/ext/com_dotnet/com_extension.c
index 9606cc9..5034c05 100644
--- a/ext/com_dotnet/com_extension.c
+++ b/ext/com_dotnet/com_extension.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_extension.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_extension.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/com_dotnet/com_handlers.c b/ext/com_dotnet/com_handlers.c
index e252734..33e1fcd 100644
--- a/ext/com_dotnet/com_handlers.c
+++ b/ext/com_dotnet/com_handlers.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_handlers.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_handlers.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/com_dotnet/com_iterator.c b/ext/com_dotnet/com_iterator.c
index 4423da2..a7f432e 100644
--- a/ext/com_dotnet/com_iterator.c
+++ b/ext/com_dotnet/com_iterator.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_iterator.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_iterator.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/com_dotnet/com_misc.c b/ext/com_dotnet/com_misc.c
index 3cea970..2dc9530 100644
--- a/ext/com_dotnet/com_misc.c
+++ b/ext/com_dotnet/com_misc.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_misc.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_misc.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/com_dotnet/com_olechar.c b/ext/com_dotnet/com_olechar.c
index 8692517..129b347 100644
--- a/ext/com_dotnet/com_olechar.c
+++ b/ext/com_dotnet/com_olechar.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_olechar.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_olechar.c 307626 2011-01-20 13:57:40Z pajoye $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -70,7 +70,6 @@ PHPAPI char *php_com_olestring_to_string(OLECHAR *olestring, uint *string_len, i
 	char *string;
 	uint length = 0;
 	BOOL ok;
-	LONG err;
 
 	length = WideCharToMultiByte(codepage, 0, olestring, -1, NULL, 0, NULL, NULL);
 
@@ -79,7 +78,6 @@ PHPAPI char *php_com_olestring_to_string(OLECHAR *olestring, uint *string_len, i
 		length = WideCharToMultiByte(codepage, 0, olestring, -1, string, length, NULL, NULL);
 		ok = length > 0;
 	} else {
-		err = GetLastError();
 		string = (char*)emalloc(sizeof(char));
 		*string = '\0';
 		ok = FALSE;
@@ -87,7 +85,7 @@ PHPAPI char *php_com_olestring_to_string(OLECHAR *olestring, uint *string_len, i
 	}
 
 	if (!ok) {
-		char *msg = php_win_err(err);
+		char *msg = php_win_err(GetLastError());
 
 		php_error_docref(NULL TSRMLS_CC, E_WARNING,
 			"Could not convert string from unicode: `%s'", msg);
diff --git a/ext/com_dotnet/com_persist.c b/ext/com_dotnet/com_persist.c
index cdbcf68..d0d6ff2 100755
--- a/ext/com_dotnet/com_persist.c
+++ b/ext/com_dotnet/com_persist.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_persist.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: com_persist.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Infrastructure for working with persistent COM objects.
  * Implements: IStream* wrapper for PHP streams.
diff --git a/ext/com_dotnet/com_saproxy.c b/ext/com_dotnet/com_saproxy.c
index 10fe37e..e4f6e72 100644
--- a/ext/com_dotnet/com_saproxy.c
+++ b/ext/com_dotnet/com_saproxy.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_saproxy.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_saproxy.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* This module implements a SafeArray proxy which is used internally
  * by the engine when resolving multi-dimensional array accesses on
diff --git a/ext/com_dotnet/com_typeinfo.c b/ext/com_dotnet/com_typeinfo.c
index 3c03231..a2c3d69 100644
--- a/ext/com_dotnet/com_typeinfo.c
+++ b/ext/com_dotnet/com_typeinfo.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_typeinfo.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_typeinfo.c 307614 2011-01-20 06:49:17Z pajoye $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -120,14 +120,14 @@ PHPAPI ITypeLib *php_com_load_typelib(char *search_string, int codepage TSRMLS_D
 								if (ERROR_SUCCESS == RegQueryValue(hsubkey, version, libname, &libnamelen)) {
 									if (0 == stricmp(libname, search_string)) {
 										char *str = NULL;
-										int major, minor;
+										int major_tmp, minor_tmp;
 
 										/* fetch the GUID and add the version numbers */
-										if (2 != sscanf(version, "%d.%d", &major, &minor)) {
-											major = 1;
-											minor = 0;
+										if (2 != sscanf(version, "%d.%d", &major_tmp, &minor_tmp)) {
+											major_tmp = 1;
+											minor_tmp = 0;
 										}
-										spprintf(&str, 0, "%s,%d,%d", keyname, major, minor);
+										spprintf(&str, 0, "%s,%d,%d", keyname, major_tmp, minor_tmp);
 										/* recurse */
 										TL = php_com_load_typelib(str, codepage TSRMLS_CC);
 
diff --git a/ext/com_dotnet/com_variant.c b/ext/com_dotnet/com_variant.c
index 85e1774..4d00fee 100644
--- a/ext/com_dotnet/com_variant.c
+++ b/ext/com_dotnet/com_variant.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_variant.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_variant.c 307617 2011-01-20 06:58:04Z pajoye $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -593,6 +593,9 @@ static void variant_binary_operation(enum variant_binary_opcode op, INTERNAL_FUN
 		case VOP_XOR:
 			result = VarXor(vleft, vright, &vres);
 			break;
+		/*Let say it fails as no valid op has been given */
+		default:
+			result = E_INVALIDARG;
 	}
 
 	if (SUCCEEDED(result)) {
@@ -752,6 +755,8 @@ static void variant_unary_operation(enum variant_unary_opcode op, INTERNAL_FUNCT
 		case VOP_NOT:
 			result = VarNot(vleft, &vres);
 			break;
+		default:
+			result = E_INVALIDARG;
 	}
 
 	if (SUCCEEDED(result)) {
diff --git a/ext/com_dotnet/com_wrapper.c b/ext/com_dotnet/com_wrapper.c
index 76d1473..6cff4b9 100644
--- a/ext/com_dotnet/com_wrapper.c
+++ b/ext/com_dotnet/com_wrapper.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_wrapper.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: com_wrapper.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* This module exports a PHP object as a COM object by wrapping it
  * using IDispatchEx */
diff --git a/ext/com_dotnet/php_com_dotnet.h b/ext/com_dotnet/php_com_dotnet.h
index 5660c6e..f2243a0 100644
--- a/ext/com_dotnet/php_com_dotnet.h
+++ b/ext/com_dotnet/php_com_dotnet.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_com_dotnet.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_com_dotnet.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_COM_DOTNET_H
 #define PHP_COM_DOTNET_H
diff --git a/ext/com_dotnet/php_com_dotnet_internal.h b/ext/com_dotnet/php_com_dotnet_internal.h
index f8715ff..a8837b6 100644
--- a/ext/com_dotnet/php_com_dotnet_internal.h
+++ b/ext/com_dotnet/php_com_dotnet_internal.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_com_dotnet_internal.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_com_dotnet_internal.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_COM_DOTNET_INTERNAL_H
 #define PHP_COM_DOTNET_INTERNAL_H
diff --git a/ext/ctype/ctype.c b/ext/ctype/ctype.c
index 1e02621..0516961 100644
--- a/ext/ctype/ctype.c
+++ b/ext/ctype/ctype.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/ctype/php_ctype.h b/ext/ctype/php_ctype.h
index ea4f338..0036702 100644
--- a/ext/ctype/php_ctype.h
+++ b/ext/ctype/php_ctype.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index 610861e..0a36e1a 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: interface.c 305850 2010-11-30 13:40:02Z iliaa $ */
+/* $Id: interface.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
diff --git a/ext/curl/multi.c b/ext/curl/multi.c
index 0fdad1a..98a0815 100644
--- a/ext/curl/multi.c
+++ b/ext/curl/multi.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: multi.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: multi.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
diff --git a/ext/curl/php_curl.h b/ext/curl/php_curl.h
index a525cc6..844cc0a 100644
--- a/ext/curl/php_curl.h
+++ b/ext/curl/php_curl.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_curl.h 305854 2010-11-30 16:11:27Z iliaa $ */
+/* $Id: php_curl.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef _PHP_CURL_H
 #define _PHP_CURL_H
diff --git a/ext/curl/streams.c b/ext/curl/streams.c
index 4b591e2..264f33d 100644
--- a/ext/curl/streams.c
+++ b/ext/curl/streams.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: streams.c 293732 2010-01-19 13:44:08Z jani $ */
+/* $Id: streams.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* This file implements cURL based wrappers.
  * NOTE: If you are implementing your own streams that are intended to
diff --git a/ext/date/config.w32 b/ext/date/config.w32
index a94e650..80d6e35 100755
--- a/ext/date/config.w32
+++ b/ext/date/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 270880 2008-12-09 14:28:54Z pajoye $
+// $Id: config.w32 306365 2010-12-14 13:10:25Z pajoye $
 // vim:ft=javascript
 
 EXTENSION("date", "php_date.c", false, "-Iext/date/lib");
@@ -10,3 +10,5 @@ ADD_FLAG('CFLAGS_DATE', "/wd4244");
 var tl_config = FSO.CreateTextFile("ext/date/lib/timelib_config.h", true);
 tl_config.WriteLine("#include \"config.w32.h\"");
 tl_config.Close();
+
+PHP_INSTALL_HEADERS("ext/date/", "php_date.h lib/timelib.h lib/timelib_structs.h lib/timelib_config.h");
diff --git a/ext/date/lib/timelib.h b/ext/date/lib/timelib.h
index b6be125..67a57d8 100644
--- a/ext/date/lib/timelib.h
+++ b/ext/date/lib/timelib.h
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: timelib.h 302887 2010-08-30 15:32:09Z derick $ */
+/* $Id: timelib.h 309055 2011-03-09 20:06:52Z scottmac $ */
 
 #ifndef __TIMELIB_H__
 #define __TIMELIB_H__
@@ -26,6 +26,8 @@
 #include <limits.h>
 #endif
 
+#define TIMELIB_VERSION 201101
+
 #define TIMELIB_NONE             0x00
 #define TIMELIB_OVERRIDE_TIME    0x01
 #define TIMELIB_NO_CLONE         0x02
diff --git a/ext/date/lib/timelib_structs.h b/ext/date/lib/timelib_structs.h
index 15622e7..7173d82 100644
--- a/ext/date/lib/timelib_structs.h
+++ b/ext/date/lib/timelib_structs.h
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: timelib_structs.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: timelib_structs.h 307038 2011-01-03 19:24:04Z scottmac $ */
 
 #ifndef __TIMELIB_STRUCTS_H__
 #define __TIMELIB_STRUCTS_H__
@@ -218,6 +218,6 @@ typedef struct _timelib_tzdb {
 
 #define timelib_is_leap(y) ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0))
 
-#define DEBUG(s)  if (0) { s }
+#define TIMELIB_DEBUG(s)  if (0) { s }
 
 #endif
diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h
index 9156523..b4c4e46 100644
--- a/ext/date/lib/timezonedb.h
+++ b/ext/date/lib/timezonedb.h
@@ -1,4 +1,4 @@
-const timelib_tzdb_index_entry timezonedb_idx_builtin[568] = {
+const timelib_tzdb_index_entry timezonedb_idx_builtin[571] = {
 	{ "Africa/Abidjan"                    , 0x000000 },
 	{ "Africa/Accra"                      , 0x000055 },
 	{ "Africa/Addis_Ababa"                , 0x0000FD },
@@ -153,423 +153,426 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[568] = {
 	{ "America/Mendoza"                   , 0x00E1DE },
 	{ "America/Menominee"                 , 0x00E392 },
 	{ "America/Merida"                    , 0x00E713 },
-	{ "America/Mexico_City"               , 0x00E94E },
-	{ "America/Miquelon"                  , 0x00EBC9 },
-	{ "America/Moncton"                   , 0x00EE3B },
-	{ "America/Monterrey"                 , 0x00F2D2 },
-	{ "America/Montevideo"                , 0x00F535 },
-	{ "America/Montreal"                  , 0x00F847 },
-	{ "America/Montserrat"                , 0x00FD5D },
-	{ "America/Nassau"                    , 0x00FDB2 },
-	{ "America/New_York"                  , 0x0100F7 },
-	{ "America/Nipigon"                   , 0x010602 },
-	{ "America/Nome"                      , 0x010953 },
-	{ "America/Noronha"                   , 0x010CD1 },
-	{ "America/North_Dakota/Center"       , 0x010E01 },
-	{ "America/North_Dakota/New_Salem"    , 0x011195 },
-	{ "America/Ojinaga"                   , 0x01153E },
-	{ "America/Panama"                    , 0x01179F },
-	{ "America/Pangnirtung"               , 0x0117F4 },
-	{ "America/Paramaribo"                , 0x011B2A },
-	{ "America/Phoenix"                   , 0x011BBC },
-	{ "America/Port-au-Prince"            , 0x011C6A },
-	{ "America/Port_of_Spain"             , 0x011E85 },
-	{ "America/Porto_Acre"                , 0x011D86 },
-	{ "America/Porto_Velho"               , 0x011EDA },
-	{ "America/Puerto_Rico"               , 0x011FD0 },
-	{ "America/Rainy_River"               , 0x01203B },
-	{ "America/Rankin_Inlet"              , 0x012373 },
-	{ "America/Recife"                    , 0x012659 },
-	{ "America/Regina"                    , 0x012783 },
-	{ "America/Resolute"                  , 0x012941 },
-	{ "America/Rio_Branco"                , 0x012C3A },
-	{ "America/Rosario"                   , 0x012D3D },
-	{ "America/Santa_Isabel"              , 0x012EE3 },
-	{ "America/Santarem"                  , 0x013286 },
-	{ "America/Santiago"                  , 0x01338B },
-	{ "America/Santo_Domingo"             , 0x013734 },
-	{ "America/Sao_Paulo"                 , 0x0137FA },
-	{ "America/Scoresbysund"              , 0x013B09 },
-	{ "America/Shiprock"                  , 0x013DF7 },
-	{ "America/St_Barthelemy"             , 0x014186 },
-	{ "America/St_Johns"                  , 0x0141DB },
-	{ "America/St_Kitts"                  , 0x01472E },
-	{ "America/St_Lucia"                  , 0x014783 },
-	{ "America/St_Thomas"                 , 0x0147D8 },
-	{ "America/St_Vincent"                , 0x01482D },
-	{ "America/Swift_Current"             , 0x014882 },
-	{ "America/Tegucigalpa"               , 0x0149A3 },
-	{ "America/Thule"                     , 0x014A22 },
-	{ "America/Thunder_Bay"               , 0x014C69 },
-	{ "America/Tijuana"                   , 0x014FB2 },
-	{ "America/Toronto"                   , 0x01534B },
-	{ "America/Tortola"                   , 0x015862 },
-	{ "America/Vancouver"                 , 0x0158B7 },
-	{ "America/Virgin"                    , 0x015CF4 },
-	{ "America/Whitehorse"                , 0x015D49 },
-	{ "America/Winnipeg"                  , 0x016066 },
-	{ "America/Yakutat"                   , 0x0164A6 },
-	{ "America/Yellowknife"               , 0x016811 },
-	{ "Antarctica/Casey"                  , 0x016B21 },
-	{ "Antarctica/Davis"                  , 0x016BAC },
-	{ "Antarctica/DumontDUrville"         , 0x016C43 },
-	{ "Antarctica/Macquarie"              , 0x016CD5 },
-	{ "Antarctica/Mawson"                 , 0x016F4F },
-	{ "Antarctica/McMurdo"                , 0x016FCB },
-	{ "Antarctica/Palmer"                 , 0x0172CD },
-	{ "Antarctica/Rothera"                , 0x0175E9 },
-	{ "Antarctica/South_Pole"             , 0x01765F },
-	{ "Antarctica/Syowa"                  , 0x017967 },
-	{ "Antarctica/Vostok"                 , 0x0179D5 },
-	{ "Arctic/Longyearbyen"               , 0x017A46 },
-	{ "Asia/Aden"                         , 0x017D78 },
-	{ "Asia/Almaty"                       , 0x017DCD },
-	{ "Asia/Amman"                        , 0x017F4C },
-	{ "Asia/Anadyr"                       , 0x01820C },
-	{ "Asia/Aqtau"                        , 0x0184FA },
-	{ "Asia/Aqtobe"                       , 0x0186F9 },
-	{ "Asia/Ashgabat"                     , 0x0188B1 },
-	{ "Asia/Ashkhabad"                    , 0x0189CE },
-	{ "Asia/Baghdad"                      , 0x018AEB },
-	{ "Asia/Bahrain"                      , 0x018C60 },
-	{ "Asia/Baku"                         , 0x018CC6 },
-	{ "Asia/Bangkok"                      , 0x018FAE },
-	{ "Asia/Beirut"                       , 0x019003 },
-	{ "Asia/Bishkek"                      , 0x019310 },
-	{ "Asia/Brunei"                       , 0x0194BC },
-	{ "Asia/Calcutta"                     , 0x01951E },
-	{ "Asia/Choibalsan"                   , 0x019597 },
-	{ "Asia/Chongqing"                    , 0x019710 },
-	{ "Asia/Chungking"                    , 0x0197FF },
-	{ "Asia/Colombo"                      , 0x0198AE },
-	{ "Asia/Dacca"                        , 0x01994A },
-	{ "Asia/Damascus"                     , 0x0199F0 },
-	{ "Asia/Dhaka"                        , 0x019D40 },
-	{ "Asia/Dili"                         , 0x019DE6 },
-	{ "Asia/Dubai"                        , 0x019E6F },
-	{ "Asia/Dushanbe"                     , 0x019EC4 },
-	{ "Asia/Gaza"                         , 0x019FC7 },
-	{ "Asia/Harbin"                       , 0x01A310 },
-	{ "Asia/Ho_Chi_Minh"                  , 0x01A3F7 },
-	{ "Asia/Hong_Kong"                    , 0x01A46F },
-	{ "Asia/Hovd"                         , 0x01A631 },
-	{ "Asia/Irkutsk"                      , 0x01A7A9 },
-	{ "Asia/Istanbul"                     , 0x01AA90 },
-	{ "Asia/Jakarta"                      , 0x01AE7D },
-	{ "Asia/Jayapura"                     , 0x01AF27 },
-	{ "Asia/Jerusalem"                    , 0x01AFAB },
-	{ "Asia/Kabul"                        , 0x01B2DA },
-	{ "Asia/Kamchatka"                    , 0x01B32B },
-	{ "Asia/Karachi"                      , 0x01B610 },
-	{ "Asia/Kashgar"                      , 0x01B6C5 },
-	{ "Asia/Kathmandu"                    , 0x01B796 },
-	{ "Asia/Katmandu"                     , 0x01B7FC },
-	{ "Asia/Kolkata"                      , 0x01B862 },
-	{ "Asia/Krasnoyarsk"                  , 0x01B8DB },
-	{ "Asia/Kuala_Lumpur"                 , 0x01BBC4 },
-	{ "Asia/Kuching"                      , 0x01BC81 },
-	{ "Asia/Kuwait"                       , 0x01BD6F },
-	{ "Asia/Macao"                        , 0x01BDC4 },
-	{ "Asia/Macau"                        , 0x01BEFF },
-	{ "Asia/Magadan"                      , 0x01C03A },
-	{ "Asia/Makassar"                     , 0x01C31D },
-	{ "Asia/Manila"                       , 0x01C3D6 },
-	{ "Asia/Muscat"                       , 0x01C45B },
-	{ "Asia/Nicosia"                      , 0x01C4B0 },
-	{ "Asia/Novokuznetsk"                 , 0x01C798 },
-	{ "Asia/Novosibirsk"                  , 0x01CA9B },
-	{ "Asia/Omsk"                         , 0x01CD8F },
-	{ "Asia/Oral"                         , 0x01D077 },
-	{ "Asia/Phnom_Penh"                   , 0x01D247 },
-	{ "Asia/Pontianak"                    , 0x01D2BF },
-	{ "Asia/Pyongyang"                    , 0x01D380 },
-	{ "Asia/Qatar"                        , 0x01D3ED },
-	{ "Asia/Qyzylorda"                    , 0x01D453 },
-	{ "Asia/Rangoon"                      , 0x01D629 },
-	{ "Asia/Riyadh"                       , 0x01D6A1 },
-	{ "Asia/Saigon"                       , 0x01D6F6 },
-	{ "Asia/Sakhalin"                     , 0x01D76E },
-	{ "Asia/Samarkand"                    , 0x01DA6E },
-	{ "Asia/Seoul"                        , 0x01DBA4 },
-	{ "Asia/Shanghai"                     , 0x01DC48 },
-	{ "Asia/Singapore"                    , 0x01DD28 },
-	{ "Asia/Taipei"                       , 0x01DDDF },
-	{ "Asia/Tashkent"                     , 0x01DEF7 },
-	{ "Asia/Tbilisi"                      , 0x01E028 },
-	{ "Asia/Tehran"                       , 0x01E1E2 },
-	{ "Asia/Tel_Aviv"                     , 0x01E450 },
-	{ "Asia/Thimbu"                       , 0x01E77F },
-	{ "Asia/Thimphu"                      , 0x01E7E5 },
-	{ "Asia/Tokyo"                        , 0x01E84B },
-	{ "Asia/Ujung_Pandang"                , 0x01E8D4 },
-	{ "Asia/Ulaanbaatar"                  , 0x01E950 },
-	{ "Asia/Ulan_Bator"                   , 0x01EAAB },
-	{ "Asia/Urumqi"                       , 0x01EBF8 },
-	{ "Asia/Vientiane"                    , 0x01ECBF },
-	{ "Asia/Vladivostok"                  , 0x01ED37 },
-	{ "Asia/Yakutsk"                      , 0x01F024 },
-	{ "Asia/Yekaterinburg"                , 0x01F30A },
-	{ "Asia/Yerevan"                      , 0x01F616 },
-	{ "Atlantic/Azores"                   , 0x01F91A },
-	{ "Atlantic/Bermuda"                  , 0x01FE1D },
-	{ "Atlantic/Canary"                   , 0x0200FE },
-	{ "Atlantic/Cape_Verde"               , 0x0203D4 },
-	{ "Atlantic/Faeroe"                   , 0x02044D },
-	{ "Atlantic/Faroe"                    , 0x0206F1 },
-	{ "Atlantic/Jan_Mayen"                , 0x020995 },
-	{ "Atlantic/Madeira"                  , 0x020CC7 },
-	{ "Atlantic/Reykjavik"                , 0x0211D0 },
-	{ "Atlantic/South_Georgia"            , 0x021389 },
-	{ "Atlantic/St_Helena"                , 0x0216A1 },
-	{ "Atlantic/Stanley"                  , 0x0213CD },
-	{ "Australia/ACT"                     , 0x0216F6 },
-	{ "Australia/Adelaide"                , 0x021A13 },
-	{ "Australia/Brisbane"                , 0x021D3F },
-	{ "Australia/Broken_Hill"             , 0x021E06 },
-	{ "Australia/Canberra"                , 0x022144 },
-	{ "Australia/Currie"                  , 0x022461 },
-	{ "Australia/Darwin"                  , 0x022794 },
-	{ "Australia/Eucla"                   , 0x02281A },
-	{ "Australia/Hobart"                  , 0x0228EF },
-	{ "Australia/LHI"                     , 0x022C4D },
-	{ "Australia/Lindeman"                , 0x022EE8 },
-	{ "Australia/Lord_Howe"               , 0x022FC9 },
-	{ "Australia/Melbourne"               , 0x023274 },
-	{ "Australia/North"                   , 0x023599 },
-	{ "Australia/NSW"                     , 0x02360D },
-	{ "Australia/Perth"                   , 0x02392A },
-	{ "Australia/Queensland"              , 0x023A02 },
-	{ "Australia/South"                   , 0x023AAE },
-	{ "Australia/Sydney"                  , 0x023DCB },
-	{ "Australia/Tasmania"                , 0x024108 },
-	{ "Australia/Victoria"                , 0x02444D },
-	{ "Australia/West"                    , 0x02476A },
-	{ "Australia/Yancowinna"              , 0x024820 },
-	{ "Brazil/Acre"                       , 0x024B42 },
-	{ "Brazil/DeNoronha"                  , 0x024C41 },
-	{ "Brazil/East"                       , 0x024D61 },
-	{ "Brazil/West"                       , 0x02503E },
-	{ "Canada/Atlantic"                   , 0x025136 },
-	{ "Canada/Central"                    , 0x02561E },
-	{ "Canada/East-Saskatchewan"          , 0x025F28 },
-	{ "Canada/Eastern"                    , 0x025A38 },
-	{ "Canada/Mountain"                   , 0x0260B1 },
-	{ "Canada/Newfoundland"               , 0x026427 },
-	{ "Canada/Pacific"                    , 0x026952 },
-	{ "Canada/Saskatchewan"               , 0x026D6B },
-	{ "Canada/Yukon"                      , 0x026EF4 },
-	{ "CET"                               , 0x0271F7 },
-	{ "Chile/Continental"                 , 0x027500 },
-	{ "Chile/EasterIsland"                , 0x02789B },
-	{ "CST6CDT"                           , 0x027BDD },
-	{ "Cuba"                              , 0x027F2E },
-	{ "EET"                               , 0x0282A1 },
-	{ "Egypt"                             , 0x028554 },
-	{ "Eire"                              , 0x028925 },
-	{ "EST"                               , 0x028E36 },
-	{ "EST5EDT"                           , 0x028E7A },
-	{ "Etc/GMT"                           , 0x0291CB },
-	{ "Etc/GMT+0"                         , 0x029297 },
-	{ "Etc/GMT+1"                         , 0x029321 },
-	{ "Etc/GMT+10"                        , 0x0293AE },
-	{ "Etc/GMT+11"                        , 0x02943C },
-	{ "Etc/GMT+12"                        , 0x0294CA },
-	{ "Etc/GMT+2"                         , 0x0295E5 },
-	{ "Etc/GMT+3"                         , 0x029671 },
-	{ "Etc/GMT+4"                         , 0x0296FD },
-	{ "Etc/GMT+5"                         , 0x029789 },
-	{ "Etc/GMT+6"                         , 0x029815 },
-	{ "Etc/GMT+7"                         , 0x0298A1 },
-	{ "Etc/GMT+8"                         , 0x02992D },
-	{ "Etc/GMT+9"                         , 0x0299B9 },
-	{ "Etc/GMT-0"                         , 0x029253 },
-	{ "Etc/GMT-1"                         , 0x0292DB },
-	{ "Etc/GMT-10"                        , 0x029367 },
-	{ "Etc/GMT-11"                        , 0x0293F5 },
-	{ "Etc/GMT-12"                        , 0x029483 },
-	{ "Etc/GMT-13"                        , 0x029511 },
-	{ "Etc/GMT-14"                        , 0x029558 },
-	{ "Etc/GMT-2"                         , 0x02959F },
-	{ "Etc/GMT-3"                         , 0x02962B },
-	{ "Etc/GMT-4"                         , 0x0296B7 },
-	{ "Etc/GMT-5"                         , 0x029743 },
-	{ "Etc/GMT-6"                         , 0x0297CF },
-	{ "Etc/GMT-7"                         , 0x02985B },
-	{ "Etc/GMT-8"                         , 0x0298E7 },
-	{ "Etc/GMT-9"                         , 0x029973 },
-	{ "Etc/GMT0"                          , 0x02920F },
-	{ "Etc/Greenwich"                     , 0x0299FF },
-	{ "Etc/UCT"                           , 0x029A43 },
-	{ "Etc/Universal"                     , 0x029A87 },
-	{ "Etc/UTC"                           , 0x029ACB },
-	{ "Etc/Zulu"                          , 0x029B0F },
-	{ "Europe/Amsterdam"                  , 0x029B53 },
-	{ "Europe/Andorra"                    , 0x029F91 },
-	{ "Europe/Athens"                     , 0x02A20D },
-	{ "Europe/Belfast"                    , 0x02A550 },
-	{ "Europe/Belgrade"                   , 0x02AA87 },
-	{ "Europe/Berlin"                     , 0x02AD50 },
-	{ "Europe/Bratislava"                 , 0x02B0A6 },
-	{ "Europe/Brussels"                   , 0x02B3D8 },
-	{ "Europe/Bucharest"                  , 0x02B80F },
-	{ "Europe/Budapest"                   , 0x02BB39 },
-	{ "Europe/Chisinau"                   , 0x02BEAC },
-	{ "Europe/Copenhagen"                 , 0x02C23A },
-	{ "Europe/Dublin"                     , 0x02C544 },
-	{ "Europe/Gibraltar"                  , 0x02CA55 },
-	{ "Europe/Guernsey"                   , 0x02CEAC },
-	{ "Europe/Helsinki"                   , 0x02D3E3 },
-	{ "Europe/Isle_of_Man"                , 0x02D699 },
-	{ "Europe/Istanbul"                   , 0x02DBD0 },
-	{ "Europe/Jersey"                     , 0x02DFBD },
-	{ "Europe/Kaliningrad"                , 0x02E4F4 },
-	{ "Europe/Kiev"                       , 0x02E857 },
-	{ "Europe/Lisbon"                     , 0x02EB6E },
-	{ "Europe/Ljubljana"                  , 0x02F072 },
-	{ "Europe/London"                     , 0x02F33B },
-	{ "Europe/Luxembourg"                 , 0x02F872 },
-	{ "Europe/Madrid"                     , 0x02FCC8 },
-	{ "Europe/Malta"                      , 0x03008E },
-	{ "Europe/Mariehamn"                  , 0x030447 },
-	{ "Europe/Minsk"                      , 0x0306FD },
-	{ "Europe/Monaco"                     , 0x030A08 },
-	{ "Europe/Moscow"                     , 0x030E43 },
-	{ "Europe/Nicosia"                    , 0x031195 },
-	{ "Europe/Oslo"                       , 0x03147D },
-	{ "Europe/Paris"                      , 0x0317AF },
-	{ "Europe/Podgorica"                  , 0x031BF5 },
-	{ "Europe/Prague"                     , 0x031EBE },
-	{ "Europe/Riga"                       , 0x0321F0 },
-	{ "Europe/Rome"                       , 0x032535 },
-	{ "Europe/Samara"                     , 0x0328F8 },
-	{ "Europe/San_Marino"                 , 0x032C31 },
-	{ "Europe/Sarajevo"                   , 0x032FF4 },
-	{ "Europe/Simferopol"                 , 0x0332BD },
-	{ "Europe/Skopje"                     , 0x0335E8 },
-	{ "Europe/Sofia"                      , 0x0338B1 },
-	{ "Europe/Stockholm"                  , 0x033BB9 },
-	{ "Europe/Tallinn"                    , 0x033E68 },
-	{ "Europe/Tirane"                     , 0x0341A2 },
-	{ "Europe/Tiraspol"                   , 0x0344A8 },
-	{ "Europe/Uzhgorod"                   , 0x034836 },
-	{ "Europe/Vaduz"                      , 0x034B4D },
-	{ "Europe/Vatican"                    , 0x034DE0 },
-	{ "Europe/Vienna"                     , 0x0351A3 },
-	{ "Europe/Vilnius"                    , 0x0354D0 },
-	{ "Europe/Volgograd"                  , 0x03580F },
-	{ "Europe/Warsaw"                     , 0x035B18 },
-	{ "Europe/Zagreb"                     , 0x035EF9 },
-	{ "Europe/Zaporozhye"                 , 0x0361C2 },
-	{ "Europe/Zurich"                     , 0x036503 },
-	{ "Factory"                           , 0x0367B2 },
-	{ "GB"                                , 0x036823 },
-	{ "GB-Eire"                           , 0x036D5A },
-	{ "GMT"                               , 0x037291 },
-	{ "GMT+0"                             , 0x03735D },
-	{ "GMT-0"                             , 0x037319 },
-	{ "GMT0"                              , 0x0372D5 },
-	{ "Greenwich"                         , 0x0373A1 },
-	{ "Hongkong"                          , 0x0373E5 },
-	{ "HST"                               , 0x0375A7 },
-	{ "Iceland"                           , 0x0375EB },
-	{ "Indian/Antananarivo"               , 0x0377A4 },
-	{ "Indian/Chagos"                     , 0x037818 },
-	{ "Indian/Christmas"                  , 0x03787A },
-	{ "Indian/Cocos"                      , 0x0378BE },
-	{ "Indian/Comoro"                     , 0x037902 },
-	{ "Indian/Kerguelen"                  , 0x037957 },
-	{ "Indian/Mahe"                       , 0x0379AC },
-	{ "Indian/Maldives"                   , 0x037A01 },
-	{ "Indian/Mauritius"                  , 0x037A56 },
-	{ "Indian/Mayotte"                    , 0x037ACC },
-	{ "Indian/Reunion"                    , 0x037B21 },
-	{ "Iran"                              , 0x037B76 },
-	{ "Israel"                            , 0x037DE4 },
-	{ "Jamaica"                           , 0x038113 },
-	{ "Japan"                             , 0x0381D8 },
-	{ "Kwajalein"                         , 0x038261 },
-	{ "Libya"                             , 0x0382C4 },
-	{ "MET"                               , 0x0383BE },
-	{ "Mexico/BajaNorte"                  , 0x0386C7 },
-	{ "Mexico/BajaSur"                    , 0x038A30 },
-	{ "Mexico/General"                    , 0x038C75 },
-	{ "MST"                               , 0x038ED3 },
-	{ "MST7MDT"                           , 0x038F17 },
-	{ "Navajo"                            , 0x039268 },
-	{ "NZ"                                , 0x0395E1 },
-	{ "NZ-CHAT"                           , 0x03995F },
-	{ "Pacific/Apia"                      , 0x039C47 },
-	{ "Pacific/Auckland"                  , 0x039CC5 },
-	{ "Pacific/Chatham"                   , 0x03A051 },
-	{ "Pacific/Chuuk"                     , 0x03A348 },
-	{ "Pacific/Easter"                    , 0x03A3A1 },
-	{ "Pacific/Efate"                     , 0x03A6FF },
-	{ "Pacific/Enderbury"                 , 0x03A7C5 },
-	{ "Pacific/Fakaofo"                   , 0x03A833 },
-	{ "Pacific/Fiji"                      , 0x03A877 },
-	{ "Pacific/Funafuti"                  , 0x03A901 },
-	{ "Pacific/Galapagos"                 , 0x03A945 },
-	{ "Pacific/Gambier"                   , 0x03A9BD },
-	{ "Pacific/Guadalcanal"               , 0x03AA22 },
-	{ "Pacific/Guam"                      , 0x03AA77 },
-	{ "Pacific/Honolulu"                  , 0x03AACD },
-	{ "Pacific/Johnston"                  , 0x03AB61 },
-	{ "Pacific/Kiritimati"                , 0x03ABB3 },
-	{ "Pacific/Kosrae"                    , 0x03AC1E },
-	{ "Pacific/Kwajalein"                 , 0x03AC7B },
-	{ "Pacific/Majuro"                    , 0x03ACE7 },
-	{ "Pacific/Marquesas"                 , 0x03AD46 },
-	{ "Pacific/Midway"                    , 0x03ADAD },
-	{ "Pacific/Nauru"                     , 0x03AE37 },
-	{ "Pacific/Niue"                      , 0x03AEAF },
-	{ "Pacific/Norfolk"                   , 0x03AF0D },
-	{ "Pacific/Noumea"                    , 0x03AF62 },
-	{ "Pacific/Pago_Pago"                 , 0x03AFF2 },
-	{ "Pacific/Palau"                     , 0x03B07B },
-	{ "Pacific/Pitcairn"                  , 0x03B0BF },
-	{ "Pacific/Pohnpei"                   , 0x03B114 },
-	{ "Pacific/Ponape"                    , 0x03B169 },
-	{ "Pacific/Port_Moresby"              , 0x03B1AE },
-	{ "Pacific/Rarotonga"                 , 0x03B1F2 },
-	{ "Pacific/Saipan"                    , 0x03B2CE },
-	{ "Pacific/Samoa"                     , 0x03B331 },
-	{ "Pacific/Tahiti"                    , 0x03B3BA },
-	{ "Pacific/Tarawa"                    , 0x03B41F },
-	{ "Pacific/Tongatapu"                 , 0x03B473 },
-	{ "Pacific/Truk"                      , 0x03B4FF },
-	{ "Pacific/Wake"                      , 0x03B544 },
-	{ "Pacific/Wallis"                    , 0x03B594 },
-	{ "Pacific/Yap"                       , 0x03B5D8 },
-	{ "Poland"                            , 0x03B61D },
-	{ "Portugal"                          , 0x03B9FE },
-	{ "PRC"                               , 0x03BEFA },
-	{ "PST8PDT"                           , 0x03BFAB },
-	{ "ROC"                               , 0x03C2FC },
-	{ "ROK"                               , 0x03C414 },
-	{ "Singapore"                         , 0x03C4B8 },
-	{ "Turkey"                            , 0x03C56F },
-	{ "UCT"                               , 0x03C95C },
-	{ "Universal"                         , 0x03C9A0 },
-	{ "US/Alaska"                         , 0x03C9E4 },
-	{ "US/Aleutian"                       , 0x03CD4D },
-	{ "US/Arizona"                        , 0x03D0B3 },
-	{ "US/Central"                        , 0x03D141 },
-	{ "US/East-Indiana"                   , 0x03DB4B },
-	{ "US/Eastern"                        , 0x03D64C },
-	{ "US/Hawaii"                         , 0x03DDB5 },
-	{ "US/Indiana-Starke"                 , 0x03DE43 },
-	{ "US/Michigan"                       , 0x03E1B4 },
-	{ "US/Mountain"                       , 0x03E4EB },
-	{ "US/Pacific"                        , 0x03E864 },
-	{ "US/Pacific-New"                    , 0x03EC69 },
-	{ "US/Samoa"                          , 0x03F06E },
-	{ "UTC"                               , 0x03F0F7 },
-	{ "W-SU"                              , 0x03F3EE },
-	{ "WET"                               , 0x03F13B },
-	{ "Zulu"                              , 0x03F729 },
+	{ "America/Metlakatla"                , 0x00E94E },
+	{ "America/Mexico_City"               , 0x00ECAC },
+	{ "America/Miquelon"                  , 0x00EF27 },
+	{ "America/Moncton"                   , 0x00F199 },
+	{ "America/Monterrey"                 , 0x00F630 },
+	{ "America/Montevideo"                , 0x00F893 },
+	{ "America/Montreal"                  , 0x00FBA5 },
+	{ "America/Montserrat"                , 0x0100BB },
+	{ "America/Nassau"                    , 0x010110 },
+	{ "America/New_York"                  , 0x010455 },
+	{ "America/Nipigon"                   , 0x010960 },
+	{ "America/Nome"                      , 0x010CB1 },
+	{ "America/Noronha"                   , 0x01102F },
+	{ "America/North_Dakota/Beulah"       , 0x01115F },
+	{ "America/North_Dakota/Center"       , 0x0114F3 },
+	{ "America/North_Dakota/New_Salem"    , 0x011887 },
+	{ "America/Ojinaga"                   , 0x011C30 },
+	{ "America/Panama"                    , 0x011E91 },
+	{ "America/Pangnirtung"               , 0x011EE6 },
+	{ "America/Paramaribo"                , 0x01221C },
+	{ "America/Phoenix"                   , 0x0122AE },
+	{ "America/Port-au-Prince"            , 0x01235C },
+	{ "America/Port_of_Spain"             , 0x012577 },
+	{ "America/Porto_Acre"                , 0x012478 },
+	{ "America/Porto_Velho"               , 0x0125CC },
+	{ "America/Puerto_Rico"               , 0x0126C2 },
+	{ "America/Rainy_River"               , 0x01272D },
+	{ "America/Rankin_Inlet"              , 0x012A65 },
+	{ "America/Recife"                    , 0x012D4B },
+	{ "America/Regina"                    , 0x012E75 },
+	{ "America/Resolute"                  , 0x013033 },
+	{ "America/Rio_Branco"                , 0x01332C },
+	{ "America/Rosario"                   , 0x01342F },
+	{ "America/Santa_Isabel"              , 0x0135D5 },
+	{ "America/Santarem"                  , 0x013978 },
+	{ "America/Santiago"                  , 0x013A7D },
+	{ "America/Santo_Domingo"             , 0x013E26 },
+	{ "America/Sao_Paulo"                 , 0x013EEC },
+	{ "America/Scoresbysund"              , 0x0141FB },
+	{ "America/Shiprock"                  , 0x0144E9 },
+	{ "America/Sitka"                     , 0x014878 },
+	{ "America/St_Barthelemy"             , 0x014C00 },
+	{ "America/St_Johns"                  , 0x014C55 },
+	{ "America/St_Kitts"                  , 0x0151A8 },
+	{ "America/St_Lucia"                  , 0x0151FD },
+	{ "America/St_Thomas"                 , 0x015252 },
+	{ "America/St_Vincent"                , 0x0152A7 },
+	{ "America/Swift_Current"             , 0x0152FC },
+	{ "America/Tegucigalpa"               , 0x01541D },
+	{ "America/Thule"                     , 0x01549C },
+	{ "America/Thunder_Bay"               , 0x0156E3 },
+	{ "America/Tijuana"                   , 0x015A2C },
+	{ "America/Toronto"                   , 0x015DC5 },
+	{ "America/Tortola"                   , 0x0162DC },
+	{ "America/Vancouver"                 , 0x016331 },
+	{ "America/Virgin"                    , 0x01676E },
+	{ "America/Whitehorse"                , 0x0167C3 },
+	{ "America/Winnipeg"                  , 0x016AE0 },
+	{ "America/Yakutat"                   , 0x016F20 },
+	{ "America/Yellowknife"               , 0x01728B },
+	{ "Antarctica/Casey"                  , 0x01759B },
+	{ "Antarctica/Davis"                  , 0x017626 },
+	{ "Antarctica/DumontDUrville"         , 0x0176BD },
+	{ "Antarctica/Macquarie"              , 0x01774F },
+	{ "Antarctica/Mawson"                 , 0x0179C9 },
+	{ "Antarctica/McMurdo"                , 0x017A45 },
+	{ "Antarctica/Palmer"                 , 0x017D47 },
+	{ "Antarctica/Rothera"                , 0x018063 },
+	{ "Antarctica/South_Pole"             , 0x0180D9 },
+	{ "Antarctica/Syowa"                  , 0x0183E1 },
+	{ "Antarctica/Vostok"                 , 0x01844F },
+	{ "Arctic/Longyearbyen"               , 0x0184C0 },
+	{ "Asia/Aden"                         , 0x0187F2 },
+	{ "Asia/Almaty"                       , 0x018847 },
+	{ "Asia/Amman"                        , 0x0189C6 },
+	{ "Asia/Anadyr"                       , 0x018C86 },
+	{ "Asia/Aqtau"                        , 0x018F74 },
+	{ "Asia/Aqtobe"                       , 0x019173 },
+	{ "Asia/Ashgabat"                     , 0x01932B },
+	{ "Asia/Ashkhabad"                    , 0x019448 },
+	{ "Asia/Baghdad"                      , 0x019565 },
+	{ "Asia/Bahrain"                      , 0x0196DA },
+	{ "Asia/Baku"                         , 0x019740 },
+	{ "Asia/Bangkok"                      , 0x019A28 },
+	{ "Asia/Beirut"                       , 0x019A7D },
+	{ "Asia/Bishkek"                      , 0x019D8A },
+	{ "Asia/Brunei"                       , 0x019F36 },
+	{ "Asia/Calcutta"                     , 0x019F98 },
+	{ "Asia/Choibalsan"                   , 0x01A011 },
+	{ "Asia/Chongqing"                    , 0x01A18A },
+	{ "Asia/Chungking"                    , 0x01A279 },
+	{ "Asia/Colombo"                      , 0x01A328 },
+	{ "Asia/Dacca"                        , 0x01A3C4 },
+	{ "Asia/Damascus"                     , 0x01A46A },
+	{ "Asia/Dhaka"                        , 0x01A7BA },
+	{ "Asia/Dili"                         , 0x01A860 },
+	{ "Asia/Dubai"                        , 0x01A8E9 },
+	{ "Asia/Dushanbe"                     , 0x01A93E },
+	{ "Asia/Gaza"                         , 0x01AA41 },
+	{ "Asia/Harbin"                       , 0x01AD8A },
+	{ "Asia/Ho_Chi_Minh"                  , 0x01AE71 },
+	{ "Asia/Hong_Kong"                    , 0x01AEE9 },
+	{ "Asia/Hovd"                         , 0x01B0AB },
+	{ "Asia/Irkutsk"                      , 0x01B223 },
+	{ "Asia/Istanbul"                     , 0x01B50A },
+	{ "Asia/Jakarta"                      , 0x01B8F7 },
+	{ "Asia/Jayapura"                     , 0x01B9A1 },
+	{ "Asia/Jerusalem"                    , 0x01BA3D },
+	{ "Asia/Kabul"                        , 0x01BD6C },
+	{ "Asia/Kamchatka"                    , 0x01BDBD },
+	{ "Asia/Karachi"                      , 0x01C0A2 },
+	{ "Asia/Kashgar"                      , 0x01C157 },
+	{ "Asia/Kathmandu"                    , 0x01C228 },
+	{ "Asia/Katmandu"                     , 0x01C28E },
+	{ "Asia/Kolkata"                      , 0x01C2F4 },
+	{ "Asia/Krasnoyarsk"                  , 0x01C36D },
+	{ "Asia/Kuala_Lumpur"                 , 0x01C656 },
+	{ "Asia/Kuching"                      , 0x01C713 },
+	{ "Asia/Kuwait"                       , 0x01C801 },
+	{ "Asia/Macao"                        , 0x01C856 },
+	{ "Asia/Macau"                        , 0x01C991 },
+	{ "Asia/Magadan"                      , 0x01CACC },
+	{ "Asia/Makassar"                     , 0x01CDAF },
+	{ "Asia/Manila"                       , 0x01CE73 },
+	{ "Asia/Muscat"                       , 0x01CEF8 },
+	{ "Asia/Nicosia"                      , 0x01CF4D },
+	{ "Asia/Novokuznetsk"                 , 0x01D235 },
+	{ "Asia/Novosibirsk"                  , 0x01D538 },
+	{ "Asia/Omsk"                         , 0x01D82C },
+	{ "Asia/Oral"                         , 0x01DB14 },
+	{ "Asia/Phnom_Penh"                   , 0x01DCE4 },
+	{ "Asia/Pontianak"                    , 0x01DD5C },
+	{ "Asia/Pyongyang"                    , 0x01DE1D },
+	{ "Asia/Qatar"                        , 0x01DE8A },
+	{ "Asia/Qyzylorda"                    , 0x01DEF0 },
+	{ "Asia/Rangoon"                      , 0x01E0C6 },
+	{ "Asia/Riyadh"                       , 0x01E13E },
+	{ "Asia/Saigon"                       , 0x01E193 },
+	{ "Asia/Sakhalin"                     , 0x01E20B },
+	{ "Asia/Samarkand"                    , 0x01E50B },
+	{ "Asia/Seoul"                        , 0x01E641 },
+	{ "Asia/Shanghai"                     , 0x01E6E5 },
+	{ "Asia/Singapore"                    , 0x01E7C5 },
+	{ "Asia/Taipei"                       , 0x01E87C },
+	{ "Asia/Tashkent"                     , 0x01E994 },
+	{ "Asia/Tbilisi"                      , 0x01EAC5 },
+	{ "Asia/Tehran"                       , 0x01EC7F },
+	{ "Asia/Tel_Aviv"                     , 0x01EEED },
+	{ "Asia/Thimbu"                       , 0x01F21C },
+	{ "Asia/Thimphu"                      , 0x01F282 },
+	{ "Asia/Tokyo"                        , 0x01F2E8 },
+	{ "Asia/Ujung_Pandang"                , 0x01F371 },
+	{ "Asia/Ulaanbaatar"                  , 0x01F3ED },
+	{ "Asia/Ulan_Bator"                   , 0x01F548 },
+	{ "Asia/Urumqi"                       , 0x01F695 },
+	{ "Asia/Vientiane"                    , 0x01F75C },
+	{ "Asia/Vladivostok"                  , 0x01F7D4 },
+	{ "Asia/Yakutsk"                      , 0x01FAC1 },
+	{ "Asia/Yekaterinburg"                , 0x01FDA7 },
+	{ "Asia/Yerevan"                      , 0x0200B3 },
+	{ "Atlantic/Azores"                   , 0x0203B7 },
+	{ "Atlantic/Bermuda"                  , 0x0208BA },
+	{ "Atlantic/Canary"                   , 0x020B9B },
+	{ "Atlantic/Cape_Verde"               , 0x020E71 },
+	{ "Atlantic/Faeroe"                   , 0x020EEA },
+	{ "Atlantic/Faroe"                    , 0x02118E },
+	{ "Atlantic/Jan_Mayen"                , 0x021432 },
+	{ "Atlantic/Madeira"                  , 0x021764 },
+	{ "Atlantic/Reykjavik"                , 0x021C6D },
+	{ "Atlantic/South_Georgia"            , 0x021E26 },
+	{ "Atlantic/St_Helena"                , 0x02213E },
+	{ "Atlantic/Stanley"                  , 0x021E6A },
+	{ "Australia/ACT"                     , 0x022193 },
+	{ "Australia/Adelaide"                , 0x0224B0 },
+	{ "Australia/Brisbane"                , 0x0227DC },
+	{ "Australia/Broken_Hill"             , 0x0228A3 },
+	{ "Australia/Canberra"                , 0x022BE1 },
+	{ "Australia/Currie"                  , 0x022EFE },
+	{ "Australia/Darwin"                  , 0x023231 },
+	{ "Australia/Eucla"                   , 0x0232B7 },
+	{ "Australia/Hobart"                  , 0x02338C },
+	{ "Australia/LHI"                     , 0x0236EA },
+	{ "Australia/Lindeman"                , 0x023985 },
+	{ "Australia/Lord_Howe"               , 0x023A66 },
+	{ "Australia/Melbourne"               , 0x023D11 },
+	{ "Australia/North"                   , 0x024036 },
+	{ "Australia/NSW"                     , 0x0240AA },
+	{ "Australia/Perth"                   , 0x0243C7 },
+	{ "Australia/Queensland"              , 0x02449F },
+	{ "Australia/South"                   , 0x02454B },
+	{ "Australia/Sydney"                  , 0x024868 },
+	{ "Australia/Tasmania"                , 0x024BA5 },
+	{ "Australia/Victoria"                , 0x024EEA },
+	{ "Australia/West"                    , 0x025207 },
+	{ "Australia/Yancowinna"              , 0x0252BD },
+	{ "Brazil/Acre"                       , 0x0255DF },
+	{ "Brazil/DeNoronha"                  , 0x0256DE },
+	{ "Brazil/East"                       , 0x0257FE },
+	{ "Brazil/West"                       , 0x025ADB },
+	{ "Canada/Atlantic"                   , 0x025BD3 },
+	{ "Canada/Central"                    , 0x0260BB },
+	{ "Canada/East-Saskatchewan"          , 0x0269C5 },
+	{ "Canada/Eastern"                    , 0x0264D5 },
+	{ "Canada/Mountain"                   , 0x026B4E },
+	{ "Canada/Newfoundland"               , 0x026EC4 },
+	{ "Canada/Pacific"                    , 0x0273EF },
+	{ "Canada/Saskatchewan"               , 0x027808 },
+	{ "Canada/Yukon"                      , 0x027991 },
+	{ "CET"                               , 0x027C94 },
+	{ "Chile/Continental"                 , 0x027F9D },
+	{ "Chile/EasterIsland"                , 0x028338 },
+	{ "CST6CDT"                           , 0x02867A },
+	{ "Cuba"                              , 0x0289CB },
+	{ "EET"                               , 0x028D3E },
+	{ "Egypt"                             , 0x028FF1 },
+	{ "Eire"                              , 0x0293C2 },
+	{ "EST"                               , 0x0298D3 },
+	{ "EST5EDT"                           , 0x029917 },
+	{ "Etc/GMT"                           , 0x029C68 },
+	{ "Etc/GMT+0"                         , 0x029D34 },
+	{ "Etc/GMT+1"                         , 0x029DBE },
+	{ "Etc/GMT+10"                        , 0x029E4B },
+	{ "Etc/GMT+11"                        , 0x029ED9 },
+	{ "Etc/GMT+12"                        , 0x029F67 },
+	{ "Etc/GMT+2"                         , 0x02A082 },
+	{ "Etc/GMT+3"                         , 0x02A10E },
+	{ "Etc/GMT+4"                         , 0x02A19A },
+	{ "Etc/GMT+5"                         , 0x02A226 },
+	{ "Etc/GMT+6"                         , 0x02A2B2 },
+	{ "Etc/GMT+7"                         , 0x02A33E },
+	{ "Etc/GMT+8"                         , 0x02A3CA },
+	{ "Etc/GMT+9"                         , 0x02A456 },
+	{ "Etc/GMT-0"                         , 0x029CF0 },
+	{ "Etc/GMT-1"                         , 0x029D78 },
+	{ "Etc/GMT-10"                        , 0x029E04 },
+	{ "Etc/GMT-11"                        , 0x029E92 },
+	{ "Etc/GMT-12"                        , 0x029F20 },
+	{ "Etc/GMT-13"                        , 0x029FAE },
+	{ "Etc/GMT-14"                        , 0x029FF5 },
+	{ "Etc/GMT-2"                         , 0x02A03C },
+	{ "Etc/GMT-3"                         , 0x02A0C8 },
+	{ "Etc/GMT-4"                         , 0x02A154 },
+	{ "Etc/GMT-5"                         , 0x02A1E0 },
+	{ "Etc/GMT-6"                         , 0x02A26C },
+	{ "Etc/GMT-7"                         , 0x02A2F8 },
+	{ "Etc/GMT-8"                         , 0x02A384 },
+	{ "Etc/GMT-9"                         , 0x02A410 },
+	{ "Etc/GMT0"                          , 0x029CAC },
+	{ "Etc/Greenwich"                     , 0x02A49C },
+	{ "Etc/UCT"                           , 0x02A4E0 },
+	{ "Etc/Universal"                     , 0x02A524 },
+	{ "Etc/UTC"                           , 0x02A568 },
+	{ "Etc/Zulu"                          , 0x02A5AC },
+	{ "Europe/Amsterdam"                  , 0x02A5F0 },
+	{ "Europe/Andorra"                    , 0x02AA2E },
+	{ "Europe/Athens"                     , 0x02ACAA },
+	{ "Europe/Belfast"                    , 0x02AFED },
+	{ "Europe/Belgrade"                   , 0x02B524 },
+	{ "Europe/Berlin"                     , 0x02B7ED },
+	{ "Europe/Bratislava"                 , 0x02BB43 },
+	{ "Europe/Brussels"                   , 0x02BE75 },
+	{ "Europe/Bucharest"                  , 0x02C2AC },
+	{ "Europe/Budapest"                   , 0x02C5D6 },
+	{ "Europe/Chisinau"                   , 0x02C949 },
+	{ "Europe/Copenhagen"                 , 0x02CCD7 },
+	{ "Europe/Dublin"                     , 0x02CFE1 },
+	{ "Europe/Gibraltar"                  , 0x02D4F2 },
+	{ "Europe/Guernsey"                   , 0x02D949 },
+	{ "Europe/Helsinki"                   , 0x02DE80 },
+	{ "Europe/Isle_of_Man"                , 0x02E136 },
+	{ "Europe/Istanbul"                   , 0x02E66D },
+	{ "Europe/Jersey"                     , 0x02EA5A },
+	{ "Europe/Kaliningrad"                , 0x02EF91 },
+	{ "Europe/Kiev"                       , 0x02F2F4 },
+	{ "Europe/Lisbon"                     , 0x02F60B },
+	{ "Europe/Ljubljana"                  , 0x02FB0F },
+	{ "Europe/London"                     , 0x02FDD8 },
+	{ "Europe/Luxembourg"                 , 0x03030F },
+	{ "Europe/Madrid"                     , 0x030765 },
+	{ "Europe/Malta"                      , 0x030B2B },
+	{ "Europe/Mariehamn"                  , 0x030EE4 },
+	{ "Europe/Minsk"                      , 0x03119A },
+	{ "Europe/Monaco"                     , 0x0314A5 },
+	{ "Europe/Moscow"                     , 0x0318E0 },
+	{ "Europe/Nicosia"                    , 0x031C32 },
+	{ "Europe/Oslo"                       , 0x031F1A },
+	{ "Europe/Paris"                      , 0x03224C },
+	{ "Europe/Podgorica"                  , 0x032692 },
+	{ "Europe/Prague"                     , 0x03295B },
+	{ "Europe/Riga"                       , 0x032C8D },
+	{ "Europe/Rome"                       , 0x032FD2 },
+	{ "Europe/Samara"                     , 0x033395 },
+	{ "Europe/San_Marino"                 , 0x0336CE },
+	{ "Europe/Sarajevo"                   , 0x033A91 },
+	{ "Europe/Simferopol"                 , 0x033D5A },
+	{ "Europe/Skopje"                     , 0x034085 },
+	{ "Europe/Sofia"                      , 0x03434E },
+	{ "Europe/Stockholm"                  , 0x034656 },
+	{ "Europe/Tallinn"                    , 0x034905 },
+	{ "Europe/Tirane"                     , 0x034C3F },
+	{ "Europe/Tiraspol"                   , 0x034F45 },
+	{ "Europe/Uzhgorod"                   , 0x0352D3 },
+	{ "Europe/Vaduz"                      , 0x0355EA },
+	{ "Europe/Vatican"                    , 0x03587D },
+	{ "Europe/Vienna"                     , 0x035C40 },
+	{ "Europe/Vilnius"                    , 0x035F6D },
+	{ "Europe/Volgograd"                  , 0x0362AC },
+	{ "Europe/Warsaw"                     , 0x0365B5 },
+	{ "Europe/Zagreb"                     , 0x036996 },
+	{ "Europe/Zaporozhye"                 , 0x036C5F },
+	{ "Europe/Zurich"                     , 0x036FA0 },
+	{ "Factory"                           , 0x03724F },
+	{ "GB"                                , 0x0372C0 },
+	{ "GB-Eire"                           , 0x0377F7 },
+	{ "GMT"                               , 0x037D2E },
+	{ "GMT+0"                             , 0x037DFA },
+	{ "GMT-0"                             , 0x037DB6 },
+	{ "GMT0"                              , 0x037D72 },
+	{ "Greenwich"                         , 0x037E3E },
+	{ "Hongkong"                          , 0x037E82 },
+	{ "HST"                               , 0x038044 },
+	{ "Iceland"                           , 0x038088 },
+	{ "Indian/Antananarivo"               , 0x038241 },
+	{ "Indian/Chagos"                     , 0x0382B5 },
+	{ "Indian/Christmas"                  , 0x038317 },
+	{ "Indian/Cocos"                      , 0x03835B },
+	{ "Indian/Comoro"                     , 0x03839F },
+	{ "Indian/Kerguelen"                  , 0x0383F4 },
+	{ "Indian/Mahe"                       , 0x038449 },
+	{ "Indian/Maldives"                   , 0x03849E },
+	{ "Indian/Mauritius"                  , 0x0384F3 },
+	{ "Indian/Mayotte"                    , 0x038569 },
+	{ "Indian/Reunion"                    , 0x0385BE },
+	{ "Iran"                              , 0x038613 },
+	{ "Israel"                            , 0x038881 },
+	{ "Jamaica"                           , 0x038BB0 },
+	{ "Japan"                             , 0x038C75 },
+	{ "Kwajalein"                         , 0x038CFE },
+	{ "Libya"                             , 0x038D61 },
+	{ "MET"                               , 0x038E5B },
+	{ "Mexico/BajaNorte"                  , 0x039164 },
+	{ "Mexico/BajaSur"                    , 0x0394CD },
+	{ "Mexico/General"                    , 0x039712 },
+	{ "MST"                               , 0x039970 },
+	{ "MST7MDT"                           , 0x0399B4 },
+	{ "Navajo"                            , 0x039D05 },
+	{ "NZ"                                , 0x03A07E },
+	{ "NZ-CHAT"                           , 0x03A3FC },
+	{ "Pacific/Apia"                      , 0x03A6E4 },
+	{ "Pacific/Auckland"                  , 0x03A762 },
+	{ "Pacific/Chatham"                   , 0x03AAEE },
+	{ "Pacific/Chuuk"                     , 0x03ADE5 },
+	{ "Pacific/Easter"                    , 0x03AE3E },
+	{ "Pacific/Efate"                     , 0x03B19C },
+	{ "Pacific/Enderbury"                 , 0x03B262 },
+	{ "Pacific/Fakaofo"                   , 0x03B2D0 },
+	{ "Pacific/Fiji"                      , 0x03B314 },
+	{ "Pacific/Funafuti"                  , 0x03B39E },
+	{ "Pacific/Galapagos"                 , 0x03B3E2 },
+	{ "Pacific/Gambier"                   , 0x03B45A },
+	{ "Pacific/Guadalcanal"               , 0x03B4BF },
+	{ "Pacific/Guam"                      , 0x03B514 },
+	{ "Pacific/Honolulu"                  , 0x03B56A },
+	{ "Pacific/Johnston"                  , 0x03B5E1 },
+	{ "Pacific/Kiritimati"                , 0x03B633 },
+	{ "Pacific/Kosrae"                    , 0x03B69E },
+	{ "Pacific/Kwajalein"                 , 0x03B6FB },
+	{ "Pacific/Majuro"                    , 0x03B767 },
+	{ "Pacific/Marquesas"                 , 0x03B7C6 },
+	{ "Pacific/Midway"                    , 0x03B82D },
+	{ "Pacific/Nauru"                     , 0x03B8B7 },
+	{ "Pacific/Niue"                      , 0x03B92F },
+	{ "Pacific/Norfolk"                   , 0x03B98D },
+	{ "Pacific/Noumea"                    , 0x03B9E2 },
+	{ "Pacific/Pago_Pago"                 , 0x03BA72 },
+	{ "Pacific/Palau"                     , 0x03BAFB },
+	{ "Pacific/Pitcairn"                  , 0x03BB3F },
+	{ "Pacific/Pohnpei"                   , 0x03BB94 },
+	{ "Pacific/Ponape"                    , 0x03BBE9 },
+	{ "Pacific/Port_Moresby"              , 0x03BC2E },
+	{ "Pacific/Rarotonga"                 , 0x03BC72 },
+	{ "Pacific/Saipan"                    , 0x03BD4E },
+	{ "Pacific/Samoa"                     , 0x03BDB1 },
+	{ "Pacific/Tahiti"                    , 0x03BE3A },
+	{ "Pacific/Tarawa"                    , 0x03BE9F },
+	{ "Pacific/Tongatapu"                 , 0x03BEF3 },
+	{ "Pacific/Truk"                      , 0x03BF7F },
+	{ "Pacific/Wake"                      , 0x03BFC4 },
+	{ "Pacific/Wallis"                    , 0x03C014 },
+	{ "Pacific/Yap"                       , 0x03C058 },
+	{ "Poland"                            , 0x03C09D },
+	{ "Portugal"                          , 0x03C47E },
+	{ "PRC"                               , 0x03C97A },
+	{ "PST8PDT"                           , 0x03CA2B },
+	{ "ROC"                               , 0x03CD7C },
+	{ "ROK"                               , 0x03CE94 },
+	{ "Singapore"                         , 0x03CF38 },
+	{ "Turkey"                            , 0x03CFEF },
+	{ "UCT"                               , 0x03D3DC },
+	{ "Universal"                         , 0x03D420 },
+	{ "US/Alaska"                         , 0x03D464 },
+	{ "US/Aleutian"                       , 0x03D7CD },
+	{ "US/Arizona"                        , 0x03DB33 },
+	{ "US/Central"                        , 0x03DBC1 },
+	{ "US/East-Indiana"                   , 0x03E5CB },
+	{ "US/Eastern"                        , 0x03E0CC },
+	{ "US/Hawaii"                         , 0x03E835 },
+	{ "US/Indiana-Starke"                 , 0x03E8A6 },
+	{ "US/Michigan"                       , 0x03EC17 },
+	{ "US/Mountain"                       , 0x03EF4E },
+	{ "US/Pacific"                        , 0x03F2C7 },
+	{ "US/Pacific-New"                    , 0x03F6CC },
+	{ "US/Samoa"                          , 0x03FAD1 },
+	{ "UTC"                               , 0x03FB5A },
+	{ "W-SU"                              , 0x03FE51 },
+	{ "WET"                               , 0x03FB9E },
+	{ "Zulu"                              , 0x04018C },
 };
 /* This is a generated file, do not modify */
-const unsigned char timelib_timezone_db_data_builtin[259949] = {
+const unsigned char timelib_timezone_db_data_builtin[262608] = {
 
 
 /* Africa/Abidjan */
@@ -3412,7 +3415,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x3E, 0x8F, 0xB4, 0x50, 0x3F, 0x9B, 0x54, 0xD0, 0x40, 0x6F, 0x96, 0x50, 0x45, 0x44, 0x35, 0x50, 
 0x45, 0xF3, 0x8C, 0xD0, 0x47, 0x24, 0x17, 0x50, 0x47, 0xDC, 0xA9, 0x50, 0x49, 0x03, 0xF9, 0x50, 
 0x49, 0xB3, 0x50, 0xD0, 0x4A, 0xE3, 0xDB, 0x50, 0x4B, 0x9C, 0x6D, 0x50, 0x4C, 0xCC, 0xF7, 0xD0, 
-0x4D, 0x7C, 0x4F, 0x50, 0x4E, 0xAC, 0xD9, 0xD0, 0x4F, 0x5C, 0x31, 0x50, 0x50, 0x8C, 0xBB, 0xD0, 
+0x4D, 0x85, 0x89, 0xD0, 0x4E, 0xAC, 0xD9, 0xD0, 0x4F, 0x5C, 0x31, 0x50, 0x50, 0x8C, 0xBB, 0xD0, 
 0x51, 0x3C, 0x13, 0x50, 0x52, 0x6C, 0x9D, 0xD0, 0x53, 0x1B, 0xF5, 0x50, 0x54, 0x4C, 0x7F, 0xD0, 
 0x54, 0xFB, 0xD7, 0x50, 0x56, 0x2C, 0x61, 0xD0, 0x56, 0xE4, 0xF3, 0xD0, 0x58, 0x15, 0x7E, 0x50, 
 0x58, 0xC4, 0xD5, 0xD0, 0x59, 0xF5, 0x60, 0x50, 0x5A, 0xA4, 0xB7, 0xD0, 0x5B, 0xD5, 0x42, 0x50, 
@@ -4027,7 +4030,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x07, 0x8D, 0x43, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x09, 0xAD, 0xBF, 0x20, 0x0A, 0xF0, 0xB0, 0x90, 
 0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, 
 0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, 
-0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, 
+0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x63, 0x20, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, 
 0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, 
 0x1A, 0x2B, 0x14, 0x10, 0x1A, 0xF2, 0x42, 0xB0, 0x1B, 0xE2, 0x25, 0xA0, 0x1C, 0xD2, 0x24, 0xB0, 
 0x1D, 0xC2, 0x07, 0xA0, 0x1E, 0xB2, 0x06, 0xB0, 0x1F, 0xA1, 0xE9, 0xA0, 0x20, 0x76, 0x39, 0x30, 
@@ -4057,8 +4060,8 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x78, 0x18, 0xB0, 0xA0, 0x78, 0xBE, 0xDB, 0xB0, 0x79, 0xF8, 0x92, 0xA0, 0x7A, 0x9E, 0xBD, 0xB0, 
 0x7B, 0xD8, 0x74, 0xA0, 0x7C, 0x7E, 0x9F, 0xB0, 0x7D, 0xB8, 0x56, 0xA0, 0x7E, 0x5E, 0x81, 0xB0, 
 0x7F, 0x98, 0x38, 0xA0, 0x01, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 
-0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 
-0x00, 0x03, 0x00, 0x03, 0x04, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
+0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x03, 
+0x00, 0x03, 0x00, 0x03, 0x05, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
@@ -4066,10 +4069,10 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
 0x06, 0x07, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x04, 0xFF, 0xFF, 
-0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x10, 
-0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x18, 0xFF, 0xFF, 0x81, 0x70, 
+0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 
+0xFF, 0xFF, 0x81, 0x70, 0x00, 0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x18, 0xFF, 0xFF, 0x81, 0x70, 
 0x00, 0x1D, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x50, 0x44, 
-0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 
+0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 
 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x4A, 0x72, 0x00, 0x45, 0x8C, 0xCB, 0x00, 0x00, 0x00, 0x1E, 
 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x6C, 
@@ -4696,6 +4699,62 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x43, 0x61, 0x6D, 0x70, 0x65, 0x63, 
 0x68, 0x65, 0x2C, 0x20, 0x59, 0x75, 0x63, 0x61, 0x74, 0x61, 0x6E, 
 
+/* America/Metlakatla */
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0xCB, 0x89, 0x1A, 0xA0, 
+0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, 0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10, 
+0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, 0x02, 0x78, 0x0B, 0x20, 0x03, 0x71, 0x28, 0x90, 
+0x04, 0x61, 0x27, 0xA0, 0x05, 0x51, 0x0A, 0x90, 0x06, 0x41, 0x09, 0xA0, 0x07, 0x30, 0xEC, 0x90, 
+0x07, 0x8D, 0x43, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x09, 0xAD, 0xBF, 0x20, 0x0A, 0xF0, 0xB0, 0x90, 
+0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, 
+0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, 
+0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, 
+0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, 
+0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, 0x1D, 0xC1, 0xF9, 0x90, 
+0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, 0x21, 0x81, 0xBD, 0x90, 
+0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, 0x25, 0x4A, 0xBC, 0x10, 
+0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, 0x29, 0x0A, 0x80, 0x10, 
+0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, 0x2C, 0xD3, 0x7E, 0x90, 
+0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, 0x30, 0x93, 0x42, 0x90, 
+0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, 0x34, 0x53, 0x06, 0x90, 
+0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, 0x38, 0x1C, 0x05, 0x10, 
+0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, 0x3B, 0xDB, 0xC9, 0x10, 
+0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, 0x3F, 0x9B, 0x8D, 0x10, 
+0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, 0x43, 0x64, 0x8B, 0x90, 
+0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, 0x47, 0x2D, 0x8A, 0x10, 
+0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, 0x4A, 0xED, 0x4E, 0x10, 
+0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, 0x4E, 0xB6, 0x4C, 0x90, 
+0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, 0x52, 0x76, 0x10, 0x90, 
+0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, 0x56, 0x35, 0xD4, 0x90, 
+0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, 0x59, 0xFE, 0xD3, 0x10, 
+0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, 
+0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, 0x61, 0x87, 0x95, 0x90, 
+0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, 0x65, 0x47, 0x59, 0x90, 
+0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, 0x69, 0x07, 0x1D, 0x90, 
+0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, 0x6C, 0xD0, 0x1C, 0x10, 
+0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, 0x70, 0x8F, 0xE0, 0x10, 
+0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, 0x74, 0x4F, 0xA4, 0x10, 
+0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, 0x78, 0x18, 0xA2, 0x90, 
+0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, 0x7B, 0xD8, 0x66, 0x90, 
+0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, 0x7F, 0x98, 0x2A, 0x90, 
+0x01, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 
+0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0x8F, 
+0x80, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 
+0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 
+0x10, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x50, 0x44, 0x54, 
+0x00, 0x4D, 0x65, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
+0x00, 0x00, 0x00, 0xDD, 0x72, 0x36, 0x00, 0x49, 0xE3, 0x79, 0x00, 0x00, 0x00, 0x20, 0x4D, 0x65, 
+0x74, 0x6C, 0x61, 0x6B, 0x61, 0x74, 0x6C, 0x61, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 
+0x41, 0x6E, 0x6E, 0x65, 0x74, 0x74, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 
+
 /* America/Mexico_City */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 
@@ -5315,6 +5374,66 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x69, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 
+/* America/North_Dakota/Beulah */
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x3A, 0x90, 
+0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90, 
+0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xFA, 0xF8, 0x75, 0x10, 0xFB, 0xE8, 0x58, 0x00, 
+0xFC, 0xD8, 0x57, 0x10, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x39, 0x10, 0xFF, 0xA8, 0x1C, 0x00, 
+0x00, 0x98, 0x1B, 0x10, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xFD, 0x10, 0x03, 0x71, 0x1A, 0x80, 
+0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, 0x07, 0x30, 0xDE, 0x80, 
+0x07, 0x8D, 0x35, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x09, 0xAD, 0xB1, 0x10, 0x0A, 0xF0, 0xA2, 0x80, 
+0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, 0x0E, 0xB9, 0xA1, 0x00, 
+0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, 0x12, 0x79, 0x65, 0x00, 
+0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, 0x16, 0x39, 0x29, 0x00, 
+0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, 0x1A, 0x02, 0x27, 0x80, 
+0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, 0x1D, 0xC1, 0xEB, 0x80, 
+0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, 0x21, 0x81, 0xAF, 0x80, 
+0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, 0x25, 0x4A, 0xAE, 0x00, 
+0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, 0x29, 0x0A, 0x72, 0x00, 
+0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, 0x2C, 0xD3, 0x70, 0x80, 
+0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, 0x30, 0x93, 0x34, 0x80, 
+0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, 
+0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, 
+0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, 0x3B, 0xDB, 0xBB, 0x00, 
+0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, 0x3F, 0x9B, 0x7F, 0x00, 
+0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, 0x43, 0x64, 0x7D, 0x80, 
+0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, 0x47, 0x2D, 0x7C, 0x00, 
+0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, 0x4A, 0xED, 0x40, 0x00, 
+0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, 
+0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, 
+0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, 
+0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 
+0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 
+0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, 
+0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, 
+0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, 
+0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, 
+0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, 
+0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, 
+0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, 
+0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, 
+0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, 
+0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 
+0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 
+0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 
+0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 
+0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 
+0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x05, 0x04, 
+0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 
+0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 
+0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 
+0x05, 0x04, 0x05, 0x04, 0x05, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 
+0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 
+0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 
+0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xD1, 0x72, 
+0xD0, 0x00, 0x77, 0x5B, 0x8E, 0x00, 0x00, 0x00, 0x2B, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 
+0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x20, 0x44, 0x61, 
+0x6B, 0x6F, 0x74, 0x61, 0x20, 0x2D, 0x20, 0x4D, 0x65, 0x72, 0x63, 0x65, 0x72, 0x20, 0x43, 0x6F, 
+0x75, 0x6E, 0x74, 0x79, 
+
 /* America/North_Dakota/Center */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 
@@ -5998,7 +6117,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, 
 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, 
 0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, 0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, 
-0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0x7C, 0x33, 0x30, 
+0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0x97, 0xE2, 0xB0, 
 0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, 0x51, 0x3B, 0xF7, 0x30, 
 0x52, 0x5A, 0x1A, 0xC0, 0x53, 0x1B, 0xD9, 0x30, 0x54, 0x39, 0xFC, 0xC0, 0x55, 0x04, 0xF5, 0xB0, 
 0x56, 0x19, 0xDE, 0xC0, 0x56, 0xE4, 0xD7, 0xB0, 0x57, 0xF9, 0xC0, 0xC0, 0x58, 0xC4, 0xB9, 0xB0, 
@@ -6204,6 +6323,65 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x9B, 0x00, 0x6C, 0xD0, 0xE1, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 
 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x61, 0x76, 0x61, 0x6A, 0x6F, 
 
+/* America/Sitka */
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xCB, 0x89, 0x1A, 0xA0, 
+0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, 0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10, 
+0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, 0x02, 0x78, 0x0B, 0x20, 0x03, 0x71, 0x28, 0x90, 
+0x04, 0x61, 0x27, 0xA0, 0x05, 0x51, 0x0A, 0x90, 0x06, 0x41, 0x09, 0xA0, 0x07, 0x30, 0xEC, 0x90, 
+0x07, 0x8D, 0x43, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x09, 0xAD, 0xBF, 0x20, 0x0A, 0xF0, 0xB0, 0x90, 
+0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, 
+0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, 
+0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, 
+0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, 
+0x1A, 0x2B, 0x14, 0x10, 0x1A, 0xF2, 0x42, 0xB0, 0x1B, 0xE2, 0x25, 0xA0, 0x1C, 0xD2, 0x24, 0xB0, 
+0x1D, 0xC2, 0x07, 0xA0, 0x1E, 0xB2, 0x06, 0xB0, 0x1F, 0xA1, 0xE9, 0xA0, 0x20, 0x76, 0x39, 0x30, 
+0x21, 0x81, 0xCB, 0xA0, 0x22, 0x56, 0x1B, 0x30, 0x23, 0x6A, 0xE8, 0x20, 0x24, 0x35, 0xFD, 0x30, 
+0x25, 0x4A, 0xCA, 0x20, 0x26, 0x15, 0xDF, 0x30, 0x27, 0x2A, 0xAC, 0x20, 0x27, 0xFE, 0xFB, 0xB0, 
+0x29, 0x0A, 0x8E, 0x20, 0x29, 0xDE, 0xDD, 0xB0, 0x2A, 0xEA, 0x70, 0x20, 0x2B, 0xBE, 0xBF, 0xB0, 
+0x2C, 0xD3, 0x8C, 0xA0, 0x2D, 0x9E, 0xA1, 0xB0, 0x2E, 0xB3, 0x6E, 0xA0, 0x2F, 0x7E, 0x83, 0xB0, 
+0x30, 0x93, 0x50, 0xA0, 0x31, 0x67, 0xA0, 0x30, 0x32, 0x73, 0x32, 0xA0, 0x33, 0x47, 0x82, 0x30, 
+0x34, 0x53, 0x14, 0xA0, 0x35, 0x27, 0x64, 0x30, 0x36, 0x32, 0xF6, 0xA0, 0x37, 0x07, 0x46, 0x30, 
+0x38, 0x1C, 0x13, 0x20, 0x38, 0xE7, 0x28, 0x30, 0x39, 0xFB, 0xF5, 0x20, 0x3A, 0xC7, 0x0A, 0x30, 
+0x3B, 0xDB, 0xD7, 0x20, 0x3C, 0xB0, 0x26, 0xB0, 0x3D, 0xBB, 0xB9, 0x20, 0x3E, 0x90, 0x08, 0xB0, 
+0x3F, 0x9B, 0x9B, 0x20, 0x40, 0x6F, 0xEA, 0xB0, 0x41, 0x84, 0xB7, 0xA0, 0x42, 0x4F, 0xCC, 0xB0, 
+0x43, 0x64, 0x99, 0xA0, 0x44, 0x2F, 0xAE, 0xB0, 0x45, 0x44, 0x7B, 0xA0, 0x45, 0xF3, 0xE1, 0x30, 
+0x47, 0x2D, 0x98, 0x20, 0x47, 0xD3, 0xC3, 0x30, 0x49, 0x0D, 0x7A, 0x20, 0x49, 0xB3, 0xA5, 0x30, 
+0x4A, 0xED, 0x5C, 0x20, 0x4B, 0x9C, 0xC1, 0xB0, 0x4C, 0xD6, 0x78, 0xA0, 0x4D, 0x7C, 0xA3, 0xB0, 
+0x4E, 0xB6, 0x5A, 0xA0, 0x4F, 0x5C, 0x85, 0xB0, 0x50, 0x96, 0x3C, 0xA0, 0x51, 0x3C, 0x67, 0xB0, 
+0x52, 0x76, 0x1E, 0xA0, 0x53, 0x1C, 0x49, 0xB0, 0x54, 0x56, 0x00, 0xA0, 0x54, 0xFC, 0x2B, 0xB0, 
+0x56, 0x35, 0xE2, 0xA0, 0x56, 0xE5, 0x48, 0x30, 0x58, 0x1E, 0xFF, 0x20, 0x58, 0xC5, 0x2A, 0x30, 
+0x59, 0xFE, 0xE1, 0x20, 0x5A, 0xA5, 0x0C, 0x30, 0x5B, 0xDE, 0xC3, 0x20, 0x5C, 0x84, 0xEE, 0x30, 
+0x5D, 0xBE, 0xA5, 0x20, 0x5E, 0x64, 0xD0, 0x30, 0x5F, 0x9E, 0x87, 0x20, 0x60, 0x4D, 0xEC, 0xB0, 
+0x61, 0x87, 0xA3, 0xA0, 0x62, 0x2D, 0xCE, 0xB0, 0x63, 0x67, 0x85, 0xA0, 0x64, 0x0D, 0xB0, 0xB0, 
+0x65, 0x47, 0x67, 0xA0, 0x65, 0xED, 0x92, 0xB0, 0x67, 0x27, 0x49, 0xA0, 0x67, 0xCD, 0x74, 0xB0, 
+0x69, 0x07, 0x2B, 0xA0, 0x69, 0xAD, 0x56, 0xB0, 0x6A, 0xE7, 0x0D, 0xA0, 0x6B, 0x96, 0x73, 0x30, 
+0x6C, 0xD0, 0x2A, 0x20, 0x6D, 0x76, 0x55, 0x30, 0x6E, 0xB0, 0x0C, 0x20, 0x6F, 0x56, 0x37, 0x30, 
+0x70, 0x8F, 0xEE, 0x20, 0x71, 0x36, 0x19, 0x30, 0x72, 0x6F, 0xD0, 0x20, 0x73, 0x15, 0xFB, 0x30, 
+0x74, 0x4F, 0xB2, 0x20, 0x74, 0xFF, 0x17, 0xB0, 0x76, 0x38, 0xCE, 0xA0, 0x76, 0xDE, 0xF9, 0xB0, 
+0x78, 0x18, 0xB0, 0xA0, 0x78, 0xBE, 0xDB, 0xB0, 0x79, 0xF8, 0x92, 0xA0, 0x7A, 0x9E, 0xBD, 0xB0, 
+0x7B, 0xD8, 0x74, 0xA0, 0x7C, 0x7E, 0x9F, 0xB0, 0x7D, 0xB8, 0x56, 0xA0, 0x7E, 0x5E, 0x81, 0xB0, 
+0x7F, 0x98, 0x38, 0xA0, 0x01, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 
+0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 
+0x00, 0x03, 0x00, 0x03, 0x04, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 
+0x06, 0x07, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x04, 0xFF, 0xFF, 
+0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x10, 
+0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x18, 0xFF, 0xFF, 0x81, 0x70, 
+0x00, 0x1D, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x50, 0x44, 
+0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 
+0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x92, 0xC6, 0x00, 0x44, 0x34, 0x2D, 0x00, 0x00, 0x00, 0x28, 
+0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x73, 0x6F, 
+0x75, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x20, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x70, 
+0x61, 0x6E, 0x68, 0x61, 0x6E, 0x64, 0x6C, 0x65, 
+
 /* America/St_Barthelemy */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
@@ -8077,7 +8255,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x43, 0x63, 0xFE, 0xF0, 0x44, 0x25, 0xCB, 0x70, 0x45, 0x43, 0xE0, 0xF0, 0x45, 0x98, 0x32, 0xE0, 
 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 
 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 
+0x4D, 0x8F, 0xDD, 0x90, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 
 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 
 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 
 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 
@@ -8129,9 +8307,10 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0xD0, 0x58, 0xB9, 0xF0, 0xF4, 0xB5, 0xA2, 0x68, 0x01, 0x02, 0x01, 0x00, 0x00, 0x83, 0xE8, 0x00, 
 0x00, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x85, 0x98, 0x00, 0x08, 0x4C, 0x4D, 0x54, 
 0x00, 0x45, 0x49, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x85, 0x76, 0xAA, 0x01, 0xE9, 0x59, 0x70, 0x00, 0x00, 0x00, 0x19, 0x49, 0x72, 0x69, 0x61, 0x6E, 
-0x20, 0x4A, 0x61, 0x79, 0x61, 0x20, 0x26, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4D, 0x6F, 0x6C, 0x75, 
-0x63, 0x63, 0x61, 0x73, 
+0x85, 0x76, 0xAA, 0x01, 0xE9, 0x59, 0x70, 0x00, 0x00, 0x00, 0x31, 0x77, 0x65, 0x73, 0x74, 0x20, 
+0x4E, 0x65, 0x77, 0x20, 0x47, 0x75, 0x69, 0x6E, 0x65, 0x61, 0x20, 0x28, 0x49, 0x72, 0x69, 0x61, 
+0x6E, 0x20, 0x4A, 0x61, 0x79, 0x61, 0x29, 0x20, 0x26, 0x20, 0x4D, 0x61, 0x6C, 0x75, 0x6B, 0x75, 
+0x73, 0x20, 0x28, 0x4D, 0x6F, 0x6C, 0x75, 0x63, 0x63, 0x61, 0x73, 0x29, 
 
 /* Asia/Jerusalem */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8490,11 +8669,12 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x00, 0x00, 0x6F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 
 0x00, 0x08, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00, 
 0x43, 0x49, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x81, 0x85, 0x8D, 0x01, 0xC8, 0xD9, 0x1F, 0x00, 0x00, 0x00, 0x3D, 0x65, 0x61, 0x73, 0x74, 
+0x00, 0x81, 0x85, 0x8D, 0x01, 0xC8, 0xD9, 0x1F, 0x00, 0x00, 0x00, 0x48, 0x65, 0x61, 0x73, 0x74, 
 0x20, 0x26, 0x20, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x20, 0x42, 0x6F, 0x72, 0x6E, 0x65, 0x6F, 0x2C, 
-0x20, 0x43, 0x65, 0x6C, 0x65, 0x62, 0x65, 0x73, 0x2C, 0x20, 0x42, 0x61, 0x6C, 0x69, 0x2C, 0x20, 
-0x4E, 0x75, 0x73, 0x61, 0x20, 0x54, 0x65, 0x6E, 0x67, 0x61, 0x72, 0x72, 0x61, 0x2C, 0x20, 0x77, 
-0x65, 0x73, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x6F, 0x72, 
+0x20, 0x53, 0x75, 0x6C, 0x61, 0x77, 0x65, 0x73, 0x69, 0x20, 0x28, 0x43, 0x65, 0x6C, 0x65, 0x62, 
+0x65, 0x73, 0x29, 0x2C, 0x20, 0x42, 0x61, 0x6C, 0x69, 0x2C, 0x20, 0x4E, 0x75, 0x73, 0x61, 0x20, 
+0x54, 0x65, 0x6E, 0x67, 0x61, 0x72, 0x72, 0x61, 0x2C, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x54, 
+0x69, 0x6D, 0x6F, 0x72, 
 
 /* Asia/Manila */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -11578,7 +11758,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, 
 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, 
 0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, 0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, 
-0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0x7C, 0x33, 0x30, 
+0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0x97, 0xE2, 0xB0, 
 0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, 0x51, 0x3B, 0xF7, 0x30, 
 0x52, 0x5A, 0x1A, 0xC0, 0x53, 0x1B, 0xD9, 0x30, 0x54, 0x39, 0xFC, 0xC0, 0x55, 0x04, 0xF5, 0xB0, 
 0x56, 0x19, 0xDE, 0xC0, 0x56, 0xE4, 0xD7, 0xB0, 0x57, 0xF9, 0xC0, 0xC0, 0x58, 0xC4, 0xB9, 0xB0, 
@@ -11635,7 +11815,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, 
 0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, 0x48, 0xF1, 0x76, 0x40, 
 0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, 
-0x4D, 0x7C, 0x33, 0x30, 0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, 
+0x4D, 0x97, 0xE2, 0xB0, 0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, 
 0x51, 0x3B, 0xF7, 0x30, 0x52, 0x5A, 0x1A, 0xC0, 0x53, 0x1B, 0xD9, 0x30, 0x54, 0x39, 0xFC, 0xC0, 
 0x55, 0x04, 0xF5, 0xB0, 0x56, 0x19, 0xDE, 0xC0, 0x56, 0xE4, 0xD7, 0xB0, 0x57, 0xF9, 0xC0, 0xC0, 
 0x58, 0xC4, 0xB9, 0xB0, 0x59, 0xE2, 0xDD, 0x40, 0x5A, 0xA4, 0x9B, 0xB0, 0x5B, 0xC2, 0xBF, 0x40, 
@@ -11749,7 +11929,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x3E, 0x8F, 0xB4, 0x50, 0x3F, 0x9B, 0x54, 0xD0, 0x40, 0x6F, 0x96, 0x50, 0x45, 0x44, 0x35, 0x50, 
 0x45, 0xF3, 0x8C, 0xD0, 0x47, 0x24, 0x17, 0x50, 0x47, 0xDC, 0xA9, 0x50, 0x49, 0x03, 0xF9, 0x50, 
 0x49, 0xB3, 0x50, 0xD0, 0x4A, 0xE3, 0xDB, 0x50, 0x4B, 0x9C, 0x6D, 0x50, 0x4C, 0xCC, 0xF7, 0xD0, 
-0x4D, 0x7C, 0x4F, 0x50, 0x4E, 0xAC, 0xD9, 0xD0, 0x4F, 0x5C, 0x31, 0x50, 0x50, 0x8C, 0xBB, 0xD0, 
+0x4D, 0x85, 0x89, 0xD0, 0x4E, 0xAC, 0xD9, 0xD0, 0x4F, 0x5C, 0x31, 0x50, 0x50, 0x8C, 0xBB, 0xD0, 
 0x51, 0x3C, 0x13, 0x50, 0x52, 0x6C, 0x9D, 0xD0, 0x53, 0x1B, 0xF5, 0x50, 0x54, 0x4C, 0x7F, 0xD0, 
 0x54, 0xFB, 0xD7, 0x50, 0x56, 0x2C, 0x61, 0xD0, 0x56, 0xE4, 0xF3, 0xD0, 0x58, 0x15, 0x7E, 0x50, 
 0x58, 0xC4, 0xD5, 0xD0, 0x59, 0xF5, 0x60, 0x50, 0x5A, 0xA4, 0xB7, 0xD0, 0x5B, 0xD5, 0x42, 0x50, 
@@ -13388,7 +13568,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x43, 0x63, 0xFE, 0xF0, 0x44, 0x25, 0xCB, 0x70, 0x45, 0x43, 0xE0, 0xF0, 0x45, 0x98, 0x32, 0xE0, 
 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 
 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 
+0x4D, 0x8F, 0xDD, 0x90, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 
 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 
 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 
 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 
@@ -16639,7 +16819,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x50, 0x48, 0x50, 0x31, 0x01, 0x57, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x91, 0x05, 0xFC, 0x00, 
-0xDA, 0x62, 0x04, 0x38, 0x4C, 0x9F, 0x27, 0xB0, 0x4D, 0x98, 0x53, 0x30, 0x01, 0x02, 0x03, 0x02, 
+0xDA, 0x62, 0x04, 0x38, 0x4C, 0x9F, 0x27, 0xB0, 0x4D, 0x97, 0x2B, 0xE0, 0x01, 0x02, 0x03, 0x02, 
 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, 0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50, 
 0x00, 0x09, 0xFF, 0xFF, 0x73, 0x60, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 
 0x00, 0x57, 0x53, 0x54, 0x00, 0x57, 0x53, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -16788,7 +16968,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, 
 0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xEF, 0x02, 0x30, 0x48, 0xF1, 0x76, 0x40, 
 0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0xB8, 0x00, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, 
-0x4D, 0x7C, 0x33, 0x30, 0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, 
+0x4D, 0x97, 0xE2, 0xB0, 0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, 
 0x51, 0x3B, 0xF7, 0x30, 0x52, 0x5A, 0x1A, 0xC0, 0x53, 0x1B, 0xD9, 0x30, 0x54, 0x39, 0xFC, 0xC0, 
 0x55, 0x04, 0xF5, 0xB0, 0x56, 0x19, 0xDE, 0xC0, 0x56, 0xE4, 0xD7, 0xB0, 0x57, 0xF9, 0xC0, 0xC0, 
 0x58, 0xC4, 0xB9, 0xB0, 0x59, 0xE2, 0xDD, 0x40, 0x5A, 0xA4, 0x9B, 0xB0, 0x5B, 0xC2, 0xBF, 0x40, 
@@ -16904,15 +17084,13 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 
 /* Pacific/Honolulu */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0xBB, 0x05, 0x43, 0x48, 
-0xBB, 0x20, 0xE4, 0xB8, 0xCB, 0x89, 0x3D, 0xC8, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x49, 0x38, 
-0xD5, 0x8D, 0x73, 0x48, 0x01, 0x00, 0x02, 0x03, 0x00, 0x04, 0xFF, 0xFF, 0x6C, 0x58, 0x00, 0x00, 
-0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x04, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x08, 0xFF, 0xFF, 0x7A, 0x68, 
-0x01, 0x0C, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x48, 0x44, 0x54, 0x00, 
-0x48, 0x57, 0x54, 0x00, 0x48, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x00, 0x00, 0xA9, 0xD7, 0x46, 0x00, 0x21, 0xC9, 0x16, 0x00, 0x00, 0x00, 0x06, 0x48, 0x61, 
-0x77, 0x61, 0x69, 0x69, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0xBB, 0x05, 0x43, 0x48, 
+0xBB, 0x21, 0x71, 0x58, 0xCB, 0x89, 0x3D, 0xC8, 0xD2, 0x61, 0x49, 0x38, 0xD5, 0x8D, 0x73, 0x48, 
+0x01, 0x00, 0x01, 0x00, 0x02, 0xFF, 0xFF, 0x6C, 0x58, 0x00, 0x00, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 
+0x04, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x48, 0x44, 0x54, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xD7, 0x46, 0x00, 0x21, 0xC9, 0x16, 0x00, 0x00, 0x00, 
+0x06, 0x48, 0x61, 0x77, 0x61, 0x69, 0x69, 
 
 /* Pacific/Johnston */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -17452,7 +17630,7 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x43, 0x63, 0xFE, 0xF0, 0x44, 0x25, 0xCB, 0x70, 0x45, 0x43, 0xE0, 0xF0, 0x45, 0x98, 0x32, 0xE0, 
 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 
 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 
+0x4D, 0x8F, 0xDD, 0x90, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 
 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 
 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 
 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 
@@ -17831,14 +18009,13 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 
 /* US/Hawaii */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0xBB, 0x05, 0x43, 0x48, 
-0xBB, 0x20, 0xE4, 0xB8, 0xCB, 0x89, 0x3D, 0xC8, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x49, 0x38, 
-0xD5, 0x8D, 0x73, 0x48, 0x01, 0x00, 0x02, 0x03, 0x00, 0x04, 0xFF, 0xFF, 0x6C, 0x58, 0x00, 0x00, 
-0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x04, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x08, 0xFF, 0xFF, 0x7A, 0x68, 
-0x01, 0x0C, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x48, 0x44, 0x54, 0x00, 
-0x48, 0x57, 0x54, 0x00, 0x48, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0xBB, 0x05, 0x43, 0x48, 
+0xBB, 0x21, 0x71, 0x58, 0xCB, 0x89, 0x3D, 0xC8, 0xD2, 0x61, 0x49, 0x38, 0xD5, 0x8D, 0x73, 0x48, 
+0x01, 0x00, 0x01, 0x00, 0x02, 0xFF, 0xFF, 0x6C, 0x58, 0x00, 0x00, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 
+0x04, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x48, 0x44, 0x54, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 
 
 /* US/Indiana-Starke */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -18269,4 +18446,4 @@ const unsigned char timelib_timezone_db_data_builtin[259949] = {
 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
 0x00, 0x00, 0x00, 0x00, };
 
-const timelib_tzdb timezonedb_builtin = { "2010.15", 568, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
+const timelib_tzdb timezonedb_builtin = { "2011.4", 571, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
diff --git a/ext/date/lib/timezonemap.h b/ext/date/lib/timezonemap.h
index 292cab9..4601923 100644
--- a/ext/date/lib/timezonemap.h
+++ b/ext/date/lib/timezonemap.h
@@ -26,22 +26,17 @@
 	{ "aft",   0,  14400, "Asia/Kabul"                    },
 	{ "aft",   0,  16200, "Asia/Kabul"                    },
 	{ "ahdt",  1, -32400, "America/Anchorage"             },
-	{ "ahdt",  1, -32400, "US/Alaska"                     },
 	{ "ahst",  0, -36000, "America/Anchorage"             },
 	{ "ahst",  0, -36000, "America/Adak"                  },
 	{ "ahst",  0, -36000, "America/Atka"                  },
-	{ "ahst",  0, -36000, "US/Alaska"                     },
-	{ "ahst",  0, -36000, "US/Aleutian"                   },
 	{ "akdt",  1, -28800, "America/Anchorage"             },
 	{ "akdt",  1, -28800, "America/Juneau"                },
 	{ "akdt",  1, -28800, "America/Nome"                  },
 	{ "akdt",  1, -28800, "America/Yakutat"               },
-	{ "akdt",  1, -28800, "US/Alaska"                     },
 	{ "akst",  0, -32400, "America/Anchorage"             },
 	{ "akst",  0, -32400, "America/Juneau"                },
 	{ "akst",  0, -32400, "America/Nome"                  },
 	{ "akst",  0, -32400, "America/Yakutat"               },
-	{ "akst",  0, -32400, "US/Alaska"                     },
 	{ "aktst", 1,  21600, "Asia/Aqtobe"                   },
 	{ "aktt",  0,  14400, "Asia/Aqtobe"                   },
 	{ "aktt",  0,  18000, "Asia/Aqtobe"                   },
@@ -250,11 +245,9 @@
 	{ "bdst",  1,   7200, "Europe/Isle_of_Man"            },
 	{ "bdst",  1,   7200, "Europe/Jersey"                 },
 	{ "bdst",  1,   7200, "GB"                            },
-	{ "bdst",  1,   7200, "GB-Eire"                       },
 	{ "bdt",   1, -36000, "America/Adak"                  },
 	{ "bdt",   1, -36000, "America/Atka"                  },
 	{ "bdt",   1, -36000, "America/Nome"                  },
-	{ "bdt",   1, -36000, "US/Aleutian"                   },
 	{ "bdt",   0,  21600, "Asia/Dacca"                    },
 	{ "bdt",   0,  21600, "Asia/Dhaka"                    },
 	{ "beat",  0,   9000, "Africa/Mogadishu"              },
@@ -303,15 +296,11 @@
 	{ "bst",   0, -39600, "Pacific/Midway"                },
 	{ "bst",   0, -39600, "Pacific/Pago_Pago"             },
 	{ "bst",   0, -39600, "Pacific/Samoa"                 },
-	{ "bst",   0, -39600, "US/Aleutian"                   },
-	{ "bst",   0, -39600, "US/Samoa"                      },
 	{ "bst",   0,   3600, "Europe/Belfast"                },
 	{ "bst",   0,   3600, "Europe/Guernsey"               },
 	{ "bst",   0,   3600, "Europe/Isle_of_Man"            },
 	{ "bst",   0,   3600, "Europe/Jersey"                 },
 	{ "bst",   0,   3600, "GB"                            },
-	{ "bst",   0,   3600, "GB-Eire"                       },
-	{ "bst",   1,   3600, "Eire"                          },
 	{ "bst",   1,   3600, "Europe/Belfast"                },
 	{ "bst",   1,   3600, "Europe/Dublin"                 },
 	{ "bst",   1,   3600, "Europe/Gibraltar"              },
@@ -319,7 +308,6 @@
 	{ "bst",   1,   3600, "Europe/Isle_of_Man"            },
 	{ "bst",   1,   3600, "Europe/Jersey"                 },
 	{ "bst",   1,   3600, "GB"                            },
-	{ "bst",   1,   3600, "GB-Eire"                       },
 	{ "btt",   0,  21600, "Asia/Thimbu"                   },
 	{ "btt",   0,  21600, "Asia/Thimphu"                  },
 	{ "burt",  0,  23400, "Asia/Kolkata"                  },
@@ -329,13 +317,11 @@
 	{ "burt",  0,  23400, "Asia/Rangoon"                  },
 	{ "cant",  0,  -3600, "Atlantic/Canary"               },
 	{ "capt",  1, -32400, "America/Anchorage"             },
-	{ "capt",  1, -32400, "US/Alaska"                     },
 	{ "cast",  0,  34200, "Australia/Adelaide"            },
 	{ "cast",  1,  10800, "Africa/Gaborone"               },
 	{ "cast",  1,  10800, "Africa/Khartoum"               },
 	{ "cast",  0,  39600, "Antarctica/Casey"              },
 	{ "cat",   0, -36000, "America/Anchorage"             },
-	{ "cat",   0, -36000, "US/Alaska"                     },
 	{ "cat",   0,   7200, "Africa/Khartoum"               },
 	{ "cat",   0,   7200, "Africa/Blantyre"               },
 	{ "cat",   0,   7200, "Africa/Bujumbura"              },
@@ -347,15 +333,14 @@
 	{ "cat",   0,   7200, "Africa/Maputo"                 },
 	{ "cat",   0,   7200, "Africa/Windhoek"               },
 	{ "cawt",  1, -32400, "America/Anchorage"             },
-	{ "cawt",  1, -32400, "US/Alaska"                     },
 	{ "cct",   0,  23400, "Indian/Cocos"                  },
 	{ "cddt",  1, -14400, "America/Rankin_Inlet"          },
 	{ "cddt",  1, -14400, "America/Resolute"              },
 	{ "cdt",   1, -18000, "America/Chicago"               },
 	{ "cdt",   1, -14400, "America/Havana"                },
-	{ "cdt",   1, -14400, "Cuba"                          },
 	{ "cdt",   0, -18000, "America/Resolute"              },
 	{ "cdt",   1, -18000, "America/Atikokan"              },
+	{ "cdt",   1, -18000, "America/Bahia_Banderas"        },
 	{ "cdt",   1, -18000, "America/Belize"                },
 	{ "cdt",   1, -18000, "America/Cambridge_Bay"         },
 	{ "cdt",   1, -18000, "America/Cancun"                },
@@ -395,11 +380,7 @@
 	{ "cdt",   1, -18000, "America/Tegucigalpa"           },
 	{ "cdt",   1, -18000, "America/Winnipeg"              },
 	{ "cdt",   1, -18000, "Canada/Central"                },
-	{ "cdt",   1, -18000, "CST6CDT"                       },
 	{ "cdt",   1, -18000, "Mexico/General"                },
-	{ "cdt",   1, -18000, "US/Central"                    },
-	{ "cdt",   1, -18000, "US/East-Indiana"               },
-	{ "cdt",   1, -18000, "US/Indiana-Starke"             },
 	{ "cdt",   1,  32400, "Asia/Shanghai"                 },
 	{ "cdt",   1,  32400, "Asia/Chongqing"                },
 	{ "cdt",   1,  32400, "Asia/Chungking"                },
@@ -463,9 +444,6 @@
 	{ "cest",  1,   7200, "Europe/Zagreb"                 },
 	{ "cest",  1,   7200, "Europe/Zaporozhye"             },
 	{ "cest",  1,   7200, "Europe/Zurich"                 },
-	{ "cest",  1,   7200, "Libya"                         },
-	{ "cest",  1,   7200, "Poland"                        },
-	{ "cest",  1,   7200, "Portugal"                      },
 	{ "cest",  1,   7200, "WET"                           },
 	{ "cet",   0,   3600, "Europe/Berlin"                 },
 	{ "cet",   0,   3600, "Africa/Algiers"                },
@@ -519,30 +497,27 @@
 	{ "cet",   0,   3600, "Europe/Zagreb"                 },
 	{ "cet",   0,   3600, "Europe/Zaporozhye"             },
 	{ "cet",   0,   3600, "Europe/Zurich"                 },
-	{ "cet",   0,   3600, "Libya"                         },
-	{ "cet",   0,   3600, "Poland"                        },
-	{ "cet",   0,   3600, "Portugal"                      },
 	{ "cet",   0,   3600, "WET"                           },
 	{ "cet",   0,   7200, "Europe/Kaliningrad"            },
 	{ "cgst",  1,  -3600, "America/Scoresbysund"          },
 	{ "cgt",   0,  -7200, "America/Scoresbysund"          },
 	{ "chadt", 1,  49500, "Pacific/Chatham"               },
-	{ "chadt", 1,  49500, "NZ-CHAT"                       },
 	{ "chast", 0,  45900, "Pacific/Chatham"               },
-	{ "chast", 0,  45900, "NZ-CHAT"                       },
 	{ "chat",  0,  30600, "Asia/Harbin"                   },
 	{ "chat",  0,  32400, "Asia/Harbin"                   },
 	{ "chdt",  1, -19800, "America/Belize"                },
 	{ "chost", 1,  36000, "Asia/Choibalsan"               },
 	{ "chot",  0,  28800, "Asia/Choibalsan"               },
 	{ "chot",  0,  32400, "Asia/Choibalsan"               },
+	{ "chut",  0,  36000, "Pacific/Chuuk"                 },
+	{ "chut",  0,  36000, "Pacific/Truk"                  },
+	{ "chut",  0,  36000, "Pacific/Yap"                   },
 	{ "cit",   0,  28800, "Asia/Dili"                     },
 	{ "cit",   0,  28800, "Asia/Makassar"                 },
 	{ "cit",   0,  28800, "Asia/Pontianak"                },
 	{ "cit",   0,  28800, "Asia/Ujung_Pandang"            },
 	{ "cjt",   0,  32400, "Asia/Sakhalin"                 },
 	{ "cjt",   0,  32400, "Asia/Tokyo"                    },
-	{ "cjt",   0,  32400, "Japan"                         },
 	{ "ckhst", 1, -34200, "Pacific/Rarotonga"             },
 	{ "ckt",   0, -36000, "Pacific/Rarotonga"             },
 	{ "ckt",   0, -37800, "Pacific/Rarotonga"             },
@@ -604,14 +579,10 @@
 	{ "cpt",   1, -18000, "America/Rainy_River"           },
 	{ "cpt",   1, -18000, "America/Winnipeg"              },
 	{ "cpt",   1, -18000, "Canada/Central"                },
-	{ "cpt",   1, -18000, "CST6CDT"                       },
-	{ "cpt",   1, -18000, "US/Central"                    },
-	{ "cpt",   1, -18000, "US/East-Indiana"               },
-	{ "cpt",   1, -18000, "US/Indiana-Starke"             },
 	{ "cst",   0, -21600, "America/Chicago"               },
 	{ "cst",   0, -18000, "America/Havana"                },
-	{ "cst",   0, -18000, "Cuba"                          },
 	{ "cst",   0, -21600, "America/Atikokan"              },
+	{ "cst",   0, -21600, "America/Bahia_Banderas"        },
 	{ "cst",   0, -21600, "America/Belize"                },
 	{ "cst",   0, -21600, "America/Cambridge_Bay"         },
 	{ "cst",   0, -21600, "America/Cancun"                },
@@ -659,13 +630,8 @@
 	{ "cst",   0, -21600, "Canada/Central"                },
 	{ "cst",   0, -21600, "Canada/East-Saskatchewan"      },
 	{ "cst",   0, -21600, "Canada/Saskatchewan"           },
-	{ "cst",   0, -21600, "CST6CDT"                       },
 	{ "cst",   0, -21600, "Mexico/BajaSur"                },
 	{ "cst",   0, -21600, "Mexico/General"                },
-	{ "cst",   0, -21600, "US/Central"                    },
-	{ "cst",   0, -21600, "US/East-Indiana"               },
-	{ "cst",   0, -21600, "US/Indiana-Starke"             },
-	{ "cst",   0, -21600, "US/Michigan"                   },
 	{ "cst",   0,  28800, "Asia/Chongqing"                },
 	{ "cst",   0,  28800, "Asia/Chungking"                },
 	{ "cst",   0,  28800, "Asia/Harbin"                   },
@@ -718,11 +684,7 @@
 	{ "cwt",   1, -18000, "America/Rainy_River"           },
 	{ "cwt",   1, -18000, "America/Winnipeg"              },
 	{ "cwt",   1, -18000, "Canada/Central"                },
-	{ "cwt",   1, -18000, "CST6CDT"                       },
 	{ "cwt",   1, -18000, "Mexico/General"                },
-	{ "cwt",   1, -18000, "US/Central"                    },
-	{ "cwt",   1, -18000, "US/East-Indiana"               },
-	{ "cwt",   1, -18000, "US/Indiana-Starke"             },
 	{ "cxt",   0,  25200, "Indian/Christmas"              },
 	{ "chst",  0,  36000, "Pacific/Guam"                  },
 	{ "chst",  0,  36000, "Pacific/Saipan"                },
@@ -731,7 +693,6 @@
 	{ "davt",  0,  18000, "Antarctica/Davis"              },
 	{ "davt",  0,  25200, "Antarctica/Davis"              },
 	{ "ddut",  0,  36000, "Antarctica/DumontDUrville"     },
-	{ "dmt",   0,  -1521, "Eire"                          },
 	{ "dmt",   0,  -1521, "Europe/Dublin"                 },
 	{ "dusst", 1,  21600, "Asia/Dushanbe"                 },
 	{ "dusst", 1,  25200, "Asia/Dushanbe"                 },
@@ -789,11 +750,6 @@
 	{ "edt",   1, -14400, "America/Toronto"               },
 	{ "edt",   1, -14400, "Canada/Eastern"                },
 	{ "edt",   1, -14400, "EST"                           },
-	{ "edt",   1, -14400, "EST5EDT"                       },
-	{ "edt",   1, -14400, "Jamaica"                       },
-	{ "edt",   1, -14400, "US/East-Indiana"               },
-	{ "edt",   1, -14400, "US/Eastern"                    },
-	{ "edt",   1, -14400, "US/Michigan"                   },
 	{ "eest",  1,  10800, "Europe/Helsinki"               },
 	{ "eest",  1,  10800, "Africa/Cairo"                  },
 	{ "eest",  1,  10800, "Asia/Amman"                    },
@@ -803,7 +759,6 @@
 	{ "eest",  1,  10800, "Asia/Istanbul"                 },
 	{ "eest",  1,  10800, "Asia/Nicosia"                  },
 	{ "eest",  1,  10800, "EET"                           },
-	{ "eest",  1,  10800, "Egypt"                         },
 	{ "eest",  1,  10800, "Europe/Athens"                 },
 	{ "eest",  1,  10800, "Europe/Bucharest"              },
 	{ "eest",  1,  10800, "Europe/Chisinau"               },
@@ -823,9 +778,6 @@
 	{ "eest",  1,  10800, "Europe/Vilnius"                },
 	{ "eest",  1,  10800, "Europe/Warsaw"                 },
 	{ "eest",  1,  10800, "Europe/Zaporozhye"             },
-	{ "eest",  1,  10800, "Poland"                        },
-	{ "eest",  1,  10800, "Turkey"                        },
-	{ "eest",  1,  10800, "W-SU"                          },
 	{ "eet",   0,   7200, "Europe/Helsinki"               },
 	{ "eet",   1,  10800, "Asia/Gaza"                     },
 	{ "eet",   0,   7200, "Africa/Cairo"                  },
@@ -837,7 +789,6 @@
 	{ "eet",   0,   7200, "Asia/Istanbul"                 },
 	{ "eet",   0,   7200, "Asia/Nicosia"                  },
 	{ "eet",   0,   7200, "EET"                           },
-	{ "eet",   0,   7200, "Egypt"                         },
 	{ "eet",   0,   7200, "Europe/Athens"                 },
 	{ "eet",   0,   7200, "Europe/Bucharest"              },
 	{ "eet",   0,   7200, "Europe/Chisinau"               },
@@ -857,10 +808,6 @@
 	{ "eet",   0,   7200, "Europe/Vilnius"                },
 	{ "eet",   0,   7200, "Europe/Warsaw"                 },
 	{ "eet",   0,   7200, "Europe/Zaporozhye"             },
-	{ "eet",   0,   7200, "Libya"                         },
-	{ "eet",   0,   7200, "Poland"                        },
-	{ "eet",   0,   7200, "Turkey"                        },
-	{ "eet",   0,   7200, "W-SU"                          },
 	{ "egst",  1,      0, "America/Scoresbysund"          },
 	{ "egt",   0,  -3600, "America/Scoresbysund"          },
 	{ "ehdt",  1, -16200, "America/Santo_Domingo"         },
@@ -876,9 +823,6 @@
 	{ "ept",   1, -14400, "America/Toronto"               },
 	{ "ept",   1, -14400, "Canada/Eastern"                },
 	{ "ept",   1, -14400, "EST"                           },
-	{ "ept",   1, -14400, "EST5EDT"                       },
-	{ "ept",   1, -14400, "US/Eastern"                    },
-	{ "ept",   1, -14400, "US/Michigan"                   },
 	{ "est",   0, -18000, "America/New_York"              },
 	{ "est",   0, -18000, "America/Antigua"               },
 	{ "est",   0, -18000, "America/Atikokan"              },
@@ -922,13 +866,7 @@
 	{ "est",   0, -18000, "America/Toronto"               },
 	{ "est",   0, -18000, "Canada/Eastern"                },
 	{ "est",   0, -18000, "EST"                           },
-	{ "est",   0, -18000, "EST5EDT"                       },
-	{ "est",   0, -18000, "Jamaica"                       },
-	{ "est",   0, -18000, "US/Central"                    },
-	{ "est",   0, -18000, "US/East-Indiana"               },
-	{ "est",   0, -18000, "US/Eastern"                    },
-	{ "est",   0, -18000, "US/Indiana-Starke"             },
-	{ "est",   0, -18000, "US/Michigan"                   },
+	{ "est",   0,  36000, "Antarctica/Macquarie"          },
 	{ "est",   0,  36000, "Australia/ACT"                 },
 	{ "est",   0,  36000, "Australia/Brisbane"            },
 	{ "est",   0,  36000, "Australia/Canberra"            },
@@ -944,6 +882,7 @@
 	{ "est",   0,  36000, "Australia/Tasmania"            },
 	{ "est",   0,  36000, "Australia/Victoria"            },
 	{ "est",   1,  39600, "Australia/Melbourne"           },
+	{ "est",   1,  39600, "Antarctica/Macquarie"          },
 	{ "est",   1,  39600, "Australia/ACT"                 },
 	{ "est",   1,  39600, "Australia/Brisbane"            },
 	{ "est",   1,  39600, "Australia/Canberra"            },
@@ -964,9 +903,6 @@
 	{ "ewt",   1, -14400, "America/Toronto"               },
 	{ "ewt",   1, -14400, "Canada/Eastern"                },
 	{ "ewt",   1, -14400, "EST"                           },
-	{ "ewt",   1, -14400, "EST5EDT"                       },
-	{ "ewt",   1, -14400, "US/Eastern"                    },
-	{ "ewt",   1, -14400, "US/Michigan"                   },
 	{ "ffmt",  0, -14660, "America/Martinique"            },
 	{ "fjst",  1,  46800, "Pacific/Fiji"                  },
 	{ "fjt",   0,  43200, "Pacific/Fiji"                  },
@@ -997,32 +933,6 @@
 	{ "gft",   0, -14400, "America/Cayenne"               },
 	{ "ghst",  1,   1200, "Africa/Accra"                  },
 	{ "gilt",  0,  43200, "Pacific/Tarawa"                },
-	{ "gmt+10", 0, -36000, "Etc/GMT+10"                    },
-	{ "gmt+11", 0, -39600, "Etc/GMT+11"                    },
-	{ "gmt+12", 0, -43200, "Etc/GMT+12"                    },
-	{ "gmt+1", 0,  -3600, "Etc/GMT+1"                     },
-	{ "gmt+2", 0,  -7200, "Etc/GMT+2"                     },
-	{ "gmt+3", 0, -10800, "Etc/GMT+3"                     },
-	{ "gmt+4", 0, -14400, "Etc/GMT+4"                     },
-	{ "gmt+5", 0, -18000, "Etc/GMT+5"                     },
-	{ "gmt+6", 0, -21600, "Etc/GMT+6"                     },
-	{ "gmt+7", 0, -25200, "Etc/GMT+7"                     },
-	{ "gmt+8", 0, -28800, "Etc/GMT+8"                     },
-	{ "gmt+9", 0, -32400, "Etc/GMT+9"                     },
-	{ "gmt-10", 0,  36000, "Etc/GMT-10"                    },
-	{ "gmt-11", 0,  39600, "Etc/GMT-11"                    },
-	{ "gmt-12", 0,  43200, "Etc/GMT-12"                    },
-	{ "gmt-13", 0,  46800, "Etc/GMT-13"                    },
-	{ "gmt-14", 0,  50400, "Etc/GMT-14"                    },
-	{ "gmt-1", 0,   3600, "Etc/GMT-1"                     },
-	{ "gmt-2", 0,   7200, "Etc/GMT-2"                     },
-	{ "gmt-3", 0,  10800, "Etc/GMT-3"                     },
-	{ "gmt-4", 0,  14400, "Etc/GMT-4"                     },
-	{ "gmt-5", 0,  18000, "Etc/GMT-5"                     },
-	{ "gmt-6", 0,  21600, "Etc/GMT-6"                     },
-	{ "gmt-7", 0,  25200, "Etc/GMT-7"                     },
-	{ "gmt-8", 0,  28800, "Etc/GMT-8"                     },
-	{ "gmt-9", 0,  32400, "Etc/GMT-9"                     },
 	{ "gmt",   0,      0, "Africa/Abidjan"                },
 	{ "gmt",   0,      0, "Africa/Accra"                  },
 	{ "gmt",   0,      0, "Africa/Bamako"                 },
@@ -1043,11 +953,7 @@
 	{ "gmt",   0,      0, "America/Danmarkshavn"          },
 	{ "gmt",   0,      0, "Atlantic/Reykjavik"            },
 	{ "gmt",   0,      0, "Atlantic/St_Helena"            },
-	{ "gmt",   0,      0, "Eire"                          },
 	{ "gmt",   0,      0, "Etc/GMT"                       },
-	{ "gmt",   0,      0, "Etc/GMT+0"                     },
-	{ "gmt",   0,      0, "Etc/GMT-0"                     },
-	{ "gmt",   0,      0, "Etc/GMT0"                      },
 	{ "gmt",   0,      0, "Etc/Greenwich"                 },
 	{ "gmt",   0,      0, "Europe/Belfast"                },
 	{ "gmt",   0,      0, "Europe/Dublin"                 },
@@ -1057,12 +963,6 @@
 	{ "gmt",   0,      0, "Europe/Jersey"                 },
 	{ "gmt",   0,      0, "Europe/London"                 },
 	{ "gmt",   0,      0, "GB"                            },
-	{ "gmt",   0,      0, "GB-Eire"                       },
-	{ "gmt",   0,      0, "GMT+0"                         },
-	{ "gmt",   0,      0, "GMT-0"                         },
-	{ "gmt",   0,      0, "GMT0"                          },
-	{ "gmt",   0,      0, "Greenwich"                     },
-	{ "gmt",   0,      0, "Iceland"                       },
 	{ "gst",   0,  14400, "Asia/Dubai"                    },
 	{ "gst",   0,  -7200, "Atlantic/South_Georgia"        },
 	{ "gst",   0,  14400, "Asia/Bahrain"                  },
@@ -1074,19 +974,13 @@
 	{ "gyt",   0, -14400, "America/Guyana"                },
 	{ "hadt",  1, -32400, "America/Adak"                  },
 	{ "hadt",  1, -32400, "America/Atka"                  },
-	{ "hadt",  1, -32400, "US/Aleutian"                   },
 	{ "hast",  0, -36000, "America/Adak"                  },
 	{ "hast",  0, -36000, "America/Atka"                  },
-	{ "hast",  0, -36000, "US/Aleutian"                   },
 	{ "hdt",   1, -34200, "Pacific/Honolulu"              },
 	{ "hdt",   1, -34200, "HST"                           },
-	{ "hdt",   1, -34200, "US/Hawaii"                     },
 	{ "hkst",  1,  32400, "Asia/Hong_Kong"                },
-	{ "hkst",  1,  32400, "Hongkong"                      },
 	{ "hkt",   0,  28800, "Asia/Hong_Kong"                },
-	{ "hkt",   0,  28800, "Hongkong"                      },
 	{ "hmt",   0, -19776, "America/Havana"                },
-	{ "hmt",   0, -19776, "Cuba"                          },
 	{ "hmt",   0,  -6872, "Atlantic/Azores"               },
 	{ "hmt",   0,  21200, "Asia/Calcutta"                 },
 	{ "hmt",   0,  21200, "Asia/Dacca"                    },
@@ -1100,17 +994,13 @@
 	{ "hovt",  0,  25200, "Asia/Hovd"                     },
 	{ "hpt",   1, -34200, "Pacific/Honolulu"              },
 	{ "hpt",   1, -34200, "HST"                           },
-	{ "hpt",   1, -34200, "US/Hawaii"                     },
 	{ "hst",   0, -36000, "Pacific/Honolulu"              },
 	{ "hst",   0, -37800, "Pacific/Honolulu"              },
 	{ "hst",   0, -36000, "HST"                           },
 	{ "hst",   0, -36000, "Pacific/Johnston"              },
-	{ "hst",   0, -36000, "US/Hawaii"                     },
 	{ "hst",   0, -37800, "HST"                           },
-	{ "hst",   0, -37800, "US/Hawaii"                     },
 	{ "hwt",   1, -34200, "Pacific/Honolulu"              },
 	{ "hwt",   1, -34200, "HST"                           },
-	{ "hwt",   1, -34200, "US/Hawaii"                     },
 	{ "ict",   0,  25200, "Asia/Bangkok"                  },
 	{ "ict",   0,  25200, "Asia/Ho_Chi_Minh"              },
 	{ "ict",   0,  25200, "Asia/Phnom_Penh"               },
@@ -1122,35 +1012,26 @@
 	{ "ict",   0,  28800, "Asia/Vientiane"                },
 	{ "iddt",  1,  14400, "Asia/Jerusalem"                },
 	{ "iddt",  1,  14400, "Asia/Tel_Aviv"                 },
-	{ "iddt",  1,  14400, "Israel"                        },
 	{ "idt",   1,  10800, "Asia/Jerusalem"                },
 	{ "idt",   1,  10800, "Asia/Gaza"                     },
 	{ "idt",   1,  10800, "Asia/Tel_Aviv"                 },
-	{ "idt",   1,  10800, "Israel"                        },
 	{ "ihst",  1,  21600, "Asia/Colombo"                  },
 	{ "imt",   0,  25040, "Asia/Irkutsk"                  },
 	{ "imt",   0,   7016, "Asia/Istanbul"                 },
 	{ "imt",   0,   7016, "Europe/Istanbul"               },
-	{ "imt",   0,   7016, "Turkey"                        },
 	{ "iot",   0,  18000, "Indian/Chagos"                 },
 	{ "iot",   0,  21600, "Indian/Chagos"                 },
 	{ "irdt",  1,  16200, "Asia/Tehran"                   },
 	{ "irdt",  1,  18000, "Asia/Tehran"                   },
-	{ "irdt",  1,  16200, "Iran"                          },
-	{ "irdt",  1,  18000, "Iran"                          },
 	{ "irkst", 1,  28800, "Asia/Irkutsk"                  },
 	{ "irkst", 1,  32400, "Asia/Irkutsk"                  },
 	{ "irkt",  0,  25200, "Asia/Irkutsk"                  },
 	{ "irkt",  0,  28800, "Asia/Irkutsk"                  },
 	{ "irst",  0,  12600, "Asia/Tehran"                   },
 	{ "irst",  0,  14400, "Asia/Tehran"                   },
-	{ "irst",  0,  12600, "Iran"                          },
-	{ "irst",  0,  14400, "Iran"                          },
 	{ "isst",  1,      0, "Atlantic/Reykjavik"            },
-	{ "isst",  1,      0, "Iceland"                       },
 	{ "ist",   0,   7200, "Asia/Jerusalem"                },
 	{ "ist",   0,  -3600, "Atlantic/Reykjavik"            },
-	{ "ist",   0,  -3600, "Iceland"                       },
 	{ "ist",   0,  19800, "Asia/Calcutta"                 },
 	{ "ist",   0,  19800, "Asia/Colombo"                  },
 	{ "ist",   0,  19800, "Asia/Dacca"                    },
@@ -1161,27 +1042,21 @@
 	{ "ist",   0,  19800, "Asia/Kolkata"                  },
 	{ "ist",   0,  19800, "Asia/Thimbu"                   },
 	{ "ist",   0,  19800, "Asia/Thimphu"                  },
-	{ "ist",   1,   2079, "Eire"                          },
 	{ "ist",   1,   2079, "Europe/Dublin"                 },
 	{ "ist",   1,  23400, "Asia/Calcutta"                 },
 	{ "ist",   1,  23400, "Asia/Colombo"                  },
 	{ "ist",   1,  23400, "Asia/Karachi"                  },
 	{ "ist",   1,  23400, "Asia/Kolkata"                  },
-	{ "ist",   0,   3600, "Eire"                          },
 	{ "ist",   0,   3600, "Europe/Dublin"                 },
-	{ "ist",   1,   3600, "Eire"                          },
 	{ "ist",   1,   3600, "Europe/Dublin"                 },
 	{ "ist",   0,   7200, "Asia/Gaza"                     },
 	{ "ist",   0,   7200, "Asia/Tel_Aviv"                 },
-	{ "ist",   0,   7200, "Israel"                        },
 	{ "javt",  0,  26400, "Asia/Jakarta"                  },
 	{ "jdt",   1,  36000, "Asia/Tokyo"                    },
-	{ "jdt",   1,  36000, "Japan"                         },
 	{ "jmt",   0,  -1368, "Atlantic/St_Helena"            },
 	{ "jmt",   0,  25632, "Asia/Jakarta"                  },
 	{ "jmt",   0,   8440, "Asia/Jerusalem"                },
 	{ "jmt",   0,   8440, "Asia/Tel_Aviv"                 },
-	{ "jmt",   0,   8440, "Israel"                        },
 	{ "jst",   0,  32400, "Asia/Tokyo"                    },
 	{ "jst",   0,  32400, "Asia/Dili"                     },
 	{ "jst",   0,  32400, "Asia/Hong_Kong"                },
@@ -1195,10 +1070,7 @@
 	{ "jst",   0,  32400, "Asia/Sakhalin"                 },
 	{ "jst",   0,  32400, "Asia/Singapore"                },
 	{ "jst",   0,  32400, "Asia/Ujung_Pandang"            },
-	{ "jst",   0,  32400, "Hongkong"                      },
-	{ "jst",   0,  32400, "Japan"                         },
 	{ "jst",   0,  32400, "Pacific/Nauru"                 },
-	{ "jst",   0,  32400, "Singapore"                     },
 	{ "kart",  0,  18000, "Asia/Karachi"                  },
 	{ "kast",  0,  18000, "Asia/Kashgar"                  },
 	{ "kast",  0,  19800, "Asia/Kashgar"                  },
@@ -1218,7 +1090,6 @@
 	{ "kmt",   0, -18432, "America/Cayman"                },
 	{ "kmt",   0, -18432, "America/Grand_Turk"            },
 	{ "kmt",   0, -18432, "America/Jamaica"               },
-	{ "kmt",   0, -18432, "Jamaica"                       },
 	{ "kmt",   0,   7324, "Europe/Kiev"                   },
 	{ "kost",  0,  39600, "Pacific/Kosrae"                },
 	{ "kost",  0,  43200, "Pacific/Kosrae"                },
@@ -1245,7 +1116,6 @@
 	{ "kuyt",  0,  10800, "Europe/Samara"                 },
 	{ "kuyt",  0,  14400, "Europe/Samara"                 },
 	{ "kwat",  0, -43200, "Pacific/Kwajalein"             },
-	{ "kwat",  0, -43200, "Kwajalein"                     },
 	{ "lhst",  0,  37800, "Australia/Lord_Howe"           },
 	{ "lhst",  1,  39600, "Australia/Lord_Howe"           },
 	{ "lhst",  1,  41400, "Australia/Lord_Howe"           },
@@ -1306,7 +1176,6 @@
 	{ "lmt",   0,  -1920, "Africa/Bamako"                 },
 	{ "lmt",   0,  -1920, "Africa/Timbuktu"               },
 	{ "lmt",   0, -19931, "America/Detroit"               },
-	{ "lmt",   0, -19931, "US/Michigan"                   },
 	{ "lmt",   0, -20824, "America/Cancun"                },
 	{ "lmt",   0, -20932, "America/Tegucigalpa"           },
 	{ "lmt",   0, -21168, "America/Belize"                },
@@ -1316,7 +1185,6 @@
 	{ "lmt",   0, -21724, "America/Guatemala"             },
 	{ "lmt",   0,  -2192, "Africa/Sao_Tome"               },
 	{ "lmt",   0,  -2192, "Europe/Lisbon"                 },
-	{ "lmt",   0,  -2192, "Portugal"                      },
 	{ "lmt",   0, -23796, "America/Mexico_City"           },
 	{ "lmt",   0, -23796, "Mexico/General"                },
 	{ "lmt",   0, -24000, "America/Matamoros"             },
@@ -1325,6 +1193,7 @@
 	{ "lmt",   0, -25116, "America/Regina"                },
 	{ "lmt",   0, -25116, "Canada/East-Saskatchewan"      },
 	{ "lmt",   0, -25116, "Canada/Saskatchewan"           },
+	{ "lmt",   0, -25260, "America/Bahia_Banderas"        },
 	{ "lmt",   0, -25460, "America/Chihuahua"             },
 	{ "lmt",   0, -25540, "America/Mazatlan"              },
 	{ "lmt",   0, -25540, "Mexico/BajaSur"                },
@@ -1348,7 +1217,6 @@
 	{ "lmt",   0,  -3996, "Africa/Banjul"                 },
 	{ "lmt",   0, -40968, "Pacific/Pago_Pago"             },
 	{ "lmt",   0, -40968, "Pacific/Samoa"                 },
-	{ "lmt",   0, -40968, "US/Samoa"                      },
 	{ "lmt",   0, -41216, "Pacific/Apia"                  },
 	{ "lmt",   0,  -4184, "Africa/Dakar"                  },
 	{ "lmt",   0,  -4480, "America/Danmarkshavn"          },
@@ -1377,7 +1245,6 @@
 	{ "lmt",   0,  12140, "Asia/Bahrain"                  },
 	{ "lmt",   0,  12324, "Asia/Oral"                     },
 	{ "lmt",   0,  12344, "Asia/Tehran"                   },
-	{ "lmt",   0,  12344, "Iran"                          },
 	{ "lmt",   0,  12368, "Asia/Qatar"                    },
 	{ "lmt",   0,  13272, "Asia/Dubai"                    },
 	{ "lmt",   0,  13308, "Indian/Mahe"                   },
@@ -1423,7 +1290,6 @@
 	{ "lmt",   0,  27260, "Asia/Macao"                    },
 	{ "lmt",   0,  27260, "Asia/Macau"                    },
 	{ "lmt",   0,  27396, "Asia/Hong_Kong"                },
-	{ "lmt",   0,  27396, "Hongkong"                      },
 	{ "lmt",   0,  27480, "Asia/Choibalsan"               },
 	{ "lmt",   0,  27580, "Asia/Brunei"                   },
 	{ "lmt",   0,  28656, "Asia/Makassar"                 },
@@ -1434,7 +1300,6 @@
 	{ "lmt",   0,  30404, "Asia/Harbin"                   },
 	{ "lmt",   0,  31120, "Asia/Yakutsk"                  },
 	{ "lmt",   0,   3164, "Africa/Tripoli"                },
-	{ "lmt",   0,   3164, "Libya"                         },
 	{ "lmt",   0,  31664, "Asia/Vladivostok"              },
 	{ "lmt",   0,  33768, "Asia/Jayapura"                 },
 	{ "lmt",   0,  34248, "Asia/Sakhalin"                 },
@@ -1448,7 +1313,6 @@
 	{ "lmt",   0,  40396, "Pacific/Efate"                 },
 	{ "lmt",   0,  42596, "Asia/Anadyr"                   },
 	{ "lmt",   0,  42820, "Pacific/Fiji"                  },
-	{ "lmt",   0,  44028, "NZ-CHAT"                       },
 	{ "lmt",   0,  44028, "Pacific/Chatham"               },
 	{ "lmt",   0,   4460, "Africa/Bangui"                 },
 	{ "lmt",   0,   4760, "Europe/Tirane"                 },
@@ -1474,7 +1338,6 @@
 	{ "lont",  0,  25200, "Asia/Chungking"                },
 	{ "lrt",   0,  -2670, "Africa/Monrovia"               },
 	{ "lst",   1,   9384, "Europe/Riga"                   },
-	{ "local time zone must be set--see zic manual page", 0,      0, "Factory"                       },
 	{ "madmt", 1,   3600, "Atlantic/Madeira"              },
 	{ "madst", 1,      0, "Atlantic/Madeira"              },
 	{ "madt",  0,  -3600, "Atlantic/Madeira"              },
@@ -1484,24 +1347,20 @@
 	{ "magt",  0,  39600, "Asia/Magadan"                  },
 	{ "malst", 1,  26400, "Asia/Singapore"                },
 	{ "malst", 1,  26400, "Asia/Kuala_Lumpur"             },
-	{ "malst", 1,  26400, "Singapore"                     },
 	{ "malt",  0,  25200, "Asia/Singapore"                },
 	{ "malt",  0,  26400, "Asia/Singapore"                },
 	{ "malt",  0,  27000, "Asia/Singapore"                },
 	{ "malt",  0,  25200, "Asia/Kuala_Lumpur"             },
-	{ "malt",  0,  25200, "Singapore"                     },
 	{ "malt",  0,  26400, "Asia/Kuala_Lumpur"             },
-	{ "malt",  0,  26400, "Singapore"                     },
 	{ "malt",  0,  27000, "Asia/Kuala_Lumpur"             },
-	{ "malt",  0,  27000, "Singapore"                     },
 	{ "mart",  0, -34200, "Pacific/Marquesas"             },
 	{ "mawt",  0,  18000, "Antarctica/Mawson"             },
 	{ "mawt",  0,  21600, "Antarctica/Mawson"             },
 	{ "mddt",  1, -18000, "America/Cambridge_Bay"         },
 	{ "mddt",  1, -18000, "America/Yellowknife"           },
 	{ "mdst",  1,  16248, "Europe/Moscow"                 },
-	{ "mdst",  1,  16248, "W-SU"                          },
 	{ "mdt",   1, -21600, "America/Denver"                },
+	{ "mdt",   1, -21600, "America/Bahia_Banderas"        },
 	{ "mdt",   1, -21600, "America/Boise"                 },
 	{ "mdt",   1, -21600, "America/Cambridge_Bay"         },
 	{ "mdt",   1, -21600, "America/Chihuahua"             },
@@ -1522,18 +1381,13 @@
 	{ "mdt",   1, -21600, "Canada/Saskatchewan"           },
 	{ "mdt",   1, -21600, "Mexico/BajaSur"                },
 	{ "mdt",   1, -21600, "MST"                           },
-	{ "mdt",   1, -21600, "MST7MDT"                       },
-	{ "mdt",   1, -21600, "Navajo"                        },
-	{ "mdt",   1, -21600, "US/Arizona"                    },
-	{ "mdt",   1, -21600, "US/Mountain"                   },
 	{ "mest",  1,   7200, "MET"                           },
 	{ "met",   0,   3600, "MET"                           },
 	{ "mht",   0,  39600, "Pacific/Kwajalein"             },
 	{ "mht",   0,  43200, "Pacific/Kwajalein"             },
-	{ "mht",   0,  39600, "Kwajalein"                     },
 	{ "mht",   0,  39600, "Pacific/Majuro"                },
-	{ "mht",   0,  43200, "Kwajalein"                     },
 	{ "mht",   0,  43200, "Pacific/Majuro"                },
+	{ "mist",  0,  39600, "Antarctica/Macquarie"          },
 	{ "mmt",   0,   9000, "Europe/Moscow"                 },
 	{ "mmt",   0,   9048, "Europe/Moscow"                 },
 	{ "mmt",   0, -13484, "America/Montevideo"            },
@@ -1545,8 +1399,6 @@
 	{ "mmt",   0,  28656, "Asia/Makassar"                 },
 	{ "mmt",   0,  28656, "Asia/Ujung_Pandang"            },
 	{ "mmt",   0,   6600, "Europe/Minsk"                  },
-	{ "mmt",   0,   9000, "W-SU"                          },
-	{ "mmt",   0,   9048, "W-SU"                          },
 	{ "most",  1,  32400, "Asia/Macao"                    },
 	{ "most",  1,  32400, "Asia/Macau"                    },
 	{ "mot",   0,  28800, "Asia/Macao"                    },
@@ -1565,9 +1417,6 @@
 	{ "mpt",   1, -21600, "Canada/Mountain"               },
 	{ "mpt",   1, -21600, "Canada/Saskatchewan"           },
 	{ "mpt",   1, -21600, "MST"                           },
-	{ "mpt",   1, -21600, "MST7MDT"                       },
-	{ "mpt",   1, -21600, "Navajo"                        },
-	{ "mpt",   1, -21600, "US/Mountain"                   },
 	{ "mpt",   0,  32400, "Pacific/Saipan"                },
 	{ "mpt",   0,  36000, "Pacific/Saipan"                },
 	{ "msd",   1,  14400, "Europe/Moscow"                 },
@@ -1583,8 +1432,6 @@
 	{ "msd",   1,  14400, "Europe/Uzhgorod"               },
 	{ "msd",   1,  14400, "Europe/Vilnius"                },
 	{ "msd",   1,  14400, "Europe/Zaporozhye"             },
-	{ "msd",   1,  14400, "W-SU"                          },
-	{ "msd",   1,  18000, "W-SU"                          },
 	{ "msk",   0,  10800, "Europe/Moscow"                 },
 	{ "msk",   0,  10800, "Europe/Chisinau"               },
 	{ "msk",   0,  10800, "Europe/Kaliningrad"            },
@@ -1597,8 +1444,8 @@
 	{ "msk",   0,  10800, "Europe/Uzhgorod"               },
 	{ "msk",   0,  10800, "Europe/Vilnius"                },
 	{ "msk",   0,  10800, "Europe/Zaporozhye"             },
-	{ "msk",   0,  10800, "W-SU"                          },
 	{ "mst",   0, -25200, "America/Denver"                },
+	{ "mst",   0, -25200, "America/Bahia_Banderas"        },
 	{ "mst",   0, -25200, "America/Boise"                 },
 	{ "mst",   0, -25200, "America/Cambridge_Bay"         },
 	{ "mst",   0, -25200, "America/Chihuahua"             },
@@ -1626,12 +1473,7 @@
 	{ "mst",   0, -25200, "Mexico/BajaSur"                },
 	{ "mst",   0, -25200, "Mexico/General"                },
 	{ "mst",   0, -25200, "MST"                           },
-	{ "mst",   0, -25200, "MST7MDT"                       },
-	{ "mst",   0, -25200, "Navajo"                        },
-	{ "mst",   0, -25200, "US/Arizona"                    },
-	{ "mst",   0, -25200, "US/Mountain"                   },
 	{ "mst",   1,  12648, "Europe/Moscow"                 },
-	{ "mst",   1,  12648, "W-SU"                          },
 	{ "must",  1,  18000, "Indian/Mauritius"              },
 	{ "mut",   0,  14400, "Indian/Mauritius"              },
 	{ "mvt",   0,  18000, "Indian/Maldives"               },
@@ -1650,10 +1492,6 @@
 	{ "mwt",   1, -21600, "Canada/Mountain"               },
 	{ "mwt",   1, -21600, "Canada/Saskatchewan"           },
 	{ "mwt",   1, -21600, "MST"                           },
-	{ "mwt",   1, -21600, "MST7MDT"                       },
-	{ "mwt",   1, -21600, "Navajo"                        },
-	{ "mwt",   1, -21600, "US/Arizona"                    },
-	{ "mwt",   1, -21600, "US/Mountain"                   },
 	{ "myt",   0,  28800, "Asia/Kuala_Lumpur"             },
 	{ "myt",   0,  28800, "Asia/Kuching"                  },
 	{ "ncst",  1,  43200, "Pacific/Noumea"                },
@@ -1683,7 +1521,6 @@
 	{ "npt",   1, -36000, "America/Adak"                  },
 	{ "npt",   1, -36000, "America/Atka"                  },
 	{ "npt",   1, -36000, "America/Nome"                  },
-	{ "npt",   1, -36000, "US/Aleutian"                   },
 	{ "npt",   1,  -9000, "America/Goose_Bay"             },
 	{ "npt",   1,  -9000, "Canada/Newfoundland"           },
 	{ "npt",   0,  20700, "Asia/Katmandu"                 },
@@ -1702,8 +1539,6 @@
 	{ "nst",   0, -39600, "Pacific/Midway"                },
 	{ "nst",   0, -39600, "Pacific/Pago_Pago"             },
 	{ "nst",   0, -39600, "Pacific/Samoa"                 },
-	{ "nst",   0, -39600, "US/Aleutian"                   },
-	{ "nst",   0, -39600, "US/Samoa"                      },
 	{ "nst",   1,   4772, "Europe/Amsterdam"              },
 	{ "nut",   0, -39600, "Pacific/Niue"                  },
 	{ "nut",   0, -40800, "Pacific/Niue"                  },
@@ -1712,7 +1547,6 @@
 	{ "nwt",   1, -36000, "America/Adak"                  },
 	{ "nwt",   1, -36000, "America/Atka"                  },
 	{ "nwt",   1, -36000, "America/Nome"                  },
-	{ "nwt",   1, -36000, "US/Aleutian"                   },
 	{ "nwt",   1,  -9000, "America/Goose_Bay"             },
 	{ "nwt",   1,  -9000, "Canada/Newfoundland"           },
 	{ "nzdt",  1,  46800, "Pacific/Auckland"              },
@@ -1750,9 +1584,6 @@
 	{ "pdt",   1, -25200, "Canada/Pacific"                },
 	{ "pdt",   1, -25200, "Canada/Yukon"                  },
 	{ "pdt",   1, -25200, "Mexico/BajaNorte"              },
-	{ "pdt",   1, -25200, "PST8PDT"                       },
-	{ "pdt",   1, -25200, "US/Pacific"                    },
-	{ "pdt",   1, -25200, "US/Pacific-New"                },
 	{ "pest",  1, -14400, "America/Lima"                  },
 	{ "petst", 1,  43200, "Asia/Kamchatka"                },
 	{ "petst", 1,  46800, "Asia/Kamchatka"                },
@@ -1779,6 +1610,7 @@
 	{ "pmt",   0,    561, "Europe/Paris"                  },
 	{ "pmt",   0,    561, "WET"                           },
 	{ "pnt",   0, -30600, "Pacific/Pitcairn"              },
+	{ "pont",  0,  39600, "Pacific/Pohnpei"               },
 	{ "pont",  0,  39600, "Pacific/Ponape"                },
 	{ "ppmt",  0, -17340, "America/Port-au-Prince"        },
 	{ "ppt",   1, -25200, "America/Los_Angeles"           },
@@ -1790,10 +1622,8 @@
 	{ "ppt",   1, -25200, "America/Vancouver"             },
 	{ "ppt",   1, -25200, "Canada/Pacific"                },
 	{ "ppt",   1, -25200, "Mexico/BajaNorte"              },
-	{ "ppt",   1, -25200, "PST8PDT"                       },
-	{ "ppt",   1, -25200, "US/Pacific"                    },
-	{ "ppt",   1, -25200, "US/Pacific-New"                },
 	{ "pst",   0, -28800, "America/Los_Angeles"           },
+	{ "pst",   0, -28800, "America/Bahia_Banderas"        },
 	{ "pst",   0, -28800, "America/Boise"                 },
 	{ "pst",   0, -28800, "America/Dawson"                },
 	{ "pst",   0, -28800, "America/Dawson_Creek"          },
@@ -1811,9 +1641,6 @@
 	{ "pst",   0, -28800, "Mexico/BajaNorte"              },
 	{ "pst",   0, -28800, "Mexico/BajaSur"                },
 	{ "pst",   0, -28800, "Pacific/Pitcairn"              },
-	{ "pst",   0, -28800, "PST8PDT"                       },
-	{ "pst",   0, -28800, "US/Pacific"                    },
-	{ "pst",   0, -28800, "US/Pacific-New"                },
 	{ "pwt",   1, -25200, "America/Los_Angeles"           },
 	{ "pwt",   1, -25200, "America/Dawson_Creek"          },
 	{ "pwt",   1, -25200, "America/Ensenada"              },
@@ -1823,9 +1650,6 @@
 	{ "pwt",   1, -25200, "America/Vancouver"             },
 	{ "pwt",   1, -25200, "Canada/Pacific"                },
 	{ "pwt",   1, -25200, "Mexico/BajaNorte"              },
-	{ "pwt",   1, -25200, "PST8PDT"                       },
-	{ "pwt",   1, -25200, "US/Pacific"                    },
-	{ "pwt",   1, -25200, "US/Pacific-New"                },
 	{ "pwt",   0,  32400, "Pacific/Palau"                 },
 	{ "pyst",  1, -10800, "America/Asuncion"              },
 	{ "pyt",   0, -10800, "America/Asuncion"              },
@@ -1837,7 +1661,6 @@
 	{ "ret",   0,  14400, "Indian/Reunion"                },
 	{ "rmt",   0,   5784, "Europe/Riga"                   },
 	{ "rmt",   0,  -5268, "Atlantic/Reykjavik"            },
-	{ "rmt",   0,  -5268, "Iceland"                       },
 	{ "rmt",   0,  23076, "Asia/Rangoon"                  },
 	{ "rott",  0, -10800, "Antarctica/Rothera"            },
 	{ "sakst", 1,  39600, "Asia/Sakhalin"                 },
@@ -1845,13 +1668,13 @@
 	{ "sakt",  0,  36000, "Asia/Sakhalin"                 },
 	{ "sakt",  0,  39600, "Asia/Sakhalin"                 },
 	{ "samst", 1,  21600, "Asia/Samarkand"                },
+	{ "samst", 1,  14400, "Europe/Samara"                 },
 	{ "samst", 1,  18000, "Europe/Samara"                 },
 	{ "samt",  0,  14400, "Asia/Samarkand"                },
 	{ "samt",  0,  18000, "Asia/Samarkand"                },
 	{ "samt",  0, -41400, "Pacific/Apia"                  },
 	{ "samt",  0, -41400, "Pacific/Pago_Pago"             },
 	{ "samt",  0, -41400, "Pacific/Samoa"                 },
-	{ "samt",  0, -41400, "US/Samoa"                      },
 	{ "samt",  0,  10800, "Europe/Samara"                 },
 	{ "samt",  0,  14400, "Europe/Samara"                 },
 	{ "sast",  1,  10800, "Africa/Johannesburg"           },
@@ -1867,8 +1690,6 @@
 	{ "sdmt",  0, -16800, "America/Santo_Domingo"         },
 	{ "sgt",   0,  27000, "Asia/Singapore"                },
 	{ "sgt",   0,  28800, "Asia/Singapore"                },
-	{ "sgt",   0,  27000, "Singapore"                     },
-	{ "sgt",   0,  28800, "Singapore"                     },
 	{ "shest", 1,  21600, "Asia/Aqtau"                    },
 	{ "shet",  0,  18000, "Asia/Aqtau"                    },
 	{ "shet",  0,  21600, "Asia/Aqtau"                    },
@@ -1881,7 +1702,6 @@
 	{ "smt",   0, -16966, "Chile/Continental"             },
 	{ "smt",   0,  24925, "Asia/Kuala_Lumpur"             },
 	{ "smt",   0,  24925, "Asia/Singapore"                },
-	{ "smt",   0,  24925, "Singapore"                     },
 	{ "smt",   0,  25580, "Asia/Ho_Chi_Minh"              },
 	{ "smt",   0,  25580, "Asia/Phnom_Penh"               },
 	{ "smt",   0,  25580, "Asia/Vientiane"                },
@@ -1891,7 +1711,6 @@
 	{ "sst",   0, -39600, "Pacific/Samoa"                 },
 	{ "sst",   0, -39600, "Pacific/Midway"                },
 	{ "sst",   0, -39600, "Pacific/Pago_Pago"             },
-	{ "sst",   0, -39600, "US/Samoa"                      },
 	{ "stat",  0,  10800, "Europe/Volgograd"              },
 	{ "stat",  0,  14400, "Europe/Volgograd"              },
 	{ "svest", 1,  18000, "Asia/Yekaterinburg"            },
@@ -1918,7 +1737,6 @@
 	{ "tlt",   0,  28800, "Asia/Dili"                     },
 	{ "tlt",   0,  32400, "Asia/Dili"                     },
 	{ "tmt",   0,  12344, "Asia/Tehran"                   },
-	{ "tmt",   0,  12344, "Iran"                          },
 	{ "tmt",   0,  14400, "Asia/Ashgabat"                 },
 	{ "tmt",   0,  14400, "Asia/Ashkhabad"                },
 	{ "tmt",   0,  18000, "Asia/Ashgabat"                 },
@@ -1929,12 +1747,8 @@
 	{ "tot",   0,  46800, "Pacific/Tongatapu"             },
 	{ "trst",  1,  14400, "Europe/Istanbul"               },
 	{ "trst",  1,  14400, "Asia/Istanbul"                 },
-	{ "trst",  1,  14400, "Turkey"                        },
 	{ "trt",   0,  10800, "Europe/Istanbul"               },
 	{ "trt",   0,  10800, "Asia/Istanbul"                 },
-	{ "trt",   0,  10800, "Turkey"                        },
-	{ "trut",  0,  36000, "Pacific/Truk"                  },
-	{ "trut",  0,  36000, "Pacific/Yap"                   },
 	{ "tsat",  0,  10800, "Europe/Volgograd"              },
 	{ "tvt",   0,  43200, "Pacific/Funafuti"              },
 	{ "uct",   0,      0, "Etc/UCT"                       },
@@ -1957,9 +1771,7 @@
 	{ "utc",   0,      0, "Etc/UTC"                       },
 	{ "utc",   0,      0, "Etc/Zulu"                      },
 	{ "utc",   0,      0, "GMT"                           },
-	{ "utc",   0,      0, "Universal"                     },
 	{ "utc",   0,      0, "UTC"                           },
-	{ "utc",   0,      0, "Zulu"                          },
 	{ "utc",   0,      0, "UTC"                           },
 	{ "uyhst", 1, -10800, "America/Montevideo"            },
 	{ "uyhst", 1,  -9000, "America/Montevideo"            },
@@ -2036,7 +1848,6 @@
 	{ "wemt",  1,   7200, "Europe/Madrid"                 },
 	{ "wemt",  1,   7200, "Europe/Monaco"                 },
 	{ "wemt",  1,   7200, "Europe/Paris"                  },
-	{ "wemt",  1,   7200, "Portugal"                      },
 	{ "wemt",  1,   7200, "WET"                           },
 	{ "west",  1,   3600, "Europe/Paris"                  },
 	{ "west",  1,   3600, "Africa/Algiers"                },
@@ -2051,7 +1862,6 @@
 	{ "west",  1,   3600, "Europe/Luxembourg"             },
 	{ "west",  1,   3600, "Europe/Madrid"                 },
 	{ "west",  1,   3600, "Europe/Monaco"                 },
-	{ "west",  1,   3600, "Portugal"                      },
 	{ "west",  1,   3600, "WET"                           },
 	{ "west",  1,   7200, "Europe/Luxembourg"             },
 	{ "wet",   0,      0, "Europe/Paris"                  },
@@ -2070,7 +1880,6 @@
 	{ "wet",   0,      0, "Europe/Luxembourg"             },
 	{ "wet",   0,      0, "Europe/Madrid"                 },
 	{ "wet",   0,      0, "Europe/Monaco"                 },
-	{ "wet",   0,      0, "Portugal"                      },
 	{ "wet",   0,      0, "WET"                           },
 	{ "wet",   0,   3600, "Europe/Luxembourg"             },
 	{ "wft",   0,  43200, "Pacific/Wallis"                },
@@ -2086,7 +1895,6 @@
 	{ "wit",   0,  28800, "Asia/Pontianak"                },
 	{ "wmt",   0,   5040, "Europe/Vilnius"                },
 	{ "wmt",   0,   5040, "Europe/Warsaw"                 },
-	{ "wmt",   0,   5040, "Poland"                        },
 	{ "wsdt",  1, -36000, "Pacific/Apia"                  },
 	{ "wst",   0,  28800, "Australia/Perth"               },
 	{ "wst",   1,  32400, "Australia/Perth"               },
@@ -2122,7 +1930,6 @@
 	{ "yst",   0, -32400, "America/Whitehorse"            },
 	{ "yst",   0, -32400, "America/Yakutat"               },
 	{ "yst",   0, -32400, "Canada/Yukon"                  },
-	{ "yst",   0, -32400, "US/Alaska"                     },
 	{ "ywt",   1, -28800, "America/Dawson"                },
 	{ "ywt",   1, -28800, "America/Whitehorse"            },
 	{ "ywt",   1, -28800, "America/Yakutat"               },
@@ -2161,6 +1968,7 @@
 	{ "zzz",   0,      0, "America/Yellowknife"           },
 	{ "zzz",   0,      0, "Antarctica/Casey"              },
 	{ "zzz",   0,      0, "Antarctica/DumontDUrville"     },
+	{ "zzz",   0,      0, "Antarctica/Macquarie"          },
 	{ "zzz",   0,      0, "Antarctica/Mawson"             },
 	{ "zzz",   0,      0, "Antarctica/McMurdo"            },
 	{ "zzz",   0,      0, "Antarctica/Palmer"             },
diff --git a/ext/date/lib/unixtime2tm.c b/ext/date/lib/unixtime2tm.c
index c12d9a3..e42da44 100644
--- a/ext/date/lib/unixtime2tm.c
+++ b/ext/date/lib/unixtime2tm.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: unixtime2tm.c 307131 2011-01-05 15:34:34Z johannes $ */
+/* $Id: unixtime2tm.c 307103 2011-01-05 04:13:23Z iliaa $ */
 
 #include "timelib.h"
 
@@ -51,7 +51,7 @@ void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts)
 		days++;
 		remainder -= SECS_PER_DAY;
 	}
-	DEBUG(printf("days=%lld, rem=%lld\n", days, remainder););
+	TIMELIB_DEBUG(printf("days=%lld, rem=%lld\n", days, remainder););
 
 	if (ts >= 0) {
 		tmp_days = days + 1;
@@ -84,11 +84,11 @@ void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts)
 		while (tmp_days <= 0) {
 			if (tmp_days < -1460970) {
 				cur_year -= 4000;
-				DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year););
+				TIMELIB_DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year););
 				tmp_days += 1460970;
 			} else {
 				cur_year--;
-				DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year););
+				TIMELIB_DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year););
 				if (timelib_is_leap(cur_year)) {
 					tmp_days += DAYS_PER_LYEAR;
 				} else {
@@ -98,7 +98,7 @@ void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts)
 		}
 		remainder += SECS_PER_DAY;
 	}
-	DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year););
+	TIMELIB_DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year););
 
 	months = timelib_is_leap(cur_year) ? month_tab_leap : month_tab;
 	if (timelib_is_leap(cur_year) && cur_year < 1970) {
@@ -106,19 +106,19 @@ void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts)
 	}
 	i = 11;
 	while (i > 0) {
-		DEBUG(printf("month=%lld (%d)\n", i, months[i]););
+		TIMELIB_DEBUG(printf("month=%lld (%d)\n", i, months[i]););
 		if (tmp_days > months[i]) {
 			break;
 		}
 		i--;
 	}
-	DEBUG(printf("A: ts=%lld, year=%lld, month=%lld, day=%lld,", ts, cur_year, i + 1, tmp_days - months[i]););
+	TIMELIB_DEBUG(printf("A: ts=%lld, year=%lld, month=%lld, day=%lld,", ts, cur_year, i + 1, tmp_days - months[i]););
 
 	/* That was the date, now we do the tiiiime */
 	hours = remainder / 3600;
 	minutes = (remainder - hours * 3600) / 60;
 	seconds = remainder % 60;
-	DEBUG(printf(" hour=%lld, minute=%lld, second=%lld\n", hours, minutes, seconds););
+	TIMELIB_DEBUG(printf(" hour=%lld, minute=%lld, second=%lld\n", hours, minutes, seconds););
 
 	tm->y = cur_year;
 	tm->m = i + 1;
@@ -246,18 +246,18 @@ int timelib_apply_localtime(timelib_time *t, unsigned int localtime)
 {
 	if (localtime) {
 		/* Converting from GMT time to local time */
-		DEBUG(printf("Converting from GMT time to local time\n"););
+		TIMELIB_DEBUG(printf("Converting from GMT time to local time\n"););
 
 		/* Check if TZ is set */
 		if (!t->tz_info) {
-			DEBUG(printf("E: No timezone configured, can't switch to local time\n"););
+			TIMELIB_DEBUG(printf("E: No timezone configured, can't switch to local time\n"););
 			return -1;
 		}
 
 		timelib_unixtime2local(t, t->sse);
 	} else {
 		/* Converting from local time to GMT time */
-		DEBUG(printf("Converting from local time to GMT time\n"););
+		TIMELIB_DEBUG(printf("Converting from local time to GMT time\n"););
 
 		timelib_unixtime2gmt(t, t->sse);
 	}
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 8fd0a3d..1a2a1da 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_date.c 305494 2010-11-18 11:33:42Z felipe $ */
+/* $Id: php_date.c 307853 2011-01-30 10:18:12Z stas $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -889,17 +889,6 @@ static char* guess_timezone(const timelib_tzdb *tzdb TSRMLS_DC)
 
 		switch (GetTimeZoneInformation(&tzi))
 		{
-			/* no DST or not in effect */
-			case TIME_ZONE_ID_UNKNOWN:
-			case TIME_ZONE_ID_STANDARD:
-php_win_std_time:
-				tzid = timelib_timezone_id_from_abbr("", (tzi.Bias + tzi.StandardBias) * -60, 0);
-				if (! tzid) {
-					tzid = "UTC";
-				}
-				php_error_docref(NULL TSRMLS_CC, E_WARNING, DATE_TZ_ERRMSG "We selected '%s' for '%.1f/no DST' instead", tzid, ((tzi.Bias + tzi.StandardBias) / -60.0));
-				break;
-
 			/* DST in effect */
 			case TIME_ZONE_ID_DAYLIGHT:
 				/* If user has disabled DST in the control panel, Windows returns 0 here */
@@ -913,6 +902,19 @@ php_win_std_time:
 				}
 				php_error_docref(NULL TSRMLS_CC, E_WARNING, DATE_TZ_ERRMSG "We selected '%s' for '%.1f/DST' instead", tzid, ((tzi.Bias + tzi.DaylightBias) / -60.0));
 				break;
+
+			/* no DST or not in effect */
+			case TIME_ZONE_ID_UNKNOWN:
+			case TIME_ZONE_ID_STANDARD:
+			default:
+php_win_std_time:
+				tzid = timelib_timezone_id_from_abbr("", (tzi.Bias + tzi.StandardBias) * -60, 0);
+				if (! tzid) {
+					tzid = "UTC";
+				}
+				php_error_docref(NULL TSRMLS_CC, E_WARNING, DATE_TZ_ERRMSG "We selected '%s' for '%.1f/no DST' instead", tzid, ((tzi.Bias + tzi.StandardBias) / -60.0));
+				break;
+
 		}
 		return tzid;
 	}
@@ -1027,7 +1029,7 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
 			offset->offset = (t->z) * -60;
 			offset->leap_secs = 0;
 			offset->is_dst = 0;
-			offset->abbr = malloc(9); /* GMT±xxxx\0 */
+			offset->abbr = malloc(9); /* GMT�xxxx\0 */
 			snprintf(offset->abbr, 9, "GMT%c%02d%02d", 
 			                          localtime ? ((offset->offset < 0) ? '-' : '+') : '+',
 			                          localtime ? abs(offset->offset / 3600) : 0,
@@ -1236,7 +1238,7 @@ PHPAPI int php_idate(char format, time_t ts, int localtime)
 			offset->offset = (t->z - (t->dst * 60)) * -60;
 			offset->leap_secs = 0;
 			offset->is_dst = t->dst;
-			offset->abbr = malloc(9); /* GMT±xxxx\0 */
+			offset->abbr = malloc(9); /* GMT�xxxx\0 */
 			snprintf(offset->abbr, 9, "GMT%c%02d%02d", 
 			                          !localtime ? ((offset->offset < 0) ? '-' : '+') : '+',
 			                          !localtime ? abs(offset->offset / 3600) : 0,
@@ -1995,6 +1997,7 @@ static void date_register_classes(TSRMLS_D)
 	date_object_handlers_interval.read_property = date_interval_read_property;
 	date_object_handlers_interval.write_property = date_interval_write_property;
 	date_object_handlers_interval.get_properties = date_object_get_properties_interval;
+	date_object_handlers_interval.get_property_ptr_ptr = NULL;
 
 	INIT_CLASS_ENTRY(ce_period, "DatePeriod", date_funcs_period);
 	ce_period.create_object = date_object_new_period;
@@ -2463,7 +2466,7 @@ PHP_FUNCTION(date_create)
 	char           *time_str = NULL;
 	int             time_str_len = 0;
 
-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO", &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) {
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) {
 		RETURN_FALSE;
 	}
 
@@ -2505,7 +2508,7 @@ PHP_METHOD(DateTime, __construct)
 	zend_error_handling error_handling;
 
 	zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
-	if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) {
+	if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) {
 		php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC);
 	}
 	zend_restore_error_handling(&error_handling TSRMLS_CC);
@@ -2797,6 +2800,31 @@ PHP_FUNCTION(date_modify)
 	memcpy(&dateobj->time->relative, &tmp_time->relative, sizeof(struct timelib_rel_time));
 	dateobj->time->have_relative = tmp_time->have_relative;
 	dateobj->time->sse_uptodate = 0;
+
+	if (tmp_time->y != -99999) {
+		dateobj->time->y = tmp_time->y;
+	}
+	if (tmp_time->m != -99999) {
+		dateobj->time->m = tmp_time->m;
+	}
+	if (tmp_time->d != -99999) {
+		dateobj->time->d = tmp_time->d;
+	}
+
+	if (tmp_time->h != -99999) {
+		dateobj->time->h = tmp_time->h;
+		if (tmp_time->i != -99999) {
+			dateobj->time->i = tmp_time->i;
+			if (tmp_time->s != -99999) {
+				dateobj->time->s = tmp_time->s;
+			} else {
+				dateobj->time->s = 0;
+			}
+		} else {
+			dateobj->time->i = 0;
+			dateobj->time->s = 0;
+		}
+	}
 	timelib_time_dtor(tmp_time);
 
 	timelib_update_ts(dateobj->time, NULL);
@@ -3062,6 +3090,7 @@ PHP_FUNCTION(date_isodate_set)
 	dateobj->time->y = y;
 	dateobj->time->m = 1;
 	dateobj->time->d = 1;
+	memset(&dateobj->time->relative, 0, sizeof(dateobj->time->relative));
 	dateobj->time->relative.d = timelib_daynr_from_weeknr(y, w, d);
 	dateobj->time->have_relative = 1;
 	
@@ -3433,8 +3462,20 @@ static int date_interval_initialize(timelib_rel_time **rt, /*const*/ char *forma
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad format (%s)", format);
 		retval = FAILURE;
 	} else {
-		*rt = p;
-		retval = SUCCESS;
+		if(p) {
+			*rt = p;
+			retval = SUCCESS;
+		} else {
+			if(b && e) {
+				timelib_update_ts(b, NULL);
+				timelib_update_ts(e, NULL);
+				*rt = timelib_diff(b, e);
+				retval = SUCCESS;
+			} else {
+				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to parse interval (%s)", format);
+				retval = FAILURE;
+			}
+		}
 	}
 	timelib_error_container_dtor(errors);
 	return retval;
@@ -3460,23 +3501,30 @@ zval *date_interval_read_property(zval *object, zval *member, int type TSRMLS_DC
 #define GET_VALUE_FROM_STRUCT(n,m)            \
 	if (strcmp(Z_STRVAL_P(member), m) == 0) { \
 		value = obj->diff->n;                 \
+		break;								  \
 	}
-	GET_VALUE_FROM_STRUCT(y, "y");
-	GET_VALUE_FROM_STRUCT(m, "m");
-	GET_VALUE_FROM_STRUCT(d, "d");
-	GET_VALUE_FROM_STRUCT(h, "h");
-	GET_VALUE_FROM_STRUCT(i, "i");
-	GET_VALUE_FROM_STRUCT(s, "s");
-	GET_VALUE_FROM_STRUCT(invert, "invert");
-	GET_VALUE_FROM_STRUCT(days, "days");
+	do {
+		GET_VALUE_FROM_STRUCT(y, "y");
+		GET_VALUE_FROM_STRUCT(m, "m");
+		GET_VALUE_FROM_STRUCT(d, "d");
+		GET_VALUE_FROM_STRUCT(h, "h");
+		GET_VALUE_FROM_STRUCT(i, "i");
+		GET_VALUE_FROM_STRUCT(s, "s");
+		GET_VALUE_FROM_STRUCT(invert, "invert");
+		GET_VALUE_FROM_STRUCT(days, "days");
+		/* didn't find any */
+		retval = (zend_get_std_object_handlers())->read_property(object, member, type TSRMLS_CC);
+
+		if (member == &tmp_member) {
+			zval_dtor(member);
+		}
+
+		return retval;
+	} while(0);
 
 	ALLOC_INIT_ZVAL(retval);
 	Z_SET_REFCOUNT_P(retval, 0);
 
-	if (value == -1) {
-		php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unknown property (%s)", Z_STRVAL_P(member));
-	}
-
 	ZVAL_LONG(retval, value);
 
 	if (member == &tmp_member) {
@@ -3492,7 +3540,6 @@ void date_interval_write_property(zval *object, zval *member, zval *value TSRMLS
 {
 	php_interval_obj *obj;
 	zval tmp_member, tmp_value;
-	int found = 0;
 
  	if (member->type != IS_STRING) {
 		tmp_member = *member;
@@ -3510,24 +3557,24 @@ void date_interval_write_property(zval *object, zval *member, zval *value TSRMLS
 			convert_to_long(&tmp_value);      \
 			value = &tmp_value;               \
 		}                                     \
-		found = 1;                            \
-		obj->diff->n = Z_LVAL_P(value); \
-		if (value == &tmp_value) {         \
-			zval_dtor(value);              \
-		}                                  \
+		obj->diff->n = Z_LVAL_P(value);       \
+		if (value == &tmp_value) {            \
+			zval_dtor(value);                 \
+		}                                     \
+		break;								  \
 	}
 
-	SET_VALUE_FROM_STRUCT(y, "y");
-	SET_VALUE_FROM_STRUCT(m, "m");
-	SET_VALUE_FROM_STRUCT(d, "d");
-	SET_VALUE_FROM_STRUCT(h, "h");
-	SET_VALUE_FROM_STRUCT(i, "i");
-	SET_VALUE_FROM_STRUCT(s, "s");
-	SET_VALUE_FROM_STRUCT(invert, "invert");
-
-	if (!found) {
-		php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unknown property (%s)", Z_STRVAL_P(member));
-	}
+	do {
+		SET_VALUE_FROM_STRUCT(y, "y");
+		SET_VALUE_FROM_STRUCT(m, "m");
+		SET_VALUE_FROM_STRUCT(d, "d");
+		SET_VALUE_FROM_STRUCT(h, "h");
+		SET_VALUE_FROM_STRUCT(i, "i");
+		SET_VALUE_FROM_STRUCT(s, "s");
+		SET_VALUE_FROM_STRUCT(invert, "invert");
+		/* didn't find any */
+		(zend_get_std_object_handlers())->write_property(object, member, value TSRMLS_CC);
+	} while(0);
 
 	if (member == &tmp_member) {
 		zval_dtor(member);
@@ -3669,7 +3716,7 @@ PHP_FUNCTION(date_interval_format)
 }
 /* }}} */
 
-static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_rel_time **d, int *recurrences, /*const*/ char *format, int format_length TSRMLS_DC)
+static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_rel_time **d, long *recurrences, /*const*/ char *format, int format_length TSRMLS_DC)
 {
 	timelib_time     *b = NULL, *e = NULL;
 	timelib_rel_time *p = NULL;
@@ -3723,7 +3770,7 @@ PHP_METHOD(DatePeriod, __construct)
 	dpobj->current = NULL;
 
 	if (isostr_len) {
-		date_period_initialize(&(dpobj->start), &(dpobj->end), &(dpobj->interval), (int*) &recurrences, isostr, isostr_len TSRMLS_CC);
+		date_period_initialize(&(dpobj->start), &(dpobj->end), &(dpobj->interval), &recurrences, isostr, isostr_len TSRMLS_CC);
 		if (dpobj->start == NULL) {
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "The ISO interval '%s' did not contain a start date.", isostr);
 		}
diff --git a/ext/date/php_date.h b/ext/date/php_date.h
index d683642..cda0b33 100644
--- a/ext/date/php_date.h
+++ b/ext/date/php_date.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_date.h 305492 2010-11-18 11:24:59Z derick $ */
+/* $Id: php_date.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_DATE_H
 #define PHP_DATE_H
diff --git a/ext/date/tests/010.phpt b/ext/date/tests/010.phpt
index aad5b70..58b0ce8 100644
--- a/ext/date/tests/010.phpt
+++ b/ext/date/tests/010.phpt
@@ -8,7 +8,7 @@ date_default_timezone_set('UTC');
   echo "Done\n";
 ?>
 --EXPECTF--
-array(8) {
+array(6) {
   [0]=>
   array(3) {
     ["dst"]=>
@@ -52,27 +52,9 @@ array(8) {
     ["offset"]=>
     int(0)
     ["timezone_id"]=>
-    string(9) "Universal"
-  }
-  [5]=>
-  array(3) {
-    ["dst"]=>
-    bool(false)
-    ["offset"]=>
-    int(0)
-    ["timezone_id"]=>
     string(3) "UTC"
   }
-  [6]=>
-  array(3) {
-    ["dst"]=>
-    bool(false)
-    ["offset"]=>
-    int(0)
-    ["timezone_id"]=>
-    string(4) "Zulu"
-  }
-  [7]=>
+  [5]=>
   array(3) {
     ["dst"]=>
     bool(false)
diff --git a/ext/date/tests/DateInterval_format.phpt b/ext/date/tests/DateInterval_format.phpt
new file mode 100644
index 0000000..8088a0a
--- /dev/null
+++ b/ext/date/tests/DateInterval_format.phpt
@@ -0,0 +1,70 @@
+--TEST--
+DateInterval::format(), except %a
+--DESCRIPTION--
+%a is covered in a separate test.
+Don't want an XFAIL here to cause confusion if a real bug comes up.
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+# TestFest 2010 BKTK
+--SKIPIF--
+<?php if (!method_exists('DateInterval', 'format')) die("skip: method doesn't exist"); ?>
+--FILE--
+<?php
+
+$date1 = new DateTime('2000-01-01 00:00:00');
+$date2 = new DateTime('2001-03-04 04:05:06');
+
+$interval = $date1->diff($date2);
+
+echo $interval->format('Y=%Y') . "\n";
+echo $interval->format('M=%M') . "\n";
+echo $interval->format('D=%D') . "\n";
+echo $interval->format('H=%H') . "\n";
+echo $interval->format('I=%I') . "\n";
+echo $interval->format('S=%S') . "\n";
+echo $interval->format('R=%R') . "\n";
+
+echo $interval->format('y=%y') . "\n";
+echo $interval->format('m=%m') . "\n";
+echo $interval->format('d=%d') . "\n";
+echo $interval->format('h=%h') . "\n";
+echo $interval->format('i=%i') . "\n";
+echo $interval->format('s=%s') . "\n";
+echo $interval->format('r=%r') . "\n";
+
+echo "\n";
+
+$interval = $date2->diff($date1);
+
+echo $interval->format('inverted R=%R') . "\n";
+echo $interval->format('inverted r=%r') . "\n";
+
+echo "\n";
+
+echo $interval->format('%=%%') . "\n";
+
+// Invalid valid format character does not raise warnings.
+echo $interval->format('x=%x') . "\n";
+
+?>
+--EXPECT--
+Y=01
+M=02
+D=03
+H=04
+I=05
+S=06
+R=+
+y=1
+m=2
+d=3
+h=4
+i=5
+s=6
+r=
+
+inverted R=-
+inverted r=-
+
+%=%
+x=%x
diff --git a/ext/date/tests/DateInterval_format_a.phpt b/ext/date/tests/DateInterval_format_a.phpt
new file mode 100644
index 0000000..f82a2f6
--- /dev/null
+++ b/ext/date/tests/DateInterval_format_a.phpt
@@ -0,0 +1,22 @@
+--TEST--
+DateInterval::format(), %a
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+# TestFest 2010 BKTK
+--SKIPIF--
+<?php if (!method_exists('DateInterval', 'format')) die("skip: method doesn't exist"); ?>
+--XFAIL--
+Windows VC6 libs' floor()/ceil() choke on floats
+--FILE--
+<?php
+
+$date1 = new DateTime('2000-01-01 00:00:00');
+$date2 = new DateTime('2001-03-04 04:05:06');
+
+$interval = $date1->diff($date2);
+
+echo $interval->format('a=%a') . "\n";
+
+?>
+--EXPECT--
+a=428
diff --git a/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt b/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt
index 126c4b8..015c9e8 100644
--- a/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt
+++ b/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt
@@ -23,10 +23,10 @@ var_dump( $abbr["acst"] );
 
 ?>
 ===DONE===
---EXPECT--
+--EXPECTF--
 *** Testing DateTimeZone::listAbbreviations() : basic functionality ***
 string(5) "array"
-int(399)
+int(%d)
 
 -- Format a sample entry --
 array(4) {
diff --git a/ext/date/tests/DateTime_construct_variation2.phpt b/ext/date/tests/DateTime_construct_variation2.phpt
index 5f754ec..b1d80f9 100644
--- a/ext/date/tests/DateTime_construct_variation2.phpt
+++ b/ext/date/tests/DateTime_construct_variation2.phpt
@@ -114,7 +114,7 @@ fclose( $file_handle);
 
 ?>
 ===DONE===
---EXPECT--
+--EXPECTF--
 *** Testing new DateTime() : usage variation -  unexpected values to second argument $timezone***
 
 -- int 0 --
@@ -151,10 +151,24 @@ FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, array gi
 FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, array given
 
 -- uppercase NULL --
-FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, null given
+object(DateTime)#%d (3) {
+  ["date"]=>
+  string(19) "2005-07-14 22:30:41"
+  ["timezone_type"]=>
+  int(3)
+  ["timezone"]=>
+  string(13) "Europe/London"
+}
 
 -- lowercase null --
-FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, null given
+object(DateTime)#%d (3) {
+  ["date"]=>
+  string(19) "2005-07-14 22:30:41"
+  ["timezone_type"]=>
+  int(3)
+  ["timezone"]=>
+  string(13) "Europe/London"
+}
 
 -- lowercase true --
 FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, boolean given
@@ -193,10 +207,24 @@ FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, object g
 FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, object given
 
 -- undefined var --
-FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, null given
+object(DateTime)#%d (3) {
+  ["date"]=>
+  string(19) "2005-07-14 22:30:41"
+  ["timezone_type"]=>
+  int(3)
+  ["timezone"]=>
+  string(13) "Europe/London"
+}
 
 -- unset var --
-FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, null given
+object(DateTime)#%d (3) {
+  ["date"]=>
+  string(19) "2005-07-14 22:30:41"
+  ["timezone_type"]=>
+  int(3)
+  ["timezone"]=>
+  string(13) "Europe/London"
+}
 
 -- resource --
 FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, resource given
diff --git a/ext/date/tests/DateTime_diff_add_sub-absolute.phpt b/ext/date/tests/DateTime_diff_add_sub-absolute.phpt
new file mode 100644
index 0000000..25e5a7d
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-absolute.phpt
@@ -0,0 +1,29 @@
+--TEST--
+DateTime::diff() add() sub() -- absolute 
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Absolute
+ */
+echo "test_absolute_7: ";
+examine_diff('2009-01-14', '2009-01-07', 'P+0Y0M7DT0H0M0S', 7, true);
+
+echo "test_absolute_negative_7: ";
+examine_diff('2009-01-07', '2009-01-14', 'P+0Y0M7DT0H0M0S', 7, true);
+
+?>
+--EXPECT--
+test_absolute_7: FWD: 2009-01-14 00:00:00 EST - 2009-01-07 00:00:00 EST = **P+0Y0M7DT0H0M0S** | BACK: 2009-01-07 00:00:00 EST + P+0Y0M7DT0H0M0S = **2009-01-14 00:00:00 EST** | DAYS: **7**
+test_absolute_negative_7: FWD: 2009-01-07 00:00:00 EST - 2009-01-14 00:00:00 EST = **P+0Y0M7DT0H0M0S** | BACK: 2009-01-14 00:00:00 EST - P+0Y0M7DT0H0M0S = **2009-01-07 00:00:00 EST** | DAYS: **7**
diff --git a/ext/date/tests/DateTime_diff_add_sub-dates.phpt b/ext/date/tests/DateTime_diff_add_sub-dates.phpt
new file mode 100644
index 0000000..8fd7c40
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-dates.phpt
@@ -0,0 +1,89 @@
+--TEST--
+DateTime::diff() add() sub() -- dates 
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Particular days
+ */
+echo "test__7: ";
+examine_diff('2009-01-14', '2009-01-07', 'P+0Y0M7DT0H0M0S', 7);
+
+echo "test_years_positive__7_by_0_day: ";
+examine_diff('2007-02-07', '2000-02-07', 'P+7Y0M0DT0H0M0S', 2557);
+
+echo "test_years_positive__7_by_1_day: ";
+examine_diff('2007-02-08', '2000-02-07', 'P+7Y0M1DT0H0M0S', 2558);
+
+echo "test_years_positive__6_shy_1_day: ";
+examine_diff('2007-02-06', '2000-02-07', 'P+6Y11M30DT0H0M0S', 2556);
+
+echo "test_years_positive__7_by_1_month: ";
+examine_diff('2007-03-07', '2000-02-07', 'P+7Y1M0DT0H0M0S', 2585);
+
+echo "test_years_positive__6_shy_1_month: ";
+examine_diff('2007-01-07', '2000-02-07', 'P+6Y11M0DT0H0M0S', 2526);
+
+echo "test_years_positive__7_by_1_month_split_newyear: ";
+examine_diff('2007-01-07', '1999-12-07', 'P+7Y1M0DT0H0M0S', 2588);
+
+echo "test_years_positive__6_shy_1_month_split_newyear: ";
+examine_diff('2006-12-07', '2000-01-07', 'P+6Y11M0DT0H0M0S', 2526);
+
+
+/*
+ * Particular days, negative
+ */
+echo "test_negative__7: ";
+examine_diff('2009-01-07', '2009-01-14', 'P-0Y0M7DT0H0M0S', 7);
+
+echo "test_years_negative__7_by_0_day: ";
+examine_diff('2000-02-07', '2007-02-07', 'P-7Y0M0DT0H0M0S', 2557);
+
+echo "test_years_negative__7_by_1_day: ";
+examine_diff('2000-02-07', '2007-02-08', 'P-7Y0M1DT0H0M0S', 2558);
+
+echo "test_years_negative__6_shy_1_day: ";
+examine_diff('2000-02-07', '2007-02-06', 'P-6Y11M28DT0H0M0S', 2556);
+
+echo "test_years_negative__7_by_1_month: ";
+examine_diff('2000-02-07', '2007-03-07', 'P-7Y1M0DT0H0M0S', 2585);
+
+echo "test_years_negative__6_shy_1_month: ";
+examine_diff('2000-02-07', '2007-01-07', 'P-6Y11M0DT0H0M0S', 2526);
+
+echo "test_years_negative__7_by_1_month_split_newyear: ";
+examine_diff('1999-12-07', '2007-01-07', 'P-7Y1M0DT0H0M0S', 2588);
+
+echo "test_years_negative__6_shy_1_month_split_newyear: ";
+examine_diff('2000-01-07', '2006-12-07', 'P-6Y11M0DT0H0M0S', 2526);
+
+?>
+--EXPECT--
+test__7: FWD: 2009-01-14 00:00:00 EST - 2009-01-07 00:00:00 EST = **P+0Y0M7DT0H0M0S** | BACK: 2009-01-07 00:00:00 EST + P+0Y0M7DT0H0M0S = **2009-01-14 00:00:00 EST** | DAYS: **7**
+test_years_positive__7_by_0_day: FWD: 2007-02-07 00:00:00 EST - 2000-02-07 00:00:00 EST = **P+7Y0M0DT0H0M0S** | BACK: 2000-02-07 00:00:00 EST + P+7Y0M0DT0H0M0S = **2007-02-07 00:00:00 EST** | DAYS: **2557**
+test_years_positive__7_by_1_day: FWD: 2007-02-08 00:00:00 EST - 2000-02-07 00:00:00 EST = **P+7Y0M1DT0H0M0S** | BACK: 2000-02-07 00:00:00 EST + P+7Y0M1DT0H0M0S = **2007-02-08 00:00:00 EST** | DAYS: **2558**
+test_years_positive__6_shy_1_day: FWD: 2007-02-06 00:00:00 EST - 2000-02-07 00:00:00 EST = **P+6Y11M30DT0H0M0S** | BACK: 2000-02-07 00:00:00 EST + P+6Y11M30DT0H0M0S = **2007-02-06 00:00:00 EST** | DAYS: **2556**
+test_years_positive__7_by_1_month: FWD: 2007-03-07 00:00:00 EST - 2000-02-07 00:00:00 EST = **P+7Y1M0DT0H0M0S** | BACK: 2000-02-07 00:00:00 EST + P+7Y1M0DT0H0M0S = **2007-03-07 00:00:00 EST** | DAYS: **2585**
+test_years_positive__6_shy_1_month: FWD: 2007-01-07 00:00:00 EST - 2000-02-07 00:00:00 EST = **P+6Y11M0DT0H0M0S** | BACK: 2000-02-07 00:00:00 EST + P+6Y11M0DT0H0M0S = **2007-01-07 00:00:00 EST** | DAYS: **2526**
+test_years_positive__7_by_1_month_split_newyear: FWD: 2007-01-07 00:00:00 EST - 1999-12-07 00:00:00 EST = **P+7Y1M0DT0H0M0S** | BACK: 1999-12-07 00:00:00 EST + P+7Y1M0DT0H0M0S = **2007-01-07 00:00:00 EST** | DAYS: **2588**
+test_years_positive__6_shy_1_month_split_newyear: FWD: 2006-12-07 00:00:00 EST - 2000-01-07 00:00:00 EST = **P+6Y11M0DT0H0M0S** | BACK: 2000-01-07 00:00:00 EST + P+6Y11M0DT0H0M0S = **2006-12-07 00:00:00 EST** | DAYS: **2526**
+test_negative__7: FWD: 2009-01-07 00:00:00 EST - 2009-01-14 00:00:00 EST = **P-0Y0M7DT0H0M0S** | BACK: 2009-01-14 00:00:00 EST + P-0Y0M7DT0H0M0S = **2009-01-07 00:00:00 EST** | DAYS: **7**
+test_years_negative__7_by_0_day: FWD: 2000-02-07 00:00:00 EST - 2007-02-07 00:00:00 EST = **P-7Y0M0DT0H0M0S** | BACK: 2007-02-07 00:00:00 EST + P-7Y0M0DT0H0M0S = **2000-02-07 00:00:00 EST** | DAYS: **2557**
+test_years_negative__7_by_1_day: FWD: 2000-02-07 00:00:00 EST - 2007-02-08 00:00:00 EST = **P-7Y0M1DT0H0M0S** | BACK: 2007-02-08 00:00:00 EST + P-7Y0M1DT0H0M0S = **2000-02-07 00:00:00 EST** | DAYS: **2558**
+test_years_negative__6_shy_1_day: FWD: 2000-02-07 00:00:00 EST - 2007-02-06 00:00:00 EST = **P-6Y11M28DT0H0M0S** | BACK: 2007-02-06 00:00:00 EST + P-6Y11M28DT0H0M0S = **2000-02-07 00:00:00 EST** | DAYS: **2556**
+test_years_negative__7_by_1_month: FWD: 2000-02-07 00:00:00 EST - 2007-03-07 00:00:00 EST = **P-7Y1M0DT0H0M0S** | BACK: 2007-03-07 00:00:00 EST + P-7Y1M0DT0H0M0S = **2000-02-07 00:00:00 EST** | DAYS: **2585**
+test_years_negative__6_shy_1_month: FWD: 2000-02-07 00:00:00 EST - 2007-01-07 00:00:00 EST = **P-6Y11M0DT0H0M0S** | BACK: 2007-01-07 00:00:00 EST + P-6Y11M0DT0H0M0S = **2000-02-07 00:00:00 EST** | DAYS: **2526**
+test_years_negative__7_by_1_month_split_newyear: FWD: 1999-12-07 00:00:00 EST - 2007-01-07 00:00:00 EST = **P-7Y1M0DT0H0M0S** | BACK: 2007-01-07 00:00:00 EST + P-7Y1M0DT0H0M0S = **1999-12-07 00:00:00 EST** | DAYS: **2588**
+test_years_negative__6_shy_1_month_split_newyear: FWD: 2000-01-07 00:00:00 EST - 2006-12-07 00:00:00 EST = **P-6Y11M0DT0H0M0S** | BACK: 2006-12-07 00:00:00 EST + P-6Y11M0DT0H0M0S = **2000-01-07 00:00:00 EST** | DAYS: **2526**
diff --git a/ext/date/tests/DateTime_diff_add_sub-fall-type2-type2.phpt b/ext/date/tests/DateTime_diff_add_sub-fall-type2-type2.phpt
new file mode 100644
index 0000000..8b165d8
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-fall-type2-type2.phpt
@@ -0,0 +1,246 @@
+--TEST--
+DateTime::diff() add() sub() -- fall type2 type2
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--XFAIL--
+PHP < 5.4 has bugs
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Time, Fall, Zone Type 2 to Zone Type 2
+ *
+ * + prev: the day before the transition day  2010-11-06 18:38:28 EDT
+ * + dt: daylight time on transition day      2010-11-07 00:10:20 EDT
+ * + redodt: daylight time in the redo period 2010-11-07 01:12:33 EDT
+ * + redost: standard time in the redo period 2010-11-07 01:14:44 EST
+ * + st: standard time on the transition day  2010-11-07 03:16:55 EST
+ * + post: the day after the transition day   2010-11-08 19:59:59 EST
+ */
+echo "test_time_fall_type2_prev_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-10-04 02:18:48 EDT');  // sp prev, zt2
+examine_diff($end, $start, 'P+0Y1M2DT16H19M40S', 33);
+
+echo "test_time_fall_type2_prev_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+$start = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT5H31M52S', 0);
+
+echo "test_time_fall_type2_prev_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT6H34M5S', 0);
+
+echo "test_time_fall_type2_prev_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT7H36M16S', 0);
+
+echo "test_time_fall_type2_prev_type2_st: ";
+$end   = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+$start = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT9H38M27S', 0);
+
+echo "test_time_fall_type2_prev_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M2DT1H21M31S', 2);
+
+echo "test_time_fall_type2_dt_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P-0Y0M0DT5H31M52S', 0);
+
+echo "test_time_fall_type2_dt_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:15:35 EDT');  // sp dt, zt2
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT0H5M15S', 0);
+
+echo "test_time_fall_type2_dt_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT1H2M13S', 0);
+
+echo "test_time_fall_type2_dt_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT2H4M24S', 0);
+
+echo "test_time_fall_type2_dt_type2_st: ";
+$end   = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT4H6M35S', 0);
+
+echo "test_time_fall_type2_dt_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M1DT20H49M39S', 1);
+
+echo "test_time_fall_type2_redodt_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P-0Y0M0DT6H34M5S', 0);
+
+echo "test_time_fall_type2_redodt_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P-0Y0M0DT1H2M13S', 0);
+
+echo "test_time_fall_type2_redodt_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:15:35 EDT');  // sp redodt, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT0H3M2S', 0);
+
+echo "test_time_fall_type2_redodt_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT1H2M11S', 0);
+
+echo "test_time_fall_type2_redodt_type2_st: ";
+$end   = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT3H4M22S', 0);
+
+echo "test_time_fall_type2_redodt_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P+0Y0M1DT19H47M26S', 1);
+
+echo "test_time_fall_type2_redost_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P-0Y0M0DT7H36M16S', 0);
+
+echo "test_time_fall_type2_redost_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P-0Y0M0DT2H4M24S', 0);
+
+echo "test_time_fall_type2_redost_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P-0Y0M0DT1H2M11S', 0);
+
+echo "test_time_fall_type2_redost_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:16:54 EST');  // sp redodt, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P+0Y0M0DT0H2M10S', 0);
+
+echo "test_time_fall_type2_redost_type2_st: ";
+$end   = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P+0Y0M0DT2H2M11S', 0);
+
+echo "test_time_fall_type2_redost_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P+0Y0M1DT18H45M15S', 1);
+
+echo "test_time_fall_type2_st_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P-0Y0M0DT9H38M27S', 0);
+
+echo "test_time_fall_type2_st_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P-0Y0M0DT4H6M35S', 0);
+
+echo "test_time_fall_type2_st_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P-0Y0M0DT3H4M22S', 0);
+
+echo "test_time_fall_type2_st_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P-0Y0M0DT2H2M11S', 0);
+
+echo "test_time_fall_type2_st_type2_st: ";
+$end   = new DateTime('2010-11-07 05:19:56 EST');  // sp st, zt2
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P+0Y0M0DT2H3M1S', 0);
+
+echo "test_time_fall_type2_st_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P+0Y0M1DT16H43M4S', 1);
+
+echo "test_time_fall_type2_post_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M2DT1H21M31S', 2);
+
+echo "test_time_fall_type2_post_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+$start = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT20H49M39S', 1);
+
+echo "test_time_fall_type2_post_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT19H47M26S', 1);
+
+echo "test_time_fall_type2_post_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT18H45M15S', 1);
+
+echo "test_time_fall_type2_post_type2_st: ";
+$end   = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+$start = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT16H43M4S', 1);
+
+echo "test_time_fall_type2_post_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-08 18:57:55 EST');  // sp post, zt2
+examine_diff($end, $start, 'P+0Y0M0DT1H2M4S', 0);
+
+?>
+--EXPECT--
+test_time_fall_type2_prev_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-10-04 02:18:48 EDT = **P+0Y1M2DT16H19M40S** | BACK: 2010-10-04 02:18:48 EDT + P+0Y1M2DT16H19M40S = **2010-11-06 18:38:28 EDT** | DAYS: **33**
+test_time_fall_type2_prev_type2_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT5H31M52S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT5H31M52S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type2_prev_type2_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT6H34M5S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT6H34M5S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type2_prev_type2_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT7H36M16S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT7H36M16S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type2_prev_type2_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT9H38M27S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT9H38M27S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type2_prev_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M2DT1H21M31S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M2DT1H21M31S = **2010-11-08 19:59:59 EST** | DAYS: **2**
+test_time_fall_type2_dt_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 00:10:20 EDT = **P-0Y0M0DT5H31M52S** | BACK: 2010-11-07 00:10:20 EDT + P-0Y0M0DT5H31M52S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type2_dt_type2_dt: FWD: 2010-11-07 00:15:35 EDT - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT0H5M15S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT0H5M15S = **2010-11-07 00:15:35 EDT** | DAYS: **0**
+test_time_fall_type2_dt_type2_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT1H2M13S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT1H2M13S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type2_dt_type2_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT2H4M24S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT2H4M24S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type2_dt_type2_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT4H6M35S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT4H6M35S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type2_dt_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M1DT20H49M39S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M1DT20H49M39S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type2_redodt_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 01:12:33 EDT = **P-0Y0M0DT6H34M5S** | BACK: 2010-11-07 01:12:33 EDT + P-0Y0M0DT6H34M5S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type2_redodt_type2_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 01:12:33 EDT = **P-0Y0M0DT1H2M13S** | BACK: 2010-11-07 01:12:33 EDT + P-0Y0M0DT1H2M13S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type2_redodt_type2_redodt: FWD: 2010-11-07 01:15:35 EDT - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT0H3M2S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT0H3M2S = **2010-11-07 01:15:35 EDT** | DAYS: **0**
+test_time_fall_type2_redodt_type2_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT1H2M11S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT1H2M11S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type2_redodt_type2_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT3H4M22S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT3H4M22S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type2_redodt_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M1DT19H47M26S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M1DT19H47M26S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type2_redost_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT7H36M16S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT7H36M16S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type2_redost_type2_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT2H4M24S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT2H4M24S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type2_redost_type2_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT1H2M11S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT1H2M11S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type2_redost_type2_redost: FWD: 2010-11-07 01:16:54 EST - 2010-11-07 01:14:44 EST = **P+0Y0M0DT0H2M10S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M0DT0H2M10S = **2010-11-07 01:16:54 EST** | DAYS: **0**
+test_time_fall_type2_redost_type2_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 01:14:44 EST = **P+0Y0M0DT2H2M11S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M0DT2H2M11S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type2_redost_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 01:14:44 EST = **P+0Y0M1DT18H45M15S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M1DT18H45M15S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type2_st_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT9H38M27S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT9H38M27S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type2_st_type2_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT4H6M35S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT4H6M35S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type2_st_type2_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT3H4M22S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT3H4M22S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type2_st_type2_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 03:16:55 EST = **P-0Y0M0DT2H2M11S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT2H2M11S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type2_st_type2_st: FWD: 2010-11-07 05:19:56 EST - 2010-11-07 03:16:55 EST = **P+0Y0M0DT2H3M1S** | BACK: 2010-11-07 03:16:55 EST + P+0Y0M0DT2H3M1S = **2010-11-07 05:19:56 EST** | DAYS: **0**
+test_time_fall_type2_st_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 03:16:55 EST = **P+0Y0M1DT16H43M4S** | BACK: 2010-11-07 03:16:55 EST + P+0Y0M1DT16H43M4S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type2_post_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M2DT1H21M31S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M2DT1H21M31S = **2010-11-06 18:38:28 EDT** | DAYS: **2**
+test_time_fall_type2_post_type2_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M1DT20H49M39S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT20H49M39S = **2010-11-07 00:10:20 EDT** | DAYS: **1**
+test_time_fall_type2_post_type2_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M1DT19H47M26S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT19H47M26S = **2010-11-07 01:12:33 EDT** | DAYS: **1**
+test_time_fall_type2_post_type2_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-08 19:59:59 EST = **P-0Y0M1DT18H45M15S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT18H45M15S = **2010-11-07 01:14:44 EST** | DAYS: **1**
+test_time_fall_type2_post_type2_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-08 19:59:59 EST = **P-0Y0M1DT16H43M4S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT16H43M4S = **2010-11-07 03:16:55 EST** | DAYS: **1**
+test_time_fall_type2_post_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-08 18:57:55 EST = **P+0Y0M0DT1H2M4S** | BACK: 2010-11-08 18:57:55 EST + P+0Y0M0DT1H2M4S = **2010-11-08 19:59:59 EST** | DAYS: **0**
diff --git a/ext/date/tests/DateTime_diff_add_sub-fall-type2-type3.phpt b/ext/date/tests/DateTime_diff_add_sub-fall-type2-type3.phpt
new file mode 100644
index 0000000..61eb406
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-fall-type2-type3.phpt
@@ -0,0 +1,258 @@
+--TEST--
+DateTime::diff() add() sub() -- fall type2 type3
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--XFAIL--
+PHP < 5.4 has bugs
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Time, Fall, Zone Type 2 to Zone Type 3
+ *
+ * + prev: the day before the transition day  2010-11-06 18:38:28 EDT
+ * + dt: daylight time on transition day      2010-11-07 00:10:20 EDT
+ * + redodt: daylight time in the redo period 2010-11-07 01:12:33 EDT
+ * + redost: standard time in the redo period 2010-11-07 01:14:44 EST
+ * + st: standard time on the transition day  2010-11-07 03:16:55 EST
+ * + post: the day after the transition day   2010-11-08 19:59:59 EST
+ */
+echo "test_time_fall_type2_prev_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-10-04 02:18:48 EDT');  // sp prev, zt2
+examine_diff($end, $start, 'P+0Y1M2DT16H19M40S', 33);
+
+echo "test_time_fall_type2_prev_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+$start = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT5H31M52S', 0);
+
+echo "test_time_fall_type2_prev_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT6H34M5S', 0);
+
+echo "test_time_fall_type2_prev_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT7H36M16S', 0);
+
+echo "test_time_fall_type2_prev_type3_st: ";
+$end   = new DateTime('2010-11-07 03:16:55');  // st, zt3
+$start = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT9H38M27S', 0);
+
+echo "test_time_fall_type2_prev_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M2DT1H21M31S', 2);
+
+echo "test_time_fall_type2_dt_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P-0Y0M0DT5H31M52S', 0);
+
+echo "test_time_fall_type2_dt_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:15:35');  // sp dt, zt3
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT0H5M15S', 0);
+
+echo "test_time_fall_type2_dt_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT1H2M13S', 0);
+
+echo "test_time_fall_type2_dt_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT2H4M24S', 0);
+
+echo "test_time_fall_type2_dt_type3_st: ";
+$end   = new DateTime('2010-11-07 03:16:55');  // st, zt3
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT4H6M35S', 0);
+
+echo "test_time_fall_type2_dt_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M1DT20H49M39S', 1);
+
+echo "test_time_fall_type2_redodt_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P-0Y0M0DT6H34M5S', 0);
+
+echo "test_time_fall_type2_redodt_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P-0Y0M0DT1H2M13S', 0);
+
+echo "test_time_fall_type2_redodt_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:15:35 EDT');  // sp redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT0H3M2S', 0);
+
+echo "test_time_fall_type2_redodt_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT1H2M11S', 0);
+
+echo "test_time_fall_type2_redodt_type3_st: ";
+$end   = new DateTime('2010-11-07 03:16:55');  // st, zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT3H4M22S', 0);
+
+echo "test_time_fall_type2_redodt_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+examine_diff($end, $start, 'P+0Y0M1DT19H47M26S', 1);
+
+echo "test_time_fall_type2_redost_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P-0Y0M0DT7H36M16S', 0);
+
+echo "test_time_fall_type2_redost_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P-0Y0M0DT2H4M24S', 0);
+
+echo "test_time_fall_type2_redost_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P-0Y0M0DT1H2M11S', 0);
+
+echo "test_time_fall_type2_redost_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:16:54 EST');  // sp redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P+0Y0M0DT0H2M10S', 0);
+
+echo "test_time_fall_type2_redost_type3_st: ";
+$end   = new DateTime('2010-11-07 03:16:55');  // st, zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P+0Y0M0DT2H2M11S', 0);
+
+echo "test_time_fall_type2_redost_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+examine_diff($end, $start, 'P+0Y0M1DT18H45M15S', 1);
+
+echo "test_time_fall_type2_st_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P-0Y0M0DT9H38M27S', 0);
+
+echo "test_time_fall_type2_st_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P-0Y0M0DT4H6M35S', 0);
+
+echo "test_time_fall_type2_st_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P-0Y0M0DT3H4M22S', 0);
+
+echo "test_time_fall_type2_st_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P-0Y0M0DT2H2M11S', 0);
+
+echo "test_time_fall_type2_st_type3_st: ";
+$end   = new DateTime('2010-11-07 05:19:56');  // sp st, zt3
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P+0Y0M0DT2H3M1S', 0);
+
+echo "test_time_fall_type2_st_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+examine_diff($end, $start, 'P+0Y0M1DT16H43M4S', 1);
+
+echo "test_time_fall_type2_post_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M2DT1H21M31S', 2);
+
+echo "test_time_fall_type2_post_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+$start = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT20H49M39S', 1);
+
+echo "test_time_fall_type2_post_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT19H47M26S', 1);
+
+echo "test_time_fall_type2_post_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT18H45M15S', 1);
+
+echo "test_time_fall_type2_post_type3_st: ";
+$end   = new DateTime('2010-11-07 03:16:55');  // st, zt3
+$start = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT16H43M4S', 1);
+
+echo "test_time_fall_type2_post_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-08 18:57:55 EST');  // sp post, zt2
+examine_diff($end, $start, 'P+0Y0M0DT1H2M4S', 0);
+
+?>
+--EXPECT--
+test_time_fall_type2_prev_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-10-04 02:18:48 EDT = **P+0Y1M2DT16H19M40S** | BACK: 2010-10-04 02:18:48 EDT + P+0Y1M2DT16H19M40S = **2010-11-06 18:38:28 EDT** | DAYS: **33**
+test_time_fall_type2_prev_type3_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT5H31M52S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT5H31M52S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type2_prev_type3_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT6H34M5S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT6H34M5S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type2_prev_type3_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT7H36M16S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT7H36M16S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type2_prev_type3_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT9H38M27S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT9H38M27S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type2_prev_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M2DT1H21M31S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M2DT1H21M31S = **2010-11-08 19:59:59 EST** | DAYS: **2**
+test_time_fall_type2_dt_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 00:10:20 EDT = **P-0Y0M0DT5H31M52S** | BACK: 2010-11-07 00:10:20 EDT + P-0Y0M0DT5H31M52S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type2_dt_type3_dt: FWD: 2010-11-07 00:15:35 EDT - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT0H5M15S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT0H5M15S = **2010-11-07 00:15:35 EDT** | DAYS: **0**
+test_time_fall_type2_dt_type3_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT1H2M13S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT1H2M13S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type2_dt_type3_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT2H4M24S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT2H4M24S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type2_dt_type3_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT4H6M35S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT4H6M35S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type2_dt_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M1DT20H49M39S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M1DT20H49M39S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type2_redodt_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 01:12:33 EDT = **P-0Y0M0DT6H34M5S** | BACK: 2010-11-07 01:12:33 EDT + P-0Y0M0DT6H34M5S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type2_redodt_type3_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 01:12:33 EDT = **P-0Y0M0DT1H2M13S** | BACK: 2010-11-07 01:12:33 EDT + P-0Y0M0DT1H2M13S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type2_redodt_type3_redodt: FWD: 2010-11-07 01:15:35 EDT - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT0H3M2S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT0H3M2S = **2010-11-07 01:15:35 EDT** | DAYS: **0**
+test_time_fall_type2_redodt_type3_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT1H2M11S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT1H2M11S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type2_redodt_type3_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT3H4M22S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT3H4M22S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type2_redodt_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M1DT19H47M26S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M1DT19H47M26S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type2_redost_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT7H36M16S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT7H36M16S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type2_redost_type3_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT2H4M24S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT2H4M24S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type2_redost_type3_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT1H2M11S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT1H2M11S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type2_redost_type3_redost: FWD: 2010-11-07 01:16:54 EST - 2010-11-07 01:14:44 EST = **P+0Y0M0DT0H2M10S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M0DT0H2M10S = **2010-11-07 01:16:54 EST** | DAYS: **0**
+test_time_fall_type2_redost_type3_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 01:14:44 EST = **P+0Y0M0DT2H2M11S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M0DT2H2M11S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type2_redost_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 01:14:44 EST = **P+0Y0M1DT18H45M15S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M1DT18H45M15S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type2_st_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT9H38M27S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT9H38M27S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type2_st_type3_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT4H6M35S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT4H6M35S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type2_st_type3_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT3H4M22S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT3H4M22S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type2_st_type3_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 03:16:55 EST = **P-0Y0M0DT2H2M11S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT2H2M11S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type2_st_type3_st: FWD: 2010-11-07 05:19:56 EST - 2010-11-07 03:16:55 EST = **P+0Y0M0DT2H3M1S** | BACK: 2010-11-07 03:16:55 EST + P+0Y0M0DT2H3M1S = **2010-11-07 05:19:56 EST** | DAYS: **0**
+test_time_fall_type2_st_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 03:16:55 EST = **P+0Y0M1DT16H43M4S** | BACK: 2010-11-07 03:16:55 EST + P+0Y0M1DT16H43M4S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type2_post_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M2DT1H21M31S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M2DT1H21M31S = **2010-11-06 18:38:28 EDT** | DAYS: **2**
+test_time_fall_type2_post_type3_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M1DT20H49M39S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT20H49M39S = **2010-11-07 00:10:20 EDT** | DAYS: **1**
+test_time_fall_type2_post_type3_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M1DT19H47M26S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT19H47M26S = **2010-11-07 01:12:33 EDT** | DAYS: **1**
+test_time_fall_type2_post_type3_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-08 19:59:59 EST = **P-0Y0M1DT18H45M15S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT18H45M15S = **2010-11-07 01:14:44 EST** | DAYS: **1**
+test_time_fall_type2_post_type3_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-08 19:59:59 EST = **P-0Y0M1DT16H43M4S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT16H43M4S = **2010-11-07 03:16:55 EST** | DAYS: **1**
+test_time_fall_type2_post_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-08 18:57:55 EST = **P+0Y0M0DT1H2M4S** | BACK: 2010-11-08 18:57:55 EST + P+0Y0M0DT1H2M4S = **2010-11-08 19:59:59 EST** | DAYS: **0**
diff --git a/ext/date/tests/DateTime_diff_add_sub-fall-type3-type2.phpt b/ext/date/tests/DateTime_diff_add_sub-fall-type3-type2.phpt
new file mode 100644
index 0000000..fd57a54
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-fall-type3-type2.phpt
@@ -0,0 +1,260 @@
+--TEST--
+DateTime::diff() add() sub() -- fall type3 type2
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--XFAIL--
+PHP < 5.4 has bugs
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Time, Fall, Zone Type 3 to Zone Type 2
+ *
+ * + prev: the day before the transition day  2010-11-06 18:38:28 EDT
+ * + dt: daylight time on transition day      2010-11-07 00:10:20 EDT
+ * + redodt: daylight time in the redo period 2010-11-07 01:12:33 EDT
+ * + redost: standard time in the redo period 2010-11-07 01:14:44 EST
+ * + st: standard time on the transition day  2010-11-07 03:16:55 EST
+ * + post: the day after the transition day   2010-11-08 19:59:59 EST
+ */
+echo "test_time_fall_type3_prev_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-10-04 02:18:48');  // sp prev, zt3
+examine_diff($end, $start, 'P+0Y1M2DT16H19M40S', 33);
+
+echo "test_time_fall_type3_prev_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+$start = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT5H31M52S', 0);
+
+echo "test_time_fall_type3_prev_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT6H34M5S', 0);
+
+echo "test_time_fall_type3_prev_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT7H36M16S', 0);
+
+echo "test_time_fall_type3_prev_type2_st: ";
+$end   = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+$start = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT9H38M27S', 0);
+
+echo "test_time_fall_type3_prev_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M2DT1H21M31S', 2);
+
+echo "test_time_fall_type3_dt_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P-0Y0M0DT5H31M52S', 0);
+
+echo "test_time_fall_type3_dt_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:15:35 EDT');  // sp dt, zt2
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M0DT0H5M15S', 0);
+
+echo "test_time_fall_type3_dt_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M0DT1H2M13S', 0);
+
+echo "test_time_fall_type3_dt_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M0DT2H4M24S', 0);
+
+echo "test_time_fall_type3_dt_type2_st: ";
+$end   = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M0DT4H6M35S', 0);
+
+echo "test_time_fall_type3_dt_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M1DT20H49M39S', 1);
+
+echo "test_time_fall_type3_redodt_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P-0Y0M0DT6H34M5S', 0);
+
+echo "test_time_fall_type3_redodt_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P-0Y0M0DT1H2M13S', 0);
+
+echo "test_time_fall_type3_redodt_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:15:35 EDT');  // sp redodt, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M0DT0H3M2S', 0);
+
+echo "test_time_fall_type3_redodt_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M0DT1H2M11S', 0);
+
+echo "test_time_fall_type3_redodt_type2_st: ";
+$end   = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M0DT3H4M22S', 0);
+
+echo "test_time_fall_type3_redodt_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M1DT19H47M26S', 1);
+
+echo "test_time_fall_type3_redost_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P-0Y0M0DT7H36M16S', 0);
+
+echo "test_time_fall_type3_redost_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P-0Y0M0DT2H4M24S', 0);
+
+echo "test_time_fall_type3_redost_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P-0Y0M0DT1H2M11S', 0);
+
+echo "test_time_fall_type3_redost_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:16:54 EST');  // sp redodt, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M0DT0H2M10S', 0);
+
+echo "test_time_fall_type3_redost_type2_st: ";
+$end   = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M0DT2H2M11S', 0);
+
+echo "test_time_fall_type3_redost_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M1DT18H45M15S', 1);
+
+echo "test_time_fall_type3_st_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P-0Y0M0DT9H38M27S', 0);
+
+echo "test_time_fall_type3_st_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P-0Y0M0DT4H6M35S', 0);
+
+echo "test_time_fall_type3_st_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P-0Y0M0DT3H4M22S', 0);
+
+echo "test_time_fall_type3_st_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P-0Y0M0DT2H2M11S', 0);
+
+echo "test_time_fall_type3_st_type2_st: ";
+$end   = new DateTime('2010-11-07 05:19:56 EST');  // sp st, zt2
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P+0Y0M0DT2H3M1S', 0);
+
+echo "test_time_fall_type3_st_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P+0Y0M1DT16H43M4S', 1);
+
+echo "test_time_fall_type3_post_type2_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28 EDT');  // prev, zt2
+$start = new DateTime('2010-11-08 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M2DT1H21M31S', 2);
+
+echo "test_time_fall_type3_post_type2_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20 EDT');  // dt, zt2
+$start = new DateTime('2010-11-08 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT20H49M39S', 1);
+
+echo "test_time_fall_type3_post_type2_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start = new DateTime('2010-11-08 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT19H47M26S', 1);
+
+echo "test_time_fall_type3_post_type2_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start = new DateTime('2010-11-08 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT18H45M15S', 1);
+
+echo "test_time_fall_type3_post_type2_st: ";
+$end   = new DateTime('2010-11-07 03:16:55 EST');  // st, zt2
+$start = new DateTime('2010-11-08 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT16H43M4S', 1);
+
+echo "test_time_fall_type3_post_type2_post: ";
+$end   = new DateTime('2010-11-08 19:59:59 EST');  // post, zt2
+$start = new DateTime('2010-11-08 18:57:55');  // sp post, zt3
+examine_diff($end, $start, 'P+0Y0M0DT1H2M4S', 0);
+
+?>
+--EXPECT--
+test_time_fall_type3_prev_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-10-04 02:18:48 EDT = **P+0Y1M2DT16H19M40S** | BACK: 2010-10-04 02:18:48 EDT + P+0Y1M2DT16H19M40S = **2010-11-06 18:38:28 EDT** | DAYS: **33**
+test_time_fall_type3_prev_type2_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT5H31M52S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT5H31M52S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type3_prev_type2_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT6H34M5S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT6H34M5S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type3_prev_type2_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT7H36M16S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT7H36M16S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type3_prev_type2_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT9H38M27S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT9H38M27S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type3_prev_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M2DT1H21M31S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M2DT1H21M31S = **2010-11-08 19:59:59 EST** | DAYS: **2**
+test_time_fall_type3_dt_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 00:10:20 EDT = **P-0Y0M0DT5H31M52S** | BACK: 2010-11-07 00:10:20 EDT + P-0Y0M0DT5H31M52S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type3_dt_type2_dt: FWD: 2010-11-07 00:15:35 EDT - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT0H5M15S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT0H5M15S = **2010-11-07 00:15:35 EDT** | DAYS: **0**
+test_time_fall_type3_dt_type2_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT1H2M13S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT1H2M13S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type3_dt_type2_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT2H4M24S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT2H4M24S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type3_dt_type2_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT4H6M35S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT4H6M35S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type3_dt_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M1DT20H49M39S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M1DT20H49M39S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type3_redodt_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 01:12:33 EDT = **P-0Y0M0DT6H34M5S** | BACK: 2010-11-07 01:12:33 EDT + P-0Y0M0DT6H34M5S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type3_redodt_type2_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 01:12:33 EDT = **P-0Y0M0DT1H2M13S** | BACK: 2010-11-07 01:12:33 EDT + P-0Y0M0DT1H2M13S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type3_redodt_type2_redodt: FWD: 2010-11-07 01:15:35 EDT - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT0H3M2S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT0H3M2S = **2010-11-07 01:15:35 EDT** | DAYS: **0**
+test_time_fall_type3_redodt_type2_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT1H2M11S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT1H2M11S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type3_redodt_type2_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT3H4M22S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT3H4M22S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type3_redodt_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M1DT19H47M26S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M1DT19H47M26S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type3_redost_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT7H36M16S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT7H36M16S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type3_redost_type2_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT2H4M24S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT2H4M24S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type3_redost_type2_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT1H2M11S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT1H2M11S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type3_redost_type2_redost: FWD: 2010-11-07 01:16:54 EST - 2010-11-07 01:14:44 EST = **P+0Y0M0DT0H2M10S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M0DT0H2M10S = **2010-11-07 01:16:54 EST** | DAYS: **0**
+test_time_fall_type3_redost_type2_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 01:14:44 EST = **P+0Y0M0DT2H2M11S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M0DT2H2M11S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type3_redost_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 01:14:44 EST = **P+0Y0M1DT18H45M15S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M1DT18H45M15S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type3_st_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT9H38M27S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT9H38M27S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type3_st_type2_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT4H6M35S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT4H6M35S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type3_st_type2_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT3H4M22S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT3H4M22S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type3_st_type2_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 03:16:55 EST = **P-0Y0M0DT2H2M11S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT2H2M11S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type3_st_type2_st: FWD: 2010-11-07 05:19:56 EST - 2010-11-07 03:16:55 EST = **P+0Y0M0DT2H3M1S** | BACK: 2010-11-07 03:16:55 EST + P+0Y0M0DT2H3M1S = **2010-11-07 05:19:56 EST** | DAYS: **0**
+test_time_fall_type3_st_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 03:16:55 EST = **P+0Y0M1DT16H43M4S** | BACK: 2010-11-07 03:16:55 EST + P+0Y0M1DT16H43M4S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type3_post_type2_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M2DT1H21M31S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M2DT1H21M31S = **2010-11-06 18:38:28 EDT** | DAYS: **2**
+test_time_fall_type3_post_type2_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M1DT20H49M39S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT20H49M39S = **2010-11-07 00:10:20 EDT** | DAYS: **1**
+test_time_fall_type3_post_type2_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M1DT19H47M26S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT19H47M26S = **2010-11-07 01:12:33 EDT** | DAYS: **1**
+test_time_fall_type3_post_type2_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-08 19:59:59 EST = **P-0Y0M1DT18H45M15S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT18H45M15S = **2010-11-07 01:14:44 EST** | DAYS: **1**
+test_time_fall_type3_post_type2_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-08 19:59:59 EST = **P-0Y0M1DT16H43M4S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT16H43M4S = **2010-11-07 03:16:55 EST** | DAYS: **1**
+test_time_fall_type3_post_type2_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-08 18:57:55 EST = **P+0Y0M0DT1H2M4S** | BACK: 2010-11-08 18:57:55 EST + P+0Y0M0DT1H2M4S = **2010-11-08 19:59:59 EST** | DAYS: **0**
diff --git a/ext/date/tests/DateTime_diff_add_sub-fall-type3-type3.phpt b/ext/date/tests/DateTime_diff_add_sub-fall-type3-type3.phpt
new file mode 100644
index 0000000..9aac2f1
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-fall-type3-type3.phpt
@@ -0,0 +1,270 @@
+--TEST--
+DateTime::diff() add() sub() -- fall type3 type3 
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--XFAIL--
+PHP < 5.4 has bugs
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Time, Fall, Zone Type 3 to Zone Type 3
+ *
+ * + prev: the day before the transition day  2010-11-06 18:38:28
+ * + dt: daylight time on transition day      2010-11-07 00:10:20
+ * + redodt: daylight time in the redo period 2010-11-07 01:12:33 EDT, + TZ
+ * + redost: standard time in the redo period 2010-11-07 01:14:44 EST, + TZ
+ * + st: standard time on the transition day  2010-11-07 03:16:55
+ * + post: the day after the transition day   2010-11-08 19:59:59
+ */
+echo "test_time_fall_type3_prev_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-10-04 02:18:48');  // sp prev, zt3
+examine_diff($end, $start, 'P+0Y1M2DT16H19M40S', 33);
+
+echo "test_time_fall_type3_prev_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+$start = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT5H31M52S', 0);
+
+echo "test_time_fall_type3_prev_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT6H34M5S', 0);
+
+echo "test_time_fall_type3_prev_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT7H36M16S', 0);
+
+echo "test_time_fall_type3_prev_type3_st: ";
+$end   = new DateTime('2010-11-07 03:16:55');  // st, zt3
+$start = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT9H38M27S', 0);
+
+echo "test_time_fall_type3_prev_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M2DT1H21M31S', 2);
+
+echo "test_time_fall_type3_dt_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P-0Y0M0DT5H31M52S', 0);
+
+echo "test_time_fall_type3_dt_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:15:35');  // sp dt, zt3
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M0DT0H5M15S', 0);
+
+echo "test_time_fall_type3_dt_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M0DT1H2M13S', 0);
+
+echo "test_time_fall_type3_dt_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M0DT2H4M24S', 0);
+
+echo "test_time_fall_type3_dt_type3_st: ";
+$end   = new DateTime('2010-11-07 03:16:55');  // st, zt3
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M0DT4H6M35S', 0);
+
+echo "test_time_fall_type3_dt_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M1DT20H49M39S', 1);
+
+echo "test_time_fall_type3_redodt_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P-0Y0M0DT6H34M5S', 0);
+
+echo "test_time_fall_type3_redodt_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P-0Y0M0DT1H2M13S', 0);
+
+echo "test_time_fall_type3_redodt_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:15:35 EDT');  // sp redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M0DT0H3M2S', 0);
+
+echo "test_time_fall_type3_redodt_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M0DT1H2M11S', 0);
+
+echo "test_time_fall_type3_redodt_type3_st: ";
+$end   = new DateTime('2010-11-07 03:16:55');  // st, zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M0DT3H4M22S', 0);
+
+echo "test_time_fall_type3_redodt_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M1DT19H47M26S', 1);
+
+echo "test_time_fall_type3_redost_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P-0Y0M0DT7H36M16S', 0);
+
+echo "test_time_fall_type3_redost_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P-0Y0M0DT2H4M24S', 0);
+
+echo "test_time_fall_type3_redost_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P-0Y0M0DT1H2M11S', 0);
+
+echo "test_time_fall_type3_redost_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:16:54 EST');  // sp redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M0DT0H2M10S', 0);
+
+echo "test_time_fall_type3_redost_type3_st: ";
+$end   = new DateTime('2010-11-07 03:16:55');  // st, zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M0DT2H2M11S', 0);
+
+echo "test_time_fall_type3_redost_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$start->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+examine_diff($end, $start, 'P+0Y0M1DT18H45M15S', 1);
+
+echo "test_time_fall_type3_st_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P-0Y0M0DT9H38M27S', 0);
+
+echo "test_time_fall_type3_st_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P-0Y0M0DT4H6M35S', 0);
+
+echo "test_time_fall_type3_st_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P-0Y0M0DT3H4M22S', 0);
+
+echo "test_time_fall_type3_st_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P-0Y0M0DT2H2M11S', 0);
+
+echo "test_time_fall_type3_st_type3_st: ";
+$end   = new DateTime('2010-11-07 05:19:56');  // sp st, zt3
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P+0Y0M0DT2H3M1S', 0);
+
+echo "test_time_fall_type3_st_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-07 03:16:55');  // st, zt3
+examine_diff($end, $start, 'P+0Y0M1DT16H43M4S', 1);
+
+echo "test_time_fall_type3_post_type3_prev: ";
+$end   = new DateTime('2010-11-06 18:38:28');  // prev, zt3
+$start = new DateTime('2010-11-08 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M2DT1H21M31S', 2);
+
+echo "test_time_fall_type3_post_type3_dt: ";
+$end   = new DateTime('2010-11-07 00:10:20');  // dt, zt3
+$start = new DateTime('2010-11-08 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT20H49M39S', 1);
+
+echo "test_time_fall_type3_post_type3_redodt: ";
+$end   = new DateTime('2010-11-07 01:12:33 EDT');  // redodt, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-08 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT19H47M26S', 1);
+
+echo "test_time_fall_type3_post_type3_redost: ";
+$end   = new DateTime('2010-11-07 01:14:44 EST');  // redost, zt2
+$end->setTimezone(new DateTimeZone('America/New_York'));  // zt2 -> zt3
+$start = new DateTime('2010-11-08 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT18H45M15S', 1);
+
+echo "test_time_fall_type3_post_type3_st: ";
+$end   = new DateTime('2010-11-07 03:16:55');  // st, zt3
+$start = new DateTime('2010-11-08 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT16H43M4S', 1);
+
+echo "test_time_fall_type3_post_type3_post: ";
+$end   = new DateTime('2010-11-08 19:59:59');  // post, zt3
+$start = new DateTime('2010-11-08 18:57:55');  // sp post, zt3
+examine_diff($end, $start, 'P+0Y0M0DT1H2M4S', 0);
+
+?>
+--EXPECT--
+test_time_fall_type3_prev_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-10-04 02:18:48 EDT = **P+0Y1M2DT16H19M40S** | BACK: 2010-10-04 02:18:48 EDT + P+0Y1M2DT16H19M40S = **2010-11-06 18:38:28 EDT** | DAYS: **33**
+test_time_fall_type3_prev_type3_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT5H31M52S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT5H31M52S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type3_prev_type3_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT6H34M5S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT6H34M5S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type3_prev_type3_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT7H36M16S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT7H36M16S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type3_prev_type3_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M0DT9H38M27S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M0DT9H38M27S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type3_prev_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-06 18:38:28 EDT = **P+0Y0M2DT1H21M31S** | BACK: 2010-11-06 18:38:28 EDT + P+0Y0M2DT1H21M31S = **2010-11-08 19:59:59 EST** | DAYS: **2**
+test_time_fall_type3_dt_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 00:10:20 EDT = **P-0Y0M0DT5H31M52S** | BACK: 2010-11-07 00:10:20 EDT + P-0Y0M0DT5H31M52S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type3_dt_type3_dt: FWD: 2010-11-07 00:15:35 EDT - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT0H5M15S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT0H5M15S = **2010-11-07 00:15:35 EDT** | DAYS: **0**
+test_time_fall_type3_dt_type3_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT1H2M13S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT1H2M13S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type3_dt_type3_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT2H4M24S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT2H4M24S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type3_dt_type3_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M0DT4H6M35S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M0DT4H6M35S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type3_dt_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 00:10:20 EDT = **P+0Y0M1DT20H49M39S** | BACK: 2010-11-07 00:10:20 EDT + P+0Y0M1DT20H49M39S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type3_redodt_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 01:12:33 EDT = **P-0Y0M0DT6H34M5S** | BACK: 2010-11-07 01:12:33 EDT + P-0Y0M0DT6H34M5S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type3_redodt_type3_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 01:12:33 EDT = **P-0Y0M0DT1H2M13S** | BACK: 2010-11-07 01:12:33 EDT + P-0Y0M0DT1H2M13S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type3_redodt_type3_redodt: FWD: 2010-11-07 01:15:35 EDT - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT0H3M2S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT0H3M2S = **2010-11-07 01:15:35 EDT** | DAYS: **0**
+test_time_fall_type3_redodt_type3_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT1H2M11S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT1H2M11S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type3_redodt_type3_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M0DT3H4M22S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M0DT3H4M22S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type3_redodt_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 01:12:33 EDT = **P+0Y0M1DT19H47M26S** | BACK: 2010-11-07 01:12:33 EDT + P+0Y0M1DT19H47M26S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type3_redost_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT7H36M16S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT7H36M16S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type3_redost_type3_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT2H4M24S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT2H4M24S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type3_redost_type3_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 01:14:44 EST = **P-0Y0M0DT1H2M11S** | BACK: 2010-11-07 01:14:44 EST + P-0Y0M0DT1H2M11S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type3_redost_type3_redost: FWD: 2010-11-07 01:16:54 EST - 2010-11-07 01:14:44 EST = **P+0Y0M0DT0H2M10S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M0DT0H2M10S = **2010-11-07 01:16:54 EST** | DAYS: **0**
+test_time_fall_type3_redost_type3_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-07 01:14:44 EST = **P+0Y0M0DT2H2M11S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M0DT2H2M11S = **2010-11-07 03:16:55 EST** | DAYS: **0**
+test_time_fall_type3_redost_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 01:14:44 EST = **P+0Y0M1DT18H45M15S** | BACK: 2010-11-07 01:14:44 EST + P+0Y0M1DT18H45M15S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type3_st_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT9H38M27S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT9H38M27S = **2010-11-06 18:38:28 EDT** | DAYS: **0**
+test_time_fall_type3_st_type3_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT4H6M35S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT4H6M35S = **2010-11-07 00:10:20 EDT** | DAYS: **0**
+test_time_fall_type3_st_type3_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-07 03:16:55 EST = **P-0Y0M0DT3H4M22S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT3H4M22S = **2010-11-07 01:12:33 EDT** | DAYS: **0**
+test_time_fall_type3_st_type3_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-07 03:16:55 EST = **P-0Y0M0DT2H2M11S** | BACK: 2010-11-07 03:16:55 EST + P-0Y0M0DT2H2M11S = **2010-11-07 01:14:44 EST** | DAYS: **0**
+test_time_fall_type3_st_type3_st: FWD: 2010-11-07 05:19:56 EST - 2010-11-07 03:16:55 EST = **P+0Y0M0DT2H3M1S** | BACK: 2010-11-07 03:16:55 EST + P+0Y0M0DT2H3M1S = **2010-11-07 05:19:56 EST** | DAYS: **0**
+test_time_fall_type3_st_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-07 03:16:55 EST = **P+0Y0M1DT16H43M4S** | BACK: 2010-11-07 03:16:55 EST + P+0Y0M1DT16H43M4S = **2010-11-08 19:59:59 EST** | DAYS: **1**
+test_time_fall_type3_post_type3_prev: FWD: 2010-11-06 18:38:28 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M2DT1H21M31S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M2DT1H21M31S = **2010-11-06 18:38:28 EDT** | DAYS: **2**
+test_time_fall_type3_post_type3_dt: FWD: 2010-11-07 00:10:20 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M1DT20H49M39S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT20H49M39S = **2010-11-07 00:10:20 EDT** | DAYS: **1**
+test_time_fall_type3_post_type3_redodt: FWD: 2010-11-07 01:12:33 EDT - 2010-11-08 19:59:59 EST = **P-0Y0M1DT19H47M26S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT19H47M26S = **2010-11-07 01:12:33 EDT** | DAYS: **1**
+test_time_fall_type3_post_type3_redost: FWD: 2010-11-07 01:14:44 EST - 2010-11-08 19:59:59 EST = **P-0Y0M1DT18H45M15S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT18H45M15S = **2010-11-07 01:14:44 EST** | DAYS: **1**
+test_time_fall_type3_post_type3_st: FWD: 2010-11-07 03:16:55 EST - 2010-11-08 19:59:59 EST = **P-0Y0M1DT16H43M4S** | BACK: 2010-11-08 19:59:59 EST + P-0Y0M1DT16H43M4S = **2010-11-07 03:16:55 EST** | DAYS: **1**
+test_time_fall_type3_post_type3_post: FWD: 2010-11-08 19:59:59 EST - 2010-11-08 18:57:55 EST = **P+0Y0M0DT1H2M4S** | BACK: 2010-11-08 18:57:55 EST + P+0Y0M0DT1H2M4S = **2010-11-08 19:59:59 EST** | DAYS: **0**
diff --git a/ext/date/tests/DateTime_diff_add_sub-february.phpt b/ext/date/tests/DateTime_diff_add_sub-february.phpt
new file mode 100644
index 0000000..5a2f9d4
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-february.phpt
@@ -0,0 +1,281 @@
+--TEST--
+DateTime::diff() add() sub() -- february 
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Check PHP bug 49081
+ */
+echo "test_bug_49081__1: ";
+examine_diff('2010-03-31', '2010-03-01', 'P+0Y0M30DT0H0M0S', 30);
+
+echo "test_bug_49081__2: ";
+examine_diff('2010-04-01', '2010-03-01', 'P+0Y1M0DT0H0M0S', 31);
+
+echo "test_bug_49081__3: ";
+examine_diff('2010-04-01', '2010-03-31', 'P+0Y0M1DT0H0M0S', 1);
+
+echo "test_bug_49081__4: ";
+examine_diff('2010-04-29', '2010-03-31', 'P+0Y0M29DT0H0M0S', 29);
+
+echo "test_bug_49081__5: ";
+examine_diff('2010-04-30', '2010-03-31', 'P+0Y0M30DT0H0M0S', 30);
+
+echo "test_bug_49081__6: ";
+examine_diff('2010-04-30', '2010-03-30', 'P+0Y1M0DT0H0M0S', 31);
+
+echo "test_bug_49081__7: ";
+examine_diff('2010-04-30', '2010-03-29', 'P+0Y1M1DT0H0M0S', 32);
+
+echo "test_bug_49081__8: ";
+examine_diff('2010-01-29', '2010-01-01', 'P+0Y0M28DT0H0M0S', 28);
+
+echo "test_bug_49081__9: ";
+examine_diff('2010-01-30', '2010-01-01', 'P+0Y0M29DT0H0M0S', 29);
+
+echo "test_bug_49081__10: ";
+examine_diff('2010-01-31', '2010-01-01', 'P+0Y0M30DT0H0M0S', 30);
+
+echo "test_bug_49081__11: ";
+examine_diff('2010-02-01', '2010-01-01', 'P+0Y1M0DT0H0M0S', 31);
+
+echo "test_bug_49081__12: ";
+examine_diff('2010-02-01', '2010-01-31', 'P+0Y0M1DT0H0M0S', 1);
+
+echo "test_bug_49081__13: ";
+examine_diff('2010-02-27', '2010-01-31', 'P+0Y0M27DT0H0M0S', 27);
+
+echo "test_bug_49081__14: ";
+examine_diff('2010-02-28', '2010-01-31', 'P+0Y0M28DT0H0M0S', 28);
+
+echo "test_bug_49081__15: ";
+examine_diff('2010-02-28', '2010-01-30', 'P+0Y0M29DT0H0M0S', 29);
+
+echo "test_bug_49081__16: ";
+examine_diff('2010-02-28', '2010-01-29', 'P+0Y0M30DT0H0M0S', 30);
+
+echo "test_bug_49081__17: ";
+examine_diff('2010-02-28', '2010-01-28', 'P+0Y1M0DT0H0M0S', 31);
+
+echo "test_bug_49081__18: ";
+examine_diff('2010-02-28', '2010-01-27', 'P+0Y1M1DT0H0M0S', 32);
+
+echo "test_bug_49081__19: ";
+examine_diff('2010-03-01', '2010-01-01', 'P+0Y2M0DT0H0M0S', 59);
+
+echo "test_bug_49081__20: ";
+examine_diff('2010-03-01', '2010-01-31', 'P+0Y0M29DT0H0M0S', 29);
+
+echo "test_bug_49081__21: ";
+examine_diff('2010-03-27', '2010-01-31', 'P+0Y1M24DT0H0M0S', 55);
+
+echo "test_bug_49081__22: ";
+examine_diff('2010-03-28', '2010-01-31', 'P+0Y1M25DT0H0M0S', 56);
+
+echo "test_bug_49081__23: ";
+examine_diff('2010-03-29', '2010-01-31', 'P+0Y1M26DT0H0M0S', 57);
+
+echo "test_bug_49081__24: ";
+examine_diff('2010-03-30', '2010-01-31', 'P+0Y1M27DT0H0M0S', 58);
+
+echo "test_bug_49081__25: ";
+examine_diff('2010-03-31', '2010-01-31', 'P+0Y2M0DT0H0M0S', 59);
+
+echo "test_bug_49081__26: ";
+examine_diff('2010-03-31', '2010-01-30', 'P+0Y2M1DT0H0M0S', 60);
+
+echo "test_bug_49081__27: ";
+examine_diff('2009-01-31', '2009-01-01', 'P+0Y0M30DT0H0M0S', 30);
+
+echo "test_bug_49081__28: ";
+examine_diff('2010-03-27', '2010-02-28', 'P+0Y0M27DT0H0M0S', 27);
+
+echo "test_bug_49081__29: ";
+examine_diff('2010-03-28', '2010-02-28', 'P+0Y1M0DT0H0M0S', 28);
+
+echo "test_bug_49081__30: ";
+examine_diff('2010-03-29', '2010-02-28', 'P+0Y1M1DT0H0M0S', 29);
+
+echo "test_bug_49081__31: ";
+examine_diff('2010-03-27', '2010-02-27', 'P+0Y1M0DT0H0M0S', 28);
+
+echo "test_bug_49081__32: ";
+examine_diff('2010-03-27', '2010-02-26', 'P+0Y1M1DT0H0M0S', 29);
+
+
+/*
+ * Check PHP bug 49081, negative
+ */
+echo "test_bug_49081_negative__1: ";
+examine_diff('2010-03-01', '2010-03-31', 'P-0Y0M30DT0H0M0S', 30);
+
+echo "test_bug_49081_negative__2: ";
+examine_diff('2010-03-01', '2010-04-01', 'P-0Y1M0DT0H0M0S', 31);
+
+echo "test_bug_49081_negative__3: ";
+examine_diff('2010-03-31', '2010-04-01', 'P-0Y0M1DT0H0M0S', 1);
+
+echo "test_bug_49081_negative__4: ";
+examine_diff('2010-03-31', '2010-04-29', 'P-0Y0M29DT0H0M0S', 29);
+
+echo "test_bug_49081_negative__5: ";
+examine_diff('2010-03-31', '2010-04-30', 'P-0Y0M30DT0H0M0S', 30);
+
+echo "test_bug_49081_negative__6: ";
+examine_diff('2010-03-30', '2010-04-30', 'P-0Y1M0DT0H0M0S', 31);
+
+echo "test_bug_49081_negative__7: ";
+examine_diff('2010-03-29', '2010-04-30', 'P-0Y1M1DT0H0M0S', 32);
+
+echo "test_bug_49081_negative__8: ";
+examine_diff('2010-01-01', '2010-01-29', 'P-0Y0M28DT0H0M0S', 28);
+
+echo "test_bug_49081_negative__9: ";
+examine_diff('2010-01-01', '2010-01-30', 'P-0Y0M29DT0H0M0S', 29);
+
+echo "test_bug_49081_negative__10: ";
+examine_diff('2010-01-01', '2010-01-31', 'P-0Y0M30DT0H0M0S', 30);
+
+echo "test_bug_49081_negative__11: ";
+examine_diff('2010-01-01', '2010-02-01', 'P-0Y1M0DT0H0M0S', 31);
+
+echo "test_bug_49081_negative__12: ";
+examine_diff('2010-01-31', '2010-02-01', 'P-0Y0M1DT0H0M0S', 1);
+
+echo "test_bug_49081_negative__13: ";
+examine_diff('2010-01-31', '2010-02-27', 'P-0Y0M27DT0H0M0S', 27);
+
+echo "test_bug_49081_negative__14: ";
+examine_diff('2010-01-31', '2010-02-28', 'P-0Y0M28DT0H0M0S', 28);
+
+echo "test_bug_49081_negative__15: ";
+examine_diff('2010-01-30', '2010-02-28', 'P-0Y0M29DT0H0M0S', 29);
+
+echo "test_bug_49081_negative__16: ";
+examine_diff('2010-01-29', '2010-02-28', 'P-0Y0M30DT0H0M0S', 30);
+
+echo "test_bug_49081_negative__17: ";
+examine_diff('2010-01-28', '2010-02-28', 'P-0Y1M0DT0H0M0S', 31);
+
+echo "test_bug_49081_negative__18: ";
+examine_diff('2010-01-27', '2010-02-28', 'P-0Y1M1DT0H0M0S', 32);
+
+echo "test_bug_49081_negative__19: ";
+examine_diff('2010-01-01', '2010-03-01', 'P-0Y2M0DT0H0M0S', 59);
+
+echo "test_bug_49081_negative__20: ";
+examine_diff('2010-01-31', '2010-03-01', 'P-0Y1M1DT0H0M0S', 29);
+
+echo "test_bug_49081_negative__21: ";
+examine_diff('2010-01-31', '2010-03-27', 'P-0Y1M27DT0H0M0S', 55);
+
+echo "test_bug_49081_negative__22: ";
+examine_diff('2010-01-31', '2010-03-28', 'P-0Y1M28DT0H0M0S', 56);
+
+echo "test_bug_49081_negative__23: ";
+examine_diff('2010-01-31', '2010-03-29', 'P-0Y1M29DT0H0M0S', 57);
+
+echo "test_bug_49081_negative__24: ";
+examine_diff('2010-01-31', '2010-03-30', 'P-0Y1M30DT0H0M0S', 58);
+
+echo "test_bug_49081_negative__25: ";
+examine_diff('2010-01-31', '2010-03-31', 'P-0Y2M0DT0H0M0S', 59);
+
+echo "test_bug_49081_negative__26: ";
+examine_diff('2010-01-30', '2010-03-31', 'P-0Y2M1DT0H0M0S', 60);
+
+echo "test_bug_49081_negative__27: ";
+examine_diff('2009-01-01', '2009-01-31', 'P-0Y0M30DT0H0M0S', 30);
+
+echo "test_bug_49081_negative__28: ";
+examine_diff('2010-02-28', '2010-03-27', 'P-0Y0M27DT0H0M0S', 27);
+
+echo "test_bug_49081_negative__29: ";
+examine_diff('2010-02-28', '2010-03-28', 'P-0Y1M0DT0H0M0S', 28);
+
+echo "test_bug_49081_negative__30: ";
+examine_diff('2010-02-28', '2010-03-29', 'P-0Y1M1DT0H0M0S', 29);
+
+echo "test_bug_49081_negative__31: ";
+examine_diff('2010-02-27', '2010-03-27', 'P-0Y1M0DT0H0M0S', 28);
+
+echo "test_bug_49081_negative__32: ";
+examine_diff('2010-02-26', '2010-03-27', 'P-0Y1M1DT0H0M0S', 29);
+
+?>
+--EXPECT--
+test_bug_49081__1: FWD: 2010-03-31 00:00:00 EDT - 2010-03-01 00:00:00 EST = **P+0Y0M30DT0H0M0S** | BACK: 2010-03-01 00:00:00 EST + P+0Y0M30DT0H0M0S = **2010-03-31 00:00:00 EDT** | DAYS: **30**
+test_bug_49081__2: FWD: 2010-04-01 00:00:00 EDT - 2010-03-01 00:00:00 EST = **P+0Y1M0DT0H0M0S** | BACK: 2010-03-01 00:00:00 EST + P+0Y1M0DT0H0M0S = **2010-04-01 00:00:00 EDT** | DAYS: **31**
+test_bug_49081__3: FWD: 2010-04-01 00:00:00 EDT - 2010-03-31 00:00:00 EDT = **P+0Y0M1DT0H0M0S** | BACK: 2010-03-31 00:00:00 EDT + P+0Y0M1DT0H0M0S = **2010-04-01 00:00:00 EDT** | DAYS: **1**
+test_bug_49081__4: FWD: 2010-04-29 00:00:00 EDT - 2010-03-31 00:00:00 EDT = **P+0Y0M29DT0H0M0S** | BACK: 2010-03-31 00:00:00 EDT + P+0Y0M29DT0H0M0S = **2010-04-29 00:00:00 EDT** | DAYS: **29**
+test_bug_49081__5: FWD: 2010-04-30 00:00:00 EDT - 2010-03-31 00:00:00 EDT = **P+0Y0M30DT0H0M0S** | BACK: 2010-03-31 00:00:00 EDT + P+0Y0M30DT0H0M0S = **2010-04-30 00:00:00 EDT** | DAYS: **30**
+test_bug_49081__6: FWD: 2010-04-30 00:00:00 EDT - 2010-03-30 00:00:00 EDT = **P+0Y1M0DT0H0M0S** | BACK: 2010-03-30 00:00:00 EDT + P+0Y1M0DT0H0M0S = **2010-04-30 00:00:00 EDT** | DAYS: **31**
+test_bug_49081__7: FWD: 2010-04-30 00:00:00 EDT - 2010-03-29 00:00:00 EDT = **P+0Y1M1DT0H0M0S** | BACK: 2010-03-29 00:00:00 EDT + P+0Y1M1DT0H0M0S = **2010-04-30 00:00:00 EDT** | DAYS: **32**
+test_bug_49081__8: FWD: 2010-01-29 00:00:00 EST - 2010-01-01 00:00:00 EST = **P+0Y0M28DT0H0M0S** | BACK: 2010-01-01 00:00:00 EST + P+0Y0M28DT0H0M0S = **2010-01-29 00:00:00 EST** | DAYS: **28**
+test_bug_49081__9: FWD: 2010-01-30 00:00:00 EST - 2010-01-01 00:00:00 EST = **P+0Y0M29DT0H0M0S** | BACK: 2010-01-01 00:00:00 EST + P+0Y0M29DT0H0M0S = **2010-01-30 00:00:00 EST** | DAYS: **29**
+test_bug_49081__10: FWD: 2010-01-31 00:00:00 EST - 2010-01-01 00:00:00 EST = **P+0Y0M30DT0H0M0S** | BACK: 2010-01-01 00:00:00 EST + P+0Y0M30DT0H0M0S = **2010-01-31 00:00:00 EST** | DAYS: **30**
+test_bug_49081__11: FWD: 2010-02-01 00:00:00 EST - 2010-01-01 00:00:00 EST = **P+0Y1M0DT0H0M0S** | BACK: 2010-01-01 00:00:00 EST + P+0Y1M0DT0H0M0S = **2010-02-01 00:00:00 EST** | DAYS: **31**
+test_bug_49081__12: FWD: 2010-02-01 00:00:00 EST - 2010-01-31 00:00:00 EST = **P+0Y0M1DT0H0M0S** | BACK: 2010-01-31 00:00:00 EST + P+0Y0M1DT0H0M0S = **2010-02-01 00:00:00 EST** | DAYS: **1**
+test_bug_49081__13: FWD: 2010-02-27 00:00:00 EST - 2010-01-31 00:00:00 EST = **P+0Y0M27DT0H0M0S** | BACK: 2010-01-31 00:00:00 EST + P+0Y0M27DT0H0M0S = **2010-02-27 00:00:00 EST** | DAYS: **27**
+test_bug_49081__14: FWD: 2010-02-28 00:00:00 EST - 2010-01-31 00:00:00 EST = **P+0Y0M28DT0H0M0S** | BACK: 2010-01-31 00:00:00 EST + P+0Y0M28DT0H0M0S = **2010-02-28 00:00:00 EST** | DAYS: **28**
+test_bug_49081__15: FWD: 2010-02-28 00:00:00 EST - 2010-01-30 00:00:00 EST = **P+0Y0M29DT0H0M0S** | BACK: 2010-01-30 00:00:00 EST + P+0Y0M29DT0H0M0S = **2010-02-28 00:00:00 EST** | DAYS: **29**
+test_bug_49081__16: FWD: 2010-02-28 00:00:00 EST - 2010-01-29 00:00:00 EST = **P+0Y0M30DT0H0M0S** | BACK: 2010-01-29 00:00:00 EST + P+0Y0M30DT0H0M0S = **2010-02-28 00:00:00 EST** | DAYS: **30**
+test_bug_49081__17: FWD: 2010-02-28 00:00:00 EST - 2010-01-28 00:00:00 EST = **P+0Y1M0DT0H0M0S** | BACK: 2010-01-28 00:00:00 EST + P+0Y1M0DT0H0M0S = **2010-02-28 00:00:00 EST** | DAYS: **31**
+test_bug_49081__18: FWD: 2010-02-28 00:00:00 EST - 2010-01-27 00:00:00 EST = **P+0Y1M1DT0H0M0S** | BACK: 2010-01-27 00:00:00 EST + P+0Y1M1DT0H0M0S = **2010-02-28 00:00:00 EST** | DAYS: **32**
+test_bug_49081__19: FWD: 2010-03-01 00:00:00 EST - 2010-01-01 00:00:00 EST = **P+0Y2M0DT0H0M0S** | BACK: 2010-01-01 00:00:00 EST + P+0Y2M0DT0H0M0S = **2010-03-01 00:00:00 EST** | DAYS: **59**
+test_bug_49081__20: FWD: 2010-03-01 00:00:00 EST - 2010-01-31 00:00:00 EST = **P+0Y0M29DT0H0M0S** | BACK: 2010-01-31 00:00:00 EST + P+0Y0M29DT0H0M0S = **2010-03-01 00:00:00 EST** | DAYS: **29**
+test_bug_49081__21: FWD: 2010-03-27 00:00:00 EDT - 2010-01-31 00:00:00 EST = **P+0Y1M24DT0H0M0S** | BACK: 2010-01-31 00:00:00 EST + P+0Y1M24DT0H0M0S = **2010-03-27 00:00:00 EDT** | DAYS: **55**
+test_bug_49081__22: FWD: 2010-03-28 00:00:00 EDT - 2010-01-31 00:00:00 EST = **P+0Y1M25DT0H0M0S** | BACK: 2010-01-31 00:00:00 EST + P+0Y1M25DT0H0M0S = **2010-03-28 00:00:00 EDT** | DAYS: **56**
+test_bug_49081__23: FWD: 2010-03-29 00:00:00 EDT - 2010-01-31 00:00:00 EST = **P+0Y1M26DT0H0M0S** | BACK: 2010-01-31 00:00:00 EST + P+0Y1M26DT0H0M0S = **2010-03-29 00:00:00 EDT** | DAYS: **57**
+test_bug_49081__24: FWD: 2010-03-30 00:00:00 EDT - 2010-01-31 00:00:00 EST = **P+0Y1M27DT0H0M0S** | BACK: 2010-01-31 00:00:00 EST + P+0Y1M27DT0H0M0S = **2010-03-30 00:00:00 EDT** | DAYS: **58**
+test_bug_49081__25: FWD: 2010-03-31 00:00:00 EDT - 2010-01-31 00:00:00 EST = **P+0Y2M0DT0H0M0S** | BACK: 2010-01-31 00:00:00 EST + P+0Y2M0DT0H0M0S = **2010-03-31 00:00:00 EDT** | DAYS: **59**
+test_bug_49081__26: FWD: 2010-03-31 00:00:00 EDT - 2010-01-30 00:00:00 EST = **P+0Y2M1DT0H0M0S** | BACK: 2010-01-30 00:00:00 EST + P+0Y2M1DT0H0M0S = **2010-03-31 00:00:00 EDT** | DAYS: **60**
+test_bug_49081__27: FWD: 2009-01-31 00:00:00 EST - 2009-01-01 00:00:00 EST = **P+0Y0M30DT0H0M0S** | BACK: 2009-01-01 00:00:00 EST + P+0Y0M30DT0H0M0S = **2009-01-31 00:00:00 EST** | DAYS: **30**
+test_bug_49081__28: FWD: 2010-03-27 00:00:00 EDT - 2010-02-28 00:00:00 EST = **P+0Y0M27DT0H0M0S** | BACK: 2010-02-28 00:00:00 EST + P+0Y0M27DT0H0M0S = **2010-03-27 00:00:00 EDT** | DAYS: **27**
+test_bug_49081__29: FWD: 2010-03-28 00:00:00 EDT - 2010-02-28 00:00:00 EST = **P+0Y1M0DT0H0M0S** | BACK: 2010-02-28 00:00:00 EST + P+0Y1M0DT0H0M0S = **2010-03-28 00:00:00 EDT** | DAYS: **28**
+test_bug_49081__30: FWD: 2010-03-29 00:00:00 EDT - 2010-02-28 00:00:00 EST = **P+0Y1M1DT0H0M0S** | BACK: 2010-02-28 00:00:00 EST + P+0Y1M1DT0H0M0S = **2010-03-29 00:00:00 EDT** | DAYS: **29**
+test_bug_49081__31: FWD: 2010-03-27 00:00:00 EDT - 2010-02-27 00:00:00 EST = **P+0Y1M0DT0H0M0S** | BACK: 2010-02-27 00:00:00 EST + P+0Y1M0DT0H0M0S = **2010-03-27 00:00:00 EDT** | DAYS: **28**
+test_bug_49081__32: FWD: 2010-03-27 00:00:00 EDT - 2010-02-26 00:00:00 EST = **P+0Y1M1DT0H0M0S** | BACK: 2010-02-26 00:00:00 EST + P+0Y1M1DT0H0M0S = **2010-03-27 00:00:00 EDT** | DAYS: **29**
+test_bug_49081_negative__1: FWD: 2010-03-01 00:00:00 EST - 2010-03-31 00:00:00 EDT = **P-0Y0M30DT0H0M0S** | BACK: 2010-03-31 00:00:00 EDT + P-0Y0M30DT0H0M0S = **2010-03-01 00:00:00 EST** | DAYS: **30**
+test_bug_49081_negative__2: FWD: 2010-03-01 00:00:00 EST - 2010-04-01 00:00:00 EDT = **P-0Y1M0DT0H0M0S** | BACK: 2010-04-01 00:00:00 EDT + P-0Y1M0DT0H0M0S = **2010-03-01 00:00:00 EST** | DAYS: **31**
+test_bug_49081_negative__3: FWD: 2010-03-31 00:00:00 EDT - 2010-04-01 00:00:00 EDT = **P-0Y0M1DT0H0M0S** | BACK: 2010-04-01 00:00:00 EDT + P-0Y0M1DT0H0M0S = **2010-03-31 00:00:00 EDT** | DAYS: **1**
+test_bug_49081_negative__4: FWD: 2010-03-31 00:00:00 EDT - 2010-04-29 00:00:00 EDT = **P-0Y0M29DT0H0M0S** | BACK: 2010-04-29 00:00:00 EDT + P-0Y0M29DT0H0M0S = **2010-03-31 00:00:00 EDT** | DAYS: **29**
+test_bug_49081_negative__5: FWD: 2010-03-31 00:00:00 EDT - 2010-04-30 00:00:00 EDT = **P-0Y0M30DT0H0M0S** | BACK: 2010-04-30 00:00:00 EDT + P-0Y0M30DT0H0M0S = **2010-03-31 00:00:00 EDT** | DAYS: **30**
+test_bug_49081_negative__6: FWD: 2010-03-30 00:00:00 EDT - 2010-04-30 00:00:00 EDT = **P-0Y1M0DT0H0M0S** | BACK: 2010-04-30 00:00:00 EDT + P-0Y1M0DT0H0M0S = **2010-03-30 00:00:00 EDT** | DAYS: **31**
+test_bug_49081_negative__7: FWD: 2010-03-29 00:00:00 EDT - 2010-04-30 00:00:00 EDT = **P-0Y1M1DT0H0M0S** | BACK: 2010-04-30 00:00:00 EDT + P-0Y1M1DT0H0M0S = **2010-03-29 00:00:00 EDT** | DAYS: **32**
+test_bug_49081_negative__8: FWD: 2010-01-01 00:00:00 EST - 2010-01-29 00:00:00 EST = **P-0Y0M28DT0H0M0S** | BACK: 2010-01-29 00:00:00 EST + P-0Y0M28DT0H0M0S = **2010-01-01 00:00:00 EST** | DAYS: **28**
+test_bug_49081_negative__9: FWD: 2010-01-01 00:00:00 EST - 2010-01-30 00:00:00 EST = **P-0Y0M29DT0H0M0S** | BACK: 2010-01-30 00:00:00 EST + P-0Y0M29DT0H0M0S = **2010-01-01 00:00:00 EST** | DAYS: **29**
+test_bug_49081_negative__10: FWD: 2010-01-01 00:00:00 EST - 2010-01-31 00:00:00 EST = **P-0Y0M30DT0H0M0S** | BACK: 2010-01-31 00:00:00 EST + P-0Y0M30DT0H0M0S = **2010-01-01 00:00:00 EST** | DAYS: **30**
+test_bug_49081_negative__11: FWD: 2010-01-01 00:00:00 EST - 2010-02-01 00:00:00 EST = **P-0Y1M0DT0H0M0S** | BACK: 2010-02-01 00:00:00 EST + P-0Y1M0DT0H0M0S = **2010-01-01 00:00:00 EST** | DAYS: **31**
+test_bug_49081_negative__12: FWD: 2010-01-31 00:00:00 EST - 2010-02-01 00:00:00 EST = **P-0Y0M1DT0H0M0S** | BACK: 2010-02-01 00:00:00 EST + P-0Y0M1DT0H0M0S = **2010-01-31 00:00:00 EST** | DAYS: **1**
+test_bug_49081_negative__13: FWD: 2010-01-31 00:00:00 EST - 2010-02-27 00:00:00 EST = **P-0Y0M27DT0H0M0S** | BACK: 2010-02-27 00:00:00 EST + P-0Y0M27DT0H0M0S = **2010-01-31 00:00:00 EST** | DAYS: **27**
+test_bug_49081_negative__14: FWD: 2010-01-31 00:00:00 EST - 2010-02-28 00:00:00 EST = **P-0Y0M28DT0H0M0S** | BACK: 2010-02-28 00:00:00 EST + P-0Y0M28DT0H0M0S = **2010-01-31 00:00:00 EST** | DAYS: **28**
+test_bug_49081_negative__15: FWD: 2010-01-30 00:00:00 EST - 2010-02-28 00:00:00 EST = **P-0Y0M29DT0H0M0S** | BACK: 2010-02-28 00:00:00 EST + P-0Y0M29DT0H0M0S = **2010-01-30 00:00:00 EST** | DAYS: **29**
+test_bug_49081_negative__16: FWD: 2010-01-29 00:00:00 EST - 2010-02-28 00:00:00 EST = **P-0Y0M30DT0H0M0S** | BACK: 2010-02-28 00:00:00 EST + P-0Y0M30DT0H0M0S = **2010-01-29 00:00:00 EST** | DAYS: **30**
+test_bug_49081_negative__17: FWD: 2010-01-28 00:00:00 EST - 2010-02-28 00:00:00 EST = **P-0Y1M0DT0H0M0S** | BACK: 2010-02-28 00:00:00 EST + P-0Y1M0DT0H0M0S = **2010-01-28 00:00:00 EST** | DAYS: **31**
+test_bug_49081_negative__18: FWD: 2010-01-27 00:00:00 EST - 2010-02-28 00:00:00 EST = **P-0Y1M1DT0H0M0S** | BACK: 2010-02-28 00:00:00 EST + P-0Y1M1DT0H0M0S = **2010-01-27 00:00:00 EST** | DAYS: **32**
+test_bug_49081_negative__19: FWD: 2010-01-01 00:00:00 EST - 2010-03-01 00:00:00 EST = **P-0Y2M0DT0H0M0S** | BACK: 2010-03-01 00:00:00 EST + P-0Y2M0DT0H0M0S = **2010-01-01 00:00:00 EST** | DAYS: **59**
+test_bug_49081_negative__20: FWD: 2010-01-31 00:00:00 EST - 2010-03-01 00:00:00 EST = **P-0Y1M1DT0H0M0S** | BACK: 2010-03-01 00:00:00 EST + P-0Y1M1DT0H0M0S = **2010-01-31 00:00:00 EST** | DAYS: **29**
+test_bug_49081_negative__21: FWD: 2010-01-31 00:00:00 EST - 2010-03-27 00:00:00 EDT = **P-0Y1M27DT0H0M0S** | BACK: 2010-03-27 00:00:00 EDT + P-0Y1M27DT0H0M0S = **2010-01-31 00:00:00 EST** | DAYS: **55**
+test_bug_49081_negative__22: FWD: 2010-01-31 00:00:00 EST - 2010-03-28 00:00:00 EDT = **P-0Y1M28DT0H0M0S** | BACK: 2010-03-28 00:00:00 EDT + P-0Y1M28DT0H0M0S = **2010-01-31 00:00:00 EST** | DAYS: **56**
+test_bug_49081_negative__23: FWD: 2010-01-31 00:00:00 EST - 2010-03-29 00:00:00 EDT = **P-0Y1M29DT0H0M0S** | BACK: 2010-03-29 00:00:00 EDT + P-0Y1M29DT0H0M0S = **2010-01-31 00:00:00 EST** | DAYS: **57**
+test_bug_49081_negative__24: FWD: 2010-01-31 00:00:00 EST - 2010-03-30 00:00:00 EDT = **P-0Y1M30DT0H0M0S** | BACK: 2010-03-30 00:00:00 EDT + P-0Y1M30DT0H0M0S = **2010-01-31 00:00:00 EST** | DAYS: **58**
+test_bug_49081_negative__25: FWD: 2010-01-31 00:00:00 EST - 2010-03-31 00:00:00 EDT = **P-0Y2M0DT0H0M0S** | BACK: 2010-03-31 00:00:00 EDT + P-0Y2M0DT0H0M0S = **2010-01-31 00:00:00 EST** | DAYS: **59**
+test_bug_49081_negative__26: FWD: 2010-01-30 00:00:00 EST - 2010-03-31 00:00:00 EDT = **P-0Y2M1DT0H0M0S** | BACK: 2010-03-31 00:00:00 EDT + P-0Y2M1DT0H0M0S = **2010-01-30 00:00:00 EST** | DAYS: **60**
+test_bug_49081_negative__27: FWD: 2009-01-01 00:00:00 EST - 2009-01-31 00:00:00 EST = **P-0Y0M30DT0H0M0S** | BACK: 2009-01-31 00:00:00 EST + P-0Y0M30DT0H0M0S = **2009-01-01 00:00:00 EST** | DAYS: **30**
+test_bug_49081_negative__28: FWD: 2010-02-28 00:00:00 EST - 2010-03-27 00:00:00 EDT = **P-0Y0M27DT0H0M0S** | BACK: 2010-03-27 00:00:00 EDT + P-0Y0M27DT0H0M0S = **2010-02-28 00:00:00 EST** | DAYS: **27**
+test_bug_49081_negative__29: FWD: 2010-02-28 00:00:00 EST - 2010-03-28 00:00:00 EDT = **P-0Y1M0DT0H0M0S** | BACK: 2010-03-28 00:00:00 EDT + P-0Y1M0DT0H0M0S = **2010-02-28 00:00:00 EST** | DAYS: **28**
+test_bug_49081_negative__30: FWD: 2010-02-28 00:00:00 EST - 2010-03-29 00:00:00 EDT = **P-0Y1M1DT0H0M0S** | BACK: 2010-03-29 00:00:00 EDT + P-0Y1M1DT0H0M0S = **2010-02-28 00:00:00 EST** | DAYS: **29**
+test_bug_49081_negative__31: FWD: 2010-02-27 00:00:00 EST - 2010-03-27 00:00:00 EDT = **P-0Y1M0DT0H0M0S** | BACK: 2010-03-27 00:00:00 EDT + P-0Y1M0DT0H0M0S = **2010-02-27 00:00:00 EST** | DAYS: **28**
+test_bug_49081_negative__32: FWD: 2010-02-26 00:00:00 EST - 2010-03-27 00:00:00 EDT = **P-0Y1M1DT0H0M0S** | BACK: 2010-03-27 00:00:00 EDT + P-0Y1M1DT0H0M0S = **2010-02-26 00:00:00 EST** | DAYS: **29**
diff --git a/ext/date/tests/DateTime_diff_add_sub-massive.phpt b/ext/date/tests/DateTime_diff_add_sub-massive.phpt
new file mode 100644
index 0000000..d9f48a0
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-massive.phpt
@@ -0,0 +1,45 @@
+--TEST--
+DateTime::diff() add() sub() -- massive
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Massive dates
+ */
+echo "test_massive_positive: ";
+$end = new DateTime;
+$end->setDate(333333, 1, 1);
+$end->setTime(16, 18, 02);
+
+$start = new DateTime;
+$start->setDate(-333333, 1, 1);
+$start->setTime(16, 18, 02);
+
+examine_diff($end, $start, 'P+666666Y0M0DT0H0M0S', 243494757);
+
+echo "test_massive_negative: ";
+$end = new DateTime;
+$end->setDate(-333333, 1, 1);
+$end->setTime(16, 18, 02);
+
+$start = new DateTime;
+$start->setDate(333333, 1, 1);
+$start->setTime(16, 18, 02);
+
+examine_diff($end, $start, 'P-666666Y0M0DT0H0M0S', 243494757);
+
+?>
+--EXPECT--
+test_massive_positive: FWD: 333333-01-01 16:18:02 EST - -333333-01-01 16:18:02 EST = **P+666666Y0M0DT0H0M0S** | BACK: -333333-01-01 16:18:02 EST + P+666666Y0M0DT0H0M0S = **333333-01-01 16:18:02 EST** | DAYS: **243494757**
+test_massive_negative: FWD: -333333-01-01 16:18:02 EST - 333333-01-01 16:18:02 EST = **P-666666Y0M0DT0H0M0S** | BACK: 333333-01-01 16:18:02 EST + P-666666Y0M0DT0H0M0S = **-333333-01-01 16:18:02 EST** | DAYS: **243494757**
diff --git a/ext/date/tests/DateTime_diff_add_sub-spring-type2-type2.phpt b/ext/date/tests/DateTime_diff_add_sub-spring-type2-type2.phpt
new file mode 100644
index 0000000..2ed280e
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-spring-type2-type2.phpt
@@ -0,0 +1,124 @@
+--TEST--
+DateTime::diff() add() sub() -- spring type2 type2
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--XFAIL--
+PHP < 5.4 has bugs
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Time, Spring, Zone Type 2 to Zone Type 2
+ *
+ * + prev: the day before the transition day  2010-03-13 18:38:28 EST
+ * + st: standard time on transition day      2010-03-14 00:10:20 EST
+ * + dt: daylight time on the transition day  2010-03-14 03:16:55 EDT
+ * + post: the day after the transition day   2010-03-15 19:59:59 EDT
+ */
+echo "test_time_spring_type2_prev_type2_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+$start = new DateTime('2010-02-11 02:18:48 EST');  // sp prev, zt2
+examine_diff($end, $start, 'P+0Y1M2DT16H19M40S', 30);
+
+echo "test_time_spring_type2_prev_type2_st: ";
+$end   = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+$start = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT5H31M52S', 0);
+
+echo "test_time_spring_type2_prev_type2_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+$start = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT7H38M27S', 0);
+
+echo "test_time_spring_type2_prev_type2_post: ";
+$end   = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+$start = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M2DT1H21M31S', 2);
+
+echo "test_time_spring_type2_st_type2_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+$start = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+examine_diff($end, $start, 'P-0Y0M0DT5H31M52S', 0);
+
+echo "test_time_spring_type2_st_type2_st: ";
+$end   = new DateTime('2010-03-14 00:15:35 EST');  // sp st, zt2
+$start = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+examine_diff($end, $start, 'P+0Y0M0DT0H5M15S', 0);
+
+echo "test_time_spring_type2_st_type2_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+$start = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+examine_diff($end, $start, 'P+0Y0M0DT2H6M35S', 0);
+
+echo "test_time_spring_type2_st_type2_post: ";
+$end   = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+$start = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+examine_diff($end, $start, 'P+0Y0M1DT18H49M39S', 1);
+
+echo "test_time_spring_type2_dt_type2_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+$start = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+examine_diff($end, $start, 'P-0Y0M0DT7H38M27S', 0);
+
+echo "test_time_spring_type2_dt_type2_st: ";
+$end   = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+$start = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+examine_diff($end, $start, 'P-0Y0M0DT2H6M35S', 0);
+
+echo "test_time_spring_type2_dt_type2_dt: ";
+$end   = new DateTime('2010-03-14 05:19:56 EDT');  // sp dt, zt2
+$start = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT2H3M1S', 0);
+
+echo "test_time_spring_type2_dt_type2_post: ";
+$end   = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+$start = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M1DT16H43M4S', 1);
+
+echo "test_time_spring_type2_post_type2_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+$start = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M2DT1H21M31S', 2);
+
+echo "test_time_spring_type2_post_type2_st: ";
+$end   = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+$start = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT18H49M39S', 1);
+
+echo "test_time_spring_type2_post_type2_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+$start = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT16H43M4S', 1);
+
+echo "test_time_spring_type2_post_type2_post: ";
+$end   = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+$start = new DateTime('2010-03-15 18:57:55 EDT');  // sp post, zt2
+examine_diff($end, $start, 'P+0Y0M0DT1H2M4S', 0);
+
+?>
+--EXPECT--
+test_time_spring_type2_prev_type2_prev: FWD: 2010-03-13 18:38:28 EST - 2010-02-11 02:18:48 EST = **P+0Y1M2DT16H19M40S** | BACK: 2010-02-11 02:18:48 EST + P+0Y1M2DT16H19M40S = **2010-03-13 18:38:28 EST** | DAYS: **30**
+test_time_spring_type2_prev_type2_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-13 18:38:28 EST = **P+0Y0M0DT5H31M52S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M0DT5H31M52S = **2010-03-14 00:10:20 EST** | DAYS: **0**
+test_time_spring_type2_prev_type2_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-13 18:38:28 EST = **P+0Y0M0DT7H38M27S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M0DT7H38M27S = **2010-03-14 03:16:55 EDT** | DAYS: **0**
+test_time_spring_type2_prev_type2_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-13 18:38:28 EST = **P+0Y0M2DT1H21M31S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M2DT1H21M31S = **2010-03-15 19:59:59 EDT** | DAYS: **2**
+test_time_spring_type2_st_type2_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-14 00:10:20 EST = **P-0Y0M0DT5H31M52S** | BACK: 2010-03-14 00:10:20 EST + P-0Y0M0DT5H31M52S = **2010-03-13 18:38:28 EST** | DAYS: **0**
+test_time_spring_type2_st_type2_st: FWD: 2010-03-14 00:15:35 EST - 2010-03-14 00:10:20 EST = **P+0Y0M0DT0H5M15S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M0DT0H5M15S = **2010-03-14 00:15:35 EST** | DAYS: **0**
+test_time_spring_type2_st_type2_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-14 00:10:20 EST = **P+0Y0M0DT2H6M35S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M0DT2H6M35S = **2010-03-14 03:16:55 EDT** | DAYS: **0**
+test_time_spring_type2_st_type2_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-14 00:10:20 EST = **P+0Y0M1DT18H49M39S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M1DT18H49M39S = **2010-03-15 19:59:59 EDT** | DAYS: **1**
+test_time_spring_type2_dt_type2_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-14 03:16:55 EDT = **P-0Y0M0DT7H38M27S** | BACK: 2010-03-14 03:16:55 EDT + P-0Y0M0DT7H38M27S = **2010-03-13 18:38:28 EST** | DAYS: **0**
+test_time_spring_type2_dt_type2_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-14 03:16:55 EDT = **P-0Y0M0DT2H6M35S** | BACK: 2010-03-14 03:16:55 EDT + P-0Y0M0DT2H6M35S = **2010-03-14 00:10:20 EST** | DAYS: **0**
+test_time_spring_type2_dt_type2_dt: FWD: 2010-03-14 05:19:56 EDT - 2010-03-14 03:16:55 EDT = **P+0Y0M0DT2H3M1S** | BACK: 2010-03-14 03:16:55 EDT + P+0Y0M0DT2H3M1S = **2010-03-14 05:19:56 EDT** | DAYS: **0**
+test_time_spring_type2_dt_type2_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-14 03:16:55 EDT = **P+0Y0M1DT16H43M4S** | BACK: 2010-03-14 03:16:55 EDT + P+0Y0M1DT16H43M4S = **2010-03-15 19:59:59 EDT** | DAYS: **1**
+test_time_spring_type2_post_type2_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-15 19:59:59 EDT = **P-0Y0M2DT1H21M31S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M2DT1H21M31S = **2010-03-13 18:38:28 EST** | DAYS: **2**
+test_time_spring_type2_post_type2_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-15 19:59:59 EDT = **P-0Y0M1DT18H49M39S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M1DT18H49M39S = **2010-03-14 00:10:20 EST** | DAYS: **1**
+test_time_spring_type2_post_type2_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-15 19:59:59 EDT = **P-0Y0M1DT16H43M4S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M1DT16H43M4S = **2010-03-14 03:16:55 EDT** | DAYS: **1**
+test_time_spring_type2_post_type2_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-15 18:57:55 EDT = **P+0Y0M0DT1H2M4S** | BACK: 2010-03-15 18:57:55 EDT + P+0Y0M0DT1H2M4S = **2010-03-15 19:59:59 EDT** | DAYS: **0**
diff --git a/ext/date/tests/DateTime_diff_add_sub-spring-type2-type3.phpt b/ext/date/tests/DateTime_diff_add_sub-spring-type2-type3.phpt
new file mode 100644
index 0000000..d36dcc9
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-spring-type2-type3.phpt
@@ -0,0 +1,124 @@
+--TEST--
+DateTime::diff() add() sub() -- spring type2 type3
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--XFAIL--
+PHP < 5.4 has bugs
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Time, Spring, Zone Type 2 to Zone Type 3
+ *
+ * + prev: the day before the transition day  2010-03-13 18:38:28 EST
+ * + st: standard time on transition day      2010-03-14 00:10:20 EST
+ * + dt: daylight time on the transition day  2010-03-14 03:16:55 EDT
+ * + post: the day after the transition day   2010-03-15 19:59:59 EDT
+ */
+echo "test_time_spring_type2_prev_type3_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+$start = new DateTime('2010-02-11 02:18:48 EST');  // sp prev, zt2
+examine_diff($end, $start, 'P+0Y1M2DT16H19M40S', 30);
+
+echo "test_time_spring_type2_prev_type3_st: ";
+$end   = new DateTime('2010-03-14 00:10:20');  // st, zt3
+$start = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT5H31M52S', 0);
+
+echo "test_time_spring_type2_prev_type3_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+$start = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M0DT7H38M27S', 0);
+
+echo "test_time_spring_type2_prev_type3_post: ";
+$end   = new DateTime('2010-03-15 19:59:59');  // post, zt3
+$start = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+examine_diff($end, $start, 'P+0Y0M2DT1H21M31S', 2);
+
+echo "test_time_spring_type2_st_type3_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+$start = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+examine_diff($end, $start, 'P-0Y0M0DT5H31M52S', 0);
+
+echo "test_time_spring_type2_st_type3_st: ";
+$end   = new DateTime('2010-03-14 00:15:35');  // sp st, zt3
+$start = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+examine_diff($end, $start, 'P+0Y0M0DT0H5M15S', 0);
+
+echo "test_time_spring_type2_st_type3_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+$start = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+examine_diff($end, $start, 'P+0Y0M0DT2H6M35S', 0);
+
+echo "test_time_spring_type2_st_type3_post: ";
+$end   = new DateTime('2010-03-15 19:59:59');  // post, zt3
+$start = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+examine_diff($end, $start, 'P+0Y0M1DT18H49M39S', 1);
+
+echo "test_time_spring_type2_dt_type3_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+$start = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+examine_diff($end, $start, 'P-0Y0M0DT7H38M27S', 0);
+
+echo "test_time_spring_type2_dt_type3_st: ";
+$end   = new DateTime('2010-03-14 00:10:20');  // st, zt3
+$start = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+examine_diff($end, $start, 'P-0Y0M0DT2H6M35S', 0);
+
+echo "test_time_spring_type2_dt_type3_dt: ";
+$end   = new DateTime('2010-03-14 05:19:56');  // sp dt, zt3
+$start = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M0DT2H3M1S', 0);
+
+echo "test_time_spring_type2_dt_type3_post: ";
+$end   = new DateTime('2010-03-15 19:59:59');  // post, zt3
+$start = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+examine_diff($end, $start, 'P+0Y0M1DT16H43M4S', 1);
+
+echo "test_time_spring_type2_post_type3_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+$start = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M2DT1H21M31S', 2);
+
+echo "test_time_spring_type2_post_type3_st: ";
+$end   = new DateTime('2010-03-14 00:10:20');  // st, zt3
+$start = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT18H49M39S', 1);
+
+echo "test_time_spring_type2_post_type3_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+$start = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+examine_diff($end, $start, 'P-0Y0M1DT16H43M4S', 1);
+
+echo "test_time_spring_type2_post_type3_post: ";
+$end   = new DateTime('2010-03-15 19:59:59');  // post, zt3
+$start = new DateTime('2010-03-15 18:57:55 EDT');  // sp post, zt2
+examine_diff($end, $start, 'P+0Y0M0DT1H2M4S', 0);
+
+?>
+--EXPECT--
+test_time_spring_type2_prev_type3_prev: FWD: 2010-03-13 18:38:28 EST - 2010-02-11 02:18:48 EST = **P+0Y1M2DT16H19M40S** | BACK: 2010-02-11 02:18:48 EST + P+0Y1M2DT16H19M40S = **2010-03-13 18:38:28 EST** | DAYS: **30**
+test_time_spring_type2_prev_type3_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-13 18:38:28 EST = **P+0Y0M0DT5H31M52S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M0DT5H31M52S = **2010-03-14 00:10:20 EST** | DAYS: **0**
+test_time_spring_type2_prev_type3_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-13 18:38:28 EST = **P+0Y0M0DT7H38M27S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M0DT7H38M27S = **2010-03-14 03:16:55 EDT** | DAYS: **0**
+test_time_spring_type2_prev_type3_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-13 18:38:28 EST = **P+0Y0M2DT1H21M31S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M2DT1H21M31S = **2010-03-15 19:59:59 EDT** | DAYS: **2**
+test_time_spring_type2_st_type3_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-14 00:10:20 EST = **P-0Y0M0DT5H31M52S** | BACK: 2010-03-14 00:10:20 EST + P-0Y0M0DT5H31M52S = **2010-03-13 18:38:28 EST** | DAYS: **0**
+test_time_spring_type2_st_type3_st: FWD: 2010-03-14 00:15:35 EST - 2010-03-14 00:10:20 EST = **P+0Y0M0DT0H5M15S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M0DT0H5M15S = **2010-03-14 00:15:35 EST** | DAYS: **0**
+test_time_spring_type2_st_type3_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-14 00:10:20 EST = **P+0Y0M0DT2H6M35S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M0DT2H6M35S = **2010-03-14 03:16:55 EDT** | DAYS: **0**
+test_time_spring_type2_st_type3_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-14 00:10:20 EST = **P+0Y0M1DT18H49M39S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M1DT18H49M39S = **2010-03-15 19:59:59 EDT** | DAYS: **1**
+test_time_spring_type2_dt_type3_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-14 03:16:55 EDT = **P-0Y0M0DT7H38M27S** | BACK: 2010-03-14 03:16:55 EDT + P-0Y0M0DT7H38M27S = **2010-03-13 18:38:28 EST** | DAYS: **0**
+test_time_spring_type2_dt_type3_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-14 03:16:55 EDT = **P-0Y0M0DT2H6M35S** | BACK: 2010-03-14 03:16:55 EDT + P-0Y0M0DT2H6M35S = **2010-03-14 00:10:20 EST** | DAYS: **0**
+test_time_spring_type2_dt_type3_dt: FWD: 2010-03-14 05:19:56 EDT - 2010-03-14 03:16:55 EDT = **P+0Y0M0DT2H3M1S** | BACK: 2010-03-14 03:16:55 EDT + P+0Y0M0DT2H3M1S = **2010-03-14 05:19:56 EDT** | DAYS: **0**
+test_time_spring_type2_dt_type3_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-14 03:16:55 EDT = **P+0Y0M1DT16H43M4S** | BACK: 2010-03-14 03:16:55 EDT + P+0Y0M1DT16H43M4S = **2010-03-15 19:59:59 EDT** | DAYS: **1**
+test_time_spring_type2_post_type3_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-15 19:59:59 EDT = **P-0Y0M2DT1H21M31S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M2DT1H21M31S = **2010-03-13 18:38:28 EST** | DAYS: **2**
+test_time_spring_type2_post_type3_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-15 19:59:59 EDT = **P-0Y0M1DT18H49M39S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M1DT18H49M39S = **2010-03-14 00:10:20 EST** | DAYS: **1**
+test_time_spring_type2_post_type3_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-15 19:59:59 EDT = **P-0Y0M1DT16H43M4S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M1DT16H43M4S = **2010-03-14 03:16:55 EDT** | DAYS: **1**
+test_time_spring_type2_post_type3_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-15 18:57:55 EDT = **P+0Y0M0DT1H2M4S** | BACK: 2010-03-15 18:57:55 EDT + P+0Y0M0DT1H2M4S = **2010-03-15 19:59:59 EDT** | DAYS: **0**
diff --git a/ext/date/tests/DateTime_diff_add_sub-spring-type3-type2.phpt b/ext/date/tests/DateTime_diff_add_sub-spring-type3-type2.phpt
new file mode 100644
index 0000000..cf0e6a5
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-spring-type3-type2.phpt
@@ -0,0 +1,124 @@
+--TEST--
+DateTime::diff() add() sub() -- spring type3 type2
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--XFAIL--
+PHP < 5.4 has bugs
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Time, Spring, Zone Type 3 to Zone Type 2
+ *
+ * + prev: the day before the transition day  2010-03-13 18:38:28 EST
+ * + st: standard time on transition day      2010-03-14 00:10:20 EST
+ * + dt: daylight time on the transition day  2010-03-14 03:16:55 EDT
+ * + post: the day after the transition day   2010-03-15 19:59:59 EDT
+ */
+echo "test_time_spring_type3_prev_type2_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+$start = new DateTime('2010-02-11 02:18:48');  // sp prev, zt3
+examine_diff($end, $start, 'P+0Y1M2DT16H19M40S', 30);
+
+echo "test_time_spring_type3_prev_type2_st: ";
+$end   = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+$start = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT5H31M52S', 0);
+
+echo "test_time_spring_type3_prev_type2_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+$start = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT7H38M27S', 0);
+
+echo "test_time_spring_type3_prev_type2_post: ";
+$end   = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+$start = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M2DT1H21M31S', 2);
+
+echo "test_time_spring_type3_st_type2_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+$start = new DateTime('2010-03-14 00:10:20');  // st, zt3
+examine_diff($end, $start, 'P-0Y0M0DT5H31M52S', 0);
+
+echo "test_time_spring_type3_st_type2_st: ";
+$end   = new DateTime('2010-03-14 00:15:35 EST');  // sp st, zt2
+$start = new DateTime('2010-03-14 00:10:20');  // st, zt3
+examine_diff($end, $start, 'P+0Y0M0DT0H5M15S', 0);
+
+echo "test_time_spring_type3_st_type2_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+$start = new DateTime('2010-03-14 00:10:20');  // st, zt3
+examine_diff($end, $start, 'P+0Y0M0DT2H6M35S', 0);
+
+echo "test_time_spring_type3_st_type2_post: ";
+$end   = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+$start = new DateTime('2010-03-14 00:10:20');  // st, zt3
+examine_diff($end, $start, 'P+0Y0M1DT18H49M39S', 1);
+
+echo "test_time_spring_type3_dt_type2_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+$start = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+examine_diff($end, $start, 'P-0Y0M0DT7H38M27S', 0);
+
+echo "test_time_spring_type3_dt_type2_st: ";
+$end   = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+$start = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+examine_diff($end, $start, 'P-0Y0M0DT2H6M35S', 0);
+
+echo "test_time_spring_type3_dt_type2_dt: ";
+$end   = new DateTime('2010-03-14 05:19:56 EDT');  // sp dt, zt2
+$start = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M0DT2H3M1S', 0);
+
+echo "test_time_spring_type3_dt_type2_post: ";
+$end   = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+$start = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M1DT16H43M4S', 1);
+
+echo "test_time_spring_type3_post_type2_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28 EST');  // prev, zt2
+$start = new DateTime('2010-03-15 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M2DT1H21M31S', 2);
+
+echo "test_time_spring_type3_post_type2_st: ";
+$end   = new DateTime('2010-03-14 00:10:20 EST');  // st, zt2
+$start = new DateTime('2010-03-15 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT18H49M39S', 1);
+
+echo "test_time_spring_type3_post_type2_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55 EDT');  // dt, zt2
+$start = new DateTime('2010-03-15 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT16H43M4S', 1);
+
+echo "test_time_spring_type3_post_type2_post: ";
+$end   = new DateTime('2010-03-15 19:59:59 EDT');  // post, zt2
+$start = new DateTime('2010-03-15 18:57:55');  // sp post, zt3
+examine_diff($end, $start, 'P+0Y0M0DT1H2M4S', 0);
+
+?>
+--EXPECT--
+test_time_spring_type3_prev_type2_prev: FWD: 2010-03-13 18:38:28 EST - 2010-02-11 02:18:48 EST = **P+0Y1M2DT16H19M40S** | BACK: 2010-02-11 02:18:48 EST + P+0Y1M2DT16H19M40S = **2010-03-13 18:38:28 EST** | DAYS: **30**
+test_time_spring_type3_prev_type2_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-13 18:38:28 EST = **P+0Y0M0DT5H31M52S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M0DT5H31M52S = **2010-03-14 00:10:20 EST** | DAYS: **0**
+test_time_spring_type3_prev_type2_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-13 18:38:28 EST = **P+0Y0M0DT7H38M27S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M0DT7H38M27S = **2010-03-14 03:16:55 EDT** | DAYS: **0**
+test_time_spring_type3_prev_type2_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-13 18:38:28 EST = **P+0Y0M2DT1H21M31S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M2DT1H21M31S = **2010-03-15 19:59:59 EDT** | DAYS: **2**
+test_time_spring_type3_st_type2_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-14 00:10:20 EST = **P-0Y0M0DT5H31M52S** | BACK: 2010-03-14 00:10:20 EST + P-0Y0M0DT5H31M52S = **2010-03-13 18:38:28 EST** | DAYS: **0**
+test_time_spring_type3_st_type2_st: FWD: 2010-03-14 00:15:35 EST - 2010-03-14 00:10:20 EST = **P+0Y0M0DT0H5M15S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M0DT0H5M15S = **2010-03-14 00:15:35 EST** | DAYS: **0**
+test_time_spring_type3_st_type2_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-14 00:10:20 EST = **P+0Y0M0DT2H6M35S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M0DT2H6M35S = **2010-03-14 03:16:55 EDT** | DAYS: **0**
+test_time_spring_type3_st_type2_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-14 00:10:20 EST = **P+0Y0M1DT18H49M39S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M1DT18H49M39S = **2010-03-15 19:59:59 EDT** | DAYS: **1**
+test_time_spring_type3_dt_type2_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-14 03:16:55 EDT = **P-0Y0M0DT7H38M27S** | BACK: 2010-03-14 03:16:55 EDT + P-0Y0M0DT7H38M27S = **2010-03-13 18:38:28 EST** | DAYS: **0**
+test_time_spring_type3_dt_type2_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-14 03:16:55 EDT = **P-0Y0M0DT2H6M35S** | BACK: 2010-03-14 03:16:55 EDT + P-0Y0M0DT2H6M35S = **2010-03-14 00:10:20 EST** | DAYS: **0**
+test_time_spring_type3_dt_type2_dt: FWD: 2010-03-14 05:19:56 EDT - 2010-03-14 03:16:55 EDT = **P+0Y0M0DT2H3M1S** | BACK: 2010-03-14 03:16:55 EDT + P+0Y0M0DT2H3M1S = **2010-03-14 05:19:56 EDT** | DAYS: **0**
+test_time_spring_type3_dt_type2_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-14 03:16:55 EDT = **P+0Y0M1DT16H43M4S** | BACK: 2010-03-14 03:16:55 EDT + P+0Y0M1DT16H43M4S = **2010-03-15 19:59:59 EDT** | DAYS: **1**
+test_time_spring_type3_post_type2_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-15 19:59:59 EDT = **P-0Y0M2DT1H21M31S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M2DT1H21M31S = **2010-03-13 18:38:28 EST** | DAYS: **2**
+test_time_spring_type3_post_type2_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-15 19:59:59 EDT = **P-0Y0M1DT18H49M39S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M1DT18H49M39S = **2010-03-14 00:10:20 EST** | DAYS: **1**
+test_time_spring_type3_post_type2_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-15 19:59:59 EDT = **P-0Y0M1DT16H43M4S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M1DT16H43M4S = **2010-03-14 03:16:55 EDT** | DAYS: **1**
+test_time_spring_type3_post_type2_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-15 18:57:55 EDT = **P+0Y0M0DT1H2M4S** | BACK: 2010-03-15 18:57:55 EDT + P+0Y0M0DT1H2M4S = **2010-03-15 19:59:59 EDT** | DAYS: **0**
diff --git a/ext/date/tests/DateTime_diff_add_sub-spring-type3-type3.phpt b/ext/date/tests/DateTime_diff_add_sub-spring-type3-type3.phpt
new file mode 100644
index 0000000..afb8cda
--- /dev/null
+++ b/ext/date/tests/DateTime_diff_add_sub-spring-type3-type3.phpt
@@ -0,0 +1,124 @@
+--TEST--
+DateTime::diff() add() sub() -- spring type3 type3
+--CREDITS--
+Daniel Convissor <danielc at php.net>
+--XFAIL--
+PHP < 5.4 has bugs
+--FILE--
+<?php
+
+/*
+ * Note: test names match method names in a set of PHPUnit tests
+ * in a userland package.  Please be so kind as to leave them.
+ */
+
+require './examine_diff.inc';
+date_default_timezone_set('America/New_York');
+
+
+/*
+ * Time, Spring, Zone Type 3 to Zone Type 3
+ *
+ * + prev: the day before the transition day  2010-03-13 18:38:28
+ * + st: standard time on transition day      2010-03-14 00:10:20
+ * + dt: daylight time on the transition day  2010-03-14 03:16:55
+ * + post: the day after the transition day   2010-03-15 19:59:59
+ */
+echo "test_time_spring_type3_prev_type3_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+$start = new DateTime('2010-02-11 02:18:48');  // sp prev, zt3
+examine_diff($end, $start, 'P+0Y1M2DT16H19M40S', 30);
+
+echo "test_time_spring_type3_prev_type3_st: ";
+$end   = new DateTime('2010-03-14 00:10:20');  // st, zt3
+$start = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT5H31M52S', 0);
+
+echo "test_time_spring_type3_prev_type3_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+$start = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M0DT7H38M27S', 0);
+
+echo "test_time_spring_type3_prev_type3_post: ";
+$end   = new DateTime('2010-03-15 19:59:59');  // post, zt3
+$start = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+examine_diff($end, $start, 'P+0Y0M2DT1H21M31S', 2);
+
+echo "test_time_spring_type3_st_type3_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+$start = new DateTime('2010-03-14 00:10:20');  // st, zt3
+examine_diff($end, $start, 'P-0Y0M0DT5H31M52S', 0);
+
+echo "test_time_spring_type3_st_type3_st: ";
+$end   = new DateTime('2010-03-14 00:15:35');  // sp st, zt3
+$start = new DateTime('2010-03-14 00:10:20');  // st, zt3
+examine_diff($end, $start, 'P+0Y0M0DT0H5M15S', 0);
+
+echo "test_time_spring_type3_st_type3_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+$start = new DateTime('2010-03-14 00:10:20');  // st, zt3
+examine_diff($end, $start, 'P+0Y0M0DT2H6M35S', 0);
+
+echo "test_time_spring_type3_st_type3_post: ";
+$end   = new DateTime('2010-03-15 19:59:59');  // post, zt3
+$start = new DateTime('2010-03-14 00:10:20');  // st, zt3
+examine_diff($end, $start, 'P+0Y0M1DT18H49M39S', 1);
+
+echo "test_time_spring_type3_dt_type3_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+$start = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+examine_diff($end, $start, 'P-0Y0M0DT7H38M27S', 0);
+
+echo "test_time_spring_type3_dt_type3_st: ";
+$end   = new DateTime('2010-03-14 00:10:20');  // st, zt3
+$start = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+examine_diff($end, $start, 'P-0Y0M0DT2H6M35S', 0);
+
+echo "test_time_spring_type3_dt_type3_dt: ";
+$end   = new DateTime('2010-03-14 05:19:56');  // sp dt, zt3
+$start = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M0DT2H3M1S', 0);
+
+echo "test_time_spring_type3_dt_type3_post: ";
+$end   = new DateTime('2010-03-15 19:59:59');  // post, zt3
+$start = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+examine_diff($end, $start, 'P+0Y0M1DT16H43M4S', 1);
+
+echo "test_time_spring_type3_post_type3_prev: ";
+$end   = new DateTime('2010-03-13 18:38:28');  // prev, zt3
+$start = new DateTime('2010-03-15 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M2DT1H21M31S', 2);
+
+echo "test_time_spring_type3_post_type3_st: ";
+$end   = new DateTime('2010-03-14 00:10:20');  // st, zt3
+$start = new DateTime('2010-03-15 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT18H49M39S', 1);
+
+echo "test_time_spring_type3_post_type3_dt: ";
+$end   = new DateTime('2010-03-14 03:16:55');  // dt, zt3
+$start = new DateTime('2010-03-15 19:59:59');  // post, zt3
+examine_diff($end, $start, 'P-0Y0M1DT16H43M4S', 1);
+
+echo "test_time_spring_type3_post_type3_post: ";
+$end   = new DateTime('2010-03-15 19:59:59');  // post, zt3
+$start = new DateTime('2010-03-15 18:57:55');  // sp post, zt3
+examine_diff($end, $start, 'P+0Y0M0DT1H2M4S', 0);
+
+?>
+--EXPECT--
+test_time_spring_type3_prev_type3_prev: FWD: 2010-03-13 18:38:28 EST - 2010-02-11 02:18:48 EST = **P+0Y1M2DT16H19M40S** | BACK: 2010-02-11 02:18:48 EST + P+0Y1M2DT16H19M40S = **2010-03-13 18:38:28 EST** | DAYS: **30**
+test_time_spring_type3_prev_type3_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-13 18:38:28 EST = **P+0Y0M0DT5H31M52S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M0DT5H31M52S = **2010-03-14 00:10:20 EST** | DAYS: **0**
+test_time_spring_type3_prev_type3_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-13 18:38:28 EST = **P+0Y0M0DT7H38M27S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M0DT7H38M27S = **2010-03-14 03:16:55 EDT** | DAYS: **0**
+test_time_spring_type3_prev_type3_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-13 18:38:28 EST = **P+0Y0M2DT1H21M31S** | BACK: 2010-03-13 18:38:28 EST + P+0Y0M2DT1H21M31S = **2010-03-15 19:59:59 EDT** | DAYS: **2**
+test_time_spring_type3_st_type3_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-14 00:10:20 EST = **P-0Y0M0DT5H31M52S** | BACK: 2010-03-14 00:10:20 EST + P-0Y0M0DT5H31M52S = **2010-03-13 18:38:28 EST** | DAYS: **0**
+test_time_spring_type3_st_type3_st: FWD: 2010-03-14 00:15:35 EST - 2010-03-14 00:10:20 EST = **P+0Y0M0DT0H5M15S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M0DT0H5M15S = **2010-03-14 00:15:35 EST** | DAYS: **0**
+test_time_spring_type3_st_type3_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-14 00:10:20 EST = **P+0Y0M0DT2H6M35S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M0DT2H6M35S = **2010-03-14 03:16:55 EDT** | DAYS: **0**
+test_time_spring_type3_st_type3_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-14 00:10:20 EST = **P+0Y0M1DT18H49M39S** | BACK: 2010-03-14 00:10:20 EST + P+0Y0M1DT18H49M39S = **2010-03-15 19:59:59 EDT** | DAYS: **1**
+test_time_spring_type3_dt_type3_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-14 03:16:55 EDT = **P-0Y0M0DT7H38M27S** | BACK: 2010-03-14 03:16:55 EDT + P-0Y0M0DT7H38M27S = **2010-03-13 18:38:28 EST** | DAYS: **0**
+test_time_spring_type3_dt_type3_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-14 03:16:55 EDT = **P-0Y0M0DT2H6M35S** | BACK: 2010-03-14 03:16:55 EDT + P-0Y0M0DT2H6M35S = **2010-03-14 00:10:20 EST** | DAYS: **0**
+test_time_spring_type3_dt_type3_dt: FWD: 2010-03-14 05:19:56 EDT - 2010-03-14 03:16:55 EDT = **P+0Y0M0DT2H3M1S** | BACK: 2010-03-14 03:16:55 EDT + P+0Y0M0DT2H3M1S = **2010-03-14 05:19:56 EDT** | DAYS: **0**
+test_time_spring_type3_dt_type3_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-14 03:16:55 EDT = **P+0Y0M1DT16H43M4S** | BACK: 2010-03-14 03:16:55 EDT + P+0Y0M1DT16H43M4S = **2010-03-15 19:59:59 EDT** | DAYS: **1**
+test_time_spring_type3_post_type3_prev: FWD: 2010-03-13 18:38:28 EST - 2010-03-15 19:59:59 EDT = **P-0Y0M2DT1H21M31S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M2DT1H21M31S = **2010-03-13 18:38:28 EST** | DAYS: **2**
+test_time_spring_type3_post_type3_st: FWD: 2010-03-14 00:10:20 EST - 2010-03-15 19:59:59 EDT = **P-0Y0M1DT18H49M39S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M1DT18H49M39S = **2010-03-14 00:10:20 EST** | DAYS: **1**
+test_time_spring_type3_post_type3_dt: FWD: 2010-03-14 03:16:55 EDT - 2010-03-15 19:59:59 EDT = **P-0Y0M1DT16H43M4S** | BACK: 2010-03-15 19:59:59 EDT + P-0Y0M1DT16H43M4S = **2010-03-14 03:16:55 EDT** | DAYS: **1**
+test_time_spring_type3_post_type3_post: FWD: 2010-03-15 19:59:59 EDT - 2010-03-15 18:57:55 EDT = **P+0Y0M0DT1H2M4S** | BACK: 2010-03-15 18:57:55 EDT + P+0Y0M0DT1H2M4S = **2010-03-15 19:59:59 EDT** | DAYS: **0**
diff --git a/ext/date/tests/DateTime_modify_variation1.phpt b/ext/date/tests/DateTime_modify_variation1.phpt
index e4d9067..faeb70c 100644
--- a/ext/date/tests/DateTime_modify_variation1.phpt
+++ b/ext/date/tests/DateTime_modify_variation1.phpt
@@ -112,28 +112,28 @@ fclose( $file_handle );
 
 -- int 0 --
 
-Warning: DateTime::modify(): Failed to parse time string (0) at position 0 (0): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (0) at position 0 (0): Unexpected character in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- int 1 --
 
-Warning: DateTime::modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- int 12345 --
 
-Warning: DateTime::modify(): Failed to parse time string (12345) at position 4 (5): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (12345) at position 4 (5): Unexpected character in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- int -12345 --
 
-Warning: DateTime::modify(): Failed to parse time string (-12345) at position 5 (5): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (-12345) at position 5 (5): Unexpected character in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- float 10.5 --
 object(DateTime)#3 (3) {
   ["date"]=>
-  string(19) "2009-01-31 14:28:41"
+  string(19) "2009-01-31 10:05:00"
   ["timezone_type"]=>
   int(3)
   ["timezone"]=>
@@ -142,13 +142,13 @@ object(DateTime)#3 (3) {
 
 -- float -10.5 --
 
-Warning: DateTime::modify(): Failed to parse time string (-10.5) at position 4 (5): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (-10.5) at position 4 (5): Unexpected character in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- float .5 --
 object(DateTime)#3 (3) {
   ["date"]=>
-  string(19) "2009-01-31 14:28:41"
+  string(19) "2009-01-31 00:05:00"
   ["timezone_type"]=>
   int(3)
   ["timezone"]=>
@@ -157,106 +157,106 @@ object(DateTime)#3 (3) {
 
 -- empty array --
 
-Warning: DateTime::modify() expects parameter 1 to be string, array given in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify() expects parameter 1 to be string, array given in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- int indexed array --
 
-Warning: DateTime::modify() expects parameter 1 to be string, array given in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify() expects parameter 1 to be string, array given in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- associative array --
 
-Warning: DateTime::modify() expects parameter 1 to be string, array given in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify() expects parameter 1 to be string, array given in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- nested arrays --
 
-Warning: DateTime::modify() expects parameter 1 to be string, array given in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify() expects parameter 1 to be string, array given in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- uppercase NULL --
 
-Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- lowercase null --
 
-Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- lowercase true --
 
-Warning: DateTime::modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- lowercase false --
 
-Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- uppercase TRUE --
 
-Warning: DateTime::modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- uppercase FALSE --
 
-Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- empty string DQ --
 
-Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- empty string SQ --
 
-Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- string DQ --
 
-Warning: DateTime::modify(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- string SQ --
 
-Warning: DateTime::modify(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- mixed case string --
 
-Warning: DateTime::modify(): Failed to parse time string (sTrInG) at position 0 (s): The timezone could not be found in the database in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (sTrInG) at position 0 (s): The timezone could not be found in the database in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- heredoc --
 
-Warning: DateTime::modify(): Failed to parse time string (hello world) at position 0 (h): The timezone could not be found in the database in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (hello world) at position 0 (h): The timezone could not be found in the database in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- instance of classWithToString --
 
-Warning: DateTime::modify(): Failed to parse time string (Class A object) at position 0 (C): The timezone could not be found in the database in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string (Class A object) at position 0 (C): The timezone could not be found in the database in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- instance of classWithoutToString --
 
-Warning: DateTime::modify() expects parameter 1 to be string, object given in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify() expects parameter 1 to be string, object given in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- undefined var --
 
-Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- unset var --
 
-Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify(): Failed to parse time string () at position 0 ( in %sDateTime_modify_variation1.php on line 99
 bool(false)
 
 -- resource --
 
-Warning: DateTime::modify() expects parameter 1 to be string, resource given in /home/derick/dev/php/php-src/trunk/ext/date/tests/DateTime_modify_variation1.php on line 99
+Warning: DateTime::modify() expects parameter 1 to be string, resource given in %sDateTime_modify_variation1.php on line 99
 bool(false)
 ===DONE===
diff --git a/ext/date/tests/bug52063.phpt b/ext/date/tests/bug52063.phpt
new file mode 100644
index 0000000..af9da9e
--- /dev/null
+++ b/ext/date/tests/bug52063.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #52063 (DateTime constructor's second argument doesn't have a null default value)
+--FILE--
+<?php
+date_default_timezone_set("Europe/Lisbon");
+$a = new DateTime("2009-01-01", null);
+echo $a->format(DateTime::COOKIE);
+echo "\n";
+$a = date_create("2009-01-01", null);
+echo $a->format(DateTime::COOKIE);
+echo "\n";
+?>
+--EXPECTF--
+Thursday, 01-Jan-09 00:00:00 WET
+Thursday, 01-Jan-09 00:00:00 WET
diff --git a/ext/date/tests/bug52290.phpt b/ext/date/tests/bug52290.phpt
index c1ee9d4..78ede13 100644
--- a/ext/date/tests/bug52290.phpt
+++ b/ext/date/tests/bug52290.phpt
@@ -23,5 +23,5 @@ var_dump($dt->format('o-\WW-N | Y-m-d | H:i:s | U'));
 --EXPECTF--
 string(47) "2005-W52-7 | 2006-01-01 | 00:00:00 | 1136073600"
 string(47) "2005-W52-1 | 2005-12-26 | 00:00:00 | 1135555200"
-string(47) "2007-W40-5 | 2007-10-10 | 00:00:00 | 1191974400"
-string(47) "2007-W40-5 | 2007-10-10 | 20:30:40 | 1192048240"
\ No newline at end of file
+string(47) "2007-W41-3 | 2007-10-10 | 00:00:00 | 1191974400"
+string(47) "2007-W41-3 | 2007-10-10 | 20:30:40 | 1192048240"
\ No newline at end of file
diff --git a/ext/date/tests/bug52738.phpt b/ext/date/tests/bug52738.phpt
new file mode 100644
index 0000000..fc1b602
--- /dev/null
+++ b/ext/date/tests/bug52738.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Bug #52738 (Can't use new properties in class extended from DateInterval)
+--FILE--
+<?php
+class di extends DateInterval {
+    public $unit = 1;
+}
+
+$I = new di('P10D');
+echo $I->unit."\n";
+$I->unit++;
+echo $I->unit."\n";
+$I->unit = 42;
+echo $I->unit."\n";
+$I->d++;
+print_r($I);
+--EXPECT--
+1
+2
+42
+di Object
+(
+    [unit] => 42
+    [y] => 0
+    [m] => 0
+    [d] => 11
+    [h] => 0
+    [i] => 0
+    [s] => 0
+    [invert] => 0
+    [days] => 
+)
diff --git a/ext/date/tests/bug52808.phpt b/ext/date/tests/bug52808.phpt
new file mode 100644
index 0000000..e031ac6
--- /dev/null
+++ b/ext/date/tests/bug52808.phpt
@@ -0,0 +1,85 @@
+--TEST--
+Bug #52808 (Segfault when specifying interval as two dates)
+--FILE--
+<?php
+date_default_timezone_set('Europe/Oslo');
+$intervals = array(
+	"2008-05-11T15:30:00Z/2007-03-01T13:00:00Z",
+	"2007-05-11T15:30:00Z/2008-03-01T13:00:00Z",
+	"2007-05-11T15:30:00Z 2008-03-01T13:00:00Z",
+	"2007-05-11T15:30:00Z/",
+	"2007-05-11T15:30:00Z",
+	"2007-05-11T15:30:00Z/:00Z",
+);
+foreach($intervals as $iv) {
+    try
+    {
+    	$di = new DateInterval($iv);
+    	var_dump($di);
+    }
+    catch ( Exception $e )
+    {
+    	echo $e->getMessage(), "\n";
+    }
+}
+echo "==DONE==\n";
+?>
+--EXPECTF--
+object(DateInterval)#%d (8) {
+  ["y"]=>
+  int(1)
+  ["m"]=>
+  int(2)
+  ["d"]=>
+  int(10)
+  ["h"]=>
+  int(2)
+  ["i"]=>
+  int(30)
+  ["s"]=>
+  int(0)
+  ["invert"]=>
+  int(1)
+  ["days"]=>
+  int(437)
+}
+object(DateInterval)#%d (8) {
+  ["y"]=>
+  int(0)
+  ["m"]=>
+  int(9)
+  ["d"]=>
+  int(18)
+  ["h"]=>
+  int(21)
+  ["i"]=>
+  int(30)
+  ["s"]=>
+  int(0)
+  ["invert"]=>
+  int(0)
+  ["days"]=>
+  int(294)
+}
+object(DateInterval)#%d (8) {
+  ["y"]=>
+  int(0)
+  ["m"]=>
+  int(9)
+  ["d"]=>
+  int(18)
+  ["h"]=>
+  int(21)
+  ["i"]=>
+  int(30)
+  ["s"]=>
+  int(0)
+  ["invert"]=>
+  int(0)
+  ["days"]=>
+  int(294)
+}
+DateInterval::__construct(): Failed to parse interval (2007-05-11T15:30:00Z/)
+DateInterval::__construct(): Failed to parse interval (2007-05-11T15:30:00Z)
+DateInterval::__construct(): Unknown or bad format (2007-05-11T15:30:00Z/:00Z)
+==DONE==
diff --git a/ext/date/tests/date-time-modify-times.phpt b/ext/date/tests/date-time-modify-times.phpt
new file mode 100644
index 0000000..258ddbd
--- /dev/null
+++ b/ext/date/tests/date-time-modify-times.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test for DateTime::modify() with absolute time statements
+--INI--
+date.timezone=Europe/London
+--FILE--
+<?php
+$tests = array(
+	'2010-12-15 19:42:45 UTC' => array(
+		'october 23:00', // October 23rd, with a broken time
+		'back of 4pm',
+		'next week monday',
+		'next week monday 10am',
+		'tuesday noon',
+		'first monday of January 2011',
+		'first monday of January 2011 09:00',
+	),
+	'2010-12-15 19:42:45' => array(
+		'october 23:00', // October 23rd, with a broken time
+		'march 28, 00:15',
+		'march 28, 01:15', // doesn't exist bcause of DST
+		'march 28, 02:15',
+	),
+);
+
+foreach ( $tests as $start => $data )
+{
+	foreach ( $data as $test )
+	{
+		echo date_create( $start )
+			->modify( $test )
+			->format( DateTime::RFC2822 ), "\n";
+	}
+}
+echo "\n";
+?>
+--EXPECT--
+Sat, 23 Oct 2010 00:00:00 +0000
+Wed, 15 Dec 2010 16:15:00 +0000
+Mon, 20 Dec 2010 00:00:00 +0000
+Mon, 20 Dec 2010 10:00:00 +0000
+Tue, 21 Dec 2010 12:00:00 +0000
+Mon, 03 Jan 2011 00:00:00 +0000
+Mon, 03 Jan 2011 09:00:00 +0000
+Sat, 23 Oct 2010 00:00:00 +0100
+Sun, 28 Mar 2010 00:15:00 +0000
+Sun, 28 Mar 2010 02:15:00 +0100
+Sun, 28 Mar 2010 02:15:00 +0100
diff --git a/ext/date/tests/date_create_variation2.phpt b/ext/date/tests/date_create_variation2.phpt
index 25e5a2a..c43ccb0 100644
--- a/ext/date/tests/date_create_variation2.phpt
+++ b/ext/date/tests/date_create_variation2.phpt
@@ -166,14 +166,24 @@ Warning: date_create() expects parameter 2 to be DateTimeZone, array given in %s
 bool(false)
 
 -- uppercase NULL --
-
-Warning: date_create() expects parameter 2 to be DateTimeZone, null given in %s on line %d
-bool(false)
+object(DateTime)#%d (3) {
+  ["date"]=>
+  string(19) "2005-07-14 22:30:41"
+  ["timezone_type"]=>
+  int(3)
+  ["timezone"]=>
+  string(13) "Europe/London"
+}
 
 -- lowercase null --
-
-Warning: date_create() expects parameter 2 to be DateTimeZone, null given in %s on line %d
-bool(false)
+object(DateTime)#%d (3) {
+  ["date"]=>
+  string(19) "2005-07-14 22:30:41"
+  ["timezone_type"]=>
+  int(3)
+  ["timezone"]=>
+  string(13) "Europe/London"
+}
 
 -- lowercase true --
 
@@ -236,14 +246,24 @@ Warning: date_create() expects parameter 2 to be DateTimeZone, object given in %
 bool(false)
 
 -- undefined var --
-
-Warning: date_create() expects parameter 2 to be DateTimeZone, null given in %s on line %d
-bool(false)
+object(DateTime)#%d (3) {
+  ["date"]=>
+  string(19) "2005-07-14 22:30:41"
+  ["timezone_type"]=>
+  int(3)
+  ["timezone"]=>
+  string(13) "Europe/London"
+}
 
 -- unset var --
-
-Warning: date_create() expects parameter 2 to be DateTimeZone, null given in %s on line %d
-bool(false)
+object(DateTime)#%d (3) {
+  ["date"]=>
+  string(19) "2005-07-14 22:30:41"
+  ["timezone_type"]=>
+  int(3)
+  ["timezone"]=>
+  string(13) "Europe/London"
+}
 
 -- resource --
 
diff --git a/ext/date/tests/date_modify_variation2.phpt b/ext/date/tests/date_modify_variation2.phpt
index 8dc563e..fe6afb1 100644
--- a/ext/date/tests/date_modify_variation2.phpt
+++ b/ext/date/tests/date_modify_variation2.phpt
@@ -112,28 +112,28 @@ fclose( $file_handle );
 
 -- int 0 --
 
-Warning: date_modify(): Failed to parse time string (0) at position 0 (0): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (0) at position 0 (0): Unexpected character in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- int 1 --
 
-Warning: date_modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- int 12345 --
 
-Warning: date_modify(): Failed to parse time string (12345) at position 4 (5): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (12345) at position 4 (5): Unexpected character in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- int -12345 --
 
-Warning: date_modify(): Failed to parse time string (-12345) at position 5 (5): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (-12345) at position 5 (5): Unexpected character in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- float 10.5 --
 object(DateTime)#%d (3) {
   ["date"]=>
-  string(19) "2009-01-31 14:28:41"
+  string(19) "2009-01-31 10:05:00"
   ["timezone_type"]=>
   int(3)
   ["timezone"]=>
@@ -142,13 +142,13 @@ object(DateTime)#%d (3) {
 
 -- float -10.5 --
 
-Warning: date_modify(): Failed to parse time string (-10.5) at position 4 (5): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (-10.5) at position 4 (5): Unexpected character in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- float .5 --
 object(DateTime)#%d (3) {
   ["date"]=>
-  string(19) "2009-01-31 14:28:41"
+  string(19) "2009-01-31 00:05:00"
   ["timezone_type"]=>
   int(3)
   ["timezone"]=>
@@ -157,106 +157,106 @@ object(DateTime)#%d (3) {
 
 -- empty array --
 
-Warning: date_modify() expects parameter 2 to be string, array given in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify() expects parameter 2 to be string, array given in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- int indexed array --
 
-Warning: date_modify() expects parameter 2 to be string, array given in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify() expects parameter 2 to be string, array given in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- associative array --
 
-Warning: date_modify() expects parameter 2 to be string, array given in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify() expects parameter 2 to be string, array given in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- nested arrays --
 
-Warning: date_modify() expects parameter 2 to be string, array given in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify() expects parameter 2 to be string, array given in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- uppercase NULL --
 
-Warning: date_modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string () at position 0 ( in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- lowercase null --
 
-Warning: date_modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string () at position 0 ( in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- lowercase true --
 
-Warning: date_modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- lowercase false --
 
-Warning: date_modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string () at position 0 ( in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- uppercase TRUE --
 
-Warning: date_modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (1) at position 0 (1): Unexpected character in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- uppercase FALSE --
 
-Warning: date_modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string () at position 0 ( in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- empty string DQ --
 
-Warning: date_modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string () at position 0 ( in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- empty string SQ --
 
-Warning: date_modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string () at position 0 ( in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- string DQ --
 
-Warning: date_modify(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- string SQ --
 
-Warning: date_modify(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- mixed case string --
 
-Warning: date_modify(): Failed to parse time string (sTrInG) at position 0 (s): The timezone could not be found in the database in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (sTrInG) at position 0 (s): The timezone could not be found in the database in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- heredoc --
 
-Warning: date_modify(): Failed to parse time string (hello world) at position 0 (h): The timezone could not be found in the database in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (hello world) at position 0 (h): The timezone could not be found in the database in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- instance of classWithToString --
 
-Warning: date_modify(): Failed to parse time string (Class A object) at position 0 (C): The timezone could not be found in the database in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string (Class A object) at position 0 (C): The timezone could not be found in the database in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- instance of classWithoutToString --
 
-Warning: date_modify() expects parameter 2 to be string, object given in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify() expects parameter 2 to be string, object given in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- undefined var --
 
-Warning: date_modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string () at position 0 ( in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- unset var --
 
-Warning: date_modify(): Failed to parse time string () at position 0 ( in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify(): Failed to parse time string () at position 0 ( in %sdate_modify_variation2.php on line 99
 bool(false)
 
 -- resource --
 
-Warning: date_modify() expects parameter 2 to be string, resource given in /home/derick/dev/php/php-src/trunk/ext/date/tests/date_modify_variation2.php on line 99
+Warning: date_modify() expects parameter 2 to be string, resource given in %sdate_modify_variation2.php on line 99
 bool(false)
 ===DONE===
diff --git a/ext/date/tests/dateinterval_errors.phpt b/ext/date/tests/dateinterval_errors.phpt
deleted file mode 100644
index 505484c..0000000
--- a/ext/date/tests/dateinterval_errors.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-DateInterval: Getter and setter errors
---FILE--
-<?php
-$d = DateInterval::createFromDateString("");
-$d->y = 1984;
-var_dump($d->y);
-var_dump($d->asdf, $d->y);
-?>
---EXPECTF--
-int(1984)
-
-Fatal error: main(): Unknown property (asdf) in %sdateinterval_errors.php on line 5
diff --git a/ext/date/tests/examine_diff.inc b/ext/date/tests/examine_diff.inc
new file mode 100644
index 0000000..35b4ae3
--- /dev/null
+++ b/ext/date/tests/examine_diff.inc
@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * Helper for the DateTime_diff_add_sub* tests
+ *
+ * @author Daniel Convissor <danielc at analysisandsolutions.com>
+ */
+
+/**
+ * Provides a consistent interface for executing date diff tests
+ *
+ * Tests the diff() method then passes the resulting
+ * interval to the add()/sub() method as a double check
+ *
+ * @param string|DateTime $end_date  the end date in YYYY-MM-DD format
+ *                        (can include time HH:MM:SS) or a DateTime object
+ * @param string|DateTime $start_date  the start date in YYYY-MM-DD format
+ *                        (can include time HH:MM:SS) or a DateTime object
+ * @param string $expect_spec  the expected result of the tests, in the
+ *               special interval specification used for this test suite.
+ *               This spec includes a "+" or "-" after the "P" in order to
+ *               indicate which direction to go.
+ * @param int $expect_days  the number of days to compare with the
+ *            interval's "days" property
+ * @param bool $absolute  should the result always be a positive number?
+ *
+ * @return void
+ */
+function examine_diff($end_date, $start_date, $expect_spec, $expect_days, $absolute = false) {
+	if (is_string($start_date)) {
+		$start = new DateTime($start_date);
+	} else {
+		$start = $start_date;
+	}
+	$start_date = $start->format('Y-m-d H:i:s T');
+
+	if (is_string($end_date)) {
+		$end = new DateTime($end_date);
+	} else {
+		$end = $end_date;
+	}
+	$end_date = $end->format('Y-m-d H:i:s T');
+
+	$force_sub = false;
+	if ($absolute) {
+		$tmp_interval = $start->diff($end);
+		if ($tmp_interval->format('%r')) {
+			$force_sub = true;
+		}
+	}
+
+	$result_interval = $start->diff($end, $absolute);
+	$result_spec = $result_interval->format('P%R%yY%mM%dDT%hH%iM%sS');
+	$result_days = $result_interval->format('%a');
+
+	// Also make sure add()/sub() works the same way as diff().
+	if ($force_sub) {
+		$start->sub($result_interval);
+		$sign = '-';
+	} else {
+		$start->add($result_interval);
+		$sign = '+';
+	}
+
+	$result_end_date = $start->format('Y-m-d H:i:s T');
+
+	// Leaving this here for making adjustments later.
+	$expect_full = "FWD: $end_date - $start_date = **$expect_spec** | "
+		. "BACK: $start_date $sign $expect_spec = **$end_date** | "
+		. "DAYS: **$expect_days**";
+	// echo "$expect_full\n";
+	// return;
+
+	$result_full = "FWD: $end_date - $start_date = **$result_spec** | "
+		. "BACK: $start_date $sign $result_spec = **$result_end_date** | "
+		. "DAYS: **$result_days**";
+	echo "$result_full\n";
+}
diff --git a/ext/date/tests/gmstrftime_variation22.phpt b/ext/date/tests/gmstrftime_variation22.phpt
index 7884335..c8f51fc 100644
--- a/ext/date/tests/gmstrftime_variation22.phpt
+++ b/ext/date/tests/gmstrftime_variation22.phpt
@@ -35,24 +35,24 @@ $inputs = array(
 
 foreach($inputs as $key =>$value) {
       echo "\n--$key--\n";
-      var_dump( gmstrftime($value) );
+      var_dump( $value );
       var_dump( gmstrftime($value, $timestamp) );
 };
 
 ?>
 ===DONE===
---EXPECTF--
+--EXPECT--
 *** Testing gmstrftime() : usage variation ***
 
 --Preferred date and time representation--
-string(%d) "%s %d %s %d %d:%d:%d %s GMT"
-string(31) "Fri 08 Aug 2008 08:08:08 AM GMT"
+string(2) "%c"
+string(24) "Fri Aug  8 08:08:08 2008"
 
 --Preferred date representation--
-string(%d) "%d/%d/%d"
+string(2) "%x"
 string(10) "08/08/2008"
 
 --Preferred time representation--
-string(%d) "%d:%d:%d %s"
-string(11) "08:08:08 AM"
+string(2) "%X"
+string(8) "08:08:08"
 ===DONE===
diff --git a/ext/date/tests/strftime_variation22.phpt b/ext/date/tests/strftime_variation22.phpt
index 4ce9933..bd672b4 100644
--- a/ext/date/tests/strftime_variation22.phpt
+++ b/ext/date/tests/strftime_variation22.phpt
@@ -35,24 +35,24 @@ $inputs = array(
 
 foreach($inputs as $key =>$value) {
       echo "\n--$key--\n";
-	  var_dump( strftime($value) );
+	  var_dump( $value );
 	  var_dump( strftime($value, $timestamp) );
 }	  
 
 ?>
 ===DONE===
---EXPECTF--
+--EXPECT--
 *** Testing strftime() : usage variation ***
 
 --Preferred date and time representation--
-string(%d) "%s %d %s %d %d:%d:%d %s %s"
-string(31) "Fri 08 Aug 2008 08:08:08 AM IST"
+string(2) "%c"
+string(24) "Fri Aug  8 08:08:08 2008"
 
 --Preferred date representation--
-string(%d) "%d/%d/%d"
+string(2) "%x"
 string(10) "08/08/2008"
 
 --Preferred time representation--
-string(%d) "%d:%d:%d %s"
-string(11) "08:08:08 AM"
+string(2) "%X"
+string(8) "08:08:08"
 ===DONE===
diff --git a/ext/date/tests/timezone_abbreviations_list_basic1.phpt b/ext/date/tests/timezone_abbreviations_list_basic1.phpt
index 845a69c..e5dfe5d 100644
--- a/ext/date/tests/timezone_abbreviations_list_basic1.phpt
+++ b/ext/date/tests/timezone_abbreviations_list_basic1.phpt
@@ -23,10 +23,10 @@ var_dump( $abbr["acst"] );
 
 ?>
 ===DONE===
---EXPECT--
+--EXPECTF--
 *** Testing timezone_abbreviations_list() : basic functionality ***
 string(5) "array"
-int(399)
+int(%d)
 
 -- Format a sample entry --
 array(4) {
diff --git a/ext/dba/dba.c b/ext/dba/dba.c
index b52251d..8a45406 100644
--- a/ext/dba/dba.c
+++ b/ext/dba/dba.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba.c 295764 2010-03-03 00:29:38Z felipe $ */
+/* $Id: dba.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_cdb.c b/ext/dba/dba_cdb.c
index 525fa4a..5a736d4 100644
--- a/ext/dba/dba_cdb.c
+++ b/ext/dba/dba_cdb.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_cdb.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dba_cdb.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_db1.c b/ext/dba/dba_db1.c
index 125dbc1..d94ba15 100755
--- a/ext/dba/dba_db1.c
+++ b/ext/dba/dba_db1.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_db1.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dba_db1.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_db2.c b/ext/dba/dba_db2.c
index 9688deb..4077fc3 100644
--- a/ext/dba/dba_db2.c
+++ b/ext/dba/dba_db2.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_db2.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dba_db2.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_db3.c b/ext/dba/dba_db3.c
index d1986ea..c0a052c 100644
--- a/ext/dba/dba_db3.c
+++ b/ext/dba/dba_db3.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_db3.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dba_db3.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_db4.c b/ext/dba/dba_db4.c
index d6e3f15..483ceb7 100644
--- a/ext/dba/dba_db4.c
+++ b/ext/dba/dba_db4.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_db4.c 300151 2010-06-03 07:03:05Z sixd $ */
+/* $Id: dba_db4.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_dbm.c b/ext/dba/dba_dbm.c
index 7019181..2611620 100644
--- a/ext/dba/dba_dbm.c
+++ b/ext/dba/dba_dbm.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_dbm.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dba_dbm.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_flatfile.c b/ext/dba/dba_flatfile.c
index 3bcfd58..e06d18b 100644
--- a/ext/dba/dba_flatfile.c
+++ b/ext/dba/dba_flatfile.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_flatfile.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dba_flatfile.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_gdbm.c b/ext/dba/dba_gdbm.c
index 0e1d462..6aabddd 100644
--- a/ext/dba/dba_gdbm.c
+++ b/ext/dba/dba_gdbm.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_gdbm.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dba_gdbm.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_inifile.c b/ext/dba/dba_inifile.c
index f8e6188..6ffb78d 100644
--- a/ext/dba/dba_inifile.c
+++ b/ext/dba/dba_inifile.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_inifile.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dba_inifile.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_ndbm.c b/ext/dba/dba_ndbm.c
index a35965c..771af5e 100644
--- a/ext/dba/dba_ndbm.c
+++ b/ext/dba/dba_ndbm.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_ndbm.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dba_ndbm.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/dba_qdbm.c b/ext/dba/dba_qdbm.c
index 8f67bc3..21bd707 100755
--- a/ext/dba/dba_qdbm.c
+++ b/ext/dba/dba_qdbm.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: dba_qdbm.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dba_qdbm.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dba/libflatfile/flatfile.c b/ext/dba/libflatfile/flatfile.c
index a01ed63..2d4af53 100644
--- a/ext/dba/libflatfile/flatfile.c
+++ b/ext/dba/libflatfile/flatfile.c
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: flatfile.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: flatfile.c 306527 2010-12-20 23:00:11Z iliaa $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -54,24 +54,24 @@ int flatfile_store(flatfile *dba, datum key_datum, datum value_datum, int mode T
 			return 1;
 		}
 		php_stream_seek(dba->fp, 0L, SEEK_END);
-		php_stream_printf(dba->fp TSRMLS_CC, "%d\n", key_datum.dsize);
+		php_stream_printf(dba->fp TSRMLS_CC, "%zu\n", key_datum.dsize);
 		php_stream_flush(dba->fp);
 		if (php_stream_write(dba->fp, key_datum.dptr, key_datum.dsize) < key_datum.dsize) {
 			return -1;
 		}
-		php_stream_printf(dba->fp TSRMLS_CC, "%d\n", value_datum.dsize);
+		php_stream_printf(dba->fp TSRMLS_CC, "%zu\n", value_datum.dsize);
 		php_stream_flush(dba->fp);
 		if (php_stream_write(dba->fp, value_datum.dptr, value_datum.dsize) < value_datum.dsize) {
 			return -1;
 		}
 	} else { /* FLATFILE_REPLACE */
 		flatfile_delete(dba, key_datum TSRMLS_CC);
-		php_stream_printf(dba->fp TSRMLS_CC, "%d\n", key_datum.dsize);
+		php_stream_printf(dba->fp TSRMLS_CC, "%zu\n", key_datum.dsize);
 		php_stream_flush(dba->fp);
 		if (php_stream_write(dba->fp, key_datum.dptr, key_datum.dsize) < key_datum.dsize) {
 			return -1;
 		}
-		php_stream_printf(dba->fp TSRMLS_CC, "%d\n", value_datum.dsize);
+		php_stream_printf(dba->fp TSRMLS_CC, "%zu\n", value_datum.dsize);
 		if (php_stream_write(dba->fp, value_datum.dptr, value_datum.dsize) < value_datum.dsize) {
 			return -1;
 		}
@@ -307,7 +307,7 @@ datum flatfile_nextkey(flatfile *dba TSRMLS_DC) {
 /* {{{ flatfile_version */
 char *flatfile_version() 
 {
-	return "1.0, $Revision: 293036 $";
+	return "1.0, $Revision: 306527 $";
 }
 /* }}} */ 
 
diff --git a/ext/dba/php_dba.h b/ext/dba/php_dba.h
index 4e6dccb..e2a5669 100644
--- a/ext/dba/php_dba.h
+++ b/ext/dba/php_dba.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_dba.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_dba.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_DBA_H
 #define PHP_DBA_H
diff --git a/ext/dom/attr.c b/ext/dom/attr.c
index fbec6dc..0ac6223 100644
--- a/ext/dom/attr.c
+++ b/ext/dom/attr.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: attr.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: attr.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/cdatasection.c b/ext/dom/cdatasection.c
index 142b35b..33967fe 100644
--- a/ext/dom/cdatasection.c
+++ b/ext/dom/cdatasection.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: cdatasection.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: cdatasection.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/characterdata.c b/ext/dom/characterdata.c
index cc79760..4b10b4b 100644
--- a/ext/dom/characterdata.c
+++ b/ext/dom/characterdata.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: characterdata.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: characterdata.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/comment.c b/ext/dom/comment.c
index 18badf3..ae874e8 100644
--- a/ext/dom/comment.c
+++ b/ext/dom/comment.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: comment.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: comment.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/config.w32 b/ext/dom/config.w32
index e823785..17f5c8d 100644
--- a/ext/dom/config.w32
+++ b/ext/dom/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 261548 2008-06-23 18:40:29Z pajoye $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_WITH("dom", "DOM support", "yes");
@@ -19,6 +19,7 @@ if (PHP_DOM == "yes") {
 		if (!PHP_DOM_SHARED) {
 			ADD_FLAG("CFLAGS_DOM", "/D LIBXML_STATIC ");
 		}
+		PHP_INSTALL_HEADERS("ext/dom", "xml_common.h");
 	} else {
 		WARNING("dom support can't be enabled, libxml is not enabled")
 		PHP_DOM = "no"
diff --git a/ext/dom/document.c b/ext/dom/document.c
index 4ecb8fb..961c596 100644
--- a/ext/dom/document.c
+++ b/ext/dom/document.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: document.c 297374 2010-04-02 20:08:15Z rrichards $ */
+/* $Id: document.c 307571 2011-01-19 00:22:06Z cataphract $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -2284,33 +2284,68 @@ Convenience method to output as html
 */
 PHP_FUNCTION(dom_document_save_html)
 {
-	zval *id;
+	zval *id, *nodep = NULL;
 	xmlDoc *docp;
-	dom_object *intern;
-	xmlChar *mem;
+	xmlNode *node;
+	xmlBufferPtr buf;
+	dom_object *intern, *nodeobj;
+	xmlChar *mem = NULL;
 	int size, format;
 	dom_doc_propsptr doc_props;
 
-	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_document_class_entry) == FAILURE) {
+	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(),
+		"O|O!", &id, dom_document_class_entry, &nodep, dom_node_class_entry)
+		== FAILURE) {
 		return;
 	}
 
 	DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
 
-#if LIBXML_VERSION >= 20623
 	doc_props = dom_get_doc_props(intern->document);
 	format = doc_props->formatoutput;
-	htmlDocDumpMemoryFormat(docp, &mem, &size, format);
+
+	if (nodep != NULL) {
+		/* Dump contents of Node */
+		DOM_GET_OBJ(node, nodep, xmlNodePtr, nodeobj);
+		if (node->doc != docp) {
+			php_dom_throw_error(WRONG_DOCUMENT_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
+			RETURN_FALSE;
+		}
+		
+		buf = xmlBufferCreate();
+		if (!buf) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not fetch buffer");
+			RETURN_FALSE;
+		}
+		
+		size = htmlNodeDump(buf, docp, node);
+		if (size >= 0) {
+			mem = (xmlChar*) xmlBufferContent(buf);
+			if (!mem) {
+				RETVAL_FALSE;
+			} else {
+				RETVAL_STRINGL((const char*) mem, size, 1);
+			}
+		} else {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error dumping HTML node");
+			RETVAL_FALSE;
+		}
+		xmlBufferFree(buf);
+	} else {
+#if LIBXML_VERSION >= 20623
+		htmlDocDumpMemoryFormat(docp, &mem, &size, format);
 #else
-	htmlDocDumpMemory(docp, &mem, &size);
+		htmlDocDumpMemory(docp, &mem, &size);
 #endif
-	if (!size) {
+		if (!size) {
+			RETVAL_FALSE;
+		} else {
+			RETVAL_STRINGL((const char*) mem, size, 1);
+		}
 		if (mem)
 			xmlFree(mem);
-		RETURN_FALSE;
 	}
-	RETVAL_STRINGL(mem, size, 1);
-	xmlFree(mem);
+
 }
 /* }}} end dom_document_save_html */
 
diff --git a/ext/dom/documentfragment.c b/ext/dom/documentfragment.c
index e3769bd..f56dd37 100644
--- a/ext/dom/documentfragment.c
+++ b/ext/dom/documentfragment.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: documentfragment.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: documentfragment.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/documenttype.c b/ext/dom/documenttype.c
index 08be3fc..ea9a5d3 100644
--- a/ext/dom/documenttype.c
+++ b/ext/dom/documenttype.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: documenttype.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: documenttype.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/dom_ce.h b/ext/dom/dom_ce.h
index 196286b..ea0d496 100644
--- a/ext/dom/dom_ce.h
+++ b/ext/dom/dom_ce.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dom_ce.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dom_ce.h 306939 2011-01-01 02:19:59Z felipe $ */
 #ifndef DOM_CE_H
 #define DOM_CE_H
 
diff --git a/ext/dom/dom_fe.h b/ext/dom/dom_fe.h
index ed87cd0..6ef27b6 100644
--- a/ext/dom/dom_fe.h
+++ b/ext/dom/dom_fe.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dom_fe.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dom_fe.h 306939 2011-01-01 02:19:59Z felipe $ */
 #ifndef DOM_FE_H
 #define DOM_FE_H
 
diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c
index b91f2a0..b7b7fcd 100644
--- a/ext/dom/dom_iterators.c
+++ b/ext/dom/dom_iterators.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dom_iterators.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dom_iterators.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/dom_properties.h b/ext/dom/dom_properties.h
index 4179985..ca2fae0 100644
--- a/ext/dom/dom_properties.h
+++ b/ext/dom/dom_properties.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dom_properties.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dom_properties.h 306939 2011-01-01 02:19:59Z felipe $ */
 #ifndef DOM_PROPERTIES_H
 #define DOM_PROPERTIES_H
 
diff --git a/ext/dom/domconfiguration.c b/ext/dom/domconfiguration.c
index 62f353d..0f3f4b0 100644
--- a/ext/dom/domconfiguration.c
+++ b/ext/dom/domconfiguration.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domconfiguration.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: domconfiguration.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/domerror.c b/ext/dom/domerror.c
index 4c846f0..8ca8ac5 100644
--- a/ext/dom/domerror.c
+++ b/ext/dom/domerror.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domerror.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: domerror.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/domerrorhandler.c b/ext/dom/domerrorhandler.c
index 2091776..1683c56 100644
--- a/ext/dom/domerrorhandler.c
+++ b/ext/dom/domerrorhandler.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domerrorhandler.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: domerrorhandler.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/domexception.c b/ext/dom/domexception.c
index cfb2a76..f66abf8 100644
--- a/ext/dom/domexception.c
+++ b/ext/dom/domexception.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domexception.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: domexception.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/domimplementation.c b/ext/dom/domimplementation.c
index 29a808b..b553fca 100644
--- a/ext/dom/domimplementation.c
+++ b/ext/dom/domimplementation.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domimplementation.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: domimplementation.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/domimplementationlist.c b/ext/dom/domimplementationlist.c
index c25b81a..e1cc1f2 100644
--- a/ext/dom/domimplementationlist.c
+++ b/ext/dom/domimplementationlist.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domimplementationlist.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: domimplementationlist.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/domimplementationsource.c b/ext/dom/domimplementationsource.c
index 5ade26b..eab3428 100644
--- a/ext/dom/domimplementationsource.c
+++ b/ext/dom/domimplementationsource.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domimplementationsource.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: domimplementationsource.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/domlocator.c b/ext/dom/domlocator.c
index 5629e15..38c64d5 100644
--- a/ext/dom/domlocator.c
+++ b/ext/dom/domlocator.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domlocator.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: domlocator.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/domstringlist.c b/ext/dom/domstringlist.c
index c618135..96bb5b1 100644
--- a/ext/dom/domstringlist.c
+++ b/ext/dom/domstringlist.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domstringlist.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: domstringlist.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/element.c b/ext/dom/element.c
index 8e457f7..993123f 100644
--- a/ext/dom/element.c
+++ b/ext/dom/element.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: element.c 293597 2010-01-15 21:29:56Z rrichards $ */
+/* $Id: element.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/entity.c b/ext/dom/entity.c
index d28e131..6e526a9 100644
--- a/ext/dom/entity.c
+++ b/ext/dom/entity.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: entity.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: entity.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/entityreference.c b/ext/dom/entityreference.c
index 8b0164a..4ad1917 100644
--- a/ext/dom/entityreference.c
+++ b/ext/dom/entityreference.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: entityreference.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: entityreference.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/namednodemap.c b/ext/dom/namednodemap.c
index 1228062..b60c7ca 100644
--- a/ext/dom/namednodemap.c
+++ b/ext/dom/namednodemap.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: namednodemap.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: namednodemap.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/namelist.c b/ext/dom/namelist.c
index 6ed0f6f..85a43bf 100644
--- a/ext/dom/namelist.c
+++ b/ext/dom/namelist.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: namelist.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: namelist.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/node.c b/ext/dom/node.c
index a89026a..c93373a 100644
--- a/ext/dom/node.c
+++ b/ext/dom/node.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: node.c 298841 2010-05-01 18:30:38Z geissert $ */
+/* $Id: node.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/nodelist.c b/ext/dom/nodelist.c
index 0392d83..2427498 100644
--- a/ext/dom/nodelist.c
+++ b/ext/dom/nodelist.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: nodelist.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: nodelist.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/notation.c b/ext/dom/notation.c
index 75e0310..16cc375 100644
--- a/ext/dom/notation.c
+++ b/ext/dom/notation.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: notation.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: notation.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c
index da73a7f..5f9480b 100644
--- a/ext/dom/php_dom.c
+++ b/ext/dom/php_dom.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_dom.c 298967 2010-05-04 12:55:26Z rrichards $ */
+/* $Id: php_dom.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/php_dom.h b/ext/dom/php_dom.h
index 6724bde..b9b295e 100644
--- a/ext/dom/php_dom.h
+++ b/ext/dom/php_dom.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_dom.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_dom.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_DOM_H
 #define PHP_DOM_H
diff --git a/ext/dom/processinginstruction.c b/ext/dom/processinginstruction.c
index ac83d8c..f4eb481 100644
--- a/ext/dom/processinginstruction.c
+++ b/ext/dom/processinginstruction.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: processinginstruction.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: processinginstruction.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/string_extend.c b/ext/dom/string_extend.c
index fc09e30..752864e 100644
--- a/ext/dom/string_extend.c
+++ b/ext/dom/string_extend.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: string_extend.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: string_extend.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/tests/DOMDocument_saveHTML_error1.phpt b/ext/dom/tests/DOMDocument_saveHTML_error1.phpt
deleted file mode 100644
index 78718de..0000000
--- a/ext/dom/tests/DOMDocument_saveHTML_error1.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-DOMDocument::saveHTML() should fail if a parameter is given
---CREDITS--
-Knut Urdalen <knut at php.net>
-#PHPTestFest2009 Norway 2009-06-09 \o/
---SKIPIF--
-<?php
-require_once('skipif.inc');
-?>
---FILE--
-<?php
-$doc = new DOMDocument('1.0');
-$root = $doc->createElement('html');
-$root = $doc->appendChild($root);
-$head = $doc->createElement('head');
-$head = $root->appendChild($head);
-$title = $doc->createElement('title');
-$title = $head->appendChild($title);
-$text = $doc->createTextNode('This is the title');
-$text = $title->appendChild($text);
-echo $doc->saveHTML(true);
-?>
---EXPECTF--
-Warning: DOMDocument::saveHTML() expects exactly 0 parameters, 1 given in %s on line %d
diff --git a/ext/dom/tests/DOMDocument_saveHTML_variant1.phpt b/ext/dom/tests/DOMDocument_saveHTML_variant1.phpt
new file mode 100644
index 0000000..d169113
--- /dev/null
+++ b/ext/dom/tests/DOMDocument_saveHTML_variant1.phpt
@@ -0,0 +1,24 @@
+--TEST--
+DOMDocument::saveHTML() optional parameters 
+--SKIPIF--
+<?php
+require_once dirname(__FILE__) .'/skipif.inc';
+?>
+--FILE--
+<?php
+$doc = new DOMDocument('1.0');
+$root = $doc->createElement('html');
+$root = $doc->appendChild($root);
+$head = $doc->createElement('head');
+$head = $root->appendChild($head);
+$title = $doc->createElement('title');
+$title = $head->appendChild($title);
+$text = $doc->createTextNode('This is the title');
+$text = $title->appendChild($text);
+echo $doc->saveHTML(NULL), "\n";
+echo $doc->saveHTML($title), "\n";
+?>
+--EXPECTF--
+<html><head><title>This is the title</title></head></html>
+
+<title>This is the title</title>
diff --git a/ext/dom/text.c b/ext/dom/text.c
index 8ad5ba9..f6058d9 100644
--- a/ext/dom/text.c
+++ b/ext/dom/text.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: text.c 305837 2010-11-29 14:48:53Z iliaa $ */
+/* $Id: text.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/typeinfo.c b/ext/dom/typeinfo.c
index 95521e8..6554fdf 100644
--- a/ext/dom/typeinfo.c
+++ b/ext/dom/typeinfo.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: typeinfo.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: typeinfo.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/userdatahandler.c b/ext/dom/userdatahandler.c
index 2ee47ea..1ccac1e 100644
--- a/ext/dom/userdatahandler.c
+++ b/ext/dom/userdatahandler.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: userdatahandler.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: userdatahandler.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/dom/xml_common.h b/ext/dom/xml_common.h
index 16d1928..b6998af 100644
--- a/ext/dom/xml_common.h
+++ b/ext/dom/xml_common.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: xml_common.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: xml_common.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_XML_COMMON_H
 #define PHP_XML_COMMON_H
diff --git a/ext/dom/xpath.c b/ext/dom/xpath.c
index d6c3487..e9bd753 100644
--- a/ext/dom/xpath.c
+++ b/ext/dom/xpath.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: xpath.c 298974 2010-05-04 15:41:49Z rrichards $ */
+/* $Id: xpath.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/enchant/enchant.c b/ext/enchant/enchant.c
index e8637af..9ed1e35 100755
--- a/ext/enchant/enchant.c
+++ b/ext/enchant/enchant.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.0 of the PHP license,       |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   |         Ilia Alshanetsky <ilia at prohost.org>                          |
   +----------------------------------------------------------------------+
 
-  $Id: enchant.c 305507 2010-11-18 15:22:22Z pajoye $
+  $Id: enchant.c 306939 2011-01-01 02:19:59Z felipe $
 */
 
 #ifdef HAVE_CONFIG_H
@@ -327,7 +327,7 @@ PHP_MINFO_FUNCTION(enchant)
 #elif defined(HAVE_ENCHANT_BROKER_SET_PARAM)
 	php_info_print_table_row(2, "Libenchant Version", "1.5.0 or later");
 #endif
-	php_info_print_table_row(2, "Revision", "$Revision: 305507 $");
+	php_info_print_table_row(2, "Revision", "$Revision: 306939 $");
 	php_info_print_table_end();
 
 	php_info_print_table_start();
diff --git a/ext/enchant/php_enchant.h b/ext/enchant/php_enchant.h
index 50cfdc7..1628626 100644
--- a/ext/enchant/php_enchant.h
+++ b/ext/enchant/php_enchant.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 4                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.0 of the PHP license,       |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
   | Author: Pierre-Alain Joye <paj at pearfr.org>                           |
   +----------------------------------------------------------------------+
 
-  $Id: php_enchant.h 293036 2010-01-03 09:23:27Z sebastian $
+  $Id: php_enchant.h 306939 2011-01-01 02:19:59Z felipe $
 */
 
 #ifndef PHP_ENCHANT_H
diff --git a/ext/ereg/config.w32 b/ext/ereg/config.w32
index 0ea887e..af8ff89 100644
--- a/ext/ereg/config.w32
+++ b/ext/ereg/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 259731 2008-05-14 03:13:17Z auroraeosrose $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_WITH("ereg", "POSIX extended regular expressions", "yes");
@@ -8,4 +8,5 @@ if (PHP_EREG != "no") {
 	ADD_SOURCES("ext/ereg/regex", "regcomp.c regexec.c regerror.c regfree.c", "ereg");
 	AC_DEFINE('REGEX', 1, 'Bundled regex');
 	AC_DEFINE('HSREGEX', 1, 'Bundled regex');
-}
\ No newline at end of file
+	PHP_INSTALL_HEADERS("ext/ereg", "php_ereg.h php_regex.h regex/");
+}
diff --git a/ext/ereg/ereg.c b/ext/ereg/ereg.c
index d433ebb..92ccbea 100644
--- a/ext/ereg/ereg.c
+++ b/ext/ereg/ereg.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    |          Jaakko Hyvätti <jaakko at hyvatti.iki.fi>                      | 
    +----------------------------------------------------------------------+
  */
-/* $Id: ereg.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: ereg.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 #include <ctype.h>
diff --git a/ext/ereg/php_ereg.h b/ext/ereg/php_ereg.h
index 7c1d1a0..fd39749 100644
--- a/ext/ereg/php_ereg.h
+++ b/ext/ereg/php_ereg.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
 */
 
 
-/* $Id: php_ereg.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_ereg.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef EREG_H
 #define EREG_H
diff --git a/ext/ereg/php_regex.h b/ext/ereg/php_regex.h
index 7689540..7172589 100644
--- a/ext/ereg/php_regex.h
+++ b/ext/ereg/php_regex.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_regex.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_regex.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_REGEX_H
 #define PHP_REGEX_H
diff --git a/ext/exif/exif.c b/ext/exif/exif.c
index 85fa1b9..9a495df 100644
--- a/ext/exif/exif.c
+++ b/ext/exif/exif.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: exif.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: exif.c 308362 2011-02-15 14:02:26Z pajoye $ */
 
 /*  ToDos
  *
@@ -40,6 +40,16 @@
 #include "php.h"
 #include "ext/standard/file.h"
 
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef PHP_WIN32
+# include "win32/php_stdint.h"
+#endif
+
 #if HAVE_EXIF
 
 /* When EXIF_DEBUG is defined the module generates a lot of debug messages
@@ -138,7 +148,7 @@ const zend_function_entry exif_functions[] = {
 };
 /* }}} */
 
-#define EXIF_VERSION "1.4 $Id: exif.c 293036 2010-01-03 09:23:27Z sebastian $"
+#define EXIF_VERSION "1.4 $Id: exif.c 308362 2011-02-15 14:02:26Z pajoye $"
 
 /* {{{ PHP_MINFO_FUNCTION
  */
@@ -2821,6 +2831,7 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
 	int tag, format, components;
 	char *value_ptr, tagname[64], cbuf[32], *outside=NULL;
 	size_t byte_count, offset_val, fpos, fgot;
+	int64_t byte_count_signed;
 	xp_field_type *tmp_xp;
 #ifdef EXIF_DEBUG
 	char *dump_data;
@@ -2845,13 +2856,20 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
 		/*return TRUE;*/
 	}
 
-	byte_count = components * php_tiff_bytes_per_format[format];
+	if (components < 0) {
+		exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal components(%ld)", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), components);
+		return FALSE;
+	}
+
+	byte_count_signed = (int64_t)components * php_tiff_bytes_per_format[format];
 
-	if ((ssize_t)byte_count < 0) {
-		exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal byte_count(%ld)", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), byte_count);
+	if (byte_count_signed < 0 || (byte_count_signed > INT32_MAX)) {
+		exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal byte_count", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC));
 		return FALSE;
 	}
 
+	byte_count = (size_t)byte_count_signed;
+
 	if (byte_count > 4) {
 		offset_val = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel);
 		/* If its bigger than 4 bytes, the dir entry contains an offset. */
@@ -2916,6 +2934,7 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
 		efree(dump_data);
 	}
 #endif
+
 	if (section_index==SECTION_THUMBNAIL) {
 		if (!ImageInfo->Thumbnail.data) {
 			switch(tag) {
diff --git a/ext/exif/php_exif.h b/ext/exif/php_exif.h
index 2b1b77e..ab351bd 100644
--- a/ext/exif/php_exif.h
+++ b/ext/exif/php_exif.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_exif.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_exif.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #if HAVE_EXIF
 extern zend_module_entry exif_module_entry;
diff --git a/ext/exif/tests/bug54002.phpt b/ext/exif/tests/bug54002.phpt
new file mode 100644
index 0000000..c51fa58
--- /dev/null
+++ b/ext/exif/tests/bug54002.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #54002 (crash on crafted tag)
+--INI--
+memory_limit=-1
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--FILE--
+<?php
+exif_read_data(__DIR__ . '/bug54002_1.jpeg');
+exif_read_data(__DIR__ . '/bug54002_2.jpeg');
+
+?>
+--EXPECTF--
+Warning: exif_read_data(bug54002_1.jpeg): Process tag(x0205=UndefinedTa): Illegal byte_count in %sbug54002.php on line %d
+
+Warning: exif_read_data(bug54002_1.jpeg): Process tag(xA000=FlashPixVer): Illegal pointer offset(%s) in %sbug54002.php on line %d
+
+Warning: exif_read_data(bug54002_2.jpeg): Process tag(x0205=UndefinedTa): Illegal byte_count in %sbug54002.php on line %d
+
+Warning: exif_read_data(bug54002_2.jpeg): Process tag(xA000=FlashPixVer): Illegal pointer offset(%s) in %sbug54002.php on line %d
diff --git a/ext/exif/tests/bug54002_1.jpeg b/ext/exif/tests/bug54002_1.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..a622d6d213d3ed02face9639b973f02e41874ddd
GIT binary patch
literal 87599
zcmeFY2UL?y7cLqI5I}m-(5pZ|k<cVSAfP}9J)w!HG=(520i_C3l at CKG0Y$_RN(fO=
zP^yZ83ItTTQbjcMst`Z{^}c at P|Nm3gx$B&D&Ry%Sb!IV{hxeVfXJ+r&^Gxz<_}3?y
zA6C)$Ga!(yttN;U1On{=32|_O6akbAL}36!f%G8|MF1=Sq+LK1;{by=fb at 5i=HUJ_
zeGg!nzwrcsHU7 at S31B!-b{~+=08tmf5<vPBh~k`o)$=<K{wmj>^@stLj)OrUC;MX#
z&Tcrxqqa7-t`_!+M=TtyuojB{gnzwva(1;n^83A$_5pj>qo5-QLmjUJNA-bE5E`iW
zcOU;r|EcqLT}N##6dimcE}RYr`lO?yV+ at BI>li8O0zltb&j^saF!?XZjDYUl{u`qJ
ztepPuUaS9&<AGK{*$@yHkm%^bb->wwNr?vXbN!9I0nCx}R~`;Pa?YH;>JR&!Czt=v
zo<;+hJNK{Wi2#P={?!&YP%rP__;*u$|AG1c&YuqCzmy9BRRiyZfDya`;NSfMng at ZX
z5YSN|(Shsea8Um}dz^n`5YPa4@~`JDKv{0;@7YiUJ%a#+${>IC4R{RV_#6Ko)!*TF
zdJOn*22y??{%a%;E5db*_2I_)dVfAM`#rjc6-EDf_Pg9ab^I>(XWc+*1jOI}|1116
z-~V5xf2}Q`f4rdI^Ypu)zlV_XZ~VJ&;Qzo}oPW*NrQhTB7gkIKFpn57hzH0^1Tch?
z^Y;*g3INQ<2>~erm;&H`!f%-ifJOp<bowXzN868$pE5tUf8el2hxPxp*8fXg_^0ge
z-f;l&_u9iEi~#iaIt1qWcOD)P_-|eO-J5^(RTIemkG|>x_&@cPgYz$490z8flm9O)
z^;>Cyfc~?!f9up=PyaW4{x(7XH~jy91QP#C5&qQl-zxOqgx_oSFYWqoUj5$(|C>hO
z*YK|~P#b6ugqM#OvWJh4Phig;K at n+D5n*8w#eGn5X*FdH4K?Ncs+u}TJ<Wp%ZPon-
zXaj_~#ZjxHFg-hGjHMIu$WaT9JpuwELJ|t1q6!uV_8;J|_ at 51bRUq<D1^=_fEi8V$
z;wS~S4Q`G<!#|?~m}o9;9zZz$Jt81Z4ltOL3(U>U1*|NN_}}K6OO#to32wn7?&1qk
zCP?Te<&^NMSk|;kV*9?R>iLBy^YQQ92bGfEucod6)6_RGJZyw8K62E`+6HZl!MVD*
zdw3r6@(nnBCNKye9C6`dWK?uaY)Wd{m8<E0WaN_b@~_`0xLH_QR!*y+S2FHAd{kRk
z-_Y3f_{GatZS5V*&aVD}!FTV6hDSy}eP&Hf&&<xvFZ8Xgvo|)kzJ1^30F3iL;V+5)
zLmp8;9!@SUFc;*vJRF=+zxN|iE^Z|_kC=rE#FrqhteeCuVVP4>)5 at o!hy5by7v9Ie
zS5^Ph{;$79`ctC+jzH*RUjF};K*|4068%e{f64Q!1tiJ~iUv`^97-TgQ4X*u$1g9C
z02tVyM8TpUb5NJtCOz~4)s!PL4!c~=xm<Q82sE~A{m~cg+fXGF#9{bDV{94qYRvj$
zFqaIBe}Ka<4jZ~j<<eTVKiGi*)!udFL#2(_)n~s9lnAAA^I3O+4EsZ=z7Mnaa|$+=
zg(_X?a(KpWamc%+A<|zofFaoL at rAV_8N4TILuL{M8);)`--nsCAPI?ELD0}L-!_m8
z-msT5v at 8^)_GaBdtI$v6L7mb`4bD-Tb{FVG-V+!o<aZxOth<f~=7nrh!GU#ZqacU8
zP%77m1;$5h0F4_>;>8xaCu(!iL#W)pGggPtMo>ImhFEBt#&6(|2MXCNA6Z86J<QB|
zrPk$8)XN`IkyoL-K&5k)>x|ev%0S7$BIBHO*5*dgeiGD*IG3>Mkn$0fr|I)xha%^_
zf|PfTGuxvdHlM7VYji1cbu3MOqEE-TDICCH7qeA9`R$J&-T)Q9xMSF?V%{m1L at _e&
z`30)-#<f3xm}N;hrBK`H|GqT~zo(JVs4&lFkRF|3G#6{tl0nfbRo?KN9qWje=hfXw
z*xL`EI2pfKVoPY29BiBvVik7L+#F(V^_MP~D at SmlQ*V4vG>4gl6Iy0zTt|Chu31`5
zo_BMjIBu6m`VI_ae7>%HK2&J<6QgQF*{AaO8*4WX!*E?|^mcH9bzx)ln;h$<)HFd-
z#CX=J*EO__jO*1uA2 at DRFDG61&KDG$T<&=@+)Ws3SUh at AB<<Muf{T_YRaP~-JBB at r
zeDk<Y{>DLUMIHL$y?MPWBiEt(c}94V#!=9o2j?-zuUg%7ewDOGQefZp9(y5rGGgP0
zucO`3*J0P9f_erku4pCK1iaCyq~0D|Uy7DPu9J#B+Xd~WPv<V63=<8Lp@&c%rh(*N
zphf+6w(4;y^u1O7!pGmaHsqgGvH~S{WWE9yiH>EwjM8m1>2wx?xO{u>cGsA+G?51F
zcR!x<R=V<h!IkzU(RSmXrPN%fiF>DCJ&9?V6kYXP_nvrFlVYeMl_}&Y%ObKqR?n30
z5hf?L2rR46*Ug at HJ!Ggq<n1V#`(;VY1#PI^^*+%d&W+_`kp~*S4fVR+qdx5^F0&X+
zI1+ko!eN?Way;dF3upa-&uNhvgNFOat at 4zgb+ZVB$)o;<8Pk^IFQpq+lAO!bi<=jC
z=YL*S*FAm(>*BUAJ3N}L`U^yPr)YUM$k!yvGs<64MA#x3zDO}ikSxYu42?gWSJNq`
zndgo;9TL$U4_a|zP*0DjHyls*n_bUbYs6ZkT048D5Ut?R0%bFNc9Vw3eL{Ccr at F!?
zl+?qX)3Qfj?40h<gzO~Hp9!yT-Z?CNO at gSMfGUezG3Q818JH*0t90+V$9s8B!rT2D
zaGmg6K327Q3cF+e*dy=P2k`R8@`UqkyLB)3%$%i^udbAp79C`Ot%XixAALPUF)I?n
ztK@`zM|V*;MvXQh4U*TQ+zsvSYVp1+m?EJ;4WPgc*6vI}=<bv@#=0~2xcLQvuWa^a
z$=fR1hq7-%U))hzd+8(I+AS2j^)o-8aSHC<kY2<(n3A$u+?8*%Zc-f{cCBV1yHnQX
z+HK3z0-O(5z)efSy%%QZJsY-Q1QR;}vf<2uwjH4sjydEn5XZ;9b1O?Mm-=gdE5&!m
zMyc+#x+$%KFz>7u*Y)V!6HT=Zqyv<yt8?M-u_4N3O!l<q>wCfb4xCuwRo|g%bX0TF
zYK8*qRc)2>K$f$)RYPV^D-~dF=U2EakvoI3E9c4{Tz)lxU2raoLPfz=i)QjWx~v-x
z$=t9#b_xNKy{_+cIYRfd?bum)%OcMBmR*>k*B_vQ*x4b{)kU|$PfvSm7+T$|b{m&(
z^1=qhg$q`d7f%z!O~=0b3~SmbZuTH!=**-3!PEIyA6$-<Tg-oS`fRrM(Qo*Dig&{a
zJzVULPY&lNUR3Ckc4}S<HnAaJ6^gyeH}^luIl_-_cSI2%^z=rmWQA<}bk&Q|(=E$V
z1QcYR{C)i`3>mWjK20xjEjQdn>e-3mR>NYtSI=Xcs1Z<RgP5VfId%D~yBk#{Wz~-3
zHx at 2_Mdym$8LQb!Try5 at ee!}hJ8jfr>b?@GWMNjG#$w9K(-qnCSjZ at EPY4U-M=!dR
zj$N<@b;`2tb8CMVvT$QPpB`)0KKJQdx?31zqTA#bXoDelvt{&1L?>ewcC<==3>PNT
zIlukR$<+Rh<cKBP*~wIP>IcUn4pu#V0&T|>eFu7ZDFp(NyLyV?KyorZbSpfU!~Gnu
zY~T>1xT~}?SZ%D2%$H~V{tL`csMnh%8y?ZSRT+?jRTqZyL%JkppAUQi8vVNWw3Y#3
zQBU%_)UDhw$Qx=PncW^-b?=}`+QDiKu30Ye4)yN?Cl~x;=dRwWY$zzR*9Zwb&o!GX
z{G2UmbL_U5WsUelOFKnJN at B77&*Ix|M$ba6)bcJ!&AjR^4P46u at tLwnVZjx7SO?Un
zVjokVh^)(w;~D*Lt?o)WFgzFDcPUyB#m7b6`*}+(w!)wn5kHXl1$<Xob(%-e1Zr#u
zBBf7bIU82)+WrD5CymrR4-O3RKX0njX7aX6 at B0&*b1$2Z<XmDX at 3}QxW_9V at EC{y!
zb=y^ULeC=klcTQd<-Jahzd*D4hL%wdY(={(o&g{C6$-h+TU1Flzd)xJSKZtSYTP(_
zK0suepEZ>nd^3Kl=5#7GWm<wicGACuD`$xQplXk}iC(sZ at Xd@(ChLLymVp>vtMK57
zo8b~`as at g;9_N|P at GPYH%L>i30h at D|dZk9n1yZ16Js@#%Z`OKY!QHO8_l|v!Wb`pH
zZfl13V>ejfiulJFcjGQmtwK)N`yPSsxjiypv=hO;lQ9#y6!1|yb?IySA4=c|>tiSr
z>)3>7z`zH*S1Z%cwP*4v#eLCh*F`bq6m-vGU=5L)Z}$h_#@9F$RLS#i&*BRMHrFB9
zJ^=!uo#sxj8|IHY+G@%6c?4SF;mt*@=cwm!ul-4cqKjsYv<zR(7o|S4G6mC0%R^*R
zvvB3T={WECOjMI+n8)jCtAn|R_s$_Bj(aJjt!@xh#_}>%z!!3h^Ky-a^K#?Q8m%LZ
z3%fAJ>_exb^^T{NMJtmg?}(V*1R<8U>e)Z*+*vQYeu45H+WBA_PcZM($d&wI at xMS<
ziT)JL=DeJ%^-f207bf1f_aZ;rh%nU&pa9uyWb|?m&F$H<f$N{S8v14*|554 at R;AqV
zrt)=i1XD2U$+*7?PZ7R8V#oII**Vu+?$vR=vR-QCWj~LtG<ks5DW=re*=8GAyc{*B
zWA$ii;`599z_PQHi0=XyKhuR=&pI^OolLfyDj&%6SLbS%VK7Zae_r;AeOhDOaX{mx
zqL$z*ZHbhYDGDE(MS6ED^L+*3(mmp9MP8xLuc|w_AhRFkp7)p@=!g)|Q%%k1P9_G*
zKfe;YS!Pv<_z;XME{wVTIY3}6a at D1wro;St0)5f*+`9FfduWv_s{_=YPsay<x#*9*
zadgNyHPw1-gw(r2XqhY97Q&x9_%?%w{NutoI{u^{acjBFh^BB+$l<j+c3 at S$Yx2#V
zJt8RehUecm?w-Hn%{cZmAY1mX|LSF at f#$<p)8XQ0{jCmh=Xcx^?84mVMEoJ^YyNdS
zg4r(IU;osFu*tYEuaal)-mNi#f{H6D!1XuO5j`c460Z4US|?OAI+w#!g;jO=j))sm
zou2aY4PJKY_-HWHyrgdbrS0vDp7Rn>7G<}?`eu9N{g}~XY0fs at yA%0ElC;Yz#}1!`
z8h>s(%UE#F$c4V at Z!fQi9&d at 9-PNp5ZP-`1X5JH}<PjCa+i9A!^|+>GJ~w82$TGtt
z3Lf5^Q~x-$z2wr^bgo$Xa%BHry#G-JJ>B><v<j)b_`c%0^l|3B^VFM^K3B^J(<6Jm
zK^bGEeo&&eolhk4jrGA3Wsafu&VP$~A#&E(<~D&4Bl(ng^hmeRw8u0q_gd=r at O|e?
zSTyXDeuJ30n0xyhNNncwr at BtFXy>HcWC?-P05KuZ_*0)XYc1yv#D{fgZ_o{$<KKBC
z_ff*qQOmWg3fDlW>H{RwsPdvwoz~fOX3g33_ju<|(0irICF!FUTDd$c5F at V5m%~r!
zDsI?A9>axk*XoZW$X3ZxU1-&Y4=VSrWoL}pt(^3X4F{iod`M?&y?lvm8K8OmLeMJ#
z;_M<(dSC?AF<PH_{LGb^v1Q)APmgl8(5#%?X!CU0ccESrT^BsBl!@gb_Lq at ClV5WS
zkirqgv5qN3vXiB+3uZp&1WNzzgK9f{`HN33y_S}L4(mos^(f?HHZvnMu6$mY=pQ<F
z^al4$PYS9F=08+Kz%mXW+!Ha?w_?DS3A#{Rr`F)FjFvz2LG=^uwB{?pKGK`pXoZ}L
z9-nE4szLkvC6*LuwyTJZ`t*xrUO8cJQ8$gQZAm^_ZyEPfp_5j*Ht0N)Pr4!j0_6Ez
zh*@dva-Ga+3ZL{+j+mrt02ET(LKHzrel&I=Jk05kvc)XR=ahY`f8k*A*7EC-Gc`w=
zEkxS`y4H!>9NsIwBpXY@@y|wwS}2x7*9YXjYK2}H?aOZ&)%C!iZ!Vfz?{AV0nvY%Z
zlqO}%1`8sKP7nBv*D}`Cz0dVHjIah><eN&LcKZ+B+mr8n?3_q0Pnhv6vAFvhe64xu
z^n$#`0QOAs3R?Zq?X+j2rQy10?T?5bAKzW(k8GfQ3tsC-+Tb!wqQ{9cS8~O8Vw{_>
zdOh-VBLo6pSECKP`!MeK4`DmABMa{%XH<u?4Q4-N-r1#*9EBo?*{E4b;Y|Zl*}d17
z@%KMeO$pyrx#D at N)9(pdgGtDy`mC>IVUE>Rj$hdCC=}GMRrTu8hc4IhT)W7fVHnqy
z(U&Eov4l3lXjalC^~fhnyV&e5p*^n&5-;ToGK$|9>jkU@#ccg?!Q?I2<*e-)QqUJ^
z1j}4CF)>=bkt-nXhn89UMBK=G-pEHyqZ~-&#!#JBy_V`98z+oI)uvhxzQXDleGm_e
zjTlgQ5GJ at +{OIB4 at zv_gyVc1f%;g-CUbmoFb0#c&U0rLes=@gAp0lH&qz3NM;}!ug
z-ucDdOmVC at rw8liUy%at0GK_XAzz`YPd902 at xp1djp}ixIWe#SGt#}-_2<v+llkI8
z9DfMP9K4K9JUM(Mv~=tkCs?w{MPmBKObcI1QsQOJ7he+xHU#BV`$G at HgIWcyA6Tk{
zHfdT`%0zUtcC8v$EOTpKS$q<V^B5qz4Aidbc88>@WSpSF6(&CHss at lQOTVsd3Y9*)
zh+yy7F)|9wqq!(Ja3^%}V|F~RSyeN-{`%=@(yCXznKkJT5#Kiok0BtTJ>uOK>Qd8L
zn1u^kBkVGssyo%Gc0mrs`B3+R(rJoewm%i47i?<EGeTzd9h|Hh8*>asXvYJt!8R|*
zjI at KKw2J)AZgb;?&a+kGxe879xmYT at DCW1@-$bZ9fOgOw^K)n2%pZH#WsVIFe(CoP
z=8NC|=(vuEq$|bwUXxE0cl+^`^{iF?;h5c+(kCd79-+f(-;de*BOiL06{UC`JD46G
z at 95$F?ta~^rgN(=_N3IwmT(ywL9#-GerUznO2?<A#y-8#;PSfhj7*Hs_vf)`gVm;|
z4-26?rP%7WA!%|eSr(@hzUdz|t->0Ff!4Y2rBWigajN1&&!5HILqGNZBxoF2- at hT}
zU^bv7rL6=BIG(;g*>>&gz{=j11t(9r8`vA^>`*Q5Cfi)QJgc31=!1tq5WmGIsv1nQ
zn+p!7TR#!};{<1l<ECvz$4wV6B*a_8Q&tCMMU%O;JVVEme}P^+{8$q>=zkLQJ+z)J
zm#}r}GT;Si9pb4fPqulS!Gb8-?zwDJvA?9R=RDV!Hi2Fh8&MtuS#FgQ=={c=NAuG0
zEqhFLG3Jj4m^RaoukG=(vonzqv3km(+xCawarLii6$kg)uKB%|C09rMG<ESY|1|>8
zf=7Ux49?$wK;Q!YxOsn5XWaY{2oJ9Szkt9Vet;_!5)%;=5*6CBM`W*vsJMirq@=*1
zebBuUP%#NfiQkoQfPpex+<e^Jd=i3t1SS5b!=J1X$0TPWm_zv=*60;T;eSZ>{dxte
z`#(qc{nz~1{}Mg+Z^G~EzX>uxuKywF_gk+2L&P5rU^4$xu!{hb`Tt7%J^k-dnST<0
zGXRtMZ at EVQljU2}NlYOn<ZE^$^{CX)crAK at bM_s~^7=74`&mpdgO at 40B~f~S=%awi
z at j%vW&^1}e;PVX1Xikiem@)3UqNk5=dwGE1aKyZ$o9P8Af!xg8eMVQf612tvW-}s1
zhyC)MN!OAvo3Q$cR5eBTMBWSA9(&hP(^-{?Y%sHJpE_{r6w%Z%V$)-SQJfU8_yD+B
z<47 at v=T;3gE!Ho)!WxOZ<M(t+qQo(dRi#AlO+U&ZJ6U|LmIdWvt<zcRSugcDQU>T%
z(tmsq2x=D+mWwI05J9$XyN<!hMAG+i4GXSA(`fpg$53U^>;oE)B8S|zYYF%Qi!>;S
z<eMQ&hiWRQKZCU^8k6c2?X%8f_;U%#W_jXq3+a)dn8kUUJiYGlU~J<82fM^pYI(bN
zU+6ILMMYk_-hdH(`FlLUn$3cYCMt_o_CN}q4%M4;U|CuVctXzyXgTlI*RAu(FfPS)
zVyqv%Bix*yf7xtMVoYhRwH>7Y?39!;Z6SiluVX9Mx<L&}>EfED!HBW}{&EXgK4=Gq
zcQTT*;MRiGwESSQc5rBFau{l}#QA|-rC1YRrp0WaevFUM2cT=r)x`|AlZ{NX+WT%d
zg|9!Uj^4%=B(lJy4H)<1^(>5KfxVaoEzEILG(GY1sd9PjERvVuOn855XrjPm46B&*
zhY_=^iz8aj#E-@=L$89WRQ5FQlTp?vqpPKeOp!EEH>DH~a>e%U3jzfCSu4SnHIGe0
z^0sc2uL0cU{elytb1APO&rh-|6nTUvHJuAo3L`(dkSDI?-roq2_hh#&+g#`9{9MsK
z8LqL1*>MV^eOPNawH at BN+Mlx5F>dgi%%h|ZiFaI6ll_ew%4><T1auetr<`VZ*>j9T
z3iRhCXZ85>OEnb8DGP_Sqy$2eyCK1$9ioV9yuS%#SB+Z2^ZQdOXv1-9W_dn`5Wr|g
z?W9L)ObJki%i(2X1_&+^qP!JS-KNvTm;OaY!QPokr>cKpkZevCW6tyeoX_EX%@37=
zTBd~X_6g0Jp~djl$*uCW?)dG#uqdz6LkFV*!eG)m&A&jJ1^0PO3h|Dwr1_r&sOi{X
zEK3 at f;s)FJe2bmD92!|Ej-T!-YY3SP*dH;H&B!Y`nU|=6042u<)$9q^6KQRkt;bWa
z+k at X!cltv+=L at 5>s=Ah;t6441{_W@%$S8eJt*~>fE1*)#?2_Qau>B0-8!bqNfRF5#
z_~3Bl;{nIm9MpXeI8luIXx}*>Lzdh^pDcU6$3T?3z`v$+^8O0GRB|5s{gRk*uS$o#
z{{u-K$D32q6|D=kP-CB;d5t|y3`r1}ghb-!IHtf at KXzYEDabg2O@pTph2rlxHyTMi
zft;k&9X@^D&wyBOF^>@+$cVNSzJy&;6oDU+jz at Qi@Ufz3hpvAZT4%V~GG*hflpo-j
z`VA0TdcAKZQsN8m?psV5q!LjsI?0yZc78dd^8lh!7=*Qs+jbpaX*Y*k$ofbh39xdy
zFN8-cZWDT%?H(B|#aC)I?hJ^#tBmE(6yl&gkO?}l*MYVRoet=Q8Ap`}b(Sg`0$i6}
zZP8 at l1Wf}{f#g;j2b1!Y^!s~#?C%>Na&f2?5Yjx+ghf#gA(qU&j-2R&qENH?+#hmz
z;2$M6vM9A{CDsFIyvd2|i*kr^z!ClCI-O9&E(cu%*oMBakA!5?3zKpE{-CH022XT*
zLM;v5Zag3keTn>{se3IYhpkM9WfL+^6vzhZX9RC&f4_XlNFphs=%=I(%DCTOzOl^t
zIaaaB4{|CN;C1QK*idLUqKr5x8{4bDp{6xYaf%hNS-4!M)~ieS*bL*UCnSx}B-Sxo
z)O&ZFc_0?wT+<wF!3yv5^O6Q0(3BRAWUb*Pqr`EcECIx}ORc}rE<WwP^=p!j?PkS+
z5QNk$(e<0rM!D~*Ej&Cs<`SiB0UtI_bWJ;skWw6|Nwl3u^($-TP=xE0z~-N at le+AV
zrm{dlV{abJ&gpnCMAM$oYqyCdpL5{Wag68*)_z4qt0wa9GGf||U6XatJ*Jz~O1Vm{
zH|elV1dW%&G{H at +uYIEQ2G`gA?4`%qOHB2KlNzmD;zJT^@WCX?;ACo%Ujg|UGj;bz
z7`LJn@(xx93177EW_R>Do9G&NuMbIZeHiqK8`$)Tm`E%meWSW7YeYqD^GCj+2sxOa
zXSB>`*c>4lb<kt|zl%P#fy&`a&Egm03wl61DGsodu{oH~P?R!!YHGkz!QOR;2i`M{
z#+{4hkJ_871iz2i)$skuW}vyR;Q9A%Nu0>Qj4CVYO=KNXcv+bDK%T-*6w!$fl78oz
zSh0dM##zR0KqUQ8gcjE5&G90BzbCQEDpIPGLK<uBE8KQ<)yrsWYdCS+B~sXu2Wve^
zusC%i2d68~6On<pmkr=pbwWKFPYIIU+M;SN4L-s6Bk}y#6|y9P_9^p`273<V+Rl&C
zv{Fbv7 at V`Yj(YaDnT4jY1eY|KA=x$KcgatE1O|P>UMEeYo+_zG=TMiqZKUR*@bhsj
zr?7GbFT7}S=iOm{^~m&m{w%LB$8ZO<%7+$u{;1LHM8%BzQC|}Z42Aei(;{bJQ`bQ4
z#)bB at DN9!tqJvFOd$G~U;FR2w&wFC?i`R=BCI9By>nX9z80VYpx3;xKMB!Hh#27>i
zqGZ91X$T&ZXFt(JfeZ5#%U(;#JwhLfPtS-l75Yv)YQ$W{#YD5DB(4~uWSx~wITi#}
z9w0&Iy{aWxIYrpzZb$BYu#x->F`EZ<8b^BM-x(s95|XXm8iV5322;2$HKUg;+>ttZ
z^Ehs>e6v~JGQGmAp!D-lB-4_R(vE~lg+ZDz%7UvK^z<GnHuZpqR(`vYerUJR)ZovP
zLcEIG{LUp0A>Xhe<r&lb4K5iciY{lOT@{|9H|d&}%CnuCO|lsL?HJZt`54(fk|QVM
zM55>*!G(Z~)FLn^i!p{%LV7*HMK<l|@^%v+T$9HfGjj5>a?n`OEDhj~A^rJo$86<{
zFP3iZH#x{_xD(*)0a?kSIqpM3FjDcx+b-ePA7DA at wk*<zdDDm1v2K~E#A3|3ZnG7=
zRm_%nfRR*->^2$AsQzNKiv5mgZRdtL<%L-zVM(GVV`Sr8Y9&88Noo*hNwzdz)KuVT
zmStUlOmwShUn1{{X6UWNWwbwZ$_Lw66`%fuJbG(-7Ww1O`2z{^c`-+Ni`;@zZ;dBv
zAe$?PE!fL#p77Z_Glfcu7na)qyFdzen#Fh|=;*BkV~cg>5^77Vb*y=U<hFJ9+WV1T
zPyPbw;UqdP|EyEvfarT04yS9V=!@9M#sAQ>_fMt*H at Bo=_4i2#vs8=2ge1E$IYIPm
z5<Dx|^jY|2O?|EpOO|k^QBSkVA(YKDF5CP`HWC(@73`r<rZ~o2ZBsh+3*=^BiCDs$
z)({1L;7f5KSA7<Vg@$|O`0mPko_w0&n*|=w7k0I(F7}Saxdn%DQl9$L3~oS>f;tb6
z=jcZ(k_e;O)Pu#Cng+@*P^MB=31?zZim&?6yoEg{dUc{gN<E2ee{odr`%GqQlrmUd
zEt at U{CgUVcCq?j$Q<u~Bi7Uf8ka#J=@L=oV^|6U;x_^J- at oe2>9$mfNN=?4`L=)FH
zR4~b=q<j>lE at vaLqTbBB8JE*jrFUj2QP;{Ir^wnUcU4yni?4*~Hz=N7fcHG8QtRc>
zNhqxdP>qc%G=1)vkhkjRk#p+xhwcR9vl<=#?v`OTr(*G0rb1?UCs}=xyHAC7w{iTJ
z7EGot7zFw*4oL1rc?J&Yw^IrWukCfJLf>ul2jSl9A{OGUOx0Di+~3 at SDkEk=Nm$-5
z&*KWi8QsR)(&X1h>Y&YgD`z%_(`}ZEV^1`-ytS)6gd${^KJ-u_4)8Af>8DSvp=mlR
zV4`b at 1&g|B*DzB)QflXS=+OJbL>POEVHr5=-=FU<f0IoMd-yEXQWwGcO6{0$vsZ!0
zRjzeZz6INrDh-3W9gMVNNys}6McKyvX|0PH_Q6xfqbHrMh4k7mDw>WEFM$}<4XVDf
zh73=>v;6Zen&?I+ZLQn9k{YR`RrK|nbZ~{Sg8y5`7J1&cN)|;dvs$YsqTH>l8I^jN
z<y0WlteqBMg5u2EueBwX(Zu_bU^hMc49(z*Mwo7|JBrTkS_zzeq^vbWf;;RPtr#Qe
zy at i2glQwAK_l``jSxoiTu*hvrk3P<$jfq(=vMjVtE?tFg0#?jtLDL<@`#BrdqDVmB
zJ&_|y8u@%(zsH4S;ySGA^L5qU2c!b+ID(dbq+%o+$S!Xc9H??s`9LNS-jjn?x9%i=
zNRPb8EW at iPS6o;ULZ&HM#_=B=%b&A)WW+L!EH{Ubf_8&XTPvIjwvbxvzMOCFGP08X
zDlSTBqBa%GoQfsY!M#O)N?g&^iHqewg1#n;U6%cdg|?`Zkn@*H at pF90oBUK+pNM|)
z>(3Qy9aL5JOlGQ2TpwYy>rDzCB8SJa6pOzw(5+LaE1jV!V-r^}eZ%RnlNkxMx6CT&
z?K3L<g^s$QnZ$;hq9|*;>HUa-MeL-&#a+f2$LcriaAea7GAO|t>l;TVx=!m5da-Hh
zs~0!vgyT)8&WD!+CmH5EZV55vQkz3zdq>783l>1z^(Hc}O6qtMfiuVA_r3+Eina(S
zXSTJ>3Mn{3q;+v)8P#(>I7$H~d}F?K6;S`OF9ryiCiVFY{uLx*qx92Rk&rf**7+nf
zlfy{<osTvjlgTdU<uRfjH9<g3`9uEbG|fe7`teL8rzsq+DR)~f(}J$W#>X>E%d(uR
zj<xfx7UHjcq|{l~@Vp5$jSm`r`5+-5kuKt>>(p#;b$Y%(Id(3cKM}!``K*J7?%N<W
z`MHos_*<{m1ue;L3)$GdwnWWV?~F5jy|Qti3yy_YdNd-aR2*^eO at Uk@U?&6u;)C``
zei4dhjbkNeDYx(Vl>s|EU0spi-(4#YD(7Hu1J9HU#B0LG`m?op_}(htbHBhuOvSm{
z7fgLI-ndKD8~j{ydNGF-w|U1ytmb|W3z=|}p4!>7M%PR`Kkp>UlFg73Ta&5fKXG-A
z+f+ at 6(1vDEYKb4uSl49hC0V~*T-%Z~6oMChMT^h0GPEoeZ+{8$+$O)L^Ciaha~bt;
zUQ4Mxk)C|TbRZ)zX at JeZ5L&1Lk)N++YEM}hhlQK;=R+V>7;)q}M#X3uU3HA-B{`*o
zru~w{%TqDTPtlEsx$6iAbAAxzXLR<MV+>_UDEWNtH$o=;1#7~bNoveZxu(tX(Q*G2
z9QPbN*`zSCFQv^kYRK~08~GR-Na(hvHLkV8%gr7aFwy<Wf_GEDgfLMtmd~#E?mwFS
zgLgB^^oQVKXou?Oiqp%<=KOB<MHgDA3IQk&q&eoqO;ewp!B(Ackp7382&9H!q>2kA
zwwDQIcf6<ZrP$T>ngpRF0^jE;$vw+AL~NFWk>;A<&~~o*(LxV0g_2w`YNNhhuE|?2
zG^HhPLbgjhUIE8(ccbTRr{i40b8AFS5<1=&a;S0|F*ZY)V8G31nYS$kH6D9tV9{HY
zpr1-;+112Szmo70VkW(2XSGE0Sd^6andKQb0xRFDy<v0xfQiS4SWQ#fiSi$8e6io7
z5$a#cUUN6 at 66_7^uf0|{V%<7a!oUQu6}$xek=*c+>?JAr+C(uYnnMG0bpdvX%EtoN
z!%lEM?oD~UO<uOhlDjI`9DJfc&Q_nRMV<57m3vud;)ESxX<-w$@3f$v)!yQe8oexT
ze|u}3sT6FDg at gx(7ESRRvga|=3$;qTP_}-7qL5}d at 0=dHd at QLqLtOD{&R{a0e>%Pg
z at G21MCFNtpWN!EZs?x at h!j?eHR at sY#Rf*UniX)8k;kS&R?s_Q=b9jO14b|~!y)pf?
zurNNZcivvv`N*X5(I|P%NK3+QrjjK>w$Mt1TS{Hx2{>L8n at Hk)t52`ed1&W)bOZu5
z&r}gui!p%PlWZh_i+FIxnR83`7&%ETvi(a^V49<AXs3b~FF37J<$h4(U|e>=4;%S9
z88s(U(mRCnap>zfX?|8ctRx8KIvJ2vS at AvI>X=ILd9SmF)H9nIV6D6s`P2=G_o(oQ
zp7p!(?gL3f5+R*n$fEt}NQ<NnmGyFXV*C$>V=&?@bffZVwV+AvSd-8jAtSTA54T9D
zsn~bP1+Cyh%c7|PIi`KIRC_QNj at cpqE|k39<3(J1S;zU<AQk)!VLI>zB}>eR)plw|
zi>p%xb%J+Fo}IK&%Tokrkh at q$)BSlRkZo6yKIlm^m+$>cqY=dI!BSn5h+RhHMt3yz
zs70&@oK2SmFS6;WEXB`x0`jl6`_KGw94kVX>X^mgCMq<HT3bwgoGq4kw>GG}n}qF|
zWGX8Mo4!+|K$AaZ8is at k>dG}cDHn+lFOzX0s?w%UDTHs%ubyP5fhb0_cHt1AjYBsU
zYD0RASQAM(TwLVw{^gz!*Akuhxzls8SnW-(Z0=4bm8w$NW-o5O8ry#_fGA(Psn^Wh
z{DJ`S<K>G2o9%1-lL;t$L*xE~bC#l6&ouZbMcWz0z^(zQQ>G90?)O7BKmO`4YHiIS
zpG?<q3bsrn%8&OR9#8RotKmKP?4*Z^+U?9T=x&hMc-mFuWn;^ygKdW+L48Rrro~<&
zV at jf=!6!m-v4fOT-s}w;tYuce4j{qh=v1R^zzNuC$;i8p+K?EKw*_al=XfmHBsC!M
z_nMXnxPmJP;KGjU5^!LA;P^ReI1M)-5u()s652SN- at 36;&bMlt<&b{qnXqz-w28lg
zVM|2sXR>d|?DOC#$-aFz5 at R`5F(OIDgRT{NNfcz|NRdm}@f^vOFywqvRG{o<I^U2H
zt3O*wP6$G<da)(dvYfPR`)Fokd+>$nItdB*mPJ#5k9IgtG=!;-vs9pYnqFA6u#6o*
z^)Gm6*n|`wk!oS_(6t7dl}_564>k~cqztRYg3vv&H-gM&>o~$<B(5%40lZQuvT56u
zW}yf&*95NV9r(ADv>uaR%f$^&c&gWwuk8r&QZYZ!^?`JZK>PwuK~^4S_(end;rJgn
z>hZklP}wZZt=H_&w;GC^lg87vmp;XmkH+(8hNs1b!3<d`ZMvt<SUsAzA0e+_kkj;s
zb}j|2eX%vWjW4#8YxIldcX-M&FzhyJDf0=5qI$hSxj4rDbPa*XH7}fT-Y2C at mW^Un
zfzLZ+>^LIY&6 at F-o>C%`-eRne55~IGP9_^wFq=*V?IJb!$ODLFT+C(r*bIS70k}O|
zT2C*nk2Uir9&&ndPXZ(l<4 at Kr?!T7tKI*8<VKAkl(4$B;%*1t?Lv<Tx`pl7+TG1!e
z+I!iUQ}9_S4Zfa at +Dui90*TvuoW}}*&Al?vt>-jn-fS#riZz9ZW_bmnN7mMCFbTbJ
z5l(KV+p)M*{}f7)roDwcq8;|8Xp-=e#NIgZYPSFSJ}!PTGChN%KU-0DW7~CyWBFU(
zBT~WJgB<F^M34y<+8zT+Fwn3ptND512|U>b!KTlhtOCsT6k*$C+K1D8dqbD8oscIn
zI at 0cdt_`rTaW;;{-q}#6*;QWv&!bgZsb?(}Q&c}^-b663((G~cVCN#1DOPT*H?<<6
z!>m@*pHfP1S+*XaSUZ at cdK?#7LUhirT8~dgEd$$4!bzBAHM}>n+`td?tSEN7ub$Rw
z8XGllSNEvMdH<QC)T9CZ0>+DECokul%j9LNjx*cY+$#0l9MN+z3`_*Ghvlfq7;8tS
zsr%*ZQ5%n}VAVM_K<JC86CbwwWmdyQu1W!?FRt!*U?&iPw`o>(DBo^XZBT?2e<~jv
z6wzD8Jrs$aU9@`yHKN+z7w-!S=!Q52*VHC;=%?xE#&lF2<gZVai5ShKLy?-1L?6-Z
zeocSsTi&bTBGg`IN?BHLfi~i&W#+S2alLLMd&jZd%fuhSSm2Ogbe{v-#__<i#<8&-
z?*{Ljp}|^Ng${{Hq}tAeqo<uLth<G!%--n<rO57JACkLyg3p~;9lVbV>HyaHbFX|d
z$vUF{#%t4vtSSMo{N3k_-JlWjJWj%Ni?;S{i+bxq4Trb0bKtn^7}}@}s+?RKmji7@
zbi>m4OnsyuI<tCr1}rCK!!PIWlOy+uq-pg6&TK-6KTpLdp+o=b^kU2Qz|ruraJhmF
z3GP|M)?3e!<wDEEaBeXEf)Zb6OHZ>-yTqDqd~mBbyJx6Q$?1}Gl;nMjM at Sn9-7ouS
zj{Zh0#JueziuGmwBWsG9Zy*Z!in8+X!fI#27^N2aEMzjSFYKM<<|ju;tYzx at wp(&D
zs3K%E_Ts9gM4i`?wFk(LjPC#()SJ+su5Zh8k;XspRo1s}N^xAh4>Ke*7#V1At?BSm
zOHSDrduf|I8BgrU={V)(?hFA}IXr?gckzwL4oT~HG>WwglZxs5OowIgb1yk){c$4y
z>AedIY1(f{1&kK(klEmi6sRl?a=J#ykUZQU+T)d{Gzy%TiD3w;_!FfO%HYr`N6I at h
zp(PHqM^b<0)uv;4Lc{vpvpFfaf@%oDtoD|Wpb5F=#Am5)J+^^}#dEoxnfnr*$i_C@
z$ko}LVoW*TVnnEGtY7&^Z&nvYS<#1uWGsrFYQO4led`EUpj=je@$_VX><;dQPoONW
zrDdZs_NHgb0HLD-7NY`X)Qe}`$eFltZruO7tBJ01X=W;TY!L_D$#5=!mY=+rat1Gp
z{q9d3Y(?THPL6-kvwD@^^$EVQwTw||nGBrARZD at w;^+8n`tx5}iqMiae&FH270%2-
zYVkB$gfyb>U4E2f^{w_q3{<TmsE4k9%Td$1cKj+=7>|RA4_B0YoenXl+e*nIDJf^(
z>ct0Mj5eqp(w|%|n)H3}l>o3sx5vf9uD-divLV}7yX`v7%bDY$g4EdHp0b*rt-$l|
zmUFlRM8ntRw=x7WW?H|Gr{AKatVK#T&b1M-xop=UH at DyOY8P8SjX&E+rT<>YJYa0q
zWzSrzq0w at L^BwqYB>i6-$v4k)Dm>=Z_oi38;tqmO%A0Ezsf}OM51l1BY6Q^ZnUc|_
zfYX-kw02hp1nrQUH_YkvpGQZnSbEgQ?qE5xE at P^3bntqa?~=u~^VM^&_Poz#FzV$C
zXd0ZG6|IK{6OUY3iC9Ekdmw2zFzC|omBw)FaZQ&5SOi*JRzH2ub%=iEK14TO>>d-u
zqU&=!k%BTX8qC?@4D3xXSmLEejrS`HB)7chYSJ?9d-Sq(cZ?LY^fSSZ;Z3jBe-an9
z#i;jfo;Qp;M-TH*TI=jE-Nx!hO~wxH{sKj<Q?+&DoRRYBS6{E9`;z8|61g2}#S%_+
zk%QX9AfK#W4qjD<6!qc=z%LCoeTtG}BtqL!^K&rXl-C>c*5k4QJJLlJ#_aN8y at 4zY
z^-&Yg3+Pk?o2tz>3t}_sLlI_q66yfU@{z$|PxzrRvfAcUThFazvB0fk=YW<nV&xR_
z`|#)AAPVJ4tWx6ql7diONONiYwMI#wj at m#8e^T*n-Yd87b?rcqaMEDKfpub01U8Q=
zu#UfR{;fI6>A0?7!6MP6HoouuJqgtTOk%7{BfiGF<B4JpnrRKk<#$f{13WSbKYZZk
zsWZYS^C+IOTLwOi?r1PwzyJ9Uf_168qE;spOoCBGbj<4fgQtANf=<iC&-s1N&j^!|
zpxFZVSboAjdJ`#9A+uUm?e~B+Hcvw>Kn%>@$odz1ITvl2dj+hx25`;Fk_P*4>!?q!
zXuiB3j%t~Asg2&=d8ec`KIYl(WS(YvNS35&g>phLBzb+?c&d(xXy%65NGf_02_1EI
zkD|_Z71fYe%x at n#V>p<qv>>d2ArNI}*BPc%dN1zjGx~j)cjJ<!IG(BS2W=0t$J~qT
z%OVLHwF?Iy$)u#JnQnG8Ll at x1vBh{UfBJKM8oYxi>F$a}?RJv&N3Way$V?z>NPlxm
z__J{qC9lF%h)47M0hflgP3qYbOw5H<jLOFRJPz97%chAIdcY2%BLj`3HmMaTRo4=|
zA at j^b`J~#6=XN47@!c94)<#@|lc0p!n3(yFDwCWUlt|z+yro<-P-Oy=5lM{Np2 at +?
zCHcQ#m%T=G!zmy917}z8hJ=By)TqZbkn0vxF4N?J!eU?bQWW43o749BJ&cn~zVx)H
zf2otT&gkJxP9+UOav*u&i!)h=WWNGiOz61L;;Kbf(biAbQ;n;GNqMpX*kveFN>amn
z<2(M7A)7`xh?zEAvzfJ>zB1prX>d5tR&kv&LR<S;uxxLjD7t1e+Yj6fa}MqxfVEf0
zqn8bFqV1DeQyc{WTgDKe!N!v_S2EG2VuRq5r^6d*Ab6XjxQa at H1UJ_#<V*SRg}(e3
zKZN`9IG=yQh0IDVGuyOV;-vkp!r&By9D{R%$*BJl-MOKbCmf>Si at M<_NJql>36y-q
z$%#D5u^x$Rrs=Z?qCf=75uQ?59OxI8P<!R+COzCmlsjp$qw4VM*+pD>i&+!k0MF(S
zU8+wYyFT$J>uT_#7c|eHoK(~@Z>p$BoSZ$R{H!~oP2SyUf;AxNdt-<mjN&!=5j1#9
zyIdyTMnbZ)J4`bqV3tj-5dMa1?E2}_s!q0WvcN5?R2h^Z!(seC(8=WfLK`I9-Sk-u
zaIz-dHp_eIaYu2am{G0~L3I73W1}z8`IfUcDVt*`1?>TWb|ZtsZ`Ty!uTnTv2PAit
zWreP;mB|)qL;C5kB0pfV^7wm7IH0p!IQzIqKZ5<PW!Yb#Ds{GeE)WUnMDP at P5Cdt)
z)_%keV6q8G_VVc|ue<eZA1RW8{Thur&OOU(l!8tH#JTvhG=hSuKtJ at m0m9*>Vwg#P
z$oHnVT6tY>${H3iIJ%^k`pU;Dc^7Z_58Tdm3zj%_lZa*8+P$U#YZ2bqZls*8-4DzF
z)hYau21L<SyGcE%81wjb{?5~#!Gj8j#bpNqIsU?7F(vZg)(l0Za~>O_IGAL1g?whE
z^O*8}mvR3^Cw^XrWOS>_q9Z?#wUJpJ&*7TAZ`MgcBlEa)3yBW}Z}-VOR&Lpix6-f|
zV4H2|R at iXfc#RA<qSoHNZz)bOYLg-4BnDsdr_`3{#ztVKkDc>?wXoF4=T)S@{r6H|
z61EEk{OdSMyy>z61IdKp9qF6?FC*S3DKsFPN?D404GsDst*uf9{`je+tXNL*vGwx3
zN_-s(`D)`+@|XFmE!dpo^AEhh;ey4PhpwZywiuhNYO4CVJnzGbnvOi9hLO8pao;a(
z^Be9YSSBtqKv{S|2~~lE6X|0n%wqmqKlhn*N%#PH5$!Dc)=^?Ir=wY$CoHzV at gURi
zix3RsFSUCo^yzw=Oth(hv&*TjT|wA2a0>1YaLv9n3R*_(AHIiE$#AA40WUSAWn-%h
z&z8MNJ+3SERN;nN_5+LB1W6yx=NLG-_~g&pjA!*)Awc`PTCMg%0B^<36K*c;rxnUg
zvWCy2?2CK?hYWm_xV{LN===2YFIu~w?vS{JmQDKRMpp1b(QCT#;~s;F6_92vZA5!;
z_*0?Um`ef0RcZzmZ6^vsLO<WYZ at l${4M2CTIL-4&5SmQJo2mx6M)rjeMNV$dH74sp
zmHa6q3GRDtd{<Pr=xOFxF$E7Qp at 4H~mYkHoIo&7+i%d|X2eh;(WFGbn at n=&N9$QTR
z0<}23&$f0_FRXP2Y}vr2YFpOV(oX>v)44%wUk6=F5Xc{}iDS@~Hk}5)Ci^uwyG^+x
zsVLXMb2uWW<?Z1!-d|JDN7YP;v+EUkQ(u!N?tS;+Ak`8RMccqN-s%mrz}+T$8Mh?Y
zR8j^K(rBy#3=79_q2*QcsH|!CNMRos|0GKax{6xz(D1y_rsvDWT6srpM1a>T at _TAF
zCHe#<-}pof=_mRd$rjdBN3rB!oKuqt^6Xc&rz7_AGJ*TU{)(~1an^lUl at z<(n2f6Z
zAR^J(u~zZaoAe9h^-x5Jfc7|8wBz5b|1uwm`4oFjqEG%)k=u2Yuv|QhpH<lgjtt-y
zcIv-1?N8^S at 99J~6Kt;Uxd`la#~Gd-Da_eA4f{z^+){hcNKOlQctBc90>pkRgKD=n
zt244_{Q6e$NY7<|%;!gQ?rZJi!1o{iD4QMX&1mc+mHP~aq^QUtHShE31zGdWXT(xx
z$~~E_?Z{v&)Wo3SaZ;hECZWe{n7*{%(P(?{uDlUgxp=x>&n3dJs>Hiwrl^v4e%o~h
zzESqNv*$eKh#f=tx-iD{Aw+R-8d;OUpTXZJ650u+0o0E0L3@$F#Wo&Alh27CM3&ma
z%z`-s)|0KAYK1Lfmf~|r;8KifcqWBU!K?Tjd^om0Ro%Qh6P0q##Mwh-S2GevoXKpO
z<DmIgMJl;57c=-}FZA@&-KM at 4#Q|TF2yx!qo2YHg+wlq0g=ScC#`Ci2T&?P+&L-Z8
zHuHl!1NNsIk(zzp#3ZycdA?0)bW|k9hyT<eu)0DfMnr(EmREuQBPKiM<lwVYpWF?_
z5aoQG=G~>!YvT`U(y1M!-FLUkW6zKS8 at E3fc%}q(BX)yCDRt&~CPlH*0^Vm5pD2!W
znD%pRe5S8;5Z>ptN2Czrob{jN?><eLxHTj-TOT~p%dMWD7z>J_x;Gs^GqA{}t*t%%
zii`0d`%)HYzg3b9Tm(Sd9aNN*?}bRUE at E6+q~~7Rdmn3lKV|4>F74bn%h+VRxQ^sD
zItuU6Us1i`(6w{;A{5-LbWN at yKDfm(%v!HM`@YOdaZA5kRg-rIscen5_FOpj;Xbp$
zw8KJ0h1&WVFHHT&K7!ps at tU1SHa04jM#lv*v=8Yj9FYHb1l?I!)1Yp?d*}T1aI1ZL
zkU6K$IDysjojF=K>1!?XfEUNH<gichCdUbSP6p~}5s|+dFj`99;SiR6v990^uB4<z
z>lZdOr$<or=fTptJeM^+G#*Tg*n+FL0rQmCMZ8Gkd%I7}>cmZC&1hzG`piAuIG1T6
zu5sD#`3=&yiu6ua)iI5Dy;Zc|_WHb4CtGRQ<|MoS30j4WE9go>yAs;=$?xQE%9nG(
zxB|qSFxC5dvAmrs#J(_mtw%u1)WwSBSqdCGZYNp&=Ar75cio!J?Pd7$;+^~7pwpj>
zjC=zx0{gC<jJ|8Io#)-%tIL}++4tjQx8JK4i(KIHfKU7=$zC3jE-Lm8ta4V6sEtv|
z*?m%JNz6iUru5uDd);$fUykMyKO1U#SIQ;An!H0Qx2e6Le?{35Wwi0Yd?-PMc;;OJ
zd`1VPLfM#IW(mf|qaH6F<`c_Kz&ncUWL3quJ$hrHe)>Vlif^O8<Vn;1+$_fGy%L0<
zgwWJihs at G^srN^NhVFv1wO(Fyl3F0^##c;YDhvF+&5mbO`Lk|33`jezm)^~PSR-}A
zNbc<IuYz0~?l!K`*hg7UOrEPulm=v<&rB(i)h)`1(6*_I{&C}#%pV3CpVz&#th^uc
zv_t|wr4!1Z82Ps7Nah{*!%*>n1xM2yVeV{y$t~YSe4M<smP(s%eP;KyGbpD1+qtS*
z=3)5^CxfIz#H!PenxjWja~Q+aFh}DvO%H^FqZ0NHV%>|+=c2XwT39LyS!)J;rWf`5
zQ<~CDD;{X&pSq~hhsmFd0qmp-c}^o)Dhigf^$Dd89gjb&x${ccmT at aA2YN+!?3w at K
z2~sIBraZ>^W!JrNrK(JK%ka3U$~QiZW)<b at E+c58aov3i@2`&XI6>v&HCYA+iKiV}
zN9}MIRS>gZ8J50T1SeN at D(e|+;YssdYhef8WWOSno|Cul5cVS5IC#IA8(Sxo9~U+a
zAh9J?Ba(3G0DpcW at uI|i{T-1zfl^@k+K*bfsM+4Z8M6Z5dqlY1r at w#M76SNue9MV(
zy-W_dADSI`4u|q{d5ktoS#}OxKRxO+ES`+@)8WNV-B}ueP#S^e$9Z#3Lv(%OUd$zh
z_jzi at LNIT<Zgnbf(?W{wSaeS&FWd9F7Oe#}*(!71ZsUdzFqYj7Coj-knf^(@dOvv-
z%A(X>lZSk0xodW+0fQ=<xi;L)<Sb%SOMvrl%iLw at sJ!?)=l0LJ0XLMp8hp#{uL9(Y
zGu3Y_w(ZmYfO&#wp&z)kx&1Ed5Xnk=0K+<a0#hN-UmNG($(KU;2$<!VHqa0Lb~B?H
za*!PA?tVDN4=P`KvV}YyA*xTjO459-X5+08>!gu0_Ju}R?5&!fngW086_>LXJO*bq
z%%c6~Dfn at Bz)-1>@TLz<+)Ct4a8i5-9gW7P89zPQpuXxT*>@#^YCW3~t5#ihmeuJT
z19Ed~!0&(d^R^p*zAbsT3w=~O9>kb&@$h%fyPd0<51kaXohBx|uig79Kc|yh{K{#r
zG_$D-r7T;@aQ)mbP%0eO%`q2!-}CdA^&6^Z9xO!maQ{J<kHJN<^=|4I_lGbSzq?VB
z8kwrtaIvRTevb#1!Wy@<(!chc_p(qp;(j#xbMGq~jCK`&3GWhOqohnT-r at KjN@K<M
zz(^BZWB6UkOOJ}8%7=}$6Y}w8?G~L|<(h<f#~&|mlz7tL62s#9zx&rPQc!(md(w}`
zD51_d8V~eC@=V&(`gEjj%<#tr%4tb at 71ihNyro~gyC=fxN1KJLM1}c_+Y&X7r#(;G
z%J1b<wC+4Y{C at zxKtaFY)S(Z4wQ5Q1%$yq1O2i&m&N>fjX^$PVpL(!k1D-(ipssPj
z&uY7p)ym~E0L3QE9tY=EHUrv?p!LC`;cN9P1v|5fHk|(ejac%>(y%;V;){O?>FYe`
z(lec?J7?U~PNZqY%1=aVMvUuCQ--aYtr_Qxfzq+{j}z&dBr-{Jbb!V($cHUlJRcRj
z)@y~_=rW@?;MbOTi&CFaYpdIW$qa;o-7-6z4{G`RMs-RN{oA`fw+F+uXDi|~kCE5v
z{{RxNwTro$+Gmc{xQ-=kD*ipqK0k>%g}Q8!%Rv$kkw?x?PNS`P#(}A<ZiK>ot`anp
zt}(?e&aUgKG2E$cRItGZoOG{=tC?aYCq8zMzN405qN7jQt9l!rCGp;^tIY2hnn?*%
zjA!MHdi^=51;(Lq6SeKzO_do)_!;yyhT4Ska0bLHpMR|^nt;<S5Jw at E*!;|SIX;59
zUM8(wWhZmel^Qf!j3AMI84OM~$K`Cs5DXR`m6 at z+^6D&ND<lxY+e(v-#~pK6TE4$=
z@`6X0Mgy-D$hAg6vA}t8fu45|JJ%zH-P^gktm3p*xp!04ZY*t|&1nQ+0AF?vD>lnp
zyy8%=<hzCv5HM7Cty?#1*jaC}k{Mk>f(IEGs!gYPc4j%I!NJ1xJ5L}HQBrM3P0c8%
zxqID2I`PylHawyo at AET`-K$GVvM?DUQsyRH$tFe*)84WnF~e^dXaNPc2Vs$uS~6<!
zK!ro_2J8XX=~*kzJL+jFk)=B$p+!h-#J~oTNFqna9)hN})+N4Ikv0*PP!&d1M{L&z
zcdgxBzyxdiwLG4nx21GCO!Dd4YI(#XmQGtAzzFYKML0EPa?Wa^wY56fbva>?BZTBg
zPYu)#zs{W}izT+yWSSK*md4^Z$sU5aMAdI@%y9_TJg6p8Fi$_^)onvi{mjwI<=s?}
z%lC)Ux at C!}NnJCBo*tc9ILRKj;m?b*TP${Waf^e>sm=-fy9(LW{v_!-eUnWlpP4`*
zBit0WcmvwLa?*T8AiIs$BE7uUIXSBn_=YCc at p%(onIj6ZkVsLJ$*$Tt?k<fxP2C)I
zvOE;(^Tsys=6g4UJ}g^Ldotd%P+LL5qzKX<VY at v2af-qCoAIjQOqN<?3Xwc`6K*@s
zPds{Zxm$}%Z5K|G^$J_tFds1Gf$S^K^;DZ()?pUV$Zh((>N#QDVy>Qlh^bA+F4z0Z
zjz at xpbzR2x+p+o>v4O!DH06&znDnU?K{@J8OtJb`>x}#_TUdlIUi9G*&!MT6K5t5J
zj2_);Os#iv5WHg|fSGQ4)ZSJOX~8+b=h~5WAQ6MlLTFV0WK`Z+9Z%&>Sh?pkid$$`
zRL3JH>rx1S9dT0mV09kimuDHEq_it-&ra04PaQe*s~Z9BNw9Vqq!u9Alm0ZjbH_QU
z_68lt)|5m5>6$Kw%h-S>Pk*f|FHG`%>fBZ`&G#a9&!Xn1{>q;l{Gu1!io$j2L*tTP
zGoqdvwEh at 3@-qZLoDQCp2+nbgR=pON_PMri1Ov3}_4Ln7)|A>CTE?#w0_SJVENBP{
zy*Yne`T#4;ubW}0J15Nik6MOHimtCE%Dm2F$vDnAr!*J?aSM}=nBu$N587$r9z8=w
zOSCFj%JZ_49 at tTi4OC4w4Qp4P&rH*-^vELTc?GT<dSvAXuTGWa%ZMPCxd-!Ss}3BM
z{rZ|5)rN<8soX8SrL>nbw at Bg{HMJkZ4--nP-`O%mtJSU~NPzs!bh2oPqDKlxELO-!
zf89%&3j>gHcp|N8qSjP`_FYQo-({uqE?s1RuK*G~>&}*WiFdL{^kb3XS6BC(zNPTe
z`$vuwdwF7#&5e;oA&`OYK-xb#!Mf0IEib;yEI}?0MPdizlg2C14yC&G%m5iAN07{{
z3LF8BIswm5rE+(ERo<$J9$qO6tTWtYP_pva_Q~n_R&ma;aJzPYBIlD~Dru_u{~(!-
zK9X!@32`b!$Ea4{kFF|syg4=O)5l`*U-=}5Ft$Gs8wV9)-^7r=h?~h+ysK++3}PH~
zQcug&w*>w*%}?<PNOh}wq|#!txAO^62_(2G4=2?3t6A1A_p%eoFm_Q_zo~j_Hn)+I
zRVd?vrkE7q0gCI>RkPHk7ZN0QkY1}fl4T{9T;pgXp&c>wt$SGXm9mxX^!Q^)+$6HT
z8I^+Mfs%fiuSPlaIsNE6{s)&Vf=Yhu^!!gaFzp<ZpK6xg%3H}+C}Me~JrNYK{VR6o
zThk$drF}l!$c2D??4hs$!5z;vr~R~atvzqnFS2OAXWaAJ#ue at +V}(EuI9~kqH07T|
zm)(Q7Lm-zoy*&&?@J6m<^IFr%k9N>ykyMlD26AgI!W%p95dQ#VrP{NsZ!EVFjK+aS
zBb*jLN|VID6fdsrlTWjRT15ac`ObcJ&mBkI<B!g?Vekf at YvG&Ax12?)>=HwF9NfX&
zVMh)Re2Va=o#LkL8zb7Kk>KgBYL|aM^08vi;ok3mr!JucaXpC{GMPqG{pIQ_GW$T6
zPSlphXN*crd1ZX6?<5S4xZ|xe;lwgoUfoN7<xdsWu#Q<Fn5o{RvanxjK@~OkiIZKq
zv%D~@G07p0H<SR|Rk#NnoE-J2{@KO8tL_i%Tpjj*d6=yP-g%B;EOAI;GN3z22ONGh
zvn){(49M6x%JM%kR(v<6!*}9|Vzw&?5=k7ftawbE<o^J?F`QR1 at e1uUeR_B-rg<Sn
zP*e_8h{ioVDwcJN^81Q;9tuy|{pRhwV)jX5wI6Do5Xe9w6e#P-{z9F3w@!#|fn|}l
z<7<)>5&D{Eg!F)#8tPYWw(`8Io#Y7JFmgHP*0l893Q6F3Cs(wY<qK~l(<-kk!2_|+
zO6IGYV=BERZ$qM<SAnDUFYBnfew!r13#S%xKt|`cRwiA!<gg!fcJ-%ytL+!1>_9f~
zM#N$y&fa_H`qkUJm^7UgqO`VxE1QxKyGTQ}IXjq-t_QtoSj at U+izJ>;l4d-`jBh7_
zf^to9PZ3&v?B?Ih>V*n0_o=}zk<LkNacgfiyR?wnGpv_VNZ<p{Q;wXGOEs0|fj^w^
z{h12<?2df7qs|9C{qbEUj|_T at Z#2(sa*{^TG-?-a0p~uX5#Fd+>q)F=*V+qQFWM}m
zVFMV0al0EsdJK*|>z>xt8{Yaee%kIGPSQ+haLDk+8~4yI;s6|sbp&UcrKtErT${~w
z^XwmQny{b_3VUasGCS3KI4)<jOUpJ`uhSl4?FY=kAfY7iD6W%BxR+S8d83ppaUhMN
zCoK~m3X$pDA8PEUimgT76KLb9hND$-&MBO3qv8D%M6$G=?)K(SK2Z#h5K-h3G7j7w
z-u&@T)%+)Ar)Z6OmquAU&n*zJ8=H19jCy3(KjY}GHNO$TZRV_Y7R$H<I4vP3EPYP^
zVys;1!sA}H(Il2(b!{ixTgcnAwl<Z?>PJ)f*GKlAE$i(Wg3B<8CG63qr9q*8Z$+g^
zZ!Ge^%3RH`hCKl7SDMz+%Uk<2_V%({THC*$6DVeO&KGopqYgTH*D-ae%ci61l1B`a
zF?j40a@)rN&rGN%zZExx?HR0YlHx{dxya0E^EqO2So#8c_pVBqyiG=&rtj)@Q^H`W
zM$v+|p>l1e&hFmc;v8C|M9nCfx;AhC9-LPL at ggg`Egl#lWsJy7l202PI2|J$#z`5k
zN}k%|OS9A`l{WcmJfX9fZh=RqC$)Kxk98Ais+78lNq)&}h6bA~(#}uJa61g=@B+Gi
zyNPk+bsdahg2O5Es%qyiXW`rb0I^tJhG6D)w=r)8y5Ol^-0u7_T{e+?lGwa9<U<PF
znJ0`At;R}#2YwDuVTzyO?S-D5;cZ7+y>kG!0!XF0Q?N{OtJLL*$vF0|PX7SMl3Ljv
zFG03rZWn2qL75wzu^yQ at u4daiZE{vwV>gD%VP<7!nS=y}zyM^E>T!=6-;2f878+=q
zRJ==Yk%kW^-+npZbvdpIU2?|TN4i8Z>Uy-p<+zSaTic#G9<IQ8 at t<1I at IS&`OUE~Y
z^73`D(yk=f*Owf-u>Kg-_5M}YhsD;zOPVs%vCWCW;qg#vq<&|i_!8;7Y;SKM*&dx~
zh}sgv%`AD(u*NS_P}5DDjPj&s>0KR{!^>X_SS&gl{{UvSyn7^*X7h48m&xV1Joc=u
zLruAs5j-z)B4!D at ZdDtn2e9_8`WeM)bzG`Dr_l0o89fTLxoNIevi|^?j3XGPlmnBG
zf2D5O=|cBRx|&__+{Y)$n98h?;0^{l=QZP>5qxidqw1Gd5GLC_yL|lfk;7nPBc3vS
zE9m2#VPy_(Yk4#0Baz~zQ9&!N<v$sGN1sgAN7(LMTY_T|ssb5+$>-m<rFlP({9CB_
zxx_A#5o~v(l1>Tj_*H#*R_66?B7AMe at D4eu7TUkqXM0%6zVW=|bIIh_#N%_Cm1?z3
z`={xc9F~q6l5<v<rlp%G<g~K3^TG(^V*K^SdY{jV%JCkvG}>LmTPhS*%xZZU&!?qW
z)~;l`(`Ah at zc>UBn+K>B&ZdWbsA$60*(6y*1 at q?lRa6|FJLfgxx{7}DdY+_dx^I;&
z3VL6N<<tR?$FWrlw$si#;CHP{Jt|v^l$PW=e4wmSbv?m9;Zo_EC)utc*&Kd!WJkjA
zSGfG^PhOVd##?EmktbOJ*s*d!^sXLtDz;l5g!$>yyWN-?t?$|IS~<Q**BNjz#bQf$
zFZREg8?(cJQJ0*46}zcv(rS`JCBqa!AUjz7{{U=PO?js-pKS!cVT>UM561DHqt~}e
z(skoXdTVk$pS7lx&pMt%aVi<p%WUBy9Z3hRYg)x^6 at unwSGa88{{V1$A6l~?hEq<8
z>i*%2-7!8&u=|<s at 7lA!;SkhrU>6WN$UxrkmI`?4Mr%rypuOjz%?eMOmwOjZvuxKU
zMEPU{XCHL_6?4qByN*fJZpX~Q$EWyL0jgU*n9m}ttjxi1z^>LKkE!cg_A|SxL2V;5
z?fLf%=OdrOrpi&eX06H-*v`B0bkpkIRA?lPND4;+x;ZrSb7WoxGf%hXQaBmxJ?j$W
zn|UJ(62x}&$0MGix(^L_fi(NJm3Ir30IT%dj`-=Csb7}xTNBKbz3!%doR>E8!42eX
z3jvLcKpFQH(cHj1mqRdHf-(tVgV6r~D$el*$NVH0iFG`ZNi<-7 at U}~P^I3NH^E{0j
z+X)>XB)3{3<u$J7JmKu*n%SD8P!TM<m4T0t!MY7%-*}i^N%C$oFbIl^$tR2omRC0#
zgT|Y&x8*>?IsUbCPVlYNPxj<NEYOg!TkXS)^(2pan)PYZjpeyip*yxk;okvXUfi^I
zay6m{Bj-Hx&{gdtLwN4)V7R$><%fuo*S1en*0wF<){-gSWg;DcknRA7^!}9XC&E|y
ztm6Luac>}FyfEWo<bE~tbHr4eZc<4ejF&WQmDxI3OC6QMZHoAeffFzs_rR`qK(o2G
zaJFiZxh3UBZWViSYqh_%fv#e>v1~G+jztHBV0bw9tUX53+Qw<00^iIfSR;Mmj)y+=
zl{(GE#XZLgR+3F<eZC{e;PX-{7CxiaqzH4{@u&G at fO^;UQ)lx_OoT_rziN}qI3LQT
z+lqITdgJn_xs|LyQ$2+!O}zolPvzuv6nSSHkH(9Yu?UQJqs#U0Q;5jx#XDj2{OL9{
zyOq4U40t^=Rt#kDc=w>8BY{fga*zZgw>Y6<_U5LaFfKxFexVBmC-FQA$<(!bn>Y(J
zNoy>JY%%ZL at 9t0Vit{mfl?)=ZrLSYx!R45YW4vQ!-I}Xw@)wnsIL8H?{(yBRqg(M4
zvqK4TyemjP@%m$r#<|I+H!@=4d2VGQ3Xu?tpL6L}<h!02e3>Bf7laIwk}x{t at N47o
zIld<q?o;<y_0;=(CQF9GK6;+?jrecwE}{EH&ZRt7>~?*M+hBG*$;jXV%~^v})3mF*
zX>|$aHnNkl5gy{)a0>z|3tLgEN^U;Rt0)9S%^^im-{t6jy=ufd9Fps{FC>3%w?$&{
z1<Ha5<0ql79aE25)t=8gTWF4s$5pYJ9^356VyN5WK))!->&Nx2d35HuP>ps)yO2OY
zWH}z7b{Vb`E30#HcN|g4Y>@B_m~gpo?*YyZE3<uR=hLGhA+(Yxb1d<$TO+8+=|fgB
zyDRD!Q6fug6~UHfY#a@$ThqBX{3`=R at TRY)YL7aZB|sfr<hfnTo=9G6N*g&I&}tU5
zt=-J<lMH#=_ep|!FaYj7d8+q5Cco14I}1qViZIw~jj;v{<#_;(K+P))nTw>A(==PS
zZtW5>vM-oSxjvsS9G;yHDzEktxzjH#ZCRSi2|UFy$PNyEU_t4QxU8>;9wXHCoo35P
z(TX*tvn<z5BLI%X at R{rY>T7z=^ZPSUU$xpx51VeY8Lf%(r@`9TQP<a+u2hxDyL*vp
zR?|O&{JUw)mr2BB2h6H at ZVgcJHmbTpX_j$W`I{}g;}}v*jf^Nb=t;>nn}6bIB9iY}
zxq?WeiQ3-X3IzE{0A!wnf_Tqr-kVanI?Pi=8e7?mWDj!dkdpEVB#aS(#yx0S4c(ab
z8f>jH>SoQJ;KS!^gl=_^rZ%xXhkC-l(WRd9%_c;MaLn6_?j&cNXB-UIV;707^=qrU
z7fI%_F$R)Y7h=k}!976Q2*=|~1-jYZTT2z8f+uDVk{pyEfCGMq6;~$hZcxynlSI?6
z=ES28Zc98Q$BqMGk3-lWdgOJFwMS<&rNoPGzs?Jts2PAKj`iAJT2H9yP+HnSbse?4
zI=#H32R&4_4hoK=HRoO=@gv9$lxwnUbn at Ml@;K)M(~h-+M(}!;H9r!^tXNrE#?yVR
zorsOsU_vrE_4z>lRd&x+xYg_!>e0<5wX{JkBDWb$;E%tKg|L4L&hWp1b-haB3|l&V
zqB9~~%m>OFJm8%Eo|Wkr`X#o5ZE0p*;JbXXs2fxOK-^oWJ--^OTvD`7Ps6r4Y>-?g
zs%1-=*A2chp-CJC7~_&YwJnCZ7l$-!Xy43~Ti}8atIPvq1M~0Nu6T=5{>rmDibHX6
zV3~_4Aacwb*E!BIK>AZOtscRqxx2HF{i1jS!k1$asLweAsrjn8Rjx-fdz!k2sc<YJ
zZ93T6YL_9Rg$iIWIUCr4=t%n3Cx>)0Y*gM$4AI)M?uj2bD&IS99euscbvL at 8j@IGD
zw31B{M;)uLCP_~PPI at kVdjnkeha$VsR3x&+aQ9axJFtvO$CWr_BZkSq`eLCjqvvfM
zG}bzPh$O#;QnOCW%&aiw*e_3Be at gP*OT+h`9q|>-t6Vm=cNtk-LXd~%Imdt3(!1{w
z>6bnsvimA;ffUCpUApA~RyYG3=NXQDipHO#!yK^RM>INvBz|7v56A%=eg{99s at zeR
zE~w|<T!!aS(;8+-)Z2+6w`9V^RQ%v6=tgtg;8yq9<F%eyt1eejypg>0f(XD!zylcl
ze>$-ylWl*g8 at s3>Gg?Z at 3XG^Y$sV{lJdU`oQ^b?rz>_|caO-}JuwF^P4Y!jL=a2y-
zC%CCwk8^BZCZVd&=h-!-v<TDO&maj5d$F}ykMVc^0QJ`!uXy3SRdM~3rpobYR*mG#
zc+5$5ZWI7I4*sW#<K8W1`_Htzy1BZxc2FaBYzcVW%s(t=(z_?{-JX}>$)QA&7-LZ+
z(v|uA)*Qav^MTNgn5wZ_C38bd)gthd>GpS8loCMlG;%S|?j*?A0meeMPhU#ezS7#*
zTo_N;zqF<WQQHJ`%LW~Y$K#6gJG(ix?Q2Dq$PrARW_Ozkj=*4&M<k!?T9z8!-->Q5
z^t%U|Q>Mu&9&DfKz`#HU83U7t(=_xGT~9@^x4er>V{b3m!|g<kfj(JB;9&E}8TYHP
z`0CNao*<43hZ4Nepq^w>poYc)$F6wvs#da%PUldwx0W+=8i$(TF~TtzY+(NY2;({H
z^sY0-Poda}BL4tLxxXy2gpH4us at x6U_*{>nsj_4%-p6~d*jnh<8m7N*a<a`8xt7#1
z-5AdSi0W`p9`(a%dMBNwCG0S?moi4mZg*~Bzo|Z;ll<$m_<g4}wT<?jbuiVf%K5N6
z0K~?AVh^X#`c_rWxGgmXi%(sP880L;DcKP0WMjsC6m-w6MYS|fp~pvk{egR?Tk2BG
zrqX5t-rX=!2LKH5l54KhwfMXtqFc=+o5eJ<gb`0Vw5<90iyU*o{3{X<71-N&g8g0A
z at Ih$PdC7qqPIL6^KRU$l=8oPq at Wfx*H<8&vrM!11Qk0UOLFx(5-xwGi=BmNFJtKy9
zvs^W#a$F^rn+RLWnIi?6#ty|E<o51<mB7ahwzl*5hgET>>1x=GSp3YqcIPLKoyk21
zG<cK6w)*{~6Ulrn^lNu`?JXjZ29s#OcYaEebI)wxde;+nZhUbOFxa!Dyn8LIBPYs2
ze~G=g`jRQ6X>L?Q at dx4>>&XqJx|?k#%Pj at EcPIGR4y=7^l(+FM-lL>PrC3?Dj8i`Q
znPpI3;Qs&$=NSqPFr%sKS1kMs;tf{*^`o=8xt89ncMc=kfw%wx)1e#=mF%7m_;LRL
z2vm0W_xA8Mrayb;$lyU_n|}Gv1+&opRNF`!(#9u)J`~5M%JXYhBGw3h(j&Lu_lN+K
zFSk#Z^RDZ{X5(4Z<ks%vMbm6Dwy`1rq0dqVdV!DfE1T6kR^Bqc8dieF at urjsZVP0{
z+2ynS-u2dNR_WnAKFZD+T1Zn7Kc9f2pS;-j$>i2ARu4sIyE=VOP-fHar5`a>`2x2m
zJu&q at mB`7dz``vF8SL)liJt8Fga$px`gHs%C^g$Z_(i5Gd?PW!7B*Qx`<c$u_}7VF
zd|x^ri2l{2x?7ilVQY=KG9Gi++>`lMRcpeEyqT>WJxb2eM(4!8iZ>n at f_pm~wzrlr
z6KY7zdH4J|730(Ry6oEvsadWLrzCGbKII^SKRV36)}*}DWqXN(KwIW6cQm6p=lu7g
z^Tg0zOfzne0;2`Og+ER|3i2yXRo&LdzfTPuEt?>PMV7DrpEsWYA3SlkNpC`Zs|Qh*
z8$EhKF?fjFvEXOr2RJ9DIjr*frR&XgV{f+IL6Syu$Q%v_dVS0{ChW^QI;xVmf0&R)
zK_1n#BV}gDty9{q5vwi4Qd}s`1ExM>$4}a(gh{7DT0`=xhFqVRpGw47p5|db(n2m6
zo)jE$PeCk$4oD#2jPNLmaCbo(Pvd(UdM=|itNpI=Ihpd2f;;ieS-jNG+F&uFw49Y8
zx(rjcvuv*;yS(zj6S|)-f;Ogq!lz3CX?F0>a~O&~5&QMe;A_g2l;q>N-D;lN3Mp(|
zj^x{EH@<91Bg&+t#AKsqj(ZVV*80ocI5W9O)Z;DuTxYGDeHuA at EMDqq7CEP36sUgi
z4c8ymxb0%@*1`!Qfpf_$dYb6NK6|4pu3dLs%`44PC;2WM%t<*pz~t~hl`ey*m%lbZ
zqrvklO3R6(1a!|~^sJo<?jad{r8dWaTx932ezi+b)t1{(jbjS%%O}q!a(ZOv+P0n@
z)=msw-W06ux!(BGN4A4PwrKp3Zx}^UpPxC#NBH&TywdMfw$gma?44tixqfhcYoXOs
zRMspam9{0S@~9h=$6R_>nqAr4MX9yPV=xXxXgT?X7)&&&!<JGj6O2={gmpT54M8`c
zxrm7f%QN*LpZ>i~cr9Wh%K~`cBQ8!xdkj}IplWDtWPL at X5=kyMC_8}e0IsJ~o+d?+
z8d(fYmBuo8?}~DM&aJNORX99N9W8R at xB|n?Q0W%THuI23^rmUnR_}BtOo?Q`{o8WK
z9qJ2fi-xn0D$&61O1bFO*!VZYKic|i^N2i#aKb4=a`^9$sH|(&_G;)O7}JL=tjx_P
z!_!}CY|~!DZ*LoX%!3C9j<wWl3T;qaTHHwXtO_&j`Hngt{<U)#4K2DsrNjcuB%7uL
zb;sTuR{o!HC7hG28NwbTVZyNe4;ABAl&ZBU5}ci&{{Z2P_`F4J{hxPXYQWqC1>^3%
zqz`_zv2$`RG|-78t0_du1QCJKyz)IJcJW=?3wXE8<;1MSXVhd at L#G)YMpd|txiP!}
zfjo5Q`BYAncT&*SFsP*BqHf&6?gYrLu_E)dV|naHzqNAO)wRR<$9eOmA-1^OKA7x(
z!nO4)i at S)Vf;RGO0^kyG!Li>y^~LHQAWb>~l3bbYGxDMy8`GMqG^E|)cT=S*OPW%#
z`c376IO3h<W2nVUBN at +Xlgs1Qzo(vu^6Zt73dfOy`cw9H;-*-!+Mngre8$Cfi>(ZR
zo@&O=YF{r1U5G>-U5)_!YI)MtmZIK>u2UU3{3*gc*aIY*&%E&!m7+J6!s+ at AydgjD
zcl;}#I=-i@&*g_(Xmf(2<xoGHAFX)UoYsX8b}yP<N56&1u{e)<OO`#~`5hJJr)^{p
z-<{X0$Iu^kJboQ(n{N|pmnK(@BDJ;(cC2f<LVJA2`U;Nyp|g>r^O{r``Mdrdu~2=j
z!i7~4sTf5(<KDhc6`SHJw-oHWkFmn!xM~SXOPTrq0FgbG;Jc*rE-qW<=Pt&m#cL*`
zs&4XLd!R`Q&CPV$cBHmeEA~So%PSRm0OmuEp2E5<63{a&w(y&+M8|>@fLVUMm(=&K
zDJL&_PgB@(QPC|C%xS(8oycGxdoW-w(7wR>lU|FZcyY at qk}wkoD(DLO=bpcXYUz3o
z&njE#gqMym$fNggub{0nbhgOW(81<J4=p2n-2HleD at CHRIpsFY>2xb}wnviU1y>m!
zPDjva4!>Hnr0Di?$c%>K_CPSOG at JrE*F~kux3Zgcg-Qg^%7eF4R<w7s)pcnHl#Oq0
ze|T7Z>~{KnDsE1>!M>3ox_KqFh+0emL$O$|JeFa=!SxlhZJ?#9{f<8^rE}(7sh5mn
zg#>U0IW^L)t(&~JA`@+CoaRDyg&hE1hv{6lp?Ebbmyc|VWXxDa9tQL3z;pd6H*hmG
zj})$-bM{92J;Z2&H)t0j81SK2B%FGlwOad0j_Jg+M3-}>4Zq3=WB7LVrfXJ3Zs3t3
zO^YBck^MbBwY{d_F#iBYo+w0E3=kX~dWH0(&_+Y}7Au3NJ@#XDZ0>>`yQMsxz;ytA
zSgn0qOt*q)VvVAmmu!A-LW3M(2>mNoU1{K$N>$Zi1R{<+!;ZjptiyPhX)M`vxs&H7
zXaP at b=J`>$9F*P~dz)K`t)h;0k=>c(C3jAvfO>VPd`oRA_&p$%ZX~;i$F>6)KQP8f
z>_>h at b~<g->M=-XWfw!`cUbd}aoU}JB9JP^%{|FbqC(gW?~htVoR*W|(%{}*-iNYf
zQyNbO&A~^?IN*+_p60DZrZiKzj^lJvs4y5I%f>wkBN(gtr1K;y&pJlH1e48igP&~m
z_N^}thK?B#?P5ezyi0E{%HHLB8h0kwJoCnSRn3e~1lNWrZl5nU<|an|6h4^ACmpd|
zls*`DeP-P>*|iNvP?Z+aD3 at v42_?%nM8{s;F<!IcL18uY7XJWdH<xQC+9QTo$CjOe
zJddwEaa!7arSxjdup6mQ{I-@=O#nC;$4=O#Qqxx0?>rsgYwZTs-Ysh4-&55{19#4$
zP;d|ua&hg7)7Es;cqZ~78={CrJjnxr(<40XTz4dzuj1brzlSD+QNFsdx3+-ok`hdY
zL*HQ|mL8SK-F!^bz9PkWrRWzjL#SLa@&=&_#~W}mMmmr(aCtN)!p=csc05h4YBm7b
zycU>?%8E?IBc86H0ncx0SiCoFZK+18>mARRg|)aX<rV%V&(K#xp?DI{M9>pWvM!e@
z-f+D<H=X|gJvi)oZRv{G0_OTfd#gxV=?2!7zE at N2#t83Am>OLUcJE1pQ at jEgVpX@x
zBSN6Y$Dzv-atA-HXtjmDjS|^uwheJ|i at D`lcZ5^?M~r<2KN``~?V!@)c58*2T$S?W
zIb0v_9zD-BlcCvKUigOY?kOI4*~wdnVhbJsRU80{G6%0}tAaW0Q%~09HlpoX-^1d4
zvP8K{>D7)5fbtX)ase5~HPW_$27_~B9gK7T0A~d;Y-z*E8P0OeftuFUO}?#bd1NP9
z3Mg4uIgtq&QakaC{uPO%%G#ES_PT=p{vu+05(J!OU({rF>_tm#cF^KHU$1I94xsQ`
zYB5T)<`uFr7M3t at eb#^C=s^5^D?3Wi?zJ0Kh8<mQpK~;6EW1o#llR8neR|`H>n%JT
zr|Wn3S1oWNy1<F0KYMl#4snoq>r{2!J at gq?NblsDNTS)YDH%M|&}F)?>r|wcpw;w7
zZ-X at 0yxZvRQLir0Z)qYwx?_`u#z&{~tB<0**6khqA+6<IyBWA&ym7}|@z%C9O(NdT
z$$rr5E~O-Yy_~5=37!`|=YV>gRn1twn+h19^Wrk5-`*B0&p9~H9jWsQ+UR*rUW;*|
zX_FZtNv`6aPqJZf0AMzp at z4`j^!+L=7CjE~KQ0u4Y|eVh`;h(aoNoUBCb|OzH#g>s
zX>0rABeO=#8*fd_dGz26XPVsB{5xl;EOE&->}$9EREQ9%?4b0|PAO?}q}`G{`YR!%
zSzl_A&vPpTC{fU|v46*=Kb2ucqNS|1voz^)*Vkg<WOgm(Z3BjHe{O>{=(?_tbec0;
z$!1nnL$IMOymSn}a1JYs at F$0+vx at 2~>ri1?jPXQB$&id~_6OInr*KT{?DeY+A3(Zo
z8uBUbwGd&6e7&Vu51IYI1B$?w!ekyrzm(7-#<CZ39%s)ao`m%|?ZBzUmXW7x5?-0D
z;nWp4j7S<djt+dVeLZRz)y*b58GhL*w~lO(5aLM_Jpmjj<CE9Ys>E2MuILt4+FiZu
z_aGvVv`m)ZD=`BB2lu$kbL*2_#<;qkr5=rGszUk?groxI3wT*sr$9MoJ$E;_<2(wb
z at e{@n>$)soV^j-mAC$6V0l~#9j+h_*yw^3Xc!KL!vXAYTb6prQwFe*%OnP8awT;wt
zySq&b;NGd?xGpaAb%G5nT<u9OrSiy5&5V4&4*l!4 at TbFlS4FwGx44}x^w=3Cn&EPd
zI{-jX$FMx(r#0p}{{Y566KeKw+na&wV-Q`CTCbNI06H-5Sa-fN*7Z#?OH--Js?X;*
zX$t~z??CM)eHX8I??Ld5q|#3;a=Cx?P=H<E(*vpZHS^!Z&x)F#k8Z>aPMu<fTkNqC
z44`nk&u|BBmCM~~QyDiI3$Z(kGZr}SikjNg>T?%Zz>x+CVbpcSMCA%`=9986ohIFu
z<w#-F5=ma(?d=)9?662<bste)fvx;f)OCLX!(*z*uRIuquLs|marbtQ;?6m*Jh|0v
ztR!H&e5?Z_5ymrImEG*pPa`|KqdwrN!2`BOYWes^VeMbDrK0Y8SbP$M)T%49u#;Ds
zdpUfv(>BgfoDNSwKMKlgl(>c~8 at PP%g`|m)bSJMh&OWUno(K at g6cE5NaL3&HR;HzI
zCBB7gcNDJ#u*gio*ljVNySE&ZoR7-5++?L at dQqtq?P9l)rklUA?0MvGlm%P}&-+Kc
zS5FN6nk&_Y;DQmtNDtivb5^bO4Kz>oqD+S2LXtY?*XveoqKsMGTRiU^R}4WtNgm$(
zb-iGx at akn&T<@J6Y?0kPjiN^z2_P7gErn%2PNY at sJRL&#8KG&EkQqk{fzu|s5#i|m
z$g#yMMzOEoX61*iL8M5QOkhSyK+AF5{cCS&O(zuY9JOTAivIv2DWitYVgyQv{P}DK
z2fbFgu(J&)c}iT#CU&nX7u(dDnn)y`NuO{nBM`$K2=o=1bp&^S6}Z_TZ}o?%^ds85
z={ctDE?>myg%@slYIZ5$T_?y}%TpqVz-f6 at FOI}^Jl8Ga8z}SUq*Ek&hm`ENG7my4
zrnbAjgF+JXV6isVS71!TKX}$$DQj~Sv)^4$F5(1Hf^eW`g|0jzsZLIHCCqC$IY-=9
z?s6K2zj0+3mYkFYk{su5dzzqZ%iDRg#6lL!$+&PUb6?X;(H6JNEcnRTyMfm=ooi(d
zpwPnjfTV?Fj^L7vGxvr%XVSg5Q6!pHIMq1W$-_a0-%Phfy0(x at h?+3145Sf}#&c8u
z0KzA1lF0h3X$I)Ss_((ZatIys(zjnrveWLK;#kAQ=W!eT&N&&!ZYw8T)#KE4R=d=R
zjiuVCFh|MLa{AzQti815r9Dh}Dc_oC(2mX-XJ{;6&W+<#D<>Eu)7VxQ{2}{wnIo1k
zUmJo(*$3Y>Ew;TCrK&7!)5guPGjZRK(xSb+xzR)2Dj4Eb$Z!iO8RRuDZB;H-?fJ8R
zt3^xNLtjHL#X2N5OAVB^=>^QV23XI`IrZ;YH>@<ovbMFH#E#n~k(liqbtk#6NwL!H
zd~>T=Tk00_A|UhOU~tT!bovVCaes#w*4q3wm(s-cle)S{xd4px`r at nF#c5I5m{gTS
z-?ACu?LOlERJFKrAa9rucW^oodsla&YLXkX9B{wc;R_nbn8 at cC1Jl&|)~%UXtk&Mv
z!31#~tsq^yKpipOxjX$x=)NGdyR|`ZlWt)YY)0YV+ZE%^s;=6xF{LVW{pNI<q}Gje
zliO^DNege4mw<Y8 at 6!gdA5nb<8?ef^momx%h8YSzoyBwBBbMUk`WcPa+2dC%(aR#1
z2R#7&D#ga58CY&D#!sEGy_|f*(4N(tXuU3XQjD*8EjzOw_f~o1byZY{%ps)vpksn~
z{Ho`MppHl`F06r58(_PSneaa at G5XVW4JO=Li>aMfHW_~?s^n)qeSVe9H;p9FG|1wx
zX+zz)D-d19k4}TVbbBXJa?{-QRcOU?RM~Yec(-4K$>&WZ%tlO+2gqMeovY1tPY}uC
z3zfE(=^}`osNi5 at wrX8lUP+eW<(-~(J6V3|+IwT#xqG=R-Oxb}SPW%J9R4-*cuYUD
zUh>rWEW;e?yFuyrpS0?k>VFDy$MpQFVIB_y1Ky<AOD;gb9Zzcgx>L62;9Ra+5a4&_
zm17tufB?xSpsbBk#yW1DzBt%k+z;W1;Q{w=@UCY2#20$JS)E;?UVNBA5s$7q*NceF
zDNy%g?>{5h!erI49`ya#oi?GbtT4#Bdadok at x0_hhuypW707B5-0Cwdlgc$Iv7M~j
zA&=;}!4=cr=uM~iVf9T?;nE0 at G*+>u7FR!XdXdjPE6z2IUgqK^l~EQ}VUV~*UtB2d
zUnPmhR>VJf*>*nH3762quW?=XHeKarW}0P^Z at ZNkRrVDV-z~9kn6riZ#{hm6$_;vH
zLYUeTz~G?=aQ8K44PBYS+`=Z>GQ}7t^RGJ6J&P-Axu-SPp2Ff%0=EDb>sDf8Fx at il
zg+ at rvBzspQY|`pitlngsMnD7jK(5zA at Zs?k$ZlmYX{bizJT%AC*iuyW6r_?iJRxH*
ziYHYB$6*`%_dZ_bC;O^Di2jxAx-Nh;sTyyXox4>^{HQbRdYlZC{Hu}DZDC1aj at Si-
zK1iXA;S=aRYin8Y6KPPzr&&Lrsxc*o><Ilc?_0IXaZX&%Lvr@=;%kpCITACDR3<Tx
zdSjrrkX%WqZ&ds66vlYt=B^Ss^<^m?#M|zqK4U18gdM%Be?;)oUreiZ-h8i;%A}vq
zoKv=!GO^!TU44f}p6o^zSrj5l<8~CBWMi!!7;zE35=}9*c=q6 at IrPt^bJ~Hh at asWi
zr`fa4{{ZWxQ?@u08QME;_N|ne*H5&zjy6xUDRz8k3+hPVX0j+{_2S*gQ6+N#;c3+2
zRDKnmEOEl<AVeH=+s$3Nw-(W?kwYZFFa(i>1L!*bbqYq_Zgznlah3xarXxR5X7c}l
z)hyDmKPey#cl>KFO4J<R6Cy~+peLHZWeDl|R^*;<+DM2bk}<-h3CRQ0o&{!H+R83c
zNtiL6wn&2qp4~q#lzI&snw9KHay-{;0fdPoGBNLyj+Co#jktY`uv3%gU}Sp%%|m&3
zEv;0av)i0)XO!(M!;A&$PCY6aWqWv(C~q=e6(c~wKiXs4=xGc^U+k?z?GYA^-dvri
z+zj;`^HN?<Zxg-Tk0Y!}y9{ulah&>-O_t(2D+zqml6e|GmoB at A!TYP&{#8rEei#?l
z%Xl2aWI!^c`H{~Z2RI$Y0&)7 at xpm@QCQG<2{>2M2$zc-^(#`?qM^T(9><=~EczaPX
z=ze&OM2Gik0;pnf+>YN`@ul(pt99`q at 1cx;Wv-xO@~u#9+Pq^tWSnP{Ubo}F6vN>S
z3f|!@46{ujNMI3y!H*=K)EYRnmziS9{@X^=?r*PdKeBC at U!LOVg%cit<brY7V-*&o
z<Lx6z at Z{RV-K at 5OipKEEyh`1adz$hO8+evqAIT1zCA8Kz*0-Kt+2&wEj2+F#ek+T;
zwtIP=7$dvAg=F%gS$R)41Tz8X54SYz$7QpetK-icUwGqG7gv**En>*GwL_GQ6a3F}
zROj(U?dh|LuDrNyHu(u25Fs5KAa(bunw^U2TKCw{eY!MYrMXb;+<SA!;a-oVcq2=P
zL4mKlo$VrAIb`|48U5cs!<=Uxl-pLZuCYn<Jv+euFMUqQB$EARxs4Ofh>ff=I`PyW
zTJ%V6)LI$lX#AizdAaC4^ItmZ`jFDKdmHO!5YMy%kUz;JO2a5dI2f+(>&8icV<a{=
zEU-kXLJ$i`Sa7-Q27gM689jAI{nv`qQN6fZS2ITu%7_rSVegM|_~NQ~hs5#tUrM^v
zFQ<%O7}{7MU)_gc(HpIDaclGGT8TH|EbOIRM*I07cjKtf6~%btRnxp(Wtn20-u-0>
zZyL?!Bf>zzBeC!J(*+yoi2N_(ZDL;%9ZOKi)AgH?1;p+Mh~pe5JZ;Do^b9fE+gL>L
zM;gMUhLEuUDevxcj<xfbiM$_kWp|=hk}}&)7TIBMy8~o at Jmj9{y|U6%d848Ww28_D
zU}FbsFZ1b1*tu$xI#05g at p&8~DI9H>t}!a(h8T3LJFOl)M(X4pL+x@#$_ylcA?^kT
zBR;iK=Ty1SEGA{RYqVwz3Imoo8<%Ow$6CLlY1SI0 at VmDgC6uboBOnYAXP(_g1qjLZ
z36SZSfJG>cO1;F(z+z4n7oX4n0IyPO7fTz%BFMJzG1zV+<I6n;{ETDyRolq~7WWX{
zOAv|?!E7lD+a#Lv9~1mlwuat&8%QC#wvZGu5=bD79y%IhNwN0+C5GQxf;ZZiR`(=b
zsF6a+85j<Y-=H|A_?O~-nWVvY6cb%)cN{!X7DbPcK2lenKc#sU=Crqxxlm%kz(2%A
zQ2+-LD-TSO)YUCcj!U!K^nVerjeI;!{{V`Av2`?G^eCZkEfP$0l#q7=(*n3i{28lD
z9;>Qe_=4L`)M1pWSiVDC06*47z+fpI4|?IHo at jR>C~{6nC$GLKWWAZ!_odl^0I at s)
z+w!ErQ(ex3Q1LySz7dyBp2h*GywS)t2>$s4vCkvZ1B&D%xROR;Fk%T9C`rvnBKhm)
zI{-l~>OU$pyX&i#lw3#U!ZEO({B^3h+-xMbP{5zOR@>9qRY;j+c?>fKjZWRY0jn3r
z-rR`U$yd+G-zKO%rNLmyyJ6rF*P6~vrE^HT>P=^L71WYMP^5rl at y30s{+g26-XyU@
z5g>B1C?Jna8pyZ3u(g&{W+r5fi#H>XdLK%L{{X~x@<$9t;c$gqgcv8#pT at kpxcX7j
zI<vNx9;Ef?Ub^y at _jky$N6ypO_6D=Ht$O8Uc;k{WGoZpllffM4{{XFAiujP-Ng+OD
zl1R-a6%T9>KMtRbU(od^+Wt$HV-%<53RgQx^!#haoSk_&P3U_RWeRlNmc7j>W6o=P
zNiE15QM}OH20cMOm7g`FT6N@;o3k{soyB`7;-z_fk}Z}eP*k%i7!FS)^Y2-$cJ-0H
zrM;=0kIcbF=1gONYnPH!_#THsN=EFlt3bE*>amQHavMLxRL+ET3sqRIl`-=C<8VHh
zs~TcS4a=q2bV$!2j23P_Urh5`x{ZWZI&w9riXR~5!+*~*e)c^<u8(f1dx`2PQs#WI
zIk<c)1-yZ-T|{>A{Hy#-YURDt&utu=P?&cZ)tF(sU>{nwd1jKt*FJHU8E~=|;F37T
zJ7iTDPMaKFU9cyXJ7qa2eFwEmtn0f)S(-+aX)E6MH6A${(l50SEnMs{kG!KDznxLk
z>}_qY1+|pYJ-R}rq>u%FGr8iq&0kx&w}33ShF0 at IjW+SKrzh5}XjgLHSzON~XtAP|
z^6)_oj=Asjtm)9HPF&X;a7Mk9w<xXUPqCs#EUMTnspmg|Ja?>%?J=&5J5QL=0#xT2
zJ(uZNGNz{bo7`K+B(O=4!5k1UI^cbJS7o9=w;FoI6|}<dJQ-LG$F6bOj70s5=WhQ1
zpy|4Ek0!)=Ub3)4Y&9DOj%7PsoVNA<01tn9&enAp2BP*U47RYuawP+R2<Qp#T0SDY
zPYn2iIHc7T?w$~`N3>=i_ID1X)<x~?dX at K^Dlte?C6 at rV{{X6$KY6Joxs;zR)$}D-
zwA8K87Baj_c9%VU>pCq$2c8}9teaSnsrnkwgus!gBPe1mf!7f2>s-kZSlyVAJ=B>D
z5b^T$$gbPL#rH8=*{d4<Ah^7|N5moo-G$t7f-7slJ{qyr67p?W8=#|NM9sZ%k+|ci
zu2Wvr#P(@8pJc4rSev--k<@yA6$YQKYD;Y@>B}sr#|+W^#V3rG>^ZJ$RI3!Bp_Nx2
zYaI89Ah@>i70s+?ZJc)nV`TfRyRa+R^#1?|!gQD#@>xvnh~60a;{=m|o}S{kSMdF&
zwBj4>L1WY#?)j2(z48avx_vXv_elqvtD7x8+Yy;rm^8-(Fda`%=UHPpq at xupG!dyZ
z`J(hRE~ART*~M($e9FoiU;x^uj0|(h$E98I#1`6ZhM9GE;wy-ph{+p{Nav2?uUT8c
zs7A6vQC2cz2d2@}cfE7}01>opKx+0rS|+7pwxVGRH_RM1(op*2n(|{&&PpyvTa={l
zV;W6=OS`$Uw`k{*S%XB##groB?_#oiVIk5i-YZsA^3atQ<dOz at dRCRq?w at ch;POje
zE8xt-1%KHmq0MwU9-ST37ba*UF)0!ODFm_X2eo!Z!kW88Mh?ly at ZB!MQoHdXo?I=u
zkrE4m_n3~D{`b9gPo!J;b|#kLnCvCCM*O3CW4&zrLa~A!X4_D(j3hG*PNm3EAnDI+
z{{TvlQPk{K9NpO4`6U(PSs&#LI|J96^j&{wqSDY!Mw{i;- at DNq!fV#^yDj90Zwwb3
zf^)zlwQ&9^)S|T3T6<U9bH98d9t?QseZ6aA#U3=X)3>d*fo_6P#GLc(*QIe9g|+91
zE<V`>nTh590G4V_0Q#P5*TYfORC*)I#o}z8B>9;XmKVCU`6XqNN6WL3l6#ZySvPj_
z+Dv;WJTVx}ZP?n&Y!&Y=St3>{%M<?feu`?gxY11_M+(Z(51Y=Jb~_KIabA>Vt&bLQ
zPCVUD*!^?I8fJ<a7D0P)&_@~hLHBR)t}_1s#QKK6Dyj2biNto0DcjGtf5y1~01xQ;
zkBF{&feW>=<(gMJRO7Jz@%9z#J`syew1ZEbL)*^bm!S;(uxsAM<EvscZp+B?@Y!Y^
z2)UBHyv!XF!%qgPKenP+5COBylq_f2n13Pp*Qv#)S)?}O!gYkJ1F{uY1wFkgX!LZv
zLmQ{=_U>>-Mk(5Dv`ZU#7R_lIwgW0`5AHG4SDSRsnMuoY#=bawM!SPti${gfTU*Aj
zA`zX;dS~#(c|@KqGR#Z-t$~0#SFUS+1SZ!!MXKt0wz(CQ6U<C6fb2o&8zcert~cUm
zf;>C${{TX?wT9+RN5mHoy`}rABlRoWJ-&vnDmo4=trq7W{{RUTaX#pwW at Gn@H&gVf
zAl5E*X;L`giC;XruHHRKtYx#7KovIU8TpPYbHl>YIZ`X}KiLV)jch)1>^(lUBZ{_$
z_qOM8qWFC#uz9XzG1;a($$`OR{nhn9<kz8ie9dzVaofg`fx-sEGOj;TeQV7wJWp$>
zUaGXRL#IXpK>|hqi3gzWPf|^KkA!@A;Qc<##B~8_aEcUtrY7e-NFW- at D$I(Pk~)Rb
z at 8YqF8zLgQ&Ly1?l#hKvpYMGtori|5^j%Tmdr4p91?H78kV)^Hetgu8 at t?z=X^uD4
z?qRfy1&J-;d_Svafm##%P4FeOO*}fy&BU&p18DfjCm7EkjU8 at sT2?e6(yct at gb5=#
z4Du1RTa4qLwKcYz{i)&$Rk4}vqq1Y?G)xE}fKKnjisDn_hlF0{SzgNgOdDfM<*)BO
z at EeMEh`u&>b4AkMPtf6#;^KebOL{MsjKqD`C+2K-sk<7dF2|wV#bxB(-rw8{Js}<C
zp6X}9bJ&ig<DeYXL-FUqi}HBGt6p1xu^)3-Ru$Md<hyj^r&{@M#$Gnn{8K2CQN4Mh
ziGOzpIF2*yqmRb9g}rqdX;iK`IqyoxL}_(r)?O$5p>znMNOa#0-@$wUA!nXEV?FRs
zKGn!-9~+8V0~VXKl32+#$Rj=Y1Fd}Xdoc%Y at 7<A)zgAi$SfUXzRTwxO>8m2WlHBzN
z_~m at bn`5;@9Ipj={cAt|7hbBj(o1mbG!4Opm3FB1$0P7Hz&k*LVG4kJ#~ft;0F6{=
zW0A`O@~9Z{(DHq9YMMl-+1kgt_+R4~zlCje0Snpg^BP25(u{NqlgDc4?7lB((%cIu
zw?{OLH%lU6Yv$N4zRb9a5|NLSJ^kxK+VVCECVU*>N#M}37a{gs9wJ+d7^i~7OwS$+
z_z4yUs}sd>zZAT4Hjm(zyjC#WNixDCPD3}RPIwi;{4eoZYia)g2>z?7Ev3DX6F?op
zgU?Kn)~kGbit1fQPZ4UdPp2$ciqTkp?Yp}X_ltU(&8rj1X(Y}=Px!B?*xX9d+1aEF
z+q{%rxIGJQ?oX|HK9S=ae~9->a&0aX?3TqPwMhfCYtwR$=O-ZIyed69XWfsKlZ+PR
z{uR;qH^m3Q+Mo7_^5j%fC5?gFSGY7-=y8i%YI;7C;Y~hE%b9N$I2Jg(vhq$uvN=B~
zAmD}z)Q&!t$?E#$ybNH|%*o{zFLNWDzdeU<t#f+6izM+K_|#RSh8NEf=bZXhbj0ew
z#k+EmlB2k*x<*`$?rB+HK at I)2(t|JW12|)l$KJh8?&nO at VUKT>8<o$<<wzr(eqy{e
zZoIcehApbVo(C&UUldMm(%E;3j(%)#2&DDc)xp^#(>z0OJ;9RYfV8zFFPaY3Z1yDo
z0G^dz9ceT at FhvlL%_k;ge=xA;@aHwkMS6883f_+~M>|~Z2BTXGcvXtCFY$S0xD=I$
z<!M=u*LB;SXqk(Z5iZ2X3J0bIK^?u+eq58W5{x;=@QiU(r;y669BLx;QQUW?wc}}1
z!X1MvfQ1Rk&O7^4zNWmIT-#3 at UfEdO>C!jaBA9%P&61}*jdgwu__8f*?X5K{W}L#n
zH2KSg9UJN^&+Y6b)-D)Xz;|%mfE07olfe9HrPR%BJN)rH#g62U?*9P5aahTn3Ywml
zK8o=liLI?{((uXhx at 9Dj3bO;w03Cj~t}^@L%jnk4r|B}Jq-~L9Dt0FsDhGah*O%OC
zWXTK;<SCDLEJ#t=N2hwvis#Ii%#Zi0p1J$9a|CelTC;1!e-Slb70mMLI)h0ve3+B&
zueJs_tobf3LZ(>>2N+ZLxTt*8NZMwJUw*(ErmG~98H+l`yrg7xspjl-a!0m?j!LX<
zWGF%8V>up`YDv}wCETFTMD8l0$umID9BNrd1dM*P$BO1?qe%w<62za%o$f<|dKb)b
z+ at h3yn8w50(=P4hf+-|IHxNEw at Ty{X<0ydbaDM9a&!tWF@*~8+GoFCc<|C6$H!`nf
za)-)g%b(@enPn`u$O4U#@&leQewCv=w#G&&=R16%QF820L5hkUMoF9O7WS&zhy<cw
z0sxOdaK8`tPpx_Na|$${E$`@W3 at qgv+QSP#yGxap<A67D^5>KM>m$UTAeM^r%hTK&
zSQN97$zzTND}}Z3ozA1FOq+M#?lClL*Ka&y+ZC-YwGFnKVxG`JKbWkS5-I1o2h{pk
zlZmZ~sP7k}=z0|J at Up)B%N`@OlHX2`P=@9yR$ukFx!jop86E45)uynw@{uQ7i=;(a
zB2_sc{yjOa!X!;eB$_+<E!>~pDv}qcAm+JWvsh}g!z-k6PO>ycOk)Z=;<zxbQcs!e
zcGaf}O(eH2czW9E<5shZDO1U5jsb2X00Ymc{{RZn at pYxmmC{?XKpxrfvqaw{>yk;p
z_s=wvq#hfx6IyP2kGP0H!)LBP3fsN1Hy8G8AVC+Dj_!J|atFR^X>vI!x1q at 4C3trz
z>34tdl0#~#8$?RBQORPXJ+sIha4SOA#y<>5?If#`<=xA2LFfmt{-(4(#TA|SlF~dp
ztCo0x=rC|cY>L1+usY1L$#zU*1$?mIdmnWBR}88~PnCQpr-!1W8(g>g+g*^0*2Hf4
zMUNOo?Ah*f-m6_{GilaH%<DWV<s>_fah$Gc+FjadHXe2BFPy9t$BgU*;0m#2c#`V(
zF<Z{NE{R8qLBSvcm9BR;9kvGfC(UD at dy80Zn%uK6lPpoYXPlE!Phkuf(Ohm*196Sm
z1 at nvwxp}1o at jT*JHqZbN?Z at 8iKAh7Y+TPaiSWe~R3~`glZmI@;wdg{mRh%BARg&g#
zXFK9AYvf3oL{5vjiX?!tjNtUD-X7G2jqBS2K_ko&l1SWppTe&AzS?a*6`C~*bs;M#
zB$Z*eJIAQ)^{ioY4xYyKZoJ9bFpkOw(f<I~uE#s3+c9{#LLSAW*O}ek*xFiXgHnR=
zpt+UUO=}A7EsSA+>O0kK7XEvRq*$4hpuloF6V%ohhAt=9wHU1R2_~8uGF7ecF at ezf
z3hgyd0iW#n?=;Kd98pLE+e&a-Jbev$&T21`tG&T;)QaReo1}*0Se2wyn&DIz2iM!v
z*0HC!7jjKB2=YeGQF-Z4sH?io+&WF?EK=>5gCSlA91MF_C7*~9?3zn?L)<&CQ?nbr
z@!Gv=b9|}9<C9#@FGF at cPCKz;Ss(2%02V0lp!3k at uWH2C^s9^C6fUW2ENKjQXGc74
z9Y-CrPCgmeZ*;M$Td$i4VjpC`yi5<hj>F!i(rxW-bnh=$xtworkVF6<Qgc|#lApa6
zpL11J)mB>AyA7b%5XT($^4vrF$AfOt%1<ZWt!dWpYo)4~7S;&~PuxCNc6*Octw$e(
zw0$DsbtW_1M5R>4D}C;B$*z*_D78qHtl>>Q)*u9l0|#7nBOspswZ|%ugIt?_M71eP
zQ-rnABk<<3mv=V?^6ZU~05Y)y)qw3=9wFD|)h?8LrZ~{7P@;g+{{Xd)$E|dl=AUhC
z1<Z=1`SArqvv$M$KY_0=)n=bSjc#@qo+bgNUc)?nDqTg2na5rgDI}Lu(KH=V=7!^7
z65Mdj03e<RU(jZzxYru?8))vOX2R`Ii}Nmh`wa75XQk^mgc+ at z2ax56IM1zmPL&0e
z7UD~l*))r=w*LUSJ8{^G=c`5(F64R=lY}D`xrO3S64~g9FnF-gU at Nc$l6c9iO*h1C
zsOj=s*@+}r{%zpk06F|<@kWttsN6~?neMII?heD>aO;Z2gHp8c_L%(0tN;N>_3!Up
zP=z@~TUKK^)l*#BByGd2++2fic9=yOiY#z=&hLIJFItMy_RZyzCR>>B(S;*v!5GhO
z^%jw<T=<83?U`bQa)*Rq+2{!C$7-i?ulDHTx>f`am6RV^>!%J`d(O>vJvuN|tr~i+
z?9SJGKR&B&W3+-ck=xDRBM+35(NL|6Z2}vOItzR0%FO}*8XSN&j^`W<^`sHIszVjR
zK{7V&%nKZI*jFXuFB$8;ACh||mI)znLduJR%j?%X*IX)2tK@^!=EmWuVBfTsy~{HA
z(@N1b2;!F6FJ^!cWsCv~W8bZFUODlVhl%EmpwrAn0sZMaNhhxZwR6_?^XeA?K}Bb8
z;vjytTI+4I$fpe1$6Vl7t4|G1GgE&Tsq)n^Q=D8<v`^TN2cznLWsWiSdtd_ at 5pX>)
zzLg{k4w2#%x45^S;!9^|M1bzfvB+=!u&xin{{RqR at Z|SRJd#Y2i2ln6AG+E`Sb{mp
zIqT_5tbAy()GwK%(&TAl$ck|(j|1Eewd$vB$($tJ;(Z;VYE$dNMYN5P`Z8QvvK)H#
z#w(EV{{Y2(1H$b!t at Y5pzl*K5nhD7r6`T+N^&HpE{vr5>tm^jhMAz4i0DqDgWn at xu
z{8(*VteT6nrL^j>zbqF$N7kdRhH8sy?DVaB<DS2-Axl(;OR|g;<=ZGMPpM<niu27z
z`h8aJOS{RYxSC=MO*@u${7qJlV*{_2g$FsuA*x>>Tul>CgCGY03{@*y=CO+ChZ#JK
zmCG}5K=i48-Q`5F0z(1EzpX_*!r{~cSwFk$P{@EX1Sfl7HsPF8yWAtn%@~}A4$|U1
zymN|Kbp<#p6G&qr#yg(XmhvUs5~`86K3+k_F~=3Av!qcSi}IiYE%c+9O(fBN;itUv
z?jxC^by5r@@lsprEi8CqRDp~h1}i7+LS;r-NLA!xj(sYBJMAgv02Rr at Z8;SU+hM3T
z&@N at 2L*c at cjN`3bTjsb^BRC`+U<#t4mg+WkETA3d9ZzgfZV9<%cw`C)!y(3gwKr{#
zl`YFN%_MTftbcaHC51;437yKf9dLQ(nIj9A0bG^O%t_^GPL<`z3S2hQGF0(R+!rOT
z#kXI!Oa7;510!(AseqCr<@&ck*#?<!ddUNoQ at bHgrhTgOBxqyvGi#1_V}VKNN|!VD
zQ50Hw-MJI06jR0+lU8N2w^cEQ13a)%f-5re?JRBp6Zx*kb9)L=sV2fAW-k1h2=D1a
zk}g!IWhbF-TYahJtcAS_jAEb`>k!Svh1mBTZ55xWU0hs@@7n8(9AkH}s?st|63ynw
z#aJOx$o&4b5~!oAIw3{MKIzd7MJ=U`Qam02E7qHJsn2;Nskx<C{pRd{8qa$@ux~_Z
zANZNO4{C-h8Co~hH-{smXFpDA9Ii^F-m*0&Nm)c?+-LZ+j^CwJpHSZkiQCO^Fvtf5
zPpv*HE33jw6orV%0rR`?tG50d@>$)^OrtHlgO8x?LYA78>GHcHBG%){w`jgljl^mc
z at t@^Z?nH|KIc1eb-MvE&^==I+R?S$WIZ}IeKDBLZ?jm^AJe)AeX*-Hs_8+rXvNCLb
z(dLGB32avdagt3*_7sI*$aA&5vyaBK-%m534gx6Z6!2<DVT&!ZYo44QpPe-#+#-=n
z4-6-HJDcw0^s3UIw2ZWm6X%e<{{Z^cHOwt_HXjj2y at xrf@m<=9(ODJP1GlLl`(x6g
zQ%k8ar0nd7)ZE&m0kQB7(s|7!2xWz&kprH8)^$FWCEetlZBnU>vtyipN`mHiuHaqh
z!LUIHz#q<~O%|v%W?r|~UJDzWSl(YQQVYi!`B{fTew9WWu^`Hnkq9|B!OzyCEG?JF
zkR(btW>cP(Udb(zDN+JlmdPAr9 at IJMbZP99)sl<UTZe^Ffl>nkayjkvsim?OpEND7
zpPL1T@~X1OEYh5^Me^jxI^cBXtHRRVDuC`wHqgv+IO{@p)#xpqleuATQtlv<L`!6i
z;NxkbE`%<diDt)E<bEQmND|GYMJy!AAQs_!)nR#TR(a&PMYy&b=T<l>y?Rzss~D at u
z+u1vBp|uvJE)`^SQH-muDVMsSfUe?H<o+Ypvu3-ryjZ1akVgLiI4Qtk*nMf1TB>Ur
zirQ|7%!|31jy8gETvajj=<l)9PX{W`nQmQ{>o(0W8<?Mv_o%M5hO at JIoO2lfcFC%`
z%r_c6=482zVwrz)8pcS^x%I_HZ)1{Fx4D)dG1O%X4Zn}2c~$Z5Zv8iSoy!QImpWH6
zH4heF>FTb4o7;y$1Zdo=7VDo{$(vZ!<MCvM_QHE;QC1%*vZsQ1&#5`)v~_(Z8+}^R
z#uArJX)&3m+#OtTfDeA+nSZR^UU-3S3M^J>5R8HI1v$vcHH9RXzX<Q#;;N>lZe}84
zX;J?GX5E?H1+B}uF6Dl1`+mRudehPF6H<!y!v6qu!m_UCamr-pk76rNS4gDNr`4gI
zCXj6g2$V4k-My=Y(e5XC?=?82m0+F1DiC at D$s^XfRY_Ni<<X#$jXNc(I*$-(*4CDg
zMW)XzHj at C7mL^7o_iPTi^sIjj=vO*j${C|$8%R*R;~ruI)C1H10IyHdwRnW+CrM=`
zv$c9)92)HP8+|%0Fuao8EK?w0XU0KpiVv?Cu1U^Rqsb?Gn)^Tbeb}K5y`8&VT)cp!
z2RSZZYmvqm{PeAV581u_fm`erF3ubuy4?d0^WLfGpJcPUnj>z%Y`RhAsW?&qAa&`-
zUwY5hb%Uenm(~^y<Xmp~9zsZ0C!GF6^R7u=s<AxQf}HecRJK=oe9*-%=?NQ*`1yDk
z!1t~%T(rNkP}4I;Wqe`A3WMr9_p58-jY3@>Gic&uiv|4Cf=TO+{8X`PH$EUQ=DORR
z;IqFVe7t_5rV*7lc8=;*BRXnEewU~%_0q#6C^*L8NN`e60K*g885I_%1DlIt$lq(q
z#~+lL9dVT-*ELQ2M;@80UfSDB9pq^0uPVf0;I1~6>@)h+iycMu+uf}bwbKtb<<IWW
z<EP<Pq00H5#MG(F7i~(qt^WYpH4BJBJ%`y2 at 11didbi_N^|0?9jl{N`Na?od3=%o#
z^!;l?#P+88;==j1u~#<t5s&$47f{XXT2`^7u{Evf+#_HiVlW$wf)D9ds>U{UJm^AF
zo0EH-^z8bII&BW=_Yy=n$6=pJ^Sg@(uC?2{7|FI(ZQLMmbNoGcuTx(TomR~)N=X9S
z0EHSgR_oQV-`csK8TfYYD`(XH&TZ|ZPdX`-0p^k0itEGFN=_|W=S^61Q{1uP at nNCq
zrT|Cw^SAEibAy5WACEQD!>gvJ68X}IEee4wWw6TF^!~Nvw%XRE43e?(E<EKDG*^wn
z<M at H>ee2M?J)`KCme5}6SIsjk?T%|md5S#u&r|iRF*ICd&mmBnjBJeW5O{jxH=hDq
zi$xx9oUNQG<FD4cO-n_VE2|w+HE3+%D!ZgotAW=i9GdI3FBIHZ!*_3OG;3!Alo=gV
zdS~#dwBHfj>pDc5DZUb!aIwgVg-&`g>Ham*3iYYR&N_aE6ND!{^(#%|OWREn>GX8_
zIVv_pW5||HnHd~$>s)r5{iAVdCDgX2cvS5&#^H()_r6}Zs~Xm~HiMzxTgxyP%P*FO
z9B?_wABAi96Tw%Bp{A*Scr5MT5-b~ebt8^_>tzU0rsmq$?>Q$@P^zOIyPC2-hcAe2
z_Fvr0u*!ig<A0Rr92Oq<uA at QLtwx>p3wv~1D|q%5Mg+I_iS_3-G#AlpdSQ{#EH9%{
zu}tm8-o*CBaWAO1hTZ0gA%qrXWs8tWJ$d#0GhQ6!D($3tbkb4gdYw0mEF}KT5PhwZ
z8-&V|a0&kJvFTo8<6jHg*y)RX6pY?p(JV^aw;txYZF9#js_98 at YZsY+ZcL9Ff__{M
ze@^wwY2GfEQ+<-eOmY*101kf|?8DKmO<kHwbQ?}ukMOj%kEm&a8(}KRk3J?|W6w&x
ztxf*`2)r}H=Ff4a%Ex8~_ki^0)K#llq0xqZ!<%XMdABNdFz0X?^#;86S=UVdAZxoD
z`C^VnC?kHy)b{4Kry16(f3xOu*QpzGG)(sK-NvHJ#EBCp&9+1+dgOpV#-h5>q?%hR
zhr4U^%L!Eu?g1N5(<ZK3>H4MZ;JKd0)uD{8^o<wHeD^r*U6rghdSvEUgm&vNA<>YW
zkUFpb09v|dTiG<0ujFS(4=h7%t9|D=Yk6{)*6>@baS(U1FxobbyN|COD^FJOnoLaT
zVI9Ah@}&03^Q(8={{ZT)C&hQyLsq)Hu->tf7kcEULC7QCtZ63h%S}yIX<i>VlJY+b
z!Nx$xH8pU`qg7h}06U)U4;LIQPi0Yj%XTxZwxxNfMC8g;$ghlpgUK1Dc%#DU;%zDQ
z7~u};1clIT8#B)b>shyVpJojr+{JMtp>=m09(rx<T+jR^I^<UJ*rnS?Ym5j9`Ei`%
z+*frhH1wPvsPJ*P*h;HyT{b^f(G}reBg=)9V5<DQ<AYpH&YLt+F=RX(G3*U?dR3L(
z{-RCv=2*gp9#P02P&!w$r-U@^Uqg0i;<ih+Mt7Zdg>d)-k;x;Usjj)=))vZoo(>|U
zF%>Te*!8&$#^wl0COO^4KMH-czI=v3B7muaqp39(onb4;#hsfYkVbzq+NWD{2z7`o
z3{E$mNw0Cp?Ugrc5=D0`QOZjdxBed0UgF{h9%DC|Ha=a$u4%(c5|%R0n1>vUWRuNL
zacg9jtXf<!052UY7dWn at dnw;dMTo=^91*y$0goSrJtdJR4ZCj9ox`E3vspzwq-zQn
zP<n%cJ?eC~Ap-1Euw!v!%^uY)8E*{QzQZl<)@#Z42E<@|-I|=YCRe~vHeloo at lK1%
zia7*>aQ^6Q(!qBfj_s(B at 8u_x_)_+<dji8sJ0aH=uE>TcF&iDjBb?HhWijkA$TxKi
zK*dcSqRv=GubsKidQlIZADAZL68z42<J{EyRTD>t=F&)sY<#%(Mp0OD%Exf2Vberj
zW+&Q=GH`lx+N(!>1gPc)d1F at Ou6e5wxt3kh89bHhik#!|sFh{VsNtTR%$iGhE#LQ(
zKLepWeQMM<R#J~BNLg2!%=xZoAV#l)xbGj8T8`3E<(Lr&8OR)(pJ?rPgP|0yH*-<i
z+RifjvIi&Ss*`Hc-YHliA#s3QVEt*4ME?M1Ssopz-`;Mg=~NO+c&>v;@|IJPv~l#R
z=aN@!N{udx<d)IQu3=Xp$;Zq$AI_~@#_u5wa{gps4WGh&>67Zw%obF4^3}HNZV%R;
zZ|1p~6_Naw<)u{lewp>Gol9$S)HV2Z6zLGo%_NKqxaV#%YC)t35lSO60gwT~Kcys~
zPZFdOvtXUsY#*geXH$s$=3X#S4o-i<q1Inyu19M>xQxUYq((UvnC?E9`kI`wD##AV
z at J7#=XY%x_FkVeOjGj{>0fpSz6(^f at 6q_aTrjHx3v<@m=Nj0W`mqg2M%J6|Tz=&`|
z#=EoaQAvKVg=Z4%9ZZ}Wrz?ac+sv;Q-erE?!m;MRHzlHt9hmS&GlN$dIWKvcy*5`m
zIPWI8U|@(v0Qro7ijPs2OQ(t<KK}rl7+;qM+|pTD&Gsd?00}TS&eMZT`x$`>O(?gC
zn at 4Ko@O^73NvkNkn?^TUs|y|M^D83~s;#y_2TWF^m*FH+xX8PB;|KJpn8h8j7UO#p
z#z^Pi6;|rymLx}noc{pJMK~2orJk&nNp>y`Mp==+dzT=9r>N(O1cXz#SewizaV&fL
zRcmQs(+8b2WGivKj~|9;4=vKOKs?1PPQr3UVeMOP%;<EZ1f7PIX;?_C at p>~h(dcNJ
zJ54IsBvJ+$+~E##PrXpOxVYaWmnBBulp>K?mNw`mmPK}yvB-}+FV>woUHjUOO7YRy
z(z at 0ohH(*%;}Q^noD#&<dyILp1ci%^qdXc*o$|7>MhvF|o^U-yF|S3NGdoDf87R3J
z9>4u+zH44h6Sb6HrH0bp<ZhloyH0pH?b4g6T|*O%ra0sYv=v?g{VJULf;vO9dV+R<
zPYgYAS&yvQ#jHKFf+>-kX$PqJLj(OP9bS0rxe76-JI`aHxHDMBmlrUs>KEi>=OeNI
z0P9s7J$T*(2I6r76)dC<pl3Cged77wN-U7OZY5F%8;?WR{4150ON2pd=15DY-B8_m
z&*hrstBGzZFlMU{FN(##82GjIiwgr`ZeWsl7+s<a at K^v(rvvq at S#=w`+k3|Y&z4d=
z%&#mxE317r<~tX;do_v~6^3IOBpy#+rDo~ctWj7@*02XL0>HB15_#i2dj6G)o8|6f
z94nOl=d1h-&knTuwcOTazQ&fZh9W`Ee;>lSy(aoU30 at _{h8FXY=1IHeIL`oQp1mu9
zyP9Y<E4#Cp9z`L*=LNbS=UU4I9w5`uYAKs^h%j>aK4 at TbpP;U4^p#B{{nl$k87w{M
zwYJA;{h at WIS^#E;Rasf&jV_aC+1Q`Ef==!@_Qi5uGu0w(V#+|V+s^jLCJ~LGFejhn
zDx5l<$~MVLzT#d!cVr%%)(?&zX4TTw*a at MD6ook%Y%yQ1F<8)`p;JUyyj0X2j+eu_
zwAzJ~vKW?WyvAQJ{{RR-Fdwg4zv1mN=385vTgCGH)4fPw#DIVL_0M=|CbY7>UnX3#
z{IR#n3uBBP)vMsyS_mb5Lk&8U`?Yd*gVg4_YD!e1+%z+zKW`N3JDPCae`aZ#g{72!
zSa?_~C*KS>+DYx#isN-J6aAjX6*nZbU at pb^f{vWmLE;Tntu18o0?yuNQGxQD<onid
zgJO>V0K|gXw8bW2``H-$sSxFf9rM%itESW<=pr#Rxuld>z7K-q#Q_91j8$;XWIIP*
zFntYrRfDa|G!v?b;~}AhjDe5h`sOu^bZNA^{Z_)p(V(#riDG1Lyt{q*;P$J26uwu}
zV6mGqUlrbFn~<#Bg+A5gSF0Mb=C+3MbEcyTk{_sBNnxkWeJU2Xd6{s(bSGXt&wBGO
z7wWgZAcZBjVzWlZHVnUa1aR0q`&Xk}_<~4mZ*6a-M4C6iiFw+3uh$^<t}QhyXs+1Y
z*(!^z%1-`wW3C7DtE0_sZe5Pr_-}0+Mph~4`qjO at W4TFMK%>owWR`F5XSZ%ErP82}
zQ at ct_ERfiNl`y_}^(U?et!LP+wwna6BdyvbKQm6BF=9Z;BaSNNp1M}}C88uY=^4ub
zm382Zem!WFMDF6XIMq4fsdC7J!;WRqF10uoF>yPxf+ktQo*NyH0;uSkkM^?2t#X$d
zjDIwi>~_jA=z1LbS5;{&7WR`(3az9&JlLd6C_$CC6WpA~6|3l$*4Gf~cKUlW%PO7l
zPu!8oU*Z|ZO374J8-vj3gcl-7okp*y+v%1Fq_C25MA7GyfH8_wa*L-W>rJvdK&;ux
z3cuscVc%RNl0BW|KwXExhIiZaBmV%eNu=s;dmORJ1H}}1UnW6-{PxMm<5=>0w?x#3
zv#6P7_g5Ep*9UFIv=b2`%8~r#P61^Hty%bm;?J at 8VCj?HE!C(2ZIzI#?E at Q!r?25u
zE%iG%wHe~L-3+dxL<cXlbjPsB=~aAbrwj2k at wt0*8vLq&V;%8b^x&l^b1e>vzUsU;
zIQ=J8veeoap3I2ClxHCAJQ3H{uiD%{o&Jq3$fE%jOArs#RSh1}DB)2(+^VSC<F!x~
zRllut657c<oY#igT|B+J7n765Km-wwU#)u;+Sv1>S}}rMN;*%7B-3tPXSYeWNy{qv
ztGB*Kp{|<$07F^yukAZ+S~z5yK(Sh?kfamTdJsKpgz%@s-9uTkmh)CKLueeWxKdYs
zGtbc1q4-n7t9=}6d34KR04686KR)bZ1K4p~71U|_%3E%8LCU1Q6PUR8eXi=d?StM~
zNgk6F;JwO`f}j(UI*gtxtD9A~)wKz9)SN*iJ6SD=$RvLcu{gl3eLm*q##!Oii@|K~
zl~g$;0mcaQHOqLa%-ZTJE|a5=vP!JYBZHQ~$s at nGuQH{7ZzUON+Q(FAIHx%7bec|+
z43o9>%u_`ZN3+VEc7;ylj+ytW8g7jPPxdQmhm`U&oczS(`kKy%#P=7vCDPlvJF4vs
zDwD_4)}!#|q326DJEN6ZLI9;kF at uBKn#rlbIb7|bZ4`HZfkO93w(yp>EX#1p=vWx~
zGcJ0zdsbD>v2ANOk!@pZg#eEweo}LgN%i&mSAXKW4I{)O?H37fvmn^d&L!udJ;<*f
z)U^+=!+*@Iw&W~1QUN}MSFeSu3`AA$&D74dKVaPSv-`&Q<HqLW3k1yxI5S2LKx)R&
zuH?T-+Ia2p8Vqktk~7qH<J8s_o&BZuqXe3btjiJ;z1NX5XCNPH+?U3&TiwrZr&~vD
zr96RzQhdw+?Vh;yuU=F=oH;4SQ^i&J>U&8_$#gqE4qNS>d11J91#(e-Rbz|{X05)r
z4c&z4C^u^gZCp47Px~XU){QP`ue4><<Gop0HdPSkVN!Z<IW?W*8!L-@{{S{SI9f0U
zXSaX7>yRtUrA{)bY4kl`YwmlcEgsozY<|yjzEzZ~yA0WP1m`?-$E9I-&%{DoSZt!W
zc at p0sZ&JK^V!D`FZ!AHxf(TbXD4EEAOb_$LUedlC+}_?@NivD<6;+lc0n$8=;?G|E
z*ITVdi|47(+0v<29JKnLF5!|`=V>2iKItTL>6)v1bdpWx1GM7+E^BAv4*fq at p46)D
z4T2Y-^sY|cCc3&rAhu6CdVyZ;DMqvu*39_|^xYbcn|mIU at YV|*e&XiP+)HV4 at Hg+b
z1yFK2`h#7iwVtH*>7-vst!^bR4a}r~dkhiVjD9u6cw at lRt^K9Wn=3S>`Wz9Dao)Xg
z5wv?LEp-%GP&j2so0M!EV0P!VeC|F=+FCNxw^Hd+mG5KGroIZR3Lhz?8$sR9YV2{e
z5vXaEf(}myHRhMTDY&|pCV@|u4nfaqjCh{$t>0l{-*mn|&THLryWI93Hi}lZr>Mlg
zYPaVN66Yix-;GBsn^jOq1S&ajm<#o+UkB^9sic`N-Qx2Y4hR9qIrkj}T(s0JzRF~R
zIb#m&NN=BkSig5^T<KM#JuF}QRE99H&F8On9-m5t24X>ATm7 at h9>S{H>(;XW0IVx-
zCNgu5D}Eh9)$N(mD8Se-;c`zMGhDSNRXZIqog}=>GjBDtjN*OBeqj>|(26v<fpfk$
z9RdsxYZFozQ&`RAOpzRAL-0jQrFqg?M!TVR3Km%r!2sjdo1ZE`s@=5L%;+o(7BJ1`
z*-JdG`4dYa;CldRlFfA*Ka at m~xWgelAE-4-*)Htlc?^O_*mkIV{RS!<6LWQwa*DDO
zk^^vkD7Egd_lebyQti86Ll)a;kqG<7BmNa`Rgqx~m&q&jG(AVxH5KNUsH9Ms8Z?X@
z#O?!+=TY9vCCqU%1k72%MIW!NV$+PT7B^p-Hsv;~rAtkSj|{U&yNh)Tj>fCp-dxNC
zP%Av0enrUwtLd6tl3Ph5O&SO2n}+74WES!jkO>^A#^Zvx?@dly##b?F4eG2|m30P*
z3&wC87~DTmnugX3!+DtmP{ew(9-oI=uMOqGOE=E%lgw({b4&J-adQ^Sc5DHVNk5sZ
zi>b=o><(~NQ7?&W1k!n)a7aJ|rroUHLH%kA%}&^u<BACe)AEwUf@?<YZgnKyQ6gc<
zi~y>*=mll9yyjw(M5w=c8+LJyq~fuRR?@hoSw&tbw9&}q2>wRKS%DQ&SZ+*!2J+rR
zfb4ORS7Orky2#fObMq3doR4p6wf0!w09*Nkcixq<SK7NAWRiA9F|Qf*cM=^sc-3B2
zZNYYqa=%_GD~P1R?0mW4hF)`1>UyojPA#Cuz_`M7sdVHsr<CynIE=PuBo;a7D>{|k
z6tuZ;r5d-Bb|76Y(QM>Pxl2nS&JbjS?NdPowx4bUExpDLN&s8jn#`D8YAE*6z{@hR
z91MQ7Z&Y}+jXnroBLv|GnI_<QJ*qyj%=ItW#y<&U$t>kvBVi%q=3qGWtm!_|NnbO~
zlXeQ^k}9>HsWg*;ZpKGJ)Z-kAu`^EuWR(I#&hg%{_N_|qsk%-3rKl|lVrN2wsn|$0
z6I)tE_2$QL{%Zw3Tb at Am#YLuSGh7FbP5%HQ7s&vF?e(bPzB0^8!4pZ at okoB9)m+WX
zSMmh8b~UD!+C&k_63RMZ(<J&+Ex at rNK*y8L91?x7DvkBz*PBB}984FIymL`$rs6qY
z?HgnRgelEqIm-93P+B!|T}lgUi-JrM-AKJv`tkIrj8U6#EO0HUBb6h8_<Gg5i$t|8
zKF0-t<8SF$I>(4U$f7v|HQ8)I2si}excn<sCk4#Vr6|c-QnD9Nxlgr1hE~BCP%=3m
zPpv^c{E=)Z?7ub}b~hY$$G@#*>mDPyT{vyGRk~+YWo7w?JmdUpD%(_s=KA7WjH_G7
zBr46%3xY`Yr|s^ONXL`kQF}h7#*=w8SJ!EK51kdjl4vA9^33!A`*G9Wxp*uZU1$4R
zSwpXySj0IjGlBH&S_1YbpUSscgFZ_M!5QyYVvA4H74PHy^w&`p^0W6(8RNG#h2<-|
z>)7g0rAo?6o6KxF^|i`1jopX=!C0C+sUz$CYZBj57QQCa?WFRIF~n3TIaLSO-- at HH
zt?KHK&dSl+GAqRBLE!O$kD;nMEHUa{C0TV_vu9)^D$J>tI3Fkj{jXZeH1v1dtqv?s
zH`-5 at nzKzF!KZ3gdbRbfly|Y)IFHLn?igjk1QtEN!nv;$cs}08c<rLUj7|uSXk$_^
zz<!|CKZveU3DhYx=!{pbD}<dJbL<^I4o~G(wHwD at 5TtE1vbNK@Nsr81*EP!uQjF54
zCYNS)Pa6lMma9vYwd`2v-(*P@$C;8pjZQKF{b}9~d#h`;xt_)DtqN at sNJ=XM)Pvam
z6>8>tZC>U%-eGSl=aRih=t%EVYE9<YLnLy$HuMks!c_X5y@$1Sw5`cK+2&NGIo9WI
zL at o8srKQ5x5u`>fggP<@0FlamUBz=gA=Z;qd#kAQ^tW=L$#U*~L&guaY)viRu$M5(
zuRXy8MHDDV!r=D&Gf+sMZnK&zwwugY!o9l5h1-rtuUv3*S4q>2OC_mQDY;$T<h(zx
zYI>%n8J^%>S+B~`!pA4y`Ey-_8oY3`7~t8#-g0rl>F?7uTS?Vybjyc;t<AgaP+Hx8
ztv=6Cwh><6vYUm4xbqH1)4=1oHNGO!e73cYYH3l{PjgP=NW0Xog{Gf_afOkxfJQQZ
zpg*l|{ijawwSj9?dyAmkE at XgZ!B)WlcNypNtp5NBYg0#{OD&8BZBkZ!ilZkAGlBF2
z^sSv1_eRqG8zuehaotG5S+}%hW=oE_!R=liCUdfj+sO2xHE7B^vX;5xD{FN&<8x2t
zw6jVXn*bgZ4!~!psjhoP)(z4%<4DrHY^)=U^2?sM_4TZ4sdWqGTf0=ua<OA^7|7d<
zw%|MZW~_K;NxXHQb7vz)26MM>9dLgETE>K93!Y_KlB-cGT-EV3H at EjUGCZ(8VaXVW
zs5$BGas27JPlsB=NrvX}#IwaF>=1Z9nZ_uy#-V>BWxRxKgtKhP^dC+uQ&zf;`Wd55
z(n`ZBKs;li&*mvroT8&jFVy;6Ejc)<i(;kZcFcz1ph<1W^5)z~Q=eRYYC8)!v>Vlp
z%D$fq?u;1$J0H|~dR04(8Sf;93$|edpE2Z(qz*cE=k%&@Ez4>VX?G=V^x4$LllB9~
z<0N490AO|Fno1Y<6VzCXHfn3r+Ub+PZ{?2S%2{!5Z at 1)Z4yPS|8l!RJ8(9(v#k<cC
z%z{n0Wh&n;04Ive at m{?h-jNoJ(LdXv0pfU at I6lXq&vH6qv$TB@>c-#gm)7z}Xg0=o
zu~NsYVD|>P>EWsJsZ>1GH3{;^{utGh#CAHixn{bxnYpx-5iwRM@)CGEx{P{PSu}bo
zYHKxv%q*phD%wq-+_Ib=PhQ`haGJ1dsiV2HjsmGF<8u{NOb*@Z>6S~V?wRf(mPJt_
z01Ixx>@ol~HL1c;T$%+pDb#Lm>!H!=-W#>KoZMTTvm7_ekWV=xplD;h(;5w~vod6I
za0u_uCZFMZn01!T{F2WVyMW6Z`Cxyu{(m}ui(rn`rhPtX8rD{SCf$Y at dJOt!y>qIZ
ziAGJ_=!6}d;jzbB_+(mKy3aAhq?V8myY#ENcAF>mm8@|won$0SbkCnDKpR_crg+D-
zU4>-TbmI^~ZE{A?22NOX&2%y7Q`%W**7`_Szqof>yR`s}4xoEy`Bz<hO69b-JoQ7`
zyY$@Y-&IXZNx8C;SRs+3F&NvBryLdS&m>l6fo3#~DtoKwjo+6hB1yjE`{UOcs>4dR
z(H<*{-zkNx+st6#pO+c>1E0>YJV)bH*G$W$+*`>cN6ZjA5L?$H{42wZB{bt5Z at WDe
zXhWK6-HRIEh%IgWMHZqQ!)4_=q;es`zAy*S=QYG%d_lX^uI*sG)y=eE{D#<WD1A<9
z&bM=Wdpt%Kx1KQ$Ss3A%6UYOnYQfWdD-VgU<uXp1S&c%((npZ)dgOg8_ko9`mFj<)
zl&jU8KX<z|^}G2jEtSr+zh`m0MprbB$JF+%4FX>#*b at cB%_z^9Uke#MdGB2PpM-S%
zGFejcL#oO-4y;Dc!nzxYZojkQ+I*OXIT4eA{x!7e#V%O8{sX1W8T;zriLHI8%rvLb
zt)+X(wv>Y`PnD2K$Mdcq#WsoH=w`N(d1fxYV*=S%e%S}ox1-hWG|_o;r^*e&#uTgI
z?NE7P at 9kU%i*K*>+wJ!YxTyu14pa`AK9x91QjKdbgfUfDCW~H&5qT8JDR~$I{{T6|
zaC7P_L&G{?xYT2kU8W(+7W=<U(Wq$Bv$19n#v5))&*@a7Q(-rftYq($as_=w`QvE4
zPnhKPbuTrc-RSz;_;zD+Y5^AQmPHvGy9^$ps9ku#Yd3CXh2y%DablotVb>V#OQWck
zG=UwXk&f-p&>vInR94a8xS7&GZvp=RT8uW4*0>!wDK{ml)|*mNrtEbK;tbjdEyJp+
zg0AWpZaF(^r<O#6!WTNmi{cBoZlBao8Hg at ajOTXmUNegFeREr#ZDE6Y?-}`*kF9do
zdiB!ojU|69 at Kl_GT(ZDQwVHPPZgx*GQGW8j;4 at m(t~CqEB)FBPke+02rkBIgyc&#B
z at s&KO?mO08lQgF%si`gH2<pUV2a(e??<l1nRDArT<t}Hr?b<(xWjB`b+4)wtA9(@;
z$n3S+>H757Vo8z+uCAhBlNnzO;DeUw#t-tY8{zke^kk?K%$umeWJ#MLPBFpj-!<qS
z64ULk{{XcNN><`U9%OPh0X<789X;#hag@@NyiZDmr8jo<EMGL2-d-XRMu$6<ae-0W
zTFrGhY=WV&u>c%*{VSq_L4wgA%#v4#5&NyAAI`7o+Af at R0VdZ~OcR#JKK1IkyPHb~
zJEcFF$m%w6LJ}ECTpXcH at tWDv<#f}Ep?Me#Dlg14_<bv^y3_3-Wx03~R0C*sImh8s
zwyr0D!whjk$bMfX0+KuQ9Mn0=>M0#G at aj7AFC&_V!dE)_B<^Cd%5pZ~pTf25bcyts
z7T?WjTX8$SwYhO at iE1uI!brkB%?io$0rbaTYONzIEY7pC@;`(gdvippLM+mj6(;8Q
zWhpe#b^f#|azHA?kVVqE4Mxt|;?6s3dsx*%f6Fx5$a`e|6$p6z{{Y_H0-JXRbirTB
zs at z^(t+UJn2)~A1qyz8GWm0jeX1W at yQ+&6*#kJESvJdve^Q2S9&A_Yodv2{sj~T}U
zZVhDZcOFwmJhK;-v&bDuJXMSPXN^Peefz%RgU{Bc6R6#!Z8%ekQjUgQ#-Xd(NLD*=
zRfZ7c9MkS(nZkMSfcXQa27B-;s<WEKA&n+LpeM}gH#U7a=|jb7JA1TbJWR!doG}>f
zTF2ddt|u(L<?$TOqo-;*t0TiBIgABWBNeCpfvU|Np}BDzfJ3HvKKQNstJJet<wq((
z!p5VDruzGb^9nF0?-DbbwM{EF?P4PdYi({<xY82NG*xwy;GBjBClzYTPn}L0RS_{5
z108A^?yc<STZw`U;~|^B(wcRvSshk6Q`ZV{n$|I=E8W~2CCa%XY|U>4vZ;04M>*|G
zo-)?VJf$Iya5y9y!MfJfhVe0S2N95V)p>kQ;zfk1eC1D-RO{1&vPH)OR-)Y2GeC^7
zJfSum70v+q)myD?Ah}4R%*Uw5zk17W&$Y=RXbI#V+5Bp2Xf9%yx~M9C=;_DSxa#70
zoujKe>ER<zH<Gv9CDhS9&h4&}4vPN(bdLEodfUip0T;2EitWLCk?bm!&Fs>?QifRz
zx!$C7A71rF>e|KFn8A)fa#%id=~?sCdP*ZyVBV5u_07!bA%Ozmk+`#dxu}}j9Y at TD
zc;%Hy$Cw<bA4<))fu%<Br!dM}40E4;YTOoAntD8j;wDmix!u?D6jYX+*3?j at ljU-_
zi=iwH<l9^rB~n<4dN}L}6(q}Za0^KjGsnRz#^Ktu4&>P=ky;{1D~yx))_Y#bXl05_
zmy~V{IUd5VS=qjaG at _#?Vhc%{(^U#nY&hkQ9Qz7owal+~Hu9;5ZLSx$YGn5?t6P1c
zu`7^(e-=-z8lQ-?{Q%m`%qLk~!?jP{z$Blpa4Vs>H+IY&M-{%r?|8eN%9#!^oSwC2
z+gnJ|;v|Vyc=oXesL!o=<lZd2zPjB#xkzR~y%BojJu%;<Ph~MP-boClZkZG`bGHO%
zzrA_WtH|t*sxtQ4TFBk;4~eFbq=_?+Br_1b27CM02jUMA9b0V77|*@JGIU&e`f*(a
z+^J<7Lvba%(v&2{17L*dlaqt&YnqC~`$<;P(k9y=ED7a_>67W+vZpR-Hun4sF^W{$
z<afEbZL3*ob{6R at tsI*`W at FCmbIo<S9q)&uyoK&9gcm6bM4$pi!x7F&^&Hof-&-3Y
zZ*9zTLl)@)IU$aC{HuRWYin_BB$m+KTsbaeV~;Fj0FQd!ttB;Riw%l(<mpvg9fUGN
zbEe-hK)y;8LIDK{<R7j(RxR8yTiZ=Eu!nR*i6c1411B|AHJdp#J7Cu`G|w*C6bvFM
z$j)=mU(%PyzA}eVm-{~1Oi^2ACjbn~j)#i#nyE^pVFl{WiujsQrq^SV6F#Z8KoU_H
zjgCt<eDEqj%G#n1C(44`df*O6*FEbwW>>nB(lI0j)6I`yz{uqF{A$LGmSP!a)MO~j
z^CXe6Q<KIpI at hxs#UDFPZAn|Hy=ABiyNRNPKQ1UfRN00qzJosG^r{m6{`y&DNetn$
zwGSnIKN_1$yk8IA&37DWb%@xkEC4weAm_bfTzH=5O+;#G39~MDFl0Ev9D)x}eMNJ7
zFMY`)vDNmp)MEB$Z*Sm;Be9NDWt!^&lkE+;a(eFc`c`$d<+Qq#&<A+}VlOF%0LN4K
znq->pt!To^NW at V{QI*4dg->z#RMxhzTHQ6q5=)GX%IUjq2OWQ%5vL~aH*?lfrO3US
zEVqbGnR at s7L;+=J#^pS1YytA){nJj1TGISUsau=-HMO5>87JCX%p{U`p1n_M%(~UB
zqKPfzNYO*>Tpawxvd8JoT(-P6TVaCD3?LD6a!{|BI{dYjYA{cl8}~7c+<q%E#=GHr
ze-CNG^-&ov6e>tuo- at I~>Fa}B)V>};Z3 at 94Np4Q(Sr`RnQ_1`@R{VLYNpU5tX)Yl0
z)l5pmk=Jqj2pFbV+Y8xk?j at c`)&&Zijz&6T6zI9Qr#WhKN}W2D++1%Ii<Ud&J_)h7
z`y)oz*-(=co^$*khgxOUseP+WBV9aFL3aLQ%nuO*jyC#x3TCI_h_y%}kldqkUnn;c
zbI=b?wXWJL=;G4WdogIP>PojP>))SR&8kwB+q{nWQmM at s1!!2SZJQX<-2o7>AvUH9
zW4&l-zA><iQkK{`X_SQ}6LvkYdYZYdcxD4TTETmEm5Am=QI?Glzd}WD8iZ4Ms$qb|
zA~%+ at g~2Br9Q)#>Q6-30ZJl)_>9o>4z9iGNzX at Gg-oU7s6UTH0*G9?40nT&K^HOO4
z01mW$PfwcW-u6|xk}yI^GKE$g05}^#BxkL8r-!1OOue)h`<~sT9%ZVr4$i=UdB+*g
zUX{|p;%PK(T1ep&-9s2CT_p+TAL7Wt1KeY^XjrTzXf9kmL(#*}pJ?iN_rxt){{X>$
zC%Dot;wJGG49bm=xn4*<pW{{6P?_!RE?4(*-8Yo0z~?<rpui%vd|_u6x#G0c^*d#T
z-erw3ZiUzocqD!UHLL#s2(svjXf14Rr4zR6hgiN?Uq3Ggo}A{r%5sEbO-tgor)_R$
zQQcdyi{cGCOtSk7)^Mw8NtGbB6b;y6gV(NV-jAw2xoLH!>vyGWB^iW7nGrBK3=dwM
zRlgCrj9bZnEN~QZ1F#B5ILY^_lSibx!2`^u;#b~<CfFZ6un!}>U3uCTdYp=!YF+IA
z05Q7uhijwhGDJ$mvLG;BO%pUSI)n0L4iCSra<KSTeN#x(5?jBqOPJm!D}cRA4Wx8F
zxvth*r_k0GG7XA$sCV7BJRJ5Ws%tlK>UOsfvi!jct0zQZ&=d9TSkS93uUFLPoEnmb
z);SG7PSkuYto at cr68<(pBHTu$ckz>edE>okzlkE&v~vSp?jekew;5mIBi9)96?092
zuBNs7W2D$P^A8M%90BW8d_b1o9+X<y#cL$`m?<o70c9P?Kf-baZz;yDPFKHjBT`i0
z<IuC<O+jbZP+O}JXjf at 6W;P__oOkcfdi1XmYH?_u82e722ic~EV=RcE5?G#B=y~a0
zU*PRN)5Fq5sKAmy^G~}0w_-EF+&ux$=}>sf#S`h4msYaN6!JewVQhJxg@>=wxiK`p
zv0W%^YlfdKK53M7{{R?8e+|*UilSMrGazBxSq3_KV!8bjK!aAq`dOad^beFuK at 7*Q
zHA}+LU0>=%I=#qP$znMOJx{f4Hr*pzwz;+@<&d8;706Ux$0MzK3X-7*7)sCZIVwrw
z>L%8QqNjp%?K?$;o0Ima6gx{XC(PrJK9$Ytm)CJ5aR?R`as))E1M8ZWJFCrB&eA3f
zK|WB~mUr*>exI#sc$-PKw$ZHGX{EP`8CAT at ZVCo_^z`dqZ8<tqN~61M^yf`DT9UPl
zj{sTDb*sDE$Pl%<xDp-|$$(V)AO5{}J|OV~Q1~x?x_VvMA!NBm85p|Ya65rmnijEW
zbo7G4!dr;IZ!$;79=~{Z>G{@ojxI*Oq0gsBaJKR%{JXd%k+YM?>(?C*YUiuXh{Rq>
z$sKfJs8P}CVQRYWk1P*yr|yk$B^d`9Y at Mt<xgV8s5L~X=uHGk#8NOC!!9(hK?Vi+l
zn$P|at3=aoZRNAQniMX;<T3T<q4lm;U)G~bTWec+<nqdX at mL%K{cGs3)E6(f?%z|v
zsfmkjQ{63>b0bsKCzkeA5*Lg%0aMg_Rb;(XxKdG>NaSaeP!I%}SHS+29MY_g0`ZRZ
z?kJ?JeAK4q+?lUqt{ZPXN!*SxwB(<{wWGLM^uaDeB9OaRJAwDEOYH^)3K4VHb~&fT
zCFDoUPcc-D#~lc%a7?IFaeC}syVWrqvAUOXcz&23m4_p4$vsV7+S--ck1-LL<9vr`
z9^}@A&x0?bv-?zX+ugx|x!{x?r_!C{9n9OiIq;<YD&3 at hbm*R^*1lTkax(91?IQq#
z-lBraRk>L9A27DiJ?gH6dVhnht)6c=B6!aLq50H|VTk&5uW9&g;d0lh5<GA`B+Bm1
zlOp5gQIB40!dpevd^@Q`lG}MRz at fIn``0)fdE^jl=#4TPm~^XcLe3Oa^3i5sa944{
z;2ucMLB~q@%umI+>tPo+yJM$&g|~)SgGnHAKZljgR~l~gCu=vOG3sk3!k+I`n>Q@>
z!3W(O6YpIvoo;RIk~W(l=NryXt!}W=-bc{Ytq5$&v1ylb+j&H+5p4hha%)3JiU^&f
zV6rqrg1sB-Qb7sbBh4qsZ~)IyQrlcugCbhUk<3X97-v69xk4#j{{X=`BP+W_T(W-2
zD>0HXsQ6K|@J(BbNVSbZ!WCCMR&=B8Zk=ORBbFR{aaR`Pv;$?zfWO2CdeSh1in=*!
z%C9zzlJ8Hoy0 at 7?1=EAi^Qa at 41)A9T$m_sp$>Sg6Sn+C5X~sZ`?j&=Tcgbe_X)I=z
z*t<&+VC|ojbf}jkmpe9v8DE&xhFe2CgJ5|h04lFQYE`<Gu8^`O&*B|xBT$wr3B1*j
z7m~#twuAW8Csek$J62F+3zi}97xAo|p-)rgPEyjw{Hq*=iB(b1joo>wl4_Aaf)oNE
zIS10PVV(<l+`}NAPLG4Unwi71s~;(`*pt$#ScubGSl$>lDQ;^vp%ulmY%1g&hCjlx
zr`7Q~#&?3;?*oDLsN}g)<~5K)0R}}+#-Kw0Lee;s4an<QI-b+a=!F$e%g~<WSzSoK
z=^lFyxD`5E!h>zCzSlv^ZO_#6P)R+rtb#O-Ilv%=10&M1<y)KSB({#|!!n(_mAMBU
zDwJ1LX6I*Q*!@Q0>rI)N5oC~_3v#3IsVwEx9#JzrxsN2Wp&17iZr8(iPb$RFeWln8
z%F+T4xT$XRR<MG2pjBD%gC6{6*B-UYQnX|4#in(_GM4J)X};Te3ZFS)-<1(YMse!Z
zv1_MZOKlWhc;6c5W=BpvdRI55Opbh)0xOb2?H;+n=C(XXq}*xn3y1Fz;5!5I=N%0a
zsR*>TW^NAeT?-N4G-<d;41o(NEW4OuuiENbRQr|SjbtHmc75a6VzWFS;rssp87!Y>
zghOc>@0#vF!X at +>9Z#^QUg$QqSMHx^iP{+oMq}k%k4oZ|Xv%z%m%LVr>8%ZGogPBc
zn`H^e`AGqZ$Dyu%cqCK2q=8`I#jvm~?@;O*rQMg4=0EPE&c*IYs(R0jWwbWYfT`w0
zS&NL2dsk#Vv_FXMk2bXE!Y)yEX05)v1K<AuXPD(?NWpGKGoRrfl|^x=+-VU!mr;aJ
zz#(Dta(ye$A=l-S{7oB}rt>mb553Te>F+f;_1lD7W&2X2EYh?6+zz1oWY(%&o2}0>
zIFD)6<-BjIPjli3Wb;@&j1>;-VL`yp*OOT~rQDXOX9C=L at _DTx2kwR>ay$0#TAIG8
zEta<|k=r{=F^L at mE=l7II(<6Ux}@5ITPCLz3us%;Nie2TNWsDC2eI_!%`4rbp=IuM
zZZ7g<8dk9`nQe1(bpaR~SLW&)xcX!DsTS(uOM`ldAa=mme)t&s$LpH8Exg*QNqr58
zYbX%qkq*E!jDmXeS*<nUnWS4Oq=(Ag<|qXuU~m_n<BH_G9NvjPQ`V_!ZZziap|#>$
z3q#@9^%!n9YLgv{5CDfj4nuMDJXZ^8s^8g|mey^kpbRE6$?xq_-RiU5%?e7U0*qv6
z7;w4BAbwS2Pt`5$<!z9t4!L5>)Ou&@T@>Ksc)xh@=UK}Wq^yvd_N4P_5Qf;(6&Wjx
zoch%>ad-WnbsSz%*oR at 1eb)Rc8SO at +c<Tgm?~t4+IM3r=z2W}=hVd?y0k|sqipE)2
zBq`5te0%kxyy1q5a?t0Z>s7=#MDndNc?P18O&doj;gU7ycYf7dPqv=_08+b>b`eOV
zIS#la6M^*l){e8UE}waG46&PQo==@3;5f<1Tz<8CS at AHs@ST;Ue`Yg=2591NWK|z@
zF#|op=84W}MoDg6Of*t%Z{{AiJbFd!_UcjRjlmLy<f#L{asD-prrfZ3OwEY-AP>;~
zbq=K%p89DLOa??HLwwmBaZ<@^<&>64i?5aw%L63i`tx1aN-F1zH}5+u8dmpGTC`I-
zLKs8~jPOSzJomt at E32D*b{OH3bulsfsybj`5PJ+(B&q$OaXc^|J*{T*0(32d$Q_Rd
zrFHs6wU)7?Cfi at KT&_QSfG9XT<M6<)db5ouwx_k1sX4e_->Js7xAsf3WfS?3`IuiZ
zw~)uM6{%%s;-$Z7XS5d<s-`fY1T4pl4E7bLe`}?9Z&J3oh1qVdBt?+*DH!Yj00KF!
z;jK>$!Z7)_juNRXgFBm?XCHviy>ryWa(ofj%=IbJN^UZHc0B7`@YUvtFqT$P6ae2q
zAit-~+79i6 at qlsdTGMKh#>oarw*>)^9y5-gt!gdhrn9L!NQ&DKMyjqz+y^Xu$*y<D
z5=*A+gn42IkTh!_bJIBW$)XNbQc}?KF%;#?I<a;`+r!Z6Hup~@`>eb6Mip~~$<BG;
z_7$+2DT7Xq&F(;e?ZPK5fH(yA$>yWC)8V%GeAnwKlIr5&q9HjdfcpBLe=60{JU4YM
zlsC5#M$ND<@1()n267j<#bG-9sq3-TmQt1{-HkT%*2c$&^qb8d4f0wgt3rQ`vSb8s
zL8oeZlv<P!iDL#OV<T8wE*m%?R=wwqba}LUbx4|9g#E|O*J(N6dmmcn;hIfi=X^|`
zWx|h<PEo-<2=?n<C%saqJfmaZgS|dWS+0iv0Edmege)LPrJ3L6-~2<k_u{E)cK0^^
zBl|X&Z at gZrND8l*v9g>H!ye}qJU$?MOF3;VmoE!%`$fX-4W6U{oa2tTH0b<UccN-K
zW!l~n?2gRwFaL)@#{+lcO)17sTeer#<$K>=#T{QweIr?t(^Pq6kxG_3a0tOFdE|~r
zs at M9ZovhPJZW3snaU3D`?a$uMJNj2i;_X)2#%pVHBp~WAGHphEf?fz<%m+c#cjp!6
z*OtV}BmT{AwyU!`!}CUoow+|xTJEE2k+n at 9V<^tH6}KHc%%1neaZP0yZzgMKqf`u3
z1{lcz`kJq8;;Zdy+U6?-X+P1(XqzFvgYf3F?AF*qY?9c!Gac>@Fmc|ZH}B!tDT%h)
z at BQWo+83uMt_iNFVc{KC=RIomDkUj1l-Kp+cc3`i9p%&#5EO&QrzW^R3izv3ytI{4
zG~H-X5>$j3Ral&z-h#a<-%YpiE~9JYDSKPO=^|Nz$c27jbKj9!o)GYz=Z7J?Te!#B
zUUTJ$*Y}%q%Mv}XF<!(ylxa64c}tpjgt_dymMpbP{{S6m4F#Q at vfQNVkuZ>>nLSuA
z$2|9>@UDS*q`)B8Z&9Obmy_)6%z?TRQ?RbqKL#!T0EKlM<kW727V(K*6k{8%SnY0|
z0sLzs{^H9}F=-QA#TCJ}Rg!g58GcL_Z&S`|!;MJKnl!Xuk=cr+B_%uEFGBT~hb=W3
zF4s%cB$`$^Y at j7@KI)%91vXC)X_D&jT-~&qh1$ik48Bzd at De-ooaU(M*D-i=NuN5A
zy1bWaHN)`y3=Ds=cpr^%8t23>?6hUHws<bac_RTy>x}b`D5FZGrD(R!Db$3fmdNcT
z)NOSAV&>oo1Xl4C2H7{Gq3RzU4o4qK^4}Kt^4 at KJ=)qxX at JLhu;DM3+U3fmYtq%-q
zP5p<c>gzSZ)$PeLG)z3V4bU=U7zVt$aW<o=O3qA at GjDx^j!!*0SFMD?FKI4*hIp(~
zRO9UWo~N$rQCRq8E-kMt;klW1y{(&W*bjX7Clyyjv`6stSD$Pva>`3bD_~<hV0W$t
zJt|o*MWB?zfaRIN!jD?$w2NYHuAqujc?F=@B#Zd@;DCEqRH#OkHk7p at jw(*1Wl?Cq
zGt#_0<jVHw(@btu#v<54h9$W9v&D9w6fAE1Iy}3hZ7hkgq>4GjikpU19is#vuUh8*
z8tAw7T6Df8mJQl{i<rz;2uLh?9+>aIK9z~_TgMu9rG6xu$&&e*cQ}-&3a6ix05WUl
zoM%%P6%A6{_hDJejHNpyZ)w`p?cq}vm29xc<7~K<V=Bj<_{~z#^}iALc55v@^4iLC
zs0k-n$Us%M5xJa=%0>r6T$ZhUd3C3))srg2C<Du at jiVj&^sJko6>75G$9<_Z*LMOX
zNaucbpx_T|0bZpH6OxnC&%WmtBNY~-4R-k&9~3qHL&SQj+v+CLcx>D&y_yiYBRrCS
zTJoJ)43{io1(a|zT{X?s<@4NJtC78dKQ;qn*0S|2CQt1_0x(x9A2>K1Wc06l4^A~A
zp%dq^GL27pT*9_dEb*+WRx)sXYFoQ#E#&>tEIoZc8o01p1!2BlH~6wR{3$gJ5^GCE
zx>aYllZ9c(&!Mi<fXR at VoMRtTRwUGB_);kyq*%t(2e9-W)oM#9?R4ak+YbK#!a&G1
zn0dxIB8?afh9;hHiHx!D&{l?+*AZQ{iWF}-f-<)tp4`=+3ixJk6>GNoeXE3;W5FPi
zpTfPXO87i<o9JY`vr~LX1$PaI>&U^+e15gZh{V&Nz42<@fx%mNGgo*emKbGdVnEJ}
zhmUI5u+gHp(o!qyNg%%59vgx(N}dYw*1g^fIW+A?@;Tv!?JjncJSQGr;f<#w?&qoe
ztBkmg&d<e+*04!!6mOWq6)073Sb|4>-&*jNVLGyLX!Pmf-!C&{9v{*hO4aOz>a(@K
zEGI$x#O?~7xUSmwTUU{7ViA92+)MV at jzSb*eqaw>ojzY$%1vr3t!7!>V=;zkKhiMZ
z1{fQCvPE?|r+}@s9SY1ecHU$wwpX`IHV$`W_dM}Vq|>{SJsL6PX(nh|>DM=9WoS!E
zM<BiiJq=nOMT{k8$tp=WZa~dRsCa at q2<${?v8~*~1q65QbNPOC%<9)pE+sM#+(rp-
zyeg6FUG-{9;e?LraHS^s*2iB3{l2AY=Gr5X(|6Lb?yd!#k-I31EJ1f6IPXyC*NOH>
zrH*n*Oppcu2c>x5#v8ptKM-8ZqT=qz!h$!A8_PqFx(}{;;*}@uUo5}O%DY%!dMfGk
zJ)#@PZZ3N)<&X^TJgEA96 at 9J#-EOZ8=GrXfw<pX;^shbmVIHd;h|w-~Tx!uws<zQK
z;}CRL0H4S3JXd(DtIcGsWELdBE|V~gm4<#&4{_J=tnpOp)28PcY2TrAYtgASO)X4a
zV^w=QhKkw+F{<tpK7RM06)m5Mg2asOPRwr~UrMiS1>NM$Ez?5R48RP?8;?r2rdVh;
zbF7!1Y_hluCephPa%;<YpJN_r&zfFZp4B`*Gvsj7zQh-LmA<=pkfN0&;5)Ak{{ZT!
z-$N+LBCXEcb|aIH)vK-B=xYpf>GH{L>Kib(A&+7Y^sGB=R&=;$HxWMO9$aX59&0s<
zopp5iU!kYf<408%T++1jqe`=Ra<Y-P<_8(8*Ajy-$lDc0PV<6KaauPrUtC0mA}pl?
zVTRM6Vcxjd^(iHqN0gR8b}F}aJ#Z_gjdfL8N1ZxVB`#>_YC)#8>x+*&2<Llj>+C)0
z_v>#NjgaC=IBXo`4{utyvqSa~{{Sr5;}QeF$5DzP(rnxdnZ&Y2GD0BEYgx*jIQyuG
zI+CC7C1f{FgH63Ivb at G@{K_yh{&=f#EwK$6#>z?C85k#V?oDRFr`lg%#JX*ZEQuj!
zlX(iO>T-MLv`Sm)mkk5N&f7*vUBnFVYn4{1EmJ$HQ=s-*vqr|{w6s}fhF5d)qUS14
zZ<KRc-X*_+&rNHyYVh4icP?@WC%69qs<w1^APFUrgwssx^2j(Uqpk%}*V5Bpw|G))
z5uYub;|vG6<nz+GpS at R_XAGR_MaDav_KwkNL|v>Xw-5Y7KZ&ilCAQTilGf_yV6r7L
zho*VYJZH9Qw}y1|(=El#(Ra8j<!w`hKr1IfS#32vR`T&wEy*Dfx#Kwp9k{NwC{&f+
z$jQ{Gt$i+bjjlGHEMe2Gt{{fg{DGu9Tb%sBam{j?{-NdTnr*~@`D-C(8@^r4-M<Q;
z`hyE`c(6N{w>-vx79BE4#aO+$)gCKpKFYGgA}M^QKBl73Zt5vA>;C`?o-?_3TaM1}
zUrRXWmoNb``JK*rAC at Zue+ylBhf_(H_p6<ZsBl2fU&gl$iMVrefbVp}zHnDO5D%?d
zEjF2G$hoy70Uwy*hJ8*eH#sex*~KbLk^4oZ at 1c_)gEUw#?jn^Z9#d`3;zkb{7#{V0
z%6oemKE-Wl>u%C{WW+Z}S3KZjB-c;jT_|cM+t0c4WHPffJ1}HWJ9-Y4*+FEQb`sLj
zV`e=->OY8+jFVc?=ChSeS>occs|hYz5lOzR^Q}+d?Y+h2)Uw?Dp4>&|eW`(E>7Ba=
zB#%%#Q+y%tGEHw!p7z%E$5_=6D#L0nj3*t*3<u?2qkSN=w0Wdf*s-*Qfxu8X$)mx|
zrdjKj8mws)uW(gbNOQJ8-SODhQsta^UH(k-VVh$iCi#<HZjs2}d?4}acwS2jO$raQ
z?F;sMGKNMwfi1YVAD1=7%kbOc1*Y3cd^dXqng)=`I-QY>^T-G5UtPhi`GIjL+T95p
zR#vz1BF{<}R;?sA6UA<3kWVOz2-gR1n*8kzf&jrMJPM<R774h;ZgjlTwOOfX->3W&
z;!hIzJ72ZGo=G&@@fs<0nk#oG>Q7Ke_Wf%f-$~VPjK-FetQg!&A&i6g*S~mQ_SEpl
zhAu8N%Z(0e`&g%NX43AOD4ccNzG!SHCukgJ8Li77+t=a!)I at 4N5b*?ZWbp;Xtg1$S
zU%r5o)6%^-Qj}V{CHrZ<XK%dlFAVrL=>V7!aST7b2#PXF@^DYy!5rrm+}n7bYpa+e
zN#}^HLPZddm>;O)kVoTQxZk!f!R at wf{gL7r;h6{8OW9fNfS#ZX10nhhd)71l)&Bqk
zbva{3(=}@~FNb at L3eonj_lCyFKGn~Oz`RSm-p8#=9afBO7%%(@A2?s>vRD2iyFO%}
z*`c!>as!ULh;HKzpRQ at 6PSRkUJ+ee{Op-!D1%W)0M<>u%(>MPB68`~b9}q?vd`ER*
zEX$XQ=fk9+$EioiC)k?vZE_!hce;Y#>Ha>y(}RtkMaPGyb>MyBwoKsr_paDs+KNe>
z%N06}snXxB=a%a}44&4>b!ZwW;0&xIG6MYPZ_C&J0IgBkTU@*mq+>E?DiHN2>s{jb
zH^Ca!(<QgYJu22Y&kc8?UBl&oe~GZbX1Dwg at M8B{zcBb~R<`jxX(}S$X}0$b35?{l
znP|XJFnXT#ok~-uYwAQfJ)(NWdLDUkZT3kmq7g;*#$xkE4mRXtY5sMwV{&eEz>ZSF
zH60@#b*n#H)1ix7y=kUPpWiWAEuSD@@B#0E_*ZT4`@ouRv#r|O-a2YF605UEGx=?}
zuLs<J^{dIm)TWi{?tKmxok%HFOMl4ne~2uruSexFTt(%e4OnbsjNp^sr%J0Hyw1bs
zDAC7&q~s|+pW$7<#s2_@@8DZ))=eg*qDaWCbY<q%f&06C{{X#QCY7LGYj<gIk*zcZ
zhUIgCgWo;C$Ln1<X~L})D7&P27 at uqH-y`_D8hRC+mLfE|gvUJKh`wK#=N_HE#- at 8Y
z>?G7KH7h7)TckFyERTnW3V(UeM%~i7ReM&N7$J^HBvlI>$}$v=2q&g`R}14`7V4JX
zC6I*xnTg~EZ0$X})!L;;%8}_tlqk}0oU~@L#TB=Opk}lX!k3$8yJlceY|c+?5`Rkl
zvHL!$rrG}hWz1)`hXBPa<gyZZ<a5s)3gUcu;uy6(6He3Y+>0FM;UNWMmSBEnAe`eo
zj at 17E0r-x}+RkfByDKYKi3BZjCfFH?%DK;e#~7|UxO$G4wCi)y$|}PTInhskr=;2V
zF4I at PA7QzUI|h$l;iMa9S(xCjY^lc|tz-C`!_)XK-NY8NBR186+HJ_W>z>2CQIE!t
zr|N>&O}UAPVZHYO<^XaS5y1fT#cUmB_WhnIph6hCnf%P|1aa4nrn#d^v~4ME*tZ2r
zZQjQ-2Z*lWNghkM<8T$csZK}${J;U!k^L)2Tk$0FcwYAI2m{3nt_!Ileg6Pj<zT<Q
zmsA$B+Q%d<xt>OGoPWGKeJiNfJZWujr`*}uS;OV*5t&$gxFf!J;EL<1M$%3&xm0ly
zl<uW#3*p^CwOApZOR%g0mfV?com6+N6CAd;yP9y2MY&JPL68&1KPu*|Mg7*BYjLF_
z&VwPq<+g#>+MjE46{I%ui>A1ge6p(?s3a0N{Hm2G)O|e(tyS{1CeFGq5VgjgA-iH@
zMJeQM1LXvPlhmH3u{7(Y)UH0y1--P8N(lm40pE||9*5l3OB;E0JE!}6gY3&L=Veor
zPg9S4aa(>U at T50?4{u}85pHK$1B- at H8H=3tBz7m(m$Qu~qXv2Nl-k=uuAeoYhFTa2
z)8zo-1R$!M@^kJh2H(XxW|62{!*6u9(8)i}@wQ3=c_8!6OQR*c);?6=eX1n#rOza=
z9Xah-cX8?3Ua1_Gb`gH$I|bNfAmcgPU8|N+k`75(Caib*#nc!2HL^=_G;J7UX at JJ{
zEJ$OHr;+)Z<eKuv>s&;5T3eU^3|s-ce|Y;JO62Z5VR5T!ra46MyqG2=gz?8*XQf!w
z{8MYE&6B!pCzf{{5`9RlXyJX5QA<{EPNS&Z-iX-o29T2J_g9ZM+fxOX%1lVS at Ta#y
zUNb(eCar$rcRNlaS!K%<8SnJ2svjQ3G_M87HsQb$NCE5M at Nf@a)yR0F);&8?nJxFE
zE<>xh!NKPQSE+=AqTFgNdLCs*%(>$9It at k$JTu|TS?o1qCEe_86v=Hb%FCWII*&pP
zayG2?1>{)>&je?$v8>^|N*H9|_vufPa{G{z>TzC_DY&P1dzenDovf{6sU9bbQhANQ
z3+8KhQ;q=QrSPt+d3mo`+gbT(9BuM>m;<g!C%tg+<)#aqXN=a3rNimB%d_T?AC#%&
zA8Luwi;GLCe^{Gp?_=IIuNGcj>2gDJt46l*Fg`?sVRN2JpHcL#cf&pt)BYlBm(pJ9
zEUK~Q6(lQ4-p3flW9s8lZ8AA^n{fLg0u~$)I`fXdjbZpHX1>+F&uuWanSt3OHqnal
zsNp#&P1BX7-5$MMW#t&ujpNwv{7r8kgtYrxNUxrBM%y$a4Eu4Ac<Jd}8eGk*>Qcun
z?QZU%MF~<vbI8f3c#}}n>~Gf6>gi@!GE|3F7$?+qtPMwAn&wE#b0TBrUYs5)(8JQH
z2rIk!oS2+MWjz&==xJZtL!?HI=nAutxs+sq{?DhqbcaF<p~tCSyEN?>+4e at si*ey!
z at c(tp+FLFCqg+i0X&yyYP)IoL0Q9blM$n_wuAL)!1+snQ9T&ZmpXXc6NiAKD6w`ZX
zVYZ4buFN-NBFGNMOkg))O?G-ErKgAdHF(;REycseOgmUQDE0pUd)}GjKMppZwpQ}g
zrZ&X922wped9FWQ*CiTdHcA9&i?x+bbB^cUuHM!v%o_G`yGJpoUK@#>-x)rG6-Y5s
zaZ(;zsOP01L6N(ybR}b-bJ;!zX?E7Sb>^=&VZ4e!EvHu66zw?#_Um4;CymAY%@xI|
zVqIONAyqeHu21Lb(!O}`9<gO>ENOM}MzU}F*baIO_7&E6pTySIdZ at Lxx$`ZRgG;dQ
zR_W5dV;O~=Y(dpU#Vt=%)qG<XwPxSh_u-LAj^UUB6lab<K1Fd}DAvWboFXPS4<E|%
zMslcnf-zoysA~FsgB7vfT)Al^1b{*81xE(4A&5h5D2=WNl5GC~v&hf+?^{v9sA`eX
zEJc-((b{;5OD$sF;zkUsf?bYO9^F6AYt+0o at m@PUHb|wBrjeMkN{`MDW9#*=2Gwna
z^`tk at qe5AXQiGkj7$E*Rtk|_fZ!|$$Z<cu(;MaH6qgFbT3{<H~=g>Ye at jQPQT4b=w
z(#LO!2t00V{{Z!>n|QA9SkA#LgEwHiFdV64p1$?W*_67G#JMW1!jaUI{HiT$T({G2
zw#ttrjt<D8T%3>OE0t5bvR7nF7glY%+UK|YHqz$tew}LzvrS`Z9_hk1((YV{;?KSb
z_7&~kDYCfI{vO`iMRrUHZdu~CjS*1?QyCzTK<;bF{{Ux2x4h6A<{P1#Ipmh&*KQA+
zBJGT^^i&Oj>c+iy#`i5RqxCCGD at pYm>#G)q3tLs(@3<a)fzRn(u%#G5r_`FYs<y25
zJTu^@jC>>i014cel0g^tJW#Khd37Z5$17ogF3_t;dB at cHS2u6sTb*-S at l~duH1lb(
zYEn%Ug;`+o&H&n9=Kd0S{CTaZehm2gTKHLUX`%RT;?CmI`q&|g+2Fj92xTaofw6w`
z5;^0V!|~>Us(dcfEi{cyF70*On=oy~#llLi`<o?76M=#O$<Gu{P<T~IE8EWI>ZIx7
z-YQM2D{Y~BOVY0A)gp4fY)%Q>jf{F4=;rW1xErnHDKKETlRI3V*{*ZLUMCt(lVI0v
zzDeX8j(Lm#0o(dkwwvN}e;Z9a&LFpx$s(&`aLz?|a;F(c_oJ9OTGG^?R`4CkLvEUa
zn7~jmoPqgu>&0w%N5iY(eGJ~gBzJm*=Wz2z!y18rGtc8m7m5D>wltA>Z4)ZKQDfbl
zFf~f+UboX4HPrPxYY7SY)_Fj{KGl!0Rei^|WOXcL?X0!#Sd}%sVr!{xjl3pA*wP6x
zf$8gm{c4V>;G3(9c$OL0bVL!z`A2*n^|5Da#wl)X%IXkJ%w`t_PrmAc)@^3`=4*9<
z5fos%e+bWCQ$nWbYYh=jtZG{Oq0o3bIdmfOT*)2tz7;SEqU86^NyT&?1^9d7e;)XX
z)5Crow_B_Efy|G at aK^o4koHl>xhDWs8+l@!hGRKI{n^|CfI#YV&*fik{>c9T3?T5Y
z!(C at s*Dd9SO=+Kc-J?Y5W`KY at Fb6Ez^uevLuvp5Rl5M50k>}$oLX9^yxxFv!r=?He
zn0z at duXAT=mX`4WXJ-K0Ix%@C49HoULUGB!PzEc6)W2XI3s88Zlg9e{ynJD;Er>s$
zuQ;;(vAhvss$55Jpm^g#vPqd at xzc<@(+Kf{g>wwdM<bkI*VkVLej;hV6nqhFtmzu0
z+QqX-(E0av!rtLoPb(@8Hw=zO0k5m6f{bk`!|*<073wtQ32Efd3Ag=&E$wC!L*xBT
zaB>vsaOdc8AkAcWkNyeeXW}B0P2)Fdk;IE5X`2|4(>rCxBVWZ|@KHYpXj;~(Wu|yn
zUf1B$rh9pBVrXEEok<O}J8mN*gN|zsKlmwT(Q at jrd^Fdcm}Ns>K)D~4V=O5tJIXqm
z#<gaZr>CkUm-Z3XKFA at p@s6Ju#u=y5-*bLa^sK9o*aO6?E4{ysG<h;QO<^$oLz>r5
z_$bw^j8%RZYX=;h>TrMYG?pLmQVll$09>-tQ{lF*x0iB=Vh2;V+q)ogNB|F*b6I^?
z4+P&XpEFri#Lm~3;)>o5zhKMn3*74W9wF2;ZF|i{YfD%qxwcO?c-+#s8;XS8g&pyp
zE6n~O{>)xB(tJy*TIrq@)$X)wdzlTb<+NsC@#iW=4tjCVHS`a~58Gq at 6y4UHZ{q&|
zhFa}|>H&?r%W4*rqZK%1+!%br(z~l4_$j}`(m&IDIpS*(-}i7ykIGtKQ=^Ed?kzlw
zp<1ms at n6-i%IC`~@T<k}UqKzlk2Z?{V59p-HtJaVZv!>IVf1Er#FrO0e{7jpv9`BX
zkqPO5#{(Yq^$Pz0!A5=#>kxT2G5CbQ<0Wo%e>DjDD>iGN)ci;AL-vJBVc^|$v^{*v
zR?gPu3yT|DxrP{_Rsuc!F at urE2BugDa_F@|ELJWG at p>LdVc`v9Nw|*S*hJBJdkYCv
z7{}AtRmDJKXf7TY;|FwdnaOfbQM3X;rt1)<lX-J%sHxLsvy{Pe9pkZ)Ty at A9&U%a<
zYn{|QeW2+OmbXdnW*p%VL>u{^*1X3>McDA_)T at b~Gg|o?nw_P^)w5bc5?JL88?>OJ
zg<*q&a7AWYTxr(6CeS=Prs^7h_Vo84Tj+Kt&6;wmP8o^BY5*jY>0UG99~^v2_ at Q~I
z=)M?RUk&V1Bikl!FAhJ|q?pKJIskd;T$k+8 at Snvxf5%-C`K}9U5u3I+kolYb%_t<3
z>EAw;y*e at 7vuapbOZc}vSH_>T{*&OnE^A#n(q9wn#4^Ww4n>4V_>Zfw^cYc&b6+ud
z*W!+;<2_qdz0~hz2T{2DM9?Y(LO{X-7Xu2Q06JIL`WM43GQ;+C at ETmD^`@itV=c}6
zP`}vVX(VE1mOuy`00{IT*N|&-Y3<?5O<z~iBQF=1cQjF;9#Ci6802y=bB^M^k!A6x
z2)6BgN~0+^HAWgm+UL$IekW*FHY7^hRk6l>>S?tobf&{7xws&eeyA(iwbsylENm?`
zy*kG3dFFX!cy0dWw<TPF2SPxsonymZ8J@>bx_ura40oPQtd?ZPar{DDjyc9XL9SYq
zAxSpg$Du-oBD|v*!{XTT8TF^TaPqr55ynSqWOsY>h6)GqF~Ak>Kk$cmHT0WpeoZ9B
zqn7d}Fc<R at V!#C-FdXEZ1Dp!W)qWRfn!kuHZFF5fR=AoHs~wv~Dv43Q<)|bQpbmZb
zs`fGEQs!17RI9>LgsHoyXX<%UYbkDV5e0zz?d$9+eFoy^Th{IDE#j7WW{@sdoM)-}
z3iZzr{?9hLG}gCQ5$cg!POPltsR+Z7mhGNKE0?#D=i$zouEC>9`}G*$gsW|5P{Vj-
zZ~+a*A=3<UDwPJ{>PF2Y2HKY-(~bL`2A}ZnR<On6vel$ix0JMz2poR$B^lh!&fK0h
z^{- at q9_q`XE{$z_EuM*Kx9s|Lvy_58qX3 at d@_GF$in;KHtz)Hcm1JASQY4B<oli`Y
zl0OR7)AWmLEf-I at lJ+RxY?%c27-e3cHh2V@@G+Gq87pX+^w=0-)NdDdy1()%-rd_x
zbN1 at 10h%TmL%43*KyPZz(mY9fp=x$_ at ujuPTA<pI#>58Ow=4<#e*s#Tk)^CN7$8Y5
zFbrZg3||MIo2Ct8X|}gMFxO(Yic5Pq at JyoRg8bl+c>Fl8HS$jGqR{mvS;9Ai*Rj`Y
zzA4r`NvB>U_fXmC*D9{@g<R}W$YYG0j`ilpRJ6FfL|Ms>IJ~ruHaQvx-2>Ft@@sN4
z%CTe2MDo-(3n%pLT;{Q<L{=t~Pl;}hc5$>W2Uhm$TTz55M%31fmrhk6rjgQV*Qq?Q
zz*2a;&Q>xxVtVwfZxCuJV(D#Vr&_}#la_1An6!=56bg9T&V5f6294rLZ!Tc4TXeaA
zk|JnhK4EMF!9M--(z~l)3)<RBw^vrnI|R&WxH6=Tj4}7>KD3=hO<I2=lC+}Qbl<Z%
zn~w at 3*&AE<jCXP(jNlv$liQ)`#c?ux55Cs*85+v|IHY62m9g~W>t5HX#M+g?nY7X-
zP!?5`{KEiXf;#4#X$_s2&4!gENI>&E(#%OGmgldodsHk{Xx&3|o^<KdN-uN928V6o
zePTNa4AbAmh{~4x-Of4bUbEr7FG$y5y^~kEXSao0%C>^!Ld>gz*<+o=W2QK+H^;sb
zpIPxJzFTPRQyW<!BoqGE`^Kt6 at P#!UWTVY}C8{Tx3`C3-CoPhD;}o$GRp7a*a=zz8
zD>^jYB^&(gbGN#NjC at Y8+ODL!ag^<aB;}Bv32xkV;)|Q%X%?wz0g<B*y=9g6lmc)%
z4Dnv255h<!7J(sEMi^PQ<=sI9;CAcy;MAJufGjkB3u-qK#_+wi)QQqTwpZWsf;!{+
z)B5EID8aV+9C4jkrtD*QPsYvryITmAq{ed$h!|yak`I4xYR%LkzVObLm$tA+aeO9s
zcL|akkDCXIb-#foi%fdvljO}U$IB{7^1N<OZ&BX0Uq!gn^ecb2%q5kk^3|S0(DdWA
zWglfuPEhN)=|d3f!6~n}=PtDdnp at 4+Qb%y;rP-pl0I)xebWnJPEe^p&?T4Fhdl#6D
zNg2-vq4gC<#C{!vMHg2$%Ph0qZSo>U3J*`1jB}1_Z^J?>-wA3`- at Ukw+c`3(=`cq`
z?l5Yq){05NT^!P^{iJD2xAk+JivIrLp6b at xH?xTb`AORGjEr&VlU+8gqyGTHF?(gG
zNUI{x5c4i$VYhP*p60nN3q-w>PP+zHiaCi%5<)|=?#MX)m9?ltYk8ztTU=Z+=!Q%&
zHvG5%Zv3hx87W#1Lkf7BjX23&bnI66i>uj9p@}E6fLy}(j`G{&Vn5r*U!{0fyRH8K
zY))AQ={H~%7$=@M73{weJU{)hrfJr8k}b5(K5VJla5*e`XPUuZ2ScW5_KYEh4MNi>
z^A2P at la^9&1~?23F<y=uR47B6smY0{FM%9BvuQTBd2f8yM$X*?VrFx<Iq&**s`~bw
zKC>#@>6W*5Vm_uoNm6=pdsnSV;kzwXD_AFz+2%;Vw=y|m2_*5IKNC&A(=L2A(kzz|
z-6}A~<F)z at y|^7KRf>vhx;T`dD~jrPMgEO<p;|!qaTv|QlA*ecbqC(DWGq`f&3i}0
z9|hiPR at T?H%PiXgK3 at ET&+v>_p6T8R)GqIWTw6(R2w~<i7$JSL-n~jSV^TcVF>1#&
zfGZEJTMe6_N6N#Hd(_&^sItGB5St^3iVk@=tnJ0+I}X!~is;=4)}K<^P?vd`e)pQk
z6 at K4avQ=4Nwvr3D`Bq2D{#DGyZ7s}<aB!n6eJj!Y6X7^@9}iq=5zN-UR^*wTH?BhD
z9DXEMJx2;ryp0r_W at m@IIdS6~x0X<`SVrMwJF$%C0De{4P4ItD(C?wk&3Cwk^2+c5
z92&>bG|22U>+8tmnJj#~mN^Bmcp|;C!=56s at gIZjFE8Yg(%v<M`D^nj2ky7vdiJgg
zwJImg7igWdDZ*bK=bS-nZ>Az0N<XvTS^%iI!6>~O>(aFR9jMs&k6+cU7TyaBX`xgO
zq=haCAoJY!HQQ>w2-3V=ZE+`>&+<3fzHkDA*!trYz~1;i>p~50Zl+8Sqi7&t_aBvW
z(!^4&b$v~woLc2t9EXiHi8TF2;bw0*x%qdU#c(h=uQ!o|;pAq)+)h1f(7bEmN#l8D
zmNtwcnHag?k79b)om^pv+r~KJy{b}+kGk%8^_!Hg(Oju#z{UvRnnpq#WcyI;P-Bos
zN^ozJo~E`i8xbhk+;TlC@<>EE=W+L|jo}Su4FcO-lTMv9o0%FIuL|NfVblZdgH49p
zAxxWNUYw3aCM49hD;-W%w(_#L4UzKl4|<bEtBhZ%xZcrnNCyVJ!}fIWhlhMk;vHHI
zV at Hbq#!WQF#zNn at l#m0f3}L(19jbgiw9+j+N2pCBi)%SWy at aT^OQ$c651<^MsIE6&
z4o(k4wm4dohdgySjaOWGBWNPbP;V{}6W7+W>~3UP2}BId^5l%wi?NkV!m4`tjC$6G
zgYKhUUMQ{v9#o$wX$AuO=DJc*j>j&tXSACeG=+`5oZ?OhUp_V*el?k^_-<`V&rb3!
z9xY8Ikj*onF<l7-Q~}c%IXOAaVru>$xYG3Ni|Fq>=%JNkY#<yk$Um)PX&RN){p?op
zT$tV5AZOqM?_WU*7zoQqyZnzTQ>`Vs{7<5PXPsKl!f at +0I>qF6x~8Rb8pRVS3Q<tt
z^VcNtRX#BIyW$7K-y8n`Xz5oM7P>{rh(Ub_IE01TP&aPp at vje;U(~eg{{S*sgH0Tp
z2KCMeHS2o*sp5|dcullzN_{U>v(zGr<IjRYaBbC&Lb3h^By>EE)x(RzQ+J&<+T_jY
z<7WpJ-KEj3pZOlyrugT?xBmdM&Z**Se-+<f_?pt@!Z{vUnat*Ems1|joS*=DoYx8a
zPIy^7Iq_2V-b<^i+ckn2B5TP^l6=D~x%AzWk9x-VZ>L<r at R!9}@@kXYL#FC_T=MDb
z{;K4e*ef~f@&HKpYUw{}*`%@YY;bBiqUzd=Gt6!!+pzgkEOSCg^a}e&`=-8TtRSQA
zD>Ku at Vk=dO=aaMl03>-65+!zdHo6VN9R3wX$5xs<OPIrCNZgk_YAmjrTS>VLUm$MD
z<GK1%EMQ4qY#bsguN?^)=DE_gtm2Dt*zG(I;^xuqXSBFal~0-zc5+V~ewF8*Jl8EX
z2Dod~6W-lSaEgSo<nVLs2SHu8guDrR;(P0XYq-w^oR?EL<RnSd{<Yh9PvMrEbLQO%
zY?f<e-fnMZNX~iTcXCf17d6#`r^_ce?9TprxQM9BWOCmGHP`U>fNt$>Os_DwFA_<g
zl}-Rr>Cm6Xy<*SCR;3EFq+BaEnZr380qfGZi*E<m-=?h%w67egWi{MjKO2x|Cb_Q-
z+}eplUBo3q5rZ7$9o+NljMqLcoYQh=O&mj|H42*_Nca-UUl?k(cG_IAEzHt_lFt_O
zO{_YMbAygM*W4epr- at tP$L#6in}d2q>C^uJv*WmM0ePmxWbx4a%zd$69DE7!eXgbP
zL&J7f#xSyKcGkgj#xuBpK7zgP{t6MPPjlcO3V3GLGc20!v$xA%yxSKG2i4?S?!eGg
zsHwf=Mqydjv?I35=6-MZpTqj+h5Rc9qZ>&CW)n0|Cn1q>>*`r+^cVgKx#D}PpM<Xw
z)9$ZQ=UA7_xPYgZZJ48MxGW9{1bm?L+Nl25AG2ike+4wzG at Ui|8+{W=dwbt5RTCnB
zkGuoJ1!O<)6YW-i;FzekzYF!dNR0bM%oii=5$qtz0+WH=at;l9eC^TYZ1QN`N~9l^
zkAp04X14gN;(HmlNo at Ls@9v4?a?HSgELUXLHu5l7<0w%u0A7Q>4L9N*hil+}jQ%+<
z9n9AeYWMJkSTc$X?s5;V2(ErF6i4=$)JJy|TgK=6I}^9Pa at V4!`Kjf#Z4R6jSgJ9N
zNi^4*J6mfTd7`$MypTr24- at _FosD?@x8r!UUl88KZM;ouJczUB<{**Ae*s>TKa6yH
zt4PCJ-mIy>&9n6N72|gr9hSf1y;vKIn?x<=jn=HpcQNV*P6lfXBx+txtX;g(t|oEO
z!fO7dj~V=C at pr@&vR at JSj{g8#j>2OtqFzb3L{A3;+yPnMA-h$w9&2s$Qv*JvQ*V4B
z99s3Zon<W7f#VX%B#<>*20%O?PHDdqZ59|JKnm<CR2~jGSG7WvVGrHL%eAa{wX4c<
zN>1$WJ{ZkmH^Zw-*`WUbOOEte8H at G925vvxCcVqX+E%IHF9BU>S{3}i**cB%bETpp
zKJkslSl=0pfTJW4oMOIV_(e0Wu=aWX07s7MIf5VWG1v`#r>*GAdjdxrg_V#r5;)*G
z{oMO at KU(FfdTz~~Z<c9GD;XX!xS!(}$6F5;yAk5=3_4hNjZpJ<ZpcNw;T`)U8u6>9
zGN?H`arLiJ at Mnn|!2UdaOHs5)v`Ha0I>wqL4$r5|+axD%8I6c_?get65Ii9#!><_X
z-XD~Ufo~{lYmTCL7;cV1?8-r}FBc1Y at H^;DU*7Bao_nXsd8FS<a+1po;$bXOA;TdD
z<tlp-#e28IzYwR1ylJL*uEbl}c!t_J(^ZO01fO&gFWQuJ+;fIe-v_y`B2y#Gjd2)Z
z>C(MV_Ga)M-;F*i+r?w2HT|?uTr|Ol?xEcStZgH98_2%^3gU;wX16-#(pOCMp9=oc
zz68>~8)^O!)pV^+_eJ{xTV7hMG3Ma;VNTZHz|SL(O8M90SB`!RUFlk$ix#osDD at Y+
zg5iwNMt^py6vHOZ?y8_%XO6trrFf6_dD6ZaU8bAkuZw;S at Xo5Shie5B-drHZ1fm5Z
zylVI0SHOw&Tbr$8<JO^haWsZWB-6YpJ0T?cvsb+dRntR;FP82RditDKiTr8c&lg@@
zOui(N)o!igv+~WU`7PDAI)jd_fzP#eeg^PVo;L9R0Ek~jk$gvOJ;&N+kyON%=!gR3
z_8<UBt2Vy_e`Vny5Aln|jNRCHU6g-X^?!zb4*i=vBV{F~neoHKc8MnOFQ22lYRbb5
zt~L-y*QF}XqfN#t at 6_wVRFqm%=1F!)@EtzyLYKieejmEmEK(^qOB4COc3<ItVm)i<
z4};pp?xXO^*2#4*v|L at z!s_bUV<t!gaE*^<3b_N*6zD%?f7wr0ki{3rG7FQ171j)A
zx6FYR+}!*I9te+1)BYIUkBEL9@?%kZV|fI>V>_|)g<yJNh7_I;TJy20tHY>Mj;QqT
zc&70)c&o)rtL}X5 at wK%N3e7s(Oz)yyTZu$63^I^#Ne7|MYso$&v*~&<IN3bQ=Allz
zf-VThOdQwiK8^btcpqBug}t|m(^1xM-ZCVe<ZFG5dh9>}#(%w>;=I#D{{Vtzcq77t
zS9!cocd12n30T`$jRIPX=YBxJBixGV!PKixi-kz5v&GC^DwUM5?X<SP{5j440K;>5
z_u<By;k!$}4_SDs+fcGr`%To(Y+`go1v09^jtFi>c{NW?{{VuT_*Y)kS54J^8fo`;
z6E~InyR~&<dwlR$u=xAo2g8pPd^*v*EvI<L!g?(FTZvOqmsd%P$*?27&Eo}vkEcrU
zh<|184tRDwQdmAK_!92+c#7IPT*VND$ou5(B%0n<llOE-JvmA+N^s_XKhU|ad{X!w
z at t#{v7sNgXm*KXlc;9ER at dcoV$ckh4M20MUr2hbYaqcVSkBq()@dv>#iJFIoHA at I@
zC%8~yzhQvUlb<p+0|XFj)pc*#w_ca`QTW^8{;-+OBJl($eL6k|>t3UI;i-Ig at DA(1
z-Zj^>fA~y1FJSljMzi+#C0naCKRvvTtiTlcKsn?UKDEbR3mL=SS2m4iqSZLH<!5hQ
zPlL5DGf26U>_SPyknF6GGt=qMrB&4RJF?N*0F$u+4VWaftVr38J?qnLBGz9{mdeUl
z8pe3DExhbkX*mId4^Fr}#b|hU!Ip6&Pa{Y6t-e><LUMy3k_rBPmGg4M#+}sC(``?r
z!OE<ua;D0 at 7w{&x;fI-SRxLkLDd$NFk1?VoebvVV;~WoK>$JK2nPD<p&oju%tpQM^
z1J^2g8iT=FSK96_yhY-jYUjef9lM>awAWihcQwOAaK#4Y+6FLKo}>UPpz$u0u}eM8
zma_(}Wh9}J?J|Tg9n}28(1Tg5HF}VB8d7$?oenv;(OiqG>)gwdNT83;Tad|;e$G4K
z{{TQmGfcmGtt(g5ty2Qjs{Ncq-fM>75rK?nw`$Mv4zD(yWb?-qVtFCh(xyIeTjn88
zLxMT>t}<5Dqk>&h);m*e3Mrm at WM|qC?_7X%_c_jZ6^06mtt-`99aQi&Wl7a~S*5Ab
z+_m<rX0s}SSZ at lg{<8<K<C at j*uY~+h;>(w@(KM}3TALVj((PX1A}6tB7$2CY_*X{L
zd_CcfKgS+Cm(1|>;*p|we%*`{>obvu%XN;~N%@}{Zi`zQ&+VD<Yr{Hiy`G1zXkHT3
z!3hP9jibb|K%{gG;hDO1Jeu}s<?*PmC82oKu+nj*B>e2{^0wzuWBWDyTDP}Pv-lra
zxR-wP`&5uc7|&6ICTf2be#id+5Oq%s>YA^K+fVRig at wA^G at 704VhLs57jIFUXADl_
z2*}5J at X3E~KZ}Q1w_ERt+N8QN%!c7K+h`+pk8s`;nD7oWgX><y;?MXgqU-+v4=3=|
zr^C7YNnsQz4aTG5TatGqgtyAm2;)`UdvZDH(z at 1HLKEh;r-<uLS~;tA>G__MZ>lDV
ztX^r6-=)pGQ~71!kUUZqZmNHXdSk77=B4{RYRN3oiIQD6%_h`dS=`&ajkF%|U^hLE
zJ?rERCi?5db6o0{8VjOBKIKy>`J~8U8jNI~RDZyQdh8$YQ9p^gJ*(M&X4trnL-O82
zW at y_OAa3dO_O73()3(P&Tzw at a8VxIVIbRb%bsN;VmR8?wBP%MAfrH3C`K)`%-CpY2
zJGHYnZn7&#$7>PK80de(xXa&+R~K_g^66kSj$OjZfJr-v>FZQm;vJ;d5lcRiGc;|y
zA2%Q$rYn_TB%PC1GRER)PO_Z@?PY)X2cXZX>o at mMq?b1L5=3&ON}vIb10MCWp?E)0
z at eS<HEHml0(1a{ubuA`;h!fhpwY+PfUdXL2t>vVI=X_2EKPv7#Kk-p5q5Cz9Pj=-3
zgE9tXQO8`5T7TJfq`k{On*RVZ31g{V)4E^Rk<$3rL%lYVVd0+AE(=NsBLf2)dYsi(
z at Zs?vhwU!zBa#T#CMZf3l4Vbnf)8Bw&MM8fiFNss+7+<^)-)^S$&5KYS-Cu%b*)S7
zW5h3JU3AE90-OYfT#$fcZa+HCSw=o8 at uz!sXC+L25>DRH5kp~TpsZePx&;JDZ*cf!
zIp?V7zv)xzwlQ2Y&erzoJhtB=sVv-lqX#%OiQ)ZT=lf1b2|iwbb!~SR(;h(>LC~I`
zt#!IykEr;eO2;cjYF~sgfy#n1eFlF#3i;}>sY-9k=+V;%sp}n1bu^fCt7UnZM;}?k
z`CExO$0U9yrB}a#+UH4Gt?YxTU<*f<kYl0Gdg?VF4M(S37;i37{G`DsKX&7i!_aZX
za=PxdX>9Pk1^&ymqicBM{n}vlZk+K{oT^Kj#_F88eiOt#DQWihTIv*xtG3=qn1PQ$
z$FExEE$tz?k#m>}u)xN0JK)!6taw`Y#+r_!eH3#f<@cm=q4|^8fsQz=4NF73uz at Z1
zNhHeKNC(@X74>wbXec+S$%`j<Z4J*2cy~>@GFv)5%u*7jL<L!S>!0af$7d&pydUA~
zdwXCm?h|6kg!0lw2dn2hjt&pfytBr!$)V{Acg+pgm>N}1Ml*ma{N5&*T_ at YE+IbL?
zE-}W#*Mq^YClf}cSz7Ous8ob?an$Rh at j7ZU&!?q~5m>px`D!*GIr)B^)SgJw{52(o
zl<fc{IT*+};Nu?EO5N8^i6q+;kV=JJN2jO*y*o#_2+^yI+Nj<}!g%Y7=X9E0=Eksm
z&g_dq)wL-#A*V{-O}r1aq+T$+j~#xs+R3b1>7HB>gXT?^GZVifu0>Ol<{N8yW`ZIk
zWIYrE&p9>bdhd+yENscPRC$XKCU3l+n57y%)#)1^k2ERA-qh&)OMRtywSK{ID=pI>
z-NzFWLwb?vjw{Qx?*l!QA8ECf9y7R=JZ#5Np7m=_(RCZR;=Y3FGj}|M2-S!=`ks}y
ztuoo^e_*<o?K15-iB1_9k6!iaLWOKRqZn&_Y<YF7Q>yQ493O&wH4lt at U#002Pxe&2
zm_%j%?+2gKrPcf^9*J{x41uJ0WGXZ04+fdxH5Ps@(%H*=w^8z^{h?jI#Yh!=L#UuT
zoX7#&-1V<Qa&c)H(Sn<m-pJDN2Z-X6_I2>)jE^GEZ>di+DIYEgIKljD$U_jo9OFIv
z*P^wAmwyk$QSNyX>;R{tf;p_2JSTUkTCCApEJ76?X3$5}oYX3jTe1{6RhL87KV=&Y
zK<eHhn%%?c$zmFGWAdx+`EosYI5j=~nIDZT>_4=;<nZipGRO8_Lddz@*SR=6)o+59
zaCmBK`{^ChV`NpJaq_X<kpu2JR*!`*PL+Lg9Ql&k?;GGlfR4Q64{&S3#m%`l4bP;?
z=Lp71TQkjdzlA<Wg>Q8!CGzF9@|HMGH%g=&wm+z at 7fST(x{b at myDj#{&fa$b06L2I
ze;3(bTxsuV1ZyN_B_Wk_<}N`iySG95)eBz-LS{?57`Mh at 2=<zZSKB5=Q$5Briq{W}
zsHywfvmAX4I-2%w#i{&n at ZGejG}wGSuRW~JB#_IfN53FoVC?j+BgIYO2en7=)|;x>
zUMmJ;d32Jg1Jeo!HOVFVbjco^R-T`66grKv%-B|CB;z0{ueOY0_GiabcE7u?&-};g
z)>4&<;zPY|7kqMOl1KHgPxu|<tu`y`jT2wDON}#Fgj-!ReL|<?aC>7l=lbRBOX1r%
zV=BfQ=}}yFPNVt$m5Zmp*>xrgapnxE_pXkPFJq22X}v8EsEjatF7TJc4+ZKoNiD{%
zbo-qeV1<%+qLtl=Blv(IW4W$B_JQ%Ho$)W?F1>N3+)ot6EbWpDi*lQ`+bT-L=ZrFA
z9rIp+;9H44E&Mlv+!TKl_-<6X)8>(Pd4&jIj5~vj5m?sx<M`{q9xT-LYkON=U~4UT
zGbCXfd&-5-cONsb3+-P&ilfNfqOQ+IH5}I at w~fB;kNnRrwNnU=(+2?p$it>_&03Dg
zT3W*&S72E1Msk0`s7rGc_p_y>=*M!V(t2})_~ibTyMC>vqmZp6`?idpFgQH=SI*9z
zN^L2tHg!H%@Se&0C}@{i at ph{;7V_y+Y39M1pAwSXkOyVQQ|bkIHkmB#BlCm|!zbnh
zWPkzsV!g+}zp_`w&l7kuJKqf4X*Sw^scf<s#<Ga)j4}hL1h3wQo at -hk*canzhA5Ly
z&?1c#ZX;I=Pt)YDV+|Ro+DgY<D?%Dd>7{LtpCPzwU2I%5-dtkVXq%tCxo`$O&OZ#-
zFKqI{CXQH05w;Mq>PY_p_1D%HKd=YIsUpj1+9|jLAMzGlep`C7f5ARJE;!pQmWrj$
z=V7ZaUch{nIEr$cNh605RZdB(zmqt>*!xeLQ~2ZH=*9{D(DT?H!6SAj@~^M|0BgHV
zSN;-xAH))9I;H-XqG`Tut<9CWnl-sItd7mMB`}czk~`NS`!asXemeL$@iGq)_?FjA
zk4?6;nlyWR;WPQJp-0Ps*qZw9P`I_%G at HFT@JVhiZQj`2+nkWBrA}1!>sw)>;U9RZ
zzIstvdZY3C#D5(8P2ycOqt$hryR&kvW-`poT)6qNbI3U(9-dd%f3W`miac53Z8K3#
z1MC(Wf=8y!c-oqmN$mlVBq$dJSg087n)##lfc==C;YW!^i=+6O*TjmE2^@J11h6Ul
zio+x`5$Rsz{{RHy)~<B_0Et?jm8sqCzLQ9j(QF&#k_3WODhNOCwR*FRlrL=<u=Qh6
z$})cPJg at eyxo-^q(|$X!ni5{;Q~O*aJyKYsar&{ZGP$^uPPX%}p3ci7D-5 at b=O6e0
z$^7wOVt&{^vsaCNAbe at N@fU}@H+!quUFr77ZY<@6cF2L1f!^vz0W0SZ5`N9zC-`Tj
z&8us^4XV+tLHVxlWw#}XAYfub#PT`{>ZMzj322WE(n-E#_h*<~c>3DcosBAvGL4_<
zRblvzr$;MDwyowi12F19>0X`T{{Vy at CGosrv=0gDTG|o8v$QV1_tC<S#MX?Tv46z*
z%QE~j)e+B4(p!P~dDXACQQVbDK8KT!i8^VM&ifpmcHO)G0E-#UI#&zv6T~Uv6AX|k
ziBxPV$CF<~uk1zfWrKgkz0^^ULL|2s{{YC<$9Tu~VDUGEFJQItRgv)g_YA&N5|o-|
z8T;E~bMJxQ6%M>wv7)CKzGQO020RtwKNaittKq*7>V6@(hBGbHdUPg6j4P`v5&759
zz9#sKcW995x7K%F9=St?gHVCsn>{~_57N6Y+2_EY7XB1zx}-h~_<eDz*xyXECatPQ
zELp|?QS->8sON#)^{=FEG#`rIFtCOn66p8h5V(@W+37b?pIkK3v91d9jY*!BHz>#4
zX`c#dx}~*`iXgd^8Lb>Nb4Ga&6L8 at E2D+cx2SwDiFN2z1scR#?zu;{`Ef)UZ9JR)m
zHd at MJJAsgd``4%ZMg53;PKy=SfHbXPE+vqgn=NwlPZ408lN(1T%l_`%d)HmyzuD8`
zQrkzSc!$H0Tv+Nl6uKU(B$}15U5oQt$O4jBqk+li2BT*iBSkjesiu6r at Mpq4Dfo}^
zP<mfQ at b#Xv4AF+3`&5okBElp0r6ow at b{$FLzV7(3;=c|4#eW1 at JT+r%{vy<$?A9@|
zVef9X{L at GWB@ler`T^Fv{{Vo02(*8LJ`r6W!BXc|pKQ9GqPWcSW1t;EE^wpq?_UXi
z(Ox&Z_}}r at RfA5|kuGen7sI|DwoH|Y3o_l^vBno at S7J}1`c at P$@Kffusn=T(Da9#U
z%VWXq{4FPoG)-T|UL>C5QrC6sxgpYnzwa()2RAozXR07O6m;Bp`L*V);ZYW?J-43G
z2;|x^Hw2Hzo|XDSd at G?_d=p(iPSDcc39S5$Hva%pw2384cu=#IZe3NBZ{5Kx#P=2O
zpN{?<-*`_{dwoYwxzpr0kz$@Qq$wF3eF(3h!>HEgi${f8x3H93mgmu42l0-Db>a9M
zTJUa`^T!zT1U9N3e!!?JjQtKduR321cvs>Nihd+(c6t=L4uRo)E(;rNF#r!Xr*j}f
z!0s2!U^{IGwR3(F_=%@@b3?bXx{BiFdvs?H)O92;C$|-&;WwK@{hpUozIkK0 at gIq9
z^%)p)@8n12#yRXBRzHP!6!KbFd;ly#)4oKiK{&VO{{SnWO^C!&RAD7J%J#a_>(<6!
zhx`xW?~C6Vyc^&@2ie|ue%|tF*82KOkF-c*Uz<2QD+E^jPkQ}x_*d|E!XF593rhzK
zXjYnb)E;Hfj5PB$KJ&<VVr$^v*n{BY7Vt&!0$Gb{QqMi5tN~6^JZyK*PEJLBky^~Y
zQ9|mXEvQSd9FfzWy{k#n_7B;qH*V(|sH*$QHYe(Gc{CA_LBR*8Jq-j9a7I3~gy3ef
zDEY_sr2U+9FA at AT)-Sv%;7vMz6}`+i22D1`HMy7v8}LRm@{^I at 74aw9d_(a60Q)z=
zKM*`MHIIh%D}&@mtZDvK(KbLPDKH2Cu*e6!et>?~nx?s>`~vY7rJ(9JdOovZBzG{}
zSxQm-wUh=K9;==`tKhGS9}|2{@rU+fmg~irGHV*ohkQkBEcF+M_p1c3$-P<E1G=v#
zuNCOw-#mF_uCMbv`pelqc*@t^cRNdufj$I{@?aoiI5$SP--#Xq(>x`nTHJVg+4joD
z3xsHzXrzs>KJf$toB_{z`oH!B_?c_*7vVY4uLLq`x)TWU at T)Vz-*l2jP7X)nE9u+4
zKHB!s+T5f!7NmwY^1!A%gOGOg$RHoWwRow}n~at0bA3(Jk2EFu{{Wf!Nnw3fFAVCJ
zaO+woZzhdojx9z8jpM>$2vP=Bh#xm!t!?}%y74!QJU4Z#c%wpxP17a3dwWZmZGxr1
zP)n-kuHFDT_5RQ8N${S_;%9{H(%?ZJrwz(^8kma{M5iFAU~)%4bn#yXYmKgaKi8zu
zq|{pe!qRtJcHF|+<J5utE$ffeSCK52FU)KEc}CKEtG~ms>(S0}nSB?Bc6M4jerKlZ
z{si;>7+uM0C6d|dvpiPfTW>b<#N;%K89XjZ?&G_6uM7Bp;oVD4*L8axZcS5B(5>cQ
zwCa|Yp^_cw3`w~Bf!iQ$C!fZ>{{TU`)qGX(Yfid`&TFe}Hs(dTOL!g3FM;>T2OJE7
zdRM=G$DT3KB=~u(X;Vq2>9^Kb?L4MZiX~UUM`Fk3BO7zu0=)_}Y2k47J(AY#dLs(;
zs^Y8DQ+ioDcW1;uw8z71kAzeBLJOPIduQS}TIR&d34-NNZOY3DIYY?rjJ4Z*E$|iW
z9vHJ4j0&C<(e#Ut7Wj at yFolcdEv;3_z%oM-&U1y6)QaW5X+2I)jUOJDSk-m=X&|-K
zPK{=Y+b!U?-cU+gJT6IgJ@~H6_Qw6Cei`^n;9cLsj|5(y66$x~XM5dd#k{L!cy<LG
zeet$6U8Cg#zH7k4QjDhDRgv|zF;ydnjvn{w-}U$(GyHMZb**nw(>!b9Iju}O)CN5(
zN4A}JSlS>0DAp0oagKvOc!F!pqKi=RHQW~W^E6h-K1j2`0C%rc_!seC;Rk}@pHlH>
zfo^<ttxiXjw|5>@wX)!4RXHqkoD<s^73jM6?N{(~Q)_sj_$vmNdl)`!Ru^d#OnAoU
z@{3?&u^nsPgi_gD`8-A^5mM<|-nKkH;RnHq{x$qh(>xud+{2|!dL%z-ol8d&q8229
z$>4sq^=`fU1^)oTsrX~!Xz%_a>F}lG3v)E7YcOd90i;-vXB at D}Vl&hXb4P_g;GsVX
zJRLk&T35k4T{86*m+h8wpqv6QaUqX!&wQHazB2y+!Aq__BYZva4}|n at 1}1>I&9B&`
z)MdUiNgR3kfL(xc2_KCqxnD(Njua(RT9UV;Jm2A_qo-+}0KM at HlSO9^mvi>$t-|I>
zN^V%s{r+Hi>*cSdaz70|50Ba}P}J_%ShdjRNd!v_k+BX)&hkg8&P{Xjc*9G!_$hhe
z`%B<8d;Lz at DIzFvwy_~%<m0 at IPaN@IKzJ%2+1J8e3RoramG#cEBubK8TZ!Uzaz18{
z3xEOj&TBd7yvIIgq*LGUK6f4&(LNP;`&rPubEe&EG3lkFNVIE+<MZUm!x>py2vp~R
zn(FL6JNPS40 at qCVA>r$giby)fqjhxTXQ{&=&(Kyk#Jk at BuD_+~J{#1pF72*kb-uQ_
z4DST1!n(T*m2SB0Tn4G)8wl=K>~`hA$Z1)2?#S#ZM^>(Z#VuTJ{Qm%}5LtMp&d0|3
zo~3c&oigUy?QT&tnM3`a-_29B$A;Vr5(?y=gE_2C4_LU+wOeV^XqE{UL^2J^#2ny`
z;Ny{1=3;KlxZU#upU071U&I|N!WMRVdGOA$f2>@%Cgfe&2o@&5#>2So9eVmwO{bx|
zv(c^3sPxZ at z7+Vs1+(bh75 at N)TUE7y9ZKFCfhD}Hz!E~I=26!m<PIul{{TmSm2iac
zLF-?kcz0jB at aCfh_MdR@T*ZtyIM1jfxIUHax;MuQcr9ZWw#_{3GU7J at KVC(97+UQs
zHh37EEMBljvB{@fYf*zNL1#`<a0cZ+;aQhjefEi|Mi%Vb>Bcrjxl3O?@r-~Ma*XFa
zO>s8g7?G684V-Zy;CYt=KcKA$ela|FF9oEj-aj#zAHx-{GX;mmu4>j#`rNDyd{!0O
zl&i6K{u2)eYu1{~m;NWzp*l1IceT5;wzF%Gm?(|}ZTsK8-Z&Y}dA6bP8{tRG&F9(p
z!tA>TWA at v4gD~iD5Y?X>>Y87R<&x!eXd!kvWDk$7-Yd>-{3&l|brsc|A83VGGuqrI
zBxjM3d9RvEjVbad#ar$^uJtDlcYFH3(DjSo+AqMmmX)Gu66ii5TWu~GEp1tKIAC^;
zN8Z9mNI{dHg|a~4RjZ-!(%;5<27}@+1o)#%n_3prM?333GDkaYM=E0+9=}TG{7>+w
zPWYkXFArFFA at ofpg_E`4_Kn)v#w6d4UQz)h5r91ndOwQ(2l$7?zB%xn&bRRs!5?qY
zEG#UZId$c at nZ>p<^CGa%2Lm<L?RlR=nmp5niLEwV-=W(6(H{-I9{d6DJXWxHV^G%Z
zz(_7GC%uhXRoKXz2u<0 at Ah9{d2TJ*RZyER>S-J&a*S4r!f-Ty3?jZ-i%0NGreWm+f
zX(QtA!(B$}!TPq9;w7 at Tj!U~s36 at KQF|*}>I5+{h$EAK}ld=#G-s1<gaj8wpY1-G*
z(DiFjqe~A$Q23hnwRcYabv}f+`z3{yw9rf>j^Z_yL(UaRH~{|uN{zMnaH1)qidAwL
zaq@$Kj8>1s4~zaL at GpTh8%;059t^)`Hxfmu>v}@n-4t0d$#Pc#i2!4 at dv}HWYx_xf
zn^ds1)AU<?3~DSA*5cQ~cD7dRNX~b(INGb0Cp-XanPHUGq|Rwp_HnyuU)8_J at hic5
z;ycJJw0m2t>zV#o<Ft&sJ9Ov=<54%kJsvsdgT+4)G_MU at +nujz9i7GW=z5&_OS3=l
zD*9*RpY0o~cn8AA;r^ZC$^28Uy8i&g-(E096ioQ$C>0fU#t*M8)bYi67mGh?e-`+|
z;P$KFnY=loq?g-c{?)M4qPLJh4p}y;^2Y<_1Rk~NVe-h+ij&y$tKwxAqUCSv=4a?$
z4fqRZr$=FV at fXDR>{|uwJUXzTB=s#MyaDQJ{<+}~+0Vmw4;A*I at gGu1wy)bP;<Q*>
zJp8Yc4_o2?0BDbeHva$!yj!JMcy{i2wA<Yh&i*^MkUGxphs`L%f}z0}?b5uO>sZx~
zZB4Y-Q%i1fnAq at f(!CF3N-FWc-g8E7ZAq_p&A;<LgR@`RO5S+o7M~Lgh{4tT?>yuj
z=Dn}NKL>wj&xk%6 at vn^RH7^?ZUKG>g)Gy+5Yax<30m7*O?*9Okf)7gg4mhUHLa at bs
z(fc6yZdre1AKEJKkk^(mSVxuW#Sit6S1n2u-L&d-LU46q7PM~9SGV4II{35T1 at v=T
zT0!H>8*w2%Yo(RIRzK{Gr?;(3Kg6v(Sp!G#*Iu^qS%M=h+6~R4Sn9GOj!H(vtk at io
zj8C<8+6Vj+<Kq38xw(;aNg%nm%G-ZvZIrR)ath!u`ukVTGcL8 at pArRBn@`p>o5BpS
zw%IM`iSdv}LI|%ewF-B-h0*A_Ms7|D$$I{yto7Yq`L5!$(qxVZm5iv_RslFFbJHH3
zX<)t8;eyse1-Q}NBojj>1c93jj6Fs&KM`M2X<iAi{j)qhd8z41Z=-x@)2%n(*+u)S
zZxY&fl~iz(_H1=OT-SnKTVD8L{^G+|v=+A(&-P74u3#;2i^Cyh;Hg{y7;}(CX$mxj
znnrGNwcyMvDJDAn(_QMZ`Bt(t;@&{ck`6(Qld88k=cfm?ThjDBA_*>0^@$^rTY>gj
zik~e&!$%`=ovd=F9qU~9raK)z4M9!A>L*eXUENJ&xrK{>v8x=jZjUE%8O>FO_B}bJ
zHrE&Tu#7BL#{_N at vjpkEEBTXJ@<lxmDL1T{;?Xki0ILl5D0xxMu3B5p at S!u1ak??V
z{Ofe-@=I^!$7^y<a;2A`s%zm}hHc;3 at -|QW^ELD`!q!$${Ern^qxPTTWnEu2z>Ss}
zb}7jLbIn?})vcX_Tw31mQH3z4^UZczK8GYwBywoQ%8sQv*HNbUXK_-RX^%Xdg-_I)
z>yBSp>&^HabH~$*<x$hr+4vdp-^1Szl1MM?FJY2b1m1ZhoNgUJ>;+_eTk*z|u6WN>
zyYQvV&!k<+4cv&4n5np4Nl<!oj%&8kbcqDk?KB#Bf;I%&FfP+}+FOi%6yJ#61i!w!
z&We`$H<rA_(T&9CAm<qzS1oKKgSABO<iFsW)5OMhsT*mg{{Zj|4}-Qg+JB9-O><wn
zv9q$bl`f@%Y0Q&J)P?fY91?I&?$!2h{4d`J&1W6Mrkc?Xo@^mmkAADq&{xQQ1o(Td
z>9YCPscm$Keqj`<&nV;{l=Gi@?8d8g40l#uOT`=!vcxVS%VEYi^uZu~YvXZltS9e6
z=i6Z6LZl-U*Y)y0Ml at fBz7O$Nh4j0b^$YI}>Q at oRcK3Qpi*iX)R2EUl0nZ1o;ab+e
z419N>Sik%tUlNCiC23T~y5g${;sE6`qa>0?J%an!2jOpt8dcARw3&SApo8pig3>}|
zNWM at 2c8?(m#z1b^HP&hR&9<bgHH7e9uW4+i5)t?VpVGV2(H>P*%Q-EzFURB0i{1~k
zyOYG;2ej3qgrdfDNz9U57C0qP at -~c<nwvuXr?eer`Lyf3A6M}Hrl`_1T9%yqLa56&
zRP+L@*!as-)16igN=3)~vY77u8=BjH8;xcLw$=38Tj-c!m at d}+b5up&a at Eg`blqP^
zo#EB&rSg<ZEHTE>$r at mt%&c|+$5I7xnoq=?6JPN3I?jivTI+gz?8_X`NI-HpA$ZO~
zr`UKmPSRfcS^G|>;wi5O+2(^*XxW-21c-yE8D2=|)}7#Q2<V>=v<1<8JEwnV=|X8I
zTPfU5u{4ZXf|58~o&_2Sv&VcP at W1{RhsQm4#=7N;#i42UN|v_w10v>RRR9lETx9y3
z4_f+jOVD(C4N7f7+eXuEujgXY-a}^^%;moEE(YVDtz}0nXKI+dus9w|l*iz5KT6xv
z8!VwGW*Pgk#xwbXKb2hSIorsJa8X`oLtN&u at cY94CGiEWv8w2reygh3!q)K3cMz1q
zjzbU?vIa;T<2Y7*&&6FX+U9#<r|Pp^Ln6oI!)zOV=GvuLkcTI>?D~qfo-to4Tbq9j
z>o*+X-qIU+31PtpY{cYy`c_7+&vT}RwYP~PiB>3(VPipsQS1jwY!>m`M6tw+9BMEX
zMgXp6-{K{!U%_d2q-$DROu-gg>n)LnJpn4m8R^Y+eJC1hpp}OYfqXr0;!Cd($D(QD
zUb<9SwIgn(cL*@QIT;unaa)v74JWwCp-Yw9GAzrG*pWjFgOGXd2*{_=MFR>el-GQ9
z7MZPoWm=s%?*`5P0B^l(byC?Xx$@W(fu5qd-xm1q#vUJ0vctnJrOIv>^Gw5xjHpE-
znpYLiPcBFto;q`0A$|KD{5HDrt<Q=qwENu`T)SyZl33mm8?>M62#Lcl&6AuC=hnSb
z!rHy=ucmpI_UmtQt at A8#luQr`mCF)FJD<wDtM-unnvd-X{fN<c#{U4qcRE3k#MW@{
z++P_v+ at u^RrljMuCQyX!&aPbXx4;|!02*IulHB;Y+TO*BeTHo^HI8BO{EpGG9ls#x
zD~<Ti`!#Dn6udtyH&*%`&Zi2WvfV>*ExUvL*4&Sk{A=iaA5I!Rmt|tJJ;K_+kO`$Z
zc{ZpUiS;<o<5w$4)tnk>>|s1LDv7Bh@~_1ou&2fy4}IN_hAp)zA!T^J!>GX~NFa}u
z%9GQkE1~gU!Jimv{{Rm at U-)}b at aC<cUfXGNrR<khGMi}b<hl;VStC{$DhqLu$n>w#
zUmp0O{1xE6b6$?hO-fxl&Rdx5;?C*aRFy%1PbUMVd1vgw`%K+_(3bunTdxS+cvkO5
zc#=~r%<;<4yM^3}c-#7l>iXqbH8!<JI>5m}(}=$-oFDAl;ORadcwa=)bqzw&`7LCX
z%$6I>WNs~j2n3&~uJ^^hAJ%?6_=e-d%*RUbEu0Vbrg%bMOL|xs!ZFX5pk$nLgV&m$
z#-1^4H^w at h`T%9Klgd|P-4p^pTI;?MT5BgqyVkXpg4*L%lur$vv}}SHhC&xCOEb1|
zN%aD_DoxarZ>ir(E}T+NV}HQ_4+&{INh-Fnrzds_ji;ZAn%B7i#M#RMjtBLuKMNJp
zZ#8`!<v!1HXM_=eVVCC^_6%Hp6~1<~fPWW4Mt_|m&kOyoyh&-Md^XiAt}X(JwCjl$
z*bZ5U+N at 8eO@4Uke-`ykBjJX*;25nm$#h+5jF)dUw(Ev`39KJH6~M<FSLvsWz6WSu
z6?|#^uj1HZ*7RF at 6|%I_9h=H8yu6ahf--Z31E9e@>9*gp&%z5#c|Q&OI;3|tO2_j#
zu9`JtO+ICFnzcDj+`rf0erbNspBb0-aq(oD#jlfdZ!~6Giz|utE2-;)*p8yUpVYtL
zr+yED!2OfMlgWRM65~)$EAv$+^slO{{s(+H)4&$~0r1LWp*lna{;689d^_-^s^Z_n
z8ZEb>hfRS9{F1Jvc-5CQqD?AwDMytwes=il{t5}N`2PS;YX~&^EjHbxS6{HhB$BC9
zk%uSO+Prhb{xH^jN2jE3XQ^M7e>2O5%12;-;49X at Vl6Z)3mDNMw1Gkl0`gEX`jDco
zqcm%^T&VP3D(T{tCwN5}RKw1<$0PDj;Qs)`kBZ+8wTSf(4EQ_561l=%Tg|7>_It>?
zq=~TSj)$oAuNd)X!f%Q8ji~C^z7z2khMgqMJ3H9Uu)?gwg~?unIQ%R3HsZ=Fy at pcm
zRPJ2J+#g=G6q-%6%E7^qFvA98K^}w}QpLGR%G$F1gwzxxD_hI{3H<oaVXOJYU9LA{
zIQflX>iSfYNWW^7s}9YcYxlpz-?Nv)Ul{p^SMYw5aPBZ=NIa)M at Fc;n6!C}r6BFRq
ziMPI<HE#||+=FR$WI%u2kRRtu+oY_~&Fm}1-uM2z&&JQQ#Q?&}6b{SMqj}Xq9%0RX
zi+n-<0D?p7mf}f#8RL5$O?s`isR4n{w)M!*;a at F$Q2mKMF?=dnXVv^0eQ{!$&E}fF
zYKI=VOp*ACj()`Q+vC5_{PsK=YrKG~F5Y=K%}+k93#^KYk%kM-4nZEDTCaC!HKeSP
z#K`J!%EJU7LMuzez74zZ--moPtlT;qeRke!i**B)SmkJre-+I~wvuMboMo|>_Q>&{
zH=o9uZ({^zQJ<;evrOQ6eJQNrv78EC)tdVhYJH|N{{SsTGDi}x?(PtC%XQ6XZv(C=
zJkW!v=98${{hCI{?p={GSOJ1m@=Zq~i1=o~^v!1tP3%}QJ1mC;1w7QgW}|!*vM5q=
zJjSQah3uLvW<E0G^QH5n2OG2a(?*}DMvWs`dGRRuniIPN){8p{wHV$@I3DC6Eb59&
zARS2qx4kZA_6HQVBonCqBl*;kUc4*}b2^_;O=ih5IT?%sIO~dhQLM_venO)>oP$TS
zk`HE)zXyr62(gRjDmn+}`PKNmWp;RyJ9)V3$%FZfR~+chbC9FZP_Z_1yw;xHTRlbW
zmq%mQbPX%S8rO!kJ$l;6-D#S1u)}uoNH;`f-LvJ+;-_gD0|SiptjYXd`fb+FD90>#
z&p$SCUW4$GEq_D!d#qks=(f6+jWT_fdyAJpx|P7%c7h2bsK~`)c+=s<)VdwViUcsg
zH1iFNk=m-Ny97Tw4aDv|WPyTn(!5#Y at QSCicD?Pf`ZYce&E<jm<s{rvz4?;qdnLX8
ze<Qm1OYl$P_r?ttZxi?{K%VnVmE_aryn^K-X5bkRf<eX at b+0P;o$x<f_*dfF&kp#b
zMtvt$w~9H80#$6JgD61+gU9l(wm;yVU$p-Kg1!;_H}PhL<8Kg+1l(#-URi~y-*9Nc
z$&IRepw4}3$iHt7h`tQ?$MI`R at dtx-$#p2sn3mU<4FkuCBa!ytJ_-3)cI{lGQhhW&
z3KZ(jGKnca(D&bf{{XSy!|#b+0q~!R=RP8zNRvzQpwpn9IM_?(Zg$^}&$}ZXE9`UN
zom*Y-iuiX}zSXa6^R&vdM{6&Yj0lS&<cwn{jo9aoE9MW`-{OD7PXK<(aYy0Z8pBuB
zG|fC*==RgZSl*$TjL4x}6CfOcjzw`R{{RIB`27~4Z*8djH-k!!M+)=LqFt4YdYl?*
zH?tgRMw;fF()DcmMqk(~;Wh2g+9&Yc^G;6YX>~Vp$K2+w$NL9-Aj-6!6fzP0`}xoQ
z&tEm$e%${6v~I0`JQ`2Kc=b4Aa;tG~pxtbcc44 at VzV-E2!cT~Q6R*A#-1vvbx at MDM
z;+uwMve2U|YVpQ8d8M5E$FANnz$cp0Zfi#)CqoT=EZY(P0Ag>0w{csg--E60mfdzk
z_KT_C%UtBD<<16s3bhyPRq#GA0r+jA$bI9G{-vs|Z^aK4UFhg-?jq84NXGKgPhlcV
zPw*8l@?+FzJXcq3tZS>GK`qaW^x5uMhQuFciNHVJEX7D2_Kf{&K52IkV at sr0++iQs
z$KYWY{{V$!p<~)NAFk at ykM?u$PL1&6#9j;VzM2032$q+vjNCSu#Jb7y;zjcd42`SX
z99Ko+FN&TI at Scx%sOnxO(>#kvjI#)?qjzi!;Z;saJ%IJE9{rxbZQly~e(|oS;fVB$
z&kbsDME5pg`c+|f3ZIzp2F3t_ROf@&icguYW^_jmqP?VImAai~kMN(z at M;$}dY8?8
zZtp@^)9ja4uv$ZS8<5E<FtBbgLyUbZfz&_Xou3M|eNyXD)GmBaeS38yO+3?TN(_!p
zSe>zsroNLp=9ay6TLJaDjDK2%{7s at o_w~IoPrc-S<4W$<2}hZ7yV&v{hrh9}!%v0&
zBh$6*0 at qcx)hsjQPTG^40x(sSU@$$w714ZV{hhoA at v}wLAl3AHXtk-}XrR`u;|X;W
zW922s-WkUYkzI`5J at CW_58_QAf7|ST<6c?f{{Y(yz&-}}y${39UGJdO-T^9KM+cc|
z@)3~`Ba+zXIK?EJ*mUUH{EKZ*$-feKTT$?~zpLn)gjbRUxp*#-NLeDhjN&jiZ~-_!
zjbU5GbEmx0wx2Eau0)9MKFN|*7?U_ZHq)E~*w at itw#D9=;t!28>bfno$4=I*R_X~>
z7E>kcL*@lLk^=r_zG<Jt;#;PM9W05GNaT38F*6VOZMV=LPS~v{8)|h_<x<mUsY!fD
z!yqvPRH@>E7w>cRuPPeMxb7*-s>|<RZT+_ml0HG at o@cB_;-+3h=jv)`{9ad``TCmD
zp6}rfjqnoA<o^I_>mL(!BO<hGbR)LYLcSH*0{q*TqLb=)uMllsV8;Z3>6)jU!aJic
z?7K;))9yWuJZ3`zCFkp1UFXE1sM*-uJO24o%8=)hM??8n&L7(n=Ov9#7l>v^yuIhH
zde&<=qbVmPv2QJWt|{()8ENqW6^36p>6+ at auZmDh7>em)xQO<ZK_lpTiupo4e&ZP#
z%vp=YS22<E5`MKcG1x3Z{p>DPEFF43!;$y*fxl=kRZZhx1!&qoh!ey558C64P`KQ?
zKE|Po?p6g$;{Y+|3IMKGK>q-Ofz7D=K$6E>_<y15kxhEg>3XDa8%vngq$>=P>?*Ph
z6(k&HzCg0^-Sj&`Zzrh7BoSWQsOwgKDE`Co1U89mx6!Ok2>`rP!L(yOgl!}1UptGX
zMlDMY^!$&Y!quB`jbxs>v-BTZ at wS!VZxP%0b6 at e}_-|dCAu8B-mI&mxm}eWKV1865
zI2*Hy>f^Z7t!%%v9O)N&Vy^epw9QFliBtQ;NOpnrHSq`S(fdn$9r)Sdtu|dD^^f>Y
zbbyw?O=2U3qazZlK5}qCAp3jQ%DM-~KNa|I!n%H&;mul2F)gnpx_5;9^RucAk^_*)
zyD}7vWsP~t+Z*ynnZ|l+zKt|~+4x#p&m4GW<NF$MZF>akA||03hs{P_*~lZfBZ?=F
z#hM%c0Ew4}rj{|*Yg|gW{{VpJ`B#~K&)*hp{w at 4B(zSVRo$f`n32^aF41(j!9%l6e
z<@ve{bgW;F-?vto`!wr%UWoAO9wF4O5KlBv%(11sB;XQAIb(yz9Xirl6Dn;~_I*!f
zv+=crlKFC%wU at d|Fh}5PveC7BNdhulA;AX(*E{g<<2Q%CHh3>h at g23Drmv;nCg5a^
ze8}6QBMxxD at m73sCxQGM;O%F`_g0q{Ho9G_-AI<M%FGmJ0A!4lf%ww5LR at 7A<1Nw8
zc%Q=_FEC;~GUQtQt)_}yI_ym*_mDT3V=6EdFJgZ2_2S2e?6ofsL3q#Mop)Bhk^V{I
zQDYw5b=s^s9k?f{uORTh?cb at -;d^~nZvtD~X_+vruxh(xECA{m58`SIpZF-OQIZqD
z(Xah<)(7;8uaa9>u14MO_ at mhTE8*W2Nqsx&udkj}t%cIY$iFs7cP>d7<E499V9ZGF
zYvL=f_$ci0f>XhIa)H;))!X_-R3`rbf|6=XN0;GE3NQEdIa?q2=&E$*E`>&wy05(Z
zuQleLF~0bi-w-sbZw~2}$>Bwk6M1<gkdq{2{`ci$xDm)3M>X=5&- at gN#6f>^q4-go
z{+is(Q2zkOg<;))!ALx2>_UIS8D at P%b4icRT3*gebUs!5-`CuJigDVC{MNkx0D_Eo
z>tWmC4+=y709^F4*!<-+mvR391s3u0#f0%jow)adM~wdfJkji=K3Mga=l)0NFNu5~
zs_H&2w$^M0lCoQ<2-lu*$i@!jUzDFl>y9g*yZB4uO?O(4Qq?tG4qL7RNo}V~8E`rS
ziAH|7?O&dkf4A?&Ek@`=2a4~SM>s^auz at mtzjau;m+gP?ml29jFT}bdC_&s(MURgE
z0CWn<a)mu7G`(59JRM5QnwoFXH~JpO`%M1S-xR-R?~YP<W5N2Rj-jRLwpQ|A+r5H$
zFFS%tlEk*{yE-=+uc`k4XHVLfK=}Re&hKB9?YujzXyb0NXLlyp?OPf1Hy`<C-9hd6
zSLLRgXR7>Hy12f%z4J90Ck=IbsLD?aI<euIxWEJ2y-VPBr#I~B at xMoZ5sPVjIjy5;
z+SDRdp4p>(23I5HV;i#P8Q`$&YMNac5o!MBYhI4lcmDu_exvDLEnQ&)X~#>|;y-px
zFIS3O{sa%_THo4|#zM`c>QJ8T<Ox)MD9v68s(#8J1NEE9B((74I!xuVC(!j7ZCH8`
z6|wqMFn-EyqLBU(_`Bo(01YtVV|_qgL_M~+=~JPPxz_&xhxxC__v7MCHVFWG!EEE8
zogNea0FMDyq13H!f7D%D&QCasRbqa)HQ at gM@PT}I at ZOpu(LOF|J|nm at Za?snXyJc%
zw;KVE-<;ND+V|}hqp3QV!#@G|%?DYu+wZf;!`MhDu)W*-UxWVuD;vHw at NTcK{8rTA
z)-=nRJR>cvckzE at s4`s`uq1`^j58g%0P?*%*Q at wT##Vkbv at _US-dQYUDYw73^4}QX
zfu21uYvr$sU$mdaPYZZD`u-1ry4Qz%Ltz)275M`G#3}=j+X%n|CwDl-d>!J?+uP&c
zjv<mC_)6u{E!b at -q(GLueN=Azb4@}|WK>l at wKe(vN9`u3rbwEdrTkHWI74qLI5?6b
zbBvCJ9!J#GtHqAW49#+FB2W(bT~Od0^37j at AMn#37PJp8D{mionlU4 at KHWl7l6v(g
znthLqwa<zkGST7Hyi2QUQ{CTN+et2=dnBZ9kyPXpjB{40OIzt<M5w!3P5i&$pS||%
zuL?5ACRPE2gBWc0<BF3az6|}Rzu=`dp9cI%FM_ at v=~jBp_LQR9>s7zWw?|b2WN4&r
z#yL3y(>3KD2>$?ruKYxX_9?tc;SDEQ(u;iUXB3vQ0o<!)hJK>6vmddx@=5k={Ys*|
z+u&dA0pTCo6Vhw0cv|q6OfBY}afP_Ff9|^X9*j6O=?cN$VzQV1?%|)xk&L3??ICEd
znf at vKQSlU>Ez~XaUlPruT3X%xjUcsD+}ki3L%B|J#j(%u)%_RZ4y6x=HE4Ce6YBG7
zk*51oZt+3p43CwMluD7*pF>oY#MQ0leG}4**O>S=E4z&WwJZ7jSum9p?fYk#s<_Vd
z#@0E{aod54!J2Oxq<5PC0EYD)Xlc-~3uWR!lB9up;X>~K_B*pm#9b}VZ0Sa8^UKE{
z at KLWHXd2b-l$sBO?5BasZ;|dLe{Yv?u1eqb`1sSU&W&zt#3bWxmEq=<i1sd6XYi^~
zZ*xcN*7Hm6{{SQO>YlAAz*5-u?O&JI9~XaWUx*Wvq(|eejeyG8=@Hwn)HjqcKN|F3
zg5M1P0B9{&#UE+${(-M++C-pkU3*?In6OFQf;m at d>D5mZIJ8GS8)-YgBiDax4}_lz
z^jG1#o9`6-J-?pp#!PzthietQu^iwQkg(m?IAu8%`Jwwl{5!hvr at -HZHy3d-&jrr2
zrTH$S<wUs-hmTcoc;lM=Qt>CjS at rEA-rre<&%)NoujWR4K`f9+O5i(hQ<6P69`*4r
z{1gi7M)3at!hZv38gGlVPZDanPOoremrS`?T_KVn0Av~4k1a-Wb6HCIG|Qt#Gj7r8
zx%u_>S!HjM#JBsaQznOW{{S?Wi3;~JFclr%wSO@=x^g`M#b(QOGaR&x`Sm%iE^{a|
zMtw3Ui4NA}j>`F}k=w;{a}-Lr+`&L!b5&TkUTOB1X43Krvx6Il2OS7Gq}cfmgG}%a
zse9ue?2~3z`K1sf2d6y_eKF2!=&ypG2>c;`;t6ehMW<cr78Y{F9qrUI1 at jo6-mF>U
z<pZhiY9HA)<5Temjy2yINRaB<u9c?Ee5-i?mNo&ENoe{Is!tX5PLJ at K>sk15KZ|_0
ztn`b?+{=9mtZ~7)xsU)btCs$Px~WA)bIW6rvvnox)Bd`iA$aHEl$w8!^$k12z8}=I
z$PDu~k#uu3H*hH>R#G at e+l-!>tgjDv>sI(kllc3=No`}PO>H)lt6E%Jq^J?VSqN4H
zDI>quzQD2Zt*5~KH(0&XbxThe{{Uy(yzt*oZ~L~}8EpA&#&gFb-o8H7{8=xJJZIu7
z+sI=^@iY<YKM<mTsVt){w07sxija(wl1A~1SLd=zW&Z#VbHwgG!!ZpMk|LhWfaCGa
zL*-jw0dT|VAO8Sesmu+X#MbZkp>|Km)NMX_+mEJeozCv<YHP^ew=~2sZQbXb4^;mE
z>(+*s;raD+X0nRn=~Us2Fc!h|;<>Xke|5hq(bK#~s_4+N*<D;(#>aDcY*Z8LS<TAc
z;#c#zwHQ+8UfI51D_`+FTfm+m(axW7;lB`Tm-;BVzP2r?Brh-7qe4-`L>O+sZ0E1b
zj`fG)=;bt>ds5RO at l4v~oHq{|URtRUTp&LyfZX7W93GYDpW0H-b at qvKaP0e>yBx93
zPJXr0K81O89mb^a+v(Q0^J9galG$JaAmsPYJ%v(Hdbq2a%N2-(T{zX3FHd>x>9J}!
zwB#9Eo3<yQAPTo{_8q`^a>zjbIWQ09Q0YDu)U_~L-p+f49pR0i`2$@QpToZp at JEL=
zo1bWGBtNbx-5z#{?t2%(Z;Llgty$RW(90%;Zvj&Vmn2c#fUENCX-H1Ja(S=5{4wyd
z9bdy9AJ^=BS9t}7v1uLUyf>GqlSZx-g>X2}%mzml`GcbTT=5_5&#CILSw^<LBE5zM
zk_+2N<yfKn`&c@#$qYJUk)FNN!N0Vh?KpfZqb`l%tv=&MYfx;ZHV_fyw<8DBrw7ng
z`$=~-P>WvllKcMvM18H}Uk}0X`$GQEy}8tUK&s&;w6)ajpm;&Z4$V6%6(kXWbDHDy
zuZ=z#(?(Ol+Khv%d78e3A^eP;Yv)$@_xn>@Lo}c8jcIbMxiUsAEuVKe!Cdk)lheId
zKeTV{Gh~sw_$x^Pjs|qAT#v7%P2Y2M8f#8v^X5L$_ at Dbkcr)OIpM`Ey!&hD+UlCfh
z)B?)V$xLcC<S`04$?cwoy(hz|qJGfd4Rn2G_eRvbKW}xqSnVYd#c-G<c_B{+85pnc
zU1#>({iHk_qRpvlnnsG2c5&x&+rUgKkUr|1f%L532!Fv`eki@*hW`Lf at a~`q0e;a7
z#!s*+f29`eXyBSwlK%k7wLX{qw0;$MW8r7P`1M^n>rnpCyVULMqf48Gbai4`_zF3~
zn)$2XHiInR8$27X+Dxj}cd^^u!~y;NyxEP^k=qSiXYEJ(a`=z-g?|osUsmwdw}!@(
zefGIh-d1BPmD&#{fr5WJ)%X$dKIg%j&Cac5qn&c*6_3h*$|F@^*~1gt=}vFlw^7xM
zIblvOU2og(KT^lRPlu6={{X@(X4vl1NPqTfYWyVlcN=5=5q&rD+<%)_#5dozFU0Hl
zWGmp$4q6=iqToEtDuu`GN%3xUAn4v0fqQM!2|voF%!dfA9GBz%N8S<qHSh(4sZR>%
zs8sIDLZtD|c{TBGh`t@^UOe%yhkRqQ;{O0vJ|<hsi+R%!eVEK+!kmJBLcKi=c~^@6
z0BygEUJ9Kf)U32L({7dFN#fJhNF;VAkZ^0g_+R7AH&pmh=jzujtHEa+kX+g`n5D8t
zZ{0n+<c5%f%sK#bn$jzy>P*s%d1CK=-M<4T{t7LucvnK3!8#v@?Gs1TBDk9BS at h_@
zC@>Uc<nx at KdRNENf5-7LUS3>_Ym*e-Tq0RKx8>ynJdg=KoLASn)`{>lSb`*B;{xdI
zD1AXzW4(q6C1g`vEysht8flufrPh*{G0SPhGx at W`!<_uf^8?q`sl~}8hdP=@FpZM*
z{{S=Pza7~8JMe#quJp?-Z&~p)cGyO{ip?yMp963T<hB9G1degixn}WKgX3}K_;*m4
zdd;X~Kax{CSK&QRQ1L#caUGSz#c?r~ITkWQD{>F(RBiqq>n_0m0B2ln>+`12YhHSf
zMIXZFpBi*(zr^%^2(QEI-5zagRq*zwC9SetE7 at A#h4Um4<`cZBAwv<n1D=Bw=da^U
zI~!u~y at 1DgB$3blg<glR_zM33z&;g=!`g(FP- at z>r}mP-m$6F86oCRO?P3wgRy$8P
z#%s>kz;_YkO?PJ(JzC*^#*>ugtYi2OmYQ~#=FKk+>)K|wt=U-5;hP~9#HkZBFCcM~
zjE-^Mt7twOO?SqrrCTSOvt9WSg*=tqK>aaYCx*N=;r{>*=o-GidE(0mwOu(-Y1%|l
zw6k8y`2~Xyl@>mvvFCsVaXt_6RK67PC5EjYT5CzxVc#Si{{Tvc-O{LU3TaDC5&CiP
zd*FA&{{#j2NJHYEhxVGhB4k;>x+u~-g+JC8A2^I>w;9K!coKXM at YjdGXb&1%T4<2!
z+6J2xSC+bTjMD^JfOJAe3EDIHit0Q|{{RIT at V)PYG)V0H6Mrv=?SMBTeMOf~m4Lt|
zCFGB6k4&2RheiFSJZGi+P1U?-XzF!6PG*vLRdW#?kS}FXfCr$hT&Z*0w^Ki>P8A!I
zUoBHU!1#sXJ5L&XD7d}1 at IH^>OAS8ZB!^JbwAY7oGlT)=VsZ}eyPC at QW$@cglE>o3
zh4!hZ-P&l{Dby_Pt)Fszq+y1`j^TEi at L!7m0Jm?&KZ;sjm80HVTj|<PoZe)17M9^s
zNiaZpGo8c&a5 at i4zwpDvuYK^>R*oz4Cx~@YV!F3^0s(Hgz(wduAp81Pl~RRDn8j9{
zy~Lf at bKk?)($LGRVd_Tnn^v;X7+(`&vu$SkY*G1zN!%1?KU(q+2x+%AUMjYRScHcp
zvZ>y`cRje`y6+e3W_>zX<YG&mrBBzI^er>u$A)|}4VQ>?eG1v`t!+iTRxauyiT8&r
z$<={n8TR73TeDU?c*92GeJ}q21pff>uAOh;zZU5)a1!P_=&m+n_)L3G>XqYvwDyjk
zKmDM5N2y=l6w at tCR*<BBdQhl21oTv%wdNlN{xRNoPsW<9!ozNZT$V<h$MO^{lA%xc
zLmcA0Z^6C>z46S~`qkJk7?;R}Wyw<b$zlg20ggM8D&?)2Rc!4qBj3N^pWZ6B(5}2g
z;Ol7|Su!r8Z48aOYXTBYzfe&A0=|&_rZo at v$6ttKoUisgxctR@$@@Nh9l!8?r+wq=
zEm+8!HNN}pF6!Ju;@QCsB9MM%?l}G$_b-j!C5yyA0{n4h3}!~S(WeR&=Qv&8(ub)P
zr_U7pkI#K0Ubl<GR at Rd<c`Y)TP#&whBv(zOr^AbdmGukOwq at lZOCbC6{?_g>UM!l_
zV#Q-EgVz;H`$-FZ>f*;>BaBJ9l8^XZk9RE2C4hs9r5RtkJ3kp&={Fkm=R=7Ni3_m4
z#U}%kgPe0%4WQ28kqRDvg_rs*ec}HA1m5u8gQ|Q#@s6pf+Ud`8Hl-DuH+QhbBc>t9
zSj>Qo<%z|8Po~@H&8x}wT~5>N at aofAm}Ao6NYuv;=ZTyFm0S{A)RA5VOx{=ssx;%w
zleOHH{(A;0jIlN4R#uJDc1uNdbMdO@!aAMI7>3cw>y-rm03 at z<=T2=lc_6#FhT3Ip
zGDzeypF%Oke%;67jW5FYH=l3Rrq$%IYdFu at Es-OZOP1RjC>$}t+;PAhoY&-U?Qdb>
z&0F at 4_>Xycs>=lJtj?wwqZnPSw;g?}vjLk=8CQ}~OMbVtyYx6JVI4R*^!~e^VKZAs
zpnq#y6P)1ef30iT-|5hxS+7xu8OV*B`qv<I?+HZQ-rh((wu<ft4173ai7hml)e<y7
zk at PrFHy$&SjGFpLy>9Gz&h2bTW8ym<D^Rz-v}c}pUveq8!u}`Hy7)dk>k#P|T69*n
zF+*^2@(X1$4^SBLKMG?t9~MC_g)OumAC?0<0GCq|Fh?gD>&0^dNlE*GPu93`I2<-I
zN>$;^(duCHTy6%NrH84?pQApp{g@%P)if>=>vt+dX{p=WGFz&%MurwUfMbunirxLE
zr(3TF_)aNpZX>p9*^=Gnzk*o2p$J!wC{yQ&LvnZZW071}!GDN49lycRp;_uy`Ui<D
z?xvnwi>SB5s3VX{J_bW3+$rtPt$AOKd{nx=ycy+&R;&Rn)G&y=;yB!J22L<Cc{r|w
zl2%$Av%8a&w|d<74~2gfzQv-=r|bSUv(hyUK0yVbzM52fs5Xs_xG7wZx^hR|uYT~4
zjeKo+3QOVt01;Yi(Gifkeys%Tf8ZO#ei*OJ4IS&y-)hlG8<u#}VZr0AVZq`_ZJaVW
zRvp2?{OW8t&zs_J at czFO_BFmed_eG$C-&B#aSTM`edVJf=l$$s^{w4E_Oh1>FEq%c
z0CHlJ75NLJe$XB>&>;}o_?K0N- at Ge$<uU&0Bv(_We%1aivm?&Fg7kM=+gRKm#~G)f
z?H>OCg}*DGu91G!J{i^Q=dsjn?xD51iJ+Md8A`g9Bk6-*kXnkvWv<`ar^?o|Nfb;+
z--I~|e*i1F(?4vC;dM_5=+}e0+D$d9pUH^*E6+6zYTLy+rlEgnYSwYhaQ8OwiG0S1
z9OrKA4cIxZ{2R2|IjhG@=r>x>TT{?=EoLkDVV6vv-Zipfe93&x{{TAsF3x}66^;F}
zfZ9oIY!Z1GIgt(sBN+W_Sf!`fFQvP<`!uSk(MC|Wocq*l<L>;Wj!&g!Y1V6ReKI(}
zL%K1J#=GSP=F;kNDOn?G=fQ7n;#R!X?gpS`K{_ZW=4R&y*jI6zoshvM$X&)GwN?4C
z{^<6j9}aBKiM7kkLU>x`Y^_>lhz#y!0b^W!abHvTN8uH|iyRj&iw3av(p{M*ggoQS
zi)@Ogj at cX><nfB}WbG!A+O&<{r^}xWJ}`KL_HFUar;WTS(aRB5hU&@k&|F4(qX2z>
z5Np)F$Kof(uNP<<X0t!R&j<LkOTM;_=H6{TTu|mWP|$%O$T&TXe1Gw~;XaS0X at UfW
ztr*$EVQr(S8cThK7*PxTu4|l|<}qRSx#|hxzK;I at f@=IxyYXMZ`_Br_%Qmgy3&U!O
zE09{%{&>Ck`IqplTi0WyO}KQ^^8C&B*QJK(CDs1`WzQ7bT&r$rbW7BfZq9cPE=A`x
zr*Gp=1$diKTYY=sx5Vu=*b)B#6B~QSjeC)~WHt0Pwy~=b`^^EyKZ+aF{!9gD_~XNp
z{6z3(r=Z-&f21wq1^Z3C%xf%UFkn=N_Q%lDZQDa7%HFYGkNKW9zY}~lYi426z7hOI
z)NNC-v$%~2^gd*u5%sJ3C&up($zt}N9{3UBXSH5DyPNAskxA^p$i!DEFYIKJ+Q$Xn
zwc;IGDEJF4?Xm_Q<c21_L*Wm>{{Z+>dR_IOhcsvsEBTgtr at hqt*%_5~j0oWaf!eTy
z>dD%0vhREThh<fUgg<pFzwovA^Ztj6_><%P{{Vw^%ZqEjhrbK_DXA&U(d!-|w);vF
zGxNs`Y}v;(QNL<$9$(@eA6 at WOfo_m!UIweGHa&_&s%u-vn$L-Kj~Qy$S|oluRBM8!
zFAn$;(HA3+`1`r$PM>=f)_f1pwXJsZUmi4<$F}JNP_?8!E!3ime(y7LBzA>V50nB9
zPaIc8&P3w{qDlOp;Pp5QuOED9 at e~T at U-8I|#}a8?3b)f?{{X+2lMH at U%4 at UuhI?S%
zCh>l;7-QGOKN2i-_&tm^XzloBzO0YJdIg=ibK%%-?qZRA$V>s`l}HD8`<aOx<Bol+
zoz*@DP2%qmL$B#t&YR&qHsK<1XQg;%$*(XJZU*W_EHmu9P&HP4?dhlFd9H=<H{p%f
z!y~V2R=O^^;ya6ZWU_1RYWC{QoMc8pxL{p#)wbaCiuj}U%6l&h{6Ek%9ajGULzh~f
z?QbK~yg8){OK4zN-C4`|NL;g!2VMcM*LdtS&kWkDUCkPmP%Yl4DtU|ttF}K(SH}MU
zwO4|C1Mw%vkZO$vpW>1%)(4eX$}Nhq!UhKzIVba}al1^lR%$X$b6>ytpO4p**v@`J
z(BspZ+VEDX;q4Of?lo%&wV;0NGm at x1@CYWp=ehlvz8c;WyThv+pZVhMKdob4e#n0f
zuA-}^U&7=5dEB4tR_x9s<<>um^C<C8!&$*Hcs|*4-7cjc`!#a at BeU?9v#G&8n*(U}
zfk2YpIgEvldV<|MSJgMau`hw=<_Wc1T#h+1wm&tlUtRr!?POf&z9X79BOxy$2lZ1)
zXg+IwlRx$~_{-tnfd2p&W4qMtA64+>?X;G65i^a;9GC>2FxbX%-oCwG6zcvJ at cyge
z%_`<!6L<*{Ys)KWqiNz68S at t*Mt(qcpZ7(4H+%aOd_dA?^DJ)k`^~(JTx=)v71sDu
z!k-_099v0mq^0B#OBs#hw7o`GQ`BwU(DxO!Cm2haqFmtBuWyq*O3&hFf_zzVdivg(
z_P-6qZs~t(5NkD>22#Hyzup-HeFc2E{k3hV_ at h$3vV_{{g at iV-NZDk82H3+M=KyEl
zHPif?z#kWUQoc>@gQ!U!c!+FB!TJIPR?>fE--z0_W11^n8YTxGe8GwK`EyrRs+(3K
zGNlC4ce%<p!do8`nRO-cc8{jdbml>Abt9`s?ATm>wdJ~}+O*5rttMq>g~}I0m24iM
z_Z9E+{>OehPrIsV&;I~z7=P at wnRD|Uc=|~&(&_Ua$L$~DE1cKbL3jJV;2sV3xjE*#
zZ-?Fn*1jcc(dimOA(@8fmS+hZYCEwt>0|ab@$onj*dKqikMOIyf9#j>BF7>pvbP?q
zbO-VjAoh{(_%qSGA^S1kX%WD;o)+-#xguk9vg*>QW9x<E at UL?4{{X{FeK{c`!TJWC
z$^#a(K5Hv_4>B?c>0dMG{{XWu#FIEnjbhr)GtxnH&CjM5y#qr1oBUm3!LGg_&uj-c
zwlb1GHWXQP2)bTx<a@=>g0F8agmL(fQql%K?Tm1$kI4mc_x}I{HH*_AUx|Jq4C9Y5
zDFgB%j|_Y`)bw(Oe;w<3fL`Hgl^68{*Let%)dD>2FvbH);GfV6cecj2y7z9s56Pc9
z_ at DL~J|@*3`t!#(A2%)lGRteZhy#vGRPlbtdiI at X1+}k_*<gt_MjG9~1F+$%=wWbo
zWlE2sr8gr#GXQ;aMz^@E?S5zXpE at _}mEzC6AH)cV_41|v0OG2o{{XT-jojhmt4Cb*
zWtaSG=`Xe at Zp=H7C|mykpXGD(Zq-+paQFWJou4jUe#bsDxkrvq7-`Oo2sueP_N>c)
z*e6_8^B2WBdP=7&h at 6bq*M{)7%Fb4iUCu(tNItbL?{-6rd&&ME<a~j3`w at 7=U#;5f
z`fbG7{{UGdI3$jptFzJn0AxL4=Sqz=Zxss*gmxu#<lLlo%N!j374&G4_!%Vk=7YN=
z0zmX6QEto>T6gAWgj)W{cJY6$@xHLf{e at Njwa{4p%hp<R1OEUCcZthmjh7)u>0X?{
zix5fc*Njt0AbhSf?r~MGa;)v~KfRu7u71o~FNiEfo~7bX5#C#d-XorH;4tV$M_SwP
zSHP_c!EFcG at 3lM82s;wxfnRLk4CA$RqIp-VjQbivdpO81fIEiflTGTu#Xi4_EH;N?
zPbv5jnpV)XQ=RBbW2VJ5Rj+01o!RM})mblJJcTSzP-?kHqTKxF&~%>{_|sUAPSS2Q
zJy%n^W98b}mzG&uSvXb6JXfY!{>FbDb-+Bo1Nf?8>m{?G{{Y8`uUr2Bf>`L^YyG9+
zy^nEwEiz_6c;K)LpZt2iTXn4tFBca}eNaO at QlPnL{{Vh)xjQ!Q+NYjQGgRc&t@?#r
zJfNc}%XQn%$Ks8j{1dn1j-bFF18NaSMo-%AA&ZY+nd_<2zu=bN7_ZD;eU^)2WyZz2
z)}aj9;9w~^=D$_^J>mF=#4Fn-)Ab1NEbUrY^+{d^P_j7-gc%^8p8>lsN{KGC4*}Wu
ztHieYb?%^=L}t|7++2B$cXF(MbqqjZes<fq0m(QVX0f}uiiF<sXX3x at Bl{|NgZ5<B
zG;J%zk7Fg~r)t-63kl4ssI9jQa5>F*><bOE77+$3({RZAtM1?UD=xn#rSWgUKWU92
znS3=AvO<S&Mv_Nj0X=Kr$)r|cnKll%sZzK>JyUl!b*~m)YtY%lcjXvuBJyF5I1(_c
zl5z5ZlahHkHD1qNxv*txX<8DXfK!4y8qZAaST5<@=crV!!@-{m?|f?<lIiiYK!<6T
zcL=%tYVPlHnv7Pc=I- at b^&6L-X}8M%0C|}5Yj?sP8r8f(JddVZ-QCX;lN@%4S(uNf
zVa89rc9;JE0dF+9w5xWK-dnv!WP%u#n3Bvu9N>GOz}MJ64n7m<KMk}v?JQ6=$sfGB
zbMraxf!J}<i at xGdnR}@Ck$wvNMAsw=JT-e7=kH7c0re!-p1u1pc<V*Aww4<>^(UD!
z at map(5%f96e+v89Sg;v(1ml7ZDW7C{7!!a%{v(QzwE8pizeM<F;>`<Rv6E8JH4A7~
zVY%7{z{hfX3jI<2kp3A<;xB`GR;j0IEv4!(&vztuF~+Xma_uUh9tkQB73T23#u?x)
zN1lxn>|@HX!5@*Ve}P{YpzyYVuXq~gQF{wlx at WY#jFa|jge7zIU@(6gsP;F4a*U%b
z`dIb9gP#(tbS-ySyYUU2w)!3Il-3%A_wjivFk_ZEI5@#!#~y~hWwHIR^q&U#-W%7v
zJ0$i<B)5v_T{4NS@>L1WdD#Kf2rKuD`_=ydjlMh9HF)KZ#5%^8sl<^-ZD}i|hE?*@
z?iUys$EHnuoAGw)E6B5rolLg957&|^wObh{eI&2Y&eXMg6uX)`REl^SM=>(Vk`q5D
zKKR8&Z>m@(H>#`m9c#`@5#FAXu{}*LX2znHi63-+%wM-Rhrefk177GC9uIF3PjRRn
zL2d=o#Ic=<pkS%wVDs-?b*KCk-%9ZMs_8!sg2b0I-Gsf?B$Z3byI&)3BN^k}*XMLo
zvXhfi{iyn%#=JV&MiUV}dXd)m-1XLBG_A_Jb?NiB;C<Jsf5A%MQMtRGKZU*@^KLF8
zx{$ry!w)tuxZrL85uVlZpN;+^OXE)zYW^a>)9uanr*$RV>=TXd#f~%En&6iBfsf@*
zI*4W3az-#~qYIbeu#$758#Z&-#nrDKNm|~9squ0lJ1yW`dPXW`_>FxS!n+J`HsEnw
zjH&~jpLew)At$D5)8=Otmt(Yx#rlT7d2MX-63*ch%x)JaAAqkY{{Uy-fwJFhK#gS@
zMza)<ff8O!hb}ojUPw^H at Hbb<8V!$^IG$nCl^L$%O4hEdWmdPINSGXkM=M*wDJRTk
z`CO8Fe2=#LVfz+o_P0|_apC=M!m_y~<hMd#&#ywik*__U_BYY)<sp1iepK~Ei8EhB
z{>~q?PsDq_hkA6kI=$#N<H%Lj6=zx1K*NlHKs`G4uU-EDh2L$gC|?!$D?!&6IB8*v
z$&~(J^Z1Ivt2+auXJ|_6)uZ9L{{UhS2sNQosOq0+Kl0SN{-YJd>z}Z^i6J^yh_?fh
z1=YR){6YSe`Ze~CgWCEZGS6M`l-<lsW{H0cu>B~u_%q at E0247^34B4)wHZjy*{_qz
zlj*_h_*9bVN;>QJ-2AE6e`9YR>42MPto0S at Jek6i_%<ugb>D)1H_#ND&kkRr593&i
zujVsfv3j at c=i{BNOAQ)5N71ZqmALvg4S9FOJttK7d!k(4Yu2-PZAZwL8jK8LQXYfl
z``<xLE9@)DeXqTL!yl4&dQIhnl(@H+2Oq;C6+f+Zeh0eSV-aFQMIlYz$C~zU9(-fh
z{@T#B_JyxNNy%L?O5^?pxvm4m9wo5x3Rtzak7=V_A~?AgQS6Rp-SV&*;DKG3bmLJl
zn{F*#em~?=@nW^bq)Z#jMR3dq0lu|9pCFz!SHjGzw7xozYOu7{+MIC1dm~3^%mlJV
zGRnQkteY$5jT#e{bo-&W$n0y`c8yMM_~eeUvG1R<``T)LC%V!dqhYDrNos;t+N}LT
zlh_h5pL+X8M)78!;|~q!+NPa1*>%k}D6Dm at 7CFF{-c$uxXYXNv>N?lu$AWxOb>WW@
zxp#YXX*|fL&M<zp^cC;Kod?EDx0>y>#kQ^$cWOFS!G=kSea3J&EIH)**Urycj>oM{
z#&AgW&x`*65+G|ky%yhA*KH-1AGLXQ6C>%jR?+1QS0o&lR_Hy(Ys-ISkJ?8{{hGcf
z-0S-7t>xc`^{WGEbsdg8#FZR0ZUG=1WRJ$Y<HUY1)8Mk3P0=h?#@1&tO(QXRXJg4M
z=ii(TE6aRitwVWX6`W;SNZ)q;!`79P+_yePlGpnFwm)FJKmPy)Jopo=C|R`~V at iIX
z=~{a*{Lq^8Ei?Aq_#3LivPJP9ONV#xT%@ru`tD9E at HQRs@@50+S7FpVzO%XZ0+ovA
zp!b9MKl4oe;?@5EZXbcVJVoE)6@}6M<&-l{fAQ4CaGKBj6x-mIm>64L>w27k at GbP>
zfc`GaUyJ8g+y~DgKIat+>IWzHe~C0Cx`(u)wuAY<@<{z>*T3Mdegd!zEPNNP-?lze
zJ<KqJ`EIW<)xY4cacT*uB%ci}o;l(2BhIG5g8ablJ3rd(@9STjf@!8DQZP at T8Ld4p
zz#b#<BVxlwySpc$iW85|6g94dJWUwr;UB&K0Gali{{X>MJ|SvqH17-eM at 6v=*-t#p
zcOnuo!Davqdtg`Be+T~nYi|Htcmm4P$KEcUO?Kii+Ki5`Z*LpFSm9JZENjyvo~FMn
zyfynX{6 at Ku0jC`%HvpL~W)bo5WY?tVKe8sdIa8_lh8TzOExI&^>641u3Z1>{+`?Fu
zH at 2Qj^*-eIgW<0X+s-jx3iz7C#Ckm6G7q;c)bQt^$zoV~o=1A)T4md`J8V5d at DJf$
zZ}7k1?Z3kxJlX2E_da<2>{9I!xyN0gb^L447j&5;c0Dm!$t3;OUq3dg{{S*)*&AnL
zk;idLA3wl4{qCltB2E_^`uCu2Tmr3*<xMLRi5h1+N0xE!MMn1w7=nNd@#{_jnRB~n
z2OR}9T^W?ShQKR~4zvct)^*9;GuLS%k$y-1=;~NdC5=uPf!`ohLQ+|Y<0H3BP%lv@
z)NNu1%$*dT3uclDqMT+HE-}{_6vf0ya;n9;9i3?n$H1ycTyeqePTfJWM~j8e$_eT1
zQB3HV;FFwYmF04zs3SeaM$NSgHtxOpiUI0K at v9*UcD{OnOe89iji))?+N4YGCNROz
zBN-j4oy+bc=U}}-?L~s at u^9`)t~uj9DXkbY5HQ07I2=<F;R=O0&!IhO07&Ke_oyQ{
z0+ at -GF@wM-s1$7>Gk_2KU8)gqgfHH~`=nIsD>^p>bB+fTST-6hijS1%Jm6DYDkkP2
zjQaCNWbcd)cn>tH!M^ardXCh9YO#xvFH?}DaZNHv&C6r(6f>1#bAWw%(@ti{;f^zt
zRKR{)2j>_AAhj^Dez_g82NfF$H4~M{90jHGJi~@ljD6}X2vHz`$@2)~9e-M3zn!u{
zCmjLrO_-6%I9zd&%|_A|Ew~W9n0KPX*P%c5l%+zE^B$h{9GA1HB|s;p0qamOSCKwL
zzo;jrGHjL#23X^zR)pP`66R$eHUY;zwG!Smju6H<?$uf4XyQAV?j#O*;-XWA`A^N?
ybr-nxFTL4T1g7N9I2Be)*u>b_!zY89uEa3Taq0l;Q7Y~MRk4=9C#?uINB`Mt6;`hR

literal 0
HcmV?d00001

diff --git a/ext/exif/tests/bug54002_2.jpeg b/ext/exif/tests/bug54002_2.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..a622d6d213d3ed02face9639b973f02e41874ddd
GIT binary patch
literal 87599
zcmeFY2UL?y7cLqI5I}m-(5pZ|k<cVSAfP}9J)w!HG=(520i_C3l at CKG0Y$_RN(fO=
zP^yZ83ItTTQbjcMst`Z{^}c at P|Nm3gx$B&D&Ry%Sb!IV{hxeVfXJ+r&^Gxz<_}3?y
zA6C)$Ga!(yttN;U1On{=32|_O6akbAL}36!f%G8|MF1=Sq+LK1;{by=fb at 5i=HUJ_
zeGg!nzwrcsHU7 at S31B!-b{~+=08tmf5<vPBh~k`o)$=<K{wmj>^@stLj)OrUC;MX#
z&Tcrxqqa7-t`_!+M=TtyuojB{gnzwva(1;n^83A$_5pj>qo5-QLmjUJNA-bE5E`iW
zcOU;r|EcqLT}N##6dimcE}RYr`lO?yV+ at BI>li8O0zltb&j^saF!?XZjDYUl{u`qJ
ztepPuUaS9&<AGK{*$@yHkm%^bb->wwNr?vXbN!9I0nCx}R~`;Pa?YH;>JR&!Czt=v
zo<;+hJNK{Wi2#P={?!&YP%rP__;*u$|AG1c&YuqCzmy9BRRiyZfDya`;NSfMng at ZX
z5YSN|(Shsea8Um}dz^n`5YPa4@~`JDKv{0;@7YiUJ%a#+${>IC4R{RV_#6Ko)!*TF
zdJOn*22y??{%a%;E5db*_2I_)dVfAM`#rjc6-EDf_Pg9ab^I>(XWc+*1jOI}|1116
z-~V5xf2}Q`f4rdI^Ypu)zlV_XZ~VJ&;Qzo}oPW*NrQhTB7gkIKFpn57hzH0^1Tch?
z^Y;*g3INQ<2>~erm;&H`!f%-ifJOp<bowXzN868$pE5tUf8el2hxPxp*8fXg_^0ge
z-f;l&_u9iEi~#iaIt1qWcOD)P_-|eO-J5^(RTIemkG|>x_&@cPgYz$490z8flm9O)
z^;>Cyfc~?!f9up=PyaW4{x(7XH~jy91QP#C5&qQl-zxOqgx_oSFYWqoUj5$(|C>hO
z*YK|~P#b6ugqM#OvWJh4Phig;K at n+D5n*8w#eGn5X*FdH4K?Ncs+u}TJ<Wp%ZPon-
zXaj_~#ZjxHFg-hGjHMIu$WaT9JpuwELJ|t1q6!uV_8;J|_ at 51bRUq<D1^=_fEi8V$
z;wS~S4Q`G<!#|?~m}o9;9zZz$Jt81Z4ltOL3(U>U1*|NN_}}K6OO#to32wn7?&1qk
zCP?Te<&^NMSk|;kV*9?R>iLBy^YQQ92bGfEucod6)6_RGJZyw8K62E`+6HZl!MVD*
zdw3r6@(nnBCNKye9C6`dWK?uaY)Wd{m8<E0WaN_b@~_`0xLH_QR!*y+S2FHAd{kRk
z-_Y3f_{GatZS5V*&aVD}!FTV6hDSy}eP&Hf&&<xvFZ8Xgvo|)kzJ1^30F3iL;V+5)
zLmp8;9!@SUFc;*vJRF=+zxN|iE^Z|_kC=rE#FrqhteeCuVVP4>)5 at o!hy5by7v9Ie
zS5^Ph{;$79`ctC+jzH*RUjF};K*|4068%e{f64Q!1tiJ~iUv`^97-TgQ4X*u$1g9C
z02tVyM8TpUb5NJtCOz~4)s!PL4!c~=xm<Q82sE~A{m~cg+fXGF#9{bDV{94qYRvj$
zFqaIBe}Ka<4jZ~j<<eTVKiGi*)!udFL#2(_)n~s9lnAAA^I3O+4EsZ=z7Mnaa|$+=
zg(_X?a(KpWamc%+A<|zofFaoL at rAV_8N4TILuL{M8);)`--nsCAPI?ELD0}L-!_m8
z-msT5v at 8^)_GaBdtI$v6L7mb`4bD-Tb{FVG-V+!o<aZxOth<f~=7nrh!GU#ZqacU8
zP%77m1;$5h0F4_>;>8xaCu(!iL#W)pGggPtMo>ImhFEBt#&6(|2MXCNA6Z86J<QB|
zrPk$8)XN`IkyoL-K&5k)>x|ev%0S7$BIBHO*5*dgeiGD*IG3>Mkn$0fr|I)xha%^_
zf|PfTGuxvdHlM7VYji1cbu3MOqEE-TDICCH7qeA9`R$J&-T)Q9xMSF?V%{m1L at _e&
z`30)-#<f3xm}N;hrBK`H|GqT~zo(JVs4&lFkRF|3G#6{tl0nfbRo?KN9qWje=hfXw
z*xL`EI2pfKVoPY29BiBvVik7L+#F(V^_MP~D at SmlQ*V4vG>4gl6Iy0zTt|Chu31`5
zo_BMjIBu6m`VI_ae7>%HK2&J<6QgQF*{AaO8*4WX!*E?|^mcH9bzx)ln;h$<)HFd-
z#CX=J*EO__jO*1uA2 at DRFDG61&KDG$T<&=@+)Ws3SUh at AB<<Muf{T_YRaP~-JBB at r
zeDk<Y{>DLUMIHL$y?MPWBiEt(c}94V#!=9o2j?-zuUg%7ewDOGQefZp9(y5rGGgP0
zucO`3*J0P9f_erku4pCK1iaCyq~0D|Uy7DPu9J#B+Xd~WPv<V63=<8Lp@&c%rh(*N
zphf+6w(4;y^u1O7!pGmaHsqgGvH~S{WWE9yiH>EwjM8m1>2wx?xO{u>cGsA+G?51F
zcR!x<R=V<h!IkzU(RSmXrPN%fiF>DCJ&9?V6kYXP_nvrFlVYeMl_}&Y%ObKqR?n30
z5hf?L2rR46*Ug at HJ!Ggq<n1V#`(;VY1#PI^^*+%d&W+_`kp~*S4fVR+qdx5^F0&X+
zI1+ko!eN?Way;dF3upa-&uNhvgNFOat at 4zgb+ZVB$)o;<8Pk^IFQpq+lAO!bi<=jC
z=YL*S*FAm(>*BUAJ3N}L`U^yPr)YUM$k!yvGs<64MA#x3zDO}ikSxYu42?gWSJNq`
zndgo;9TL$U4_a|zP*0DjHyls*n_bUbYs6ZkT048D5Ut?R0%bFNc9Vw3eL{Ccr at F!?
zl+?qX)3Qfj?40h<gzO~Hp9!yT-Z?CNO at gSMfGUezG3Q818JH*0t90+V$9s8B!rT2D
zaGmg6K327Q3cF+e*dy=P2k`R8@`UqkyLB)3%$%i^udbAp79C`Ot%XixAALPUF)I?n
ztK@`zM|V*;MvXQh4U*TQ+zsvSYVp1+m?EJ;4WPgc*6vI}=<bv@#=0~2xcLQvuWa^a
z$=fR1hq7-%U))hzd+8(I+AS2j^)o-8aSHC<kY2<(n3A$u+?8*%Zc-f{cCBV1yHnQX
z+HK3z0-O(5z)efSy%%QZJsY-Q1QR;}vf<2uwjH4sjydEn5XZ;9b1O?Mm-=gdE5&!m
zMyc+#x+$%KFz>7u*Y)V!6HT=Zqyv<yt8?M-u_4N3O!l<q>wCfb4xCuwRo|g%bX0TF
zYK8*qRc)2>K$f$)RYPV^D-~dF=U2EakvoI3E9c4{Tz)lxU2raoLPfz=i)QjWx~v-x
z$=t9#b_xNKy{_+cIYRfd?bum)%OcMBmR*>k*B_vQ*x4b{)kU|$PfvSm7+T$|b{m&(
z^1=qhg$q`d7f%z!O~=0b3~SmbZuTH!=**-3!PEIyA6$-<Tg-oS`fRrM(Qo*Dig&{a
zJzVULPY&lNUR3Ckc4}S<HnAaJ6^gyeH}^luIl_-_cSI2%^z=rmWQA<}bk&Q|(=E$V
z1QcYR{C)i`3>mWjK20xjEjQdn>e-3mR>NYtSI=Xcs1Z<RgP5VfId%D~yBk#{Wz~-3
zHx at 2_Mdym$8LQb!Try5 at ee!}hJ8jfr>b?@GWMNjG#$w9K(-qnCSjZ at EPY4U-M=!dR
zj$N<@b;`2tb8CMVvT$QPpB`)0KKJQdx?31zqTA#bXoDelvt{&1L?>ewcC<==3>PNT
zIlukR$<+Rh<cKBP*~wIP>IcUn4pu#V0&T|>eFu7ZDFp(NyLyV?KyorZbSpfU!~Gnu
zY~T>1xT~}?SZ%D2%$H~V{tL`csMnh%8y?ZSRT+?jRTqZyL%JkppAUQi8vVNWw3Y#3
zQBU%_)UDhw$Qx=PncW^-b?=}`+QDiKu30Ye4)yN?Cl~x;=dRwWY$zzR*9Zwb&o!GX
z{G2UmbL_U5WsUelOFKnJN at B77&*Ix|M$ba6)bcJ!&AjR^4P46u at tLwnVZjx7SO?Un
zVjokVh^)(w;~D*Lt?o)WFgzFDcPUyB#m7b6`*}+(w!)wn5kHXl1$<Xob(%-e1Zr#u
zBBf7bIU82)+WrD5CymrR4-O3RKX0njX7aX6 at B0&*b1$2Z<XmDX at 3}QxW_9V at EC{y!
zb=y^ULeC=klcTQd<-Jahzd*D4hL%wdY(={(o&g{C6$-h+TU1Flzd)xJSKZtSYTP(_
zK0suepEZ>nd^3Kl=5#7GWm<wicGACuD`$xQplXk}iC(sZ at Xd@(ChLLymVp>vtMK57
zo8b~`as at g;9_N|P at GPYH%L>i30h at D|dZk9n1yZ16Js@#%Z`OKY!QHO8_l|v!Wb`pH
zZfl13V>ejfiulJFcjGQmtwK)N`yPSsxjiypv=hO;lQ9#y6!1|yb?IySA4=c|>tiSr
z>)3>7z`zH*S1Z%cwP*4v#eLCh*F`bq6m-vGU=5L)Z}$h_#@9F$RLS#i&*BRMHrFB9
zJ^=!uo#sxj8|IHY+G@%6c?4SF;mt*@=cwm!ul-4cqKjsYv<zR(7o|S4G6mC0%R^*R
zvvB3T={WECOjMI+n8)jCtAn|R_s$_Bj(aJjt!@xh#_}>%z!!3h^Ky-a^K#?Q8m%LZ
z3%fAJ>_exb^^T{NMJtmg?}(V*1R<8U>e)Z*+*vQYeu45H+WBA_PcZM($d&wI at xMS<
ziT)JL=DeJ%^-f207bf1f_aZ;rh%nU&pa9uyWb|?m&F$H<f$N{S8v14*|554 at R;AqV
zrt)=i1XD2U$+*7?PZ7R8V#oII**Vu+?$vR=vR-QCWj~LtG<ks5DW=re*=8GAyc{*B
zWA$ii;`599z_PQHi0=XyKhuR=&pI^OolLfyDj&%6SLbS%VK7Zae_r;AeOhDOaX{mx
zqL$z*ZHbhYDGDE(MS6ED^L+*3(mmp9MP8xLuc|w_AhRFkp7)p@=!g)|Q%%k1P9_G*
zKfe;YS!Pv<_z;XME{wVTIY3}6a at D1wro;St0)5f*+`9FfduWv_s{_=YPsay<x#*9*
zadgNyHPw1-gw(r2XqhY97Q&x9_%?%w{NutoI{u^{acjBFh^BB+$l<j+c3 at S$Yx2#V
zJt8RehUecm?w-Hn%{cZmAY1mX|LSF at f#$<p)8XQ0{jCmh=Xcx^?84mVMEoJ^YyNdS
zg4r(IU;osFu*tYEuaal)-mNi#f{H6D!1XuO5j`c460Z4US|?OAI+w#!g;jO=j))sm
zou2aY4PJKY_-HWHyrgdbrS0vDp7Rn>7G<}?`eu9N{g}~XY0fs at yA%0ElC;Yz#}1!`
z8h>s(%UE#F$c4V at Z!fQi9&d at 9-PNp5ZP-`1X5JH}<PjCa+i9A!^|+>GJ~w82$TGtt
z3Lf5^Q~x-$z2wr^bgo$Xa%BHry#G-JJ>B><v<j)b_`c%0^l|3B^VFM^K3B^J(<6Jm
zK^bGEeo&&eolhk4jrGA3Wsafu&VP$~A#&E(<~D&4Bl(ng^hmeRw8u0q_gd=r at O|e?
zSTyXDeuJ30n0xyhNNncwr at BtFXy>HcWC?-P05KuZ_*0)XYc1yv#D{fgZ_o{$<KKBC
z_ff*qQOmWg3fDlW>H{RwsPdvwoz~fOX3g33_ju<|(0irICF!FUTDd$c5F at V5m%~r!
zDsI?A9>axk*XoZW$X3ZxU1-&Y4=VSrWoL}pt(^3X4F{iod`M?&y?lvm8K8OmLeMJ#
z;_M<(dSC?AF<PH_{LGb^v1Q)APmgl8(5#%?X!CU0ccESrT^BsBl!@gb_Lq at ClV5WS
zkirqgv5qN3vXiB+3uZp&1WNzzgK9f{`HN33y_S}L4(mos^(f?HHZvnMu6$mY=pQ<F
z^al4$PYS9F=08+Kz%mXW+!Ha?w_?DS3A#{Rr`F)FjFvz2LG=^uwB{?pKGK`pXoZ}L
z9-nE4szLkvC6*LuwyTJZ`t*xrUO8cJQ8$gQZAm^_ZyEPfp_5j*Ht0N)Pr4!j0_6Ez
zh*@dva-Ga+3ZL{+j+mrt02ET(LKHzrel&I=Jk05kvc)XR=ahY`f8k*A*7EC-Gc`w=
zEkxS`y4H!>9NsIwBpXY@@y|wwS}2x7*9YXjYK2}H?aOZ&)%C!iZ!Vfz?{AV0nvY%Z
zlqO}%1`8sKP7nBv*D}`Cz0dVHjIah><eN&LcKZ+B+mr8n?3_q0Pnhv6vAFvhe64xu
z^n$#`0QOAs3R?Zq?X+j2rQy10?T?5bAKzW(k8GfQ3tsC-+Tb!wqQ{9cS8~O8Vw{_>
zdOh-VBLo6pSECKP`!MeK4`DmABMa{%XH<u?4Q4-N-r1#*9EBo?*{E4b;Y|Zl*}d17
z@%KMeO$pyrx#D at N)9(pdgGtDy`mC>IVUE>Rj$hdCC=}GMRrTu8hc4IhT)W7fVHnqy
z(U&Eov4l3lXjalC^~fhnyV&e5p*^n&5-;ToGK$|9>jkU@#ccg?!Q?I2<*e-)QqUJ^
z1j}4CF)>=bkt-nXhn89UMBK=G-pEHyqZ~-&#!#JBy_V`98z+oI)uvhxzQXDleGm_e
zjTlgQ5GJ at +{OIB4 at zv_gyVc1f%;g-CUbmoFb0#c&U0rLes=@gAp0lH&qz3NM;}!ug
z-ucDdOmVC at rw8liUy%at0GK_XAzz`YPd902 at xp1djp}ixIWe#SGt#}-_2<v+llkI8
z9DfMP9K4K9JUM(Mv~=tkCs?w{MPmBKObcI1QsQOJ7he+xHU#BV`$G at HgIWcyA6Tk{
zHfdT`%0zUtcC8v$EOTpKS$q<V^B5qz4Aidbc88>@WSpSF6(&CHss at lQOTVsd3Y9*)
zh+yy7F)|9wqq!(Ja3^%}V|F~RSyeN-{`%=@(yCXznKkJT5#Kiok0BtTJ>uOK>Qd8L
zn1u^kBkVGssyo%Gc0mrs`B3+R(rJoewm%i47i?<EGeTzd9h|Hh8*>asXvYJt!8R|*
zjI at KKw2J)AZgb;?&a+kGxe879xmYT at DCW1@-$bZ9fOgOw^K)n2%pZH#WsVIFe(CoP
z=8NC|=(vuEq$|bwUXxE0cl+^`^{iF?;h5c+(kCd79-+f(-;de*BOiL06{UC`JD46G
z at 95$F?ta~^rgN(=_N3IwmT(ywL9#-GerUznO2?<A#y-8#;PSfhj7*Hs_vf)`gVm;|
z4-26?rP%7WA!%|eSr(@hzUdz|t->0Ff!4Y2rBWigajN1&&!5HILqGNZBxoF2- at hT}
zU^bv7rL6=BIG(;g*>>&gz{=j11t(9r8`vA^>`*Q5Cfi)QJgc31=!1tq5WmGIsv1nQ
zn+p!7TR#!};{<1l<ECvz$4wV6B*a_8Q&tCMMU%O;JVVEme}P^+{8$q>=zkLQJ+z)J
zm#}r}GT;Si9pb4fPqulS!Gb8-?zwDJvA?9R=RDV!Hi2Fh8&MtuS#FgQ=={c=NAuG0
zEqhFLG3Jj4m^RaoukG=(vonzqv3km(+xCawarLii6$kg)uKB%|C09rMG<ESY|1|>8
zf=7Ux49?$wK;Q!YxOsn5XWaY{2oJ9Szkt9Vet;_!5)%;=5*6CBM`W*vsJMirq@=*1
zebBuUP%#NfiQkoQfPpex+<e^Jd=i3t1SS5b!=J1X$0TPWm_zv=*60;T;eSZ>{dxte
z`#(qc{nz~1{}Mg+Z^G~EzX>uxuKywF_gk+2L&P5rU^4$xu!{hb`Tt7%J^k-dnST<0
zGXRtMZ at EVQljU2}NlYOn<ZE^$^{CX)crAK at bM_s~^7=74`&mpdgO at 40B~f~S=%awi
z at j%vW&^1}e;PVX1Xikiem@)3UqNk5=dwGE1aKyZ$o9P8Af!xg8eMVQf612tvW-}s1
zhyC)MN!OAvo3Q$cR5eBTMBWSA9(&hP(^-{?Y%sHJpE_{r6w%Z%V$)-SQJfU8_yD+B
z<47 at v=T;3gE!Ho)!WxOZ<M(t+qQo(dRi#AlO+U&ZJ6U|LmIdWvt<zcRSugcDQU>T%
z(tmsq2x=D+mWwI05J9$XyN<!hMAG+i4GXSA(`fpg$53U^>;oE)B8S|zYYF%Qi!>;S
z<eMQ&hiWRQKZCU^8k6c2?X%8f_;U%#W_jXq3+a)dn8kUUJiYGlU~J<82fM^pYI(bN
zU+6ILMMYk_-hdH(`FlLUn$3cYCMt_o_CN}q4%M4;U|CuVctXzyXgTlI*RAu(FfPS)
zVyqv%Bix*yf7xtMVoYhRwH>7Y?39!;Z6SiluVX9Mx<L&}>EfED!HBW}{&EXgK4=Gq
zcQTT*;MRiGwESSQc5rBFau{l}#QA|-rC1YRrp0WaevFUM2cT=r)x`|AlZ{NX+WT%d
zg|9!Uj^4%=B(lJy4H)<1^(>5KfxVaoEzEILG(GY1sd9PjERvVuOn855XrjPm46B&*
zhY_=^iz8aj#E-@=L$89WRQ5FQlTp?vqpPKeOp!EEH>DH~a>e%U3jzfCSu4SnHIGe0
z^0sc2uL0cU{elytb1APO&rh-|6nTUvHJuAo3L`(dkSDI?-roq2_hh#&+g#`9{9MsK
z8LqL1*>MV^eOPNawH at BN+Mlx5F>dgi%%h|ZiFaI6ll_ew%4><T1auetr<`VZ*>j9T
z3iRhCXZ85>OEnb8DGP_Sqy$2eyCK1$9ioV9yuS%#SB+Z2^ZQdOXv1-9W_dn`5Wr|g
z?W9L)ObJki%i(2X1_&+^qP!JS-KNvTm;OaY!QPokr>cKpkZevCW6tyeoX_EX%@37=
zTBd~X_6g0Jp~djl$*uCW?)dG#uqdz6LkFV*!eG)m&A&jJ1^0PO3h|Dwr1_r&sOi{X
zEK3 at f;s)FJe2bmD92!|Ej-T!-YY3SP*dH;H&B!Y`nU|=6042u<)$9q^6KQRkt;bWa
z+k at X!cltv+=L at 5>s=Ah;t6441{_W@%$S8eJt*~>fE1*)#?2_Qau>B0-8!bqNfRF5#
z_~3Bl;{nIm9MpXeI8luIXx}*>Lzdh^pDcU6$3T?3z`v$+^8O0GRB|5s{gRk*uS$o#
z{{u-K$D32q6|D=kP-CB;d5t|y3`r1}ghb-!IHtf at KXzYEDabg2O@pTph2rlxHyTMi
zft;k&9X@^D&wyBOF^>@+$cVNSzJy&;6oDU+jz at Qi@Ufz3hpvAZT4%V~GG*hflpo-j
z`VA0TdcAKZQsN8m?psV5q!LjsI?0yZc78dd^8lh!7=*Qs+jbpaX*Y*k$ofbh39xdy
zFN8-cZWDT%?H(B|#aC)I?hJ^#tBmE(6yl&gkO?}l*MYVRoet=Q8Ap`}b(Sg`0$i6}
zZP8 at l1Wf}{f#g;j2b1!Y^!s~#?C%>Na&f2?5Yjx+ghf#gA(qU&j-2R&qENH?+#hmz
z;2$M6vM9A{CDsFIyvd2|i*kr^z!ClCI-O9&E(cu%*oMBakA!5?3zKpE{-CH022XT*
zLM;v5Zag3keTn>{se3IYhpkM9WfL+^6vzhZX9RC&f4_XlNFphs=%=I(%DCTOzOl^t
zIaaaB4{|CN;C1QK*idLUqKr5x8{4bDp{6xYaf%hNS-4!M)~ieS*bL*UCnSx}B-Sxo
z)O&ZFc_0?wT+<wF!3yv5^O6Q0(3BRAWUb*Pqr`EcECIx}ORc}rE<WwP^=p!j?PkS+
z5QNk$(e<0rM!D~*Ej&Cs<`SiB0UtI_bWJ;skWw6|Nwl3u^($-TP=xE0z~-N at le+AV
zrm{dlV{abJ&gpnCMAM$oYqyCdpL5{Wag68*)_z4qt0wa9GGf||U6XatJ*Jz~O1Vm{
zH|elV1dW%&G{H at +uYIEQ2G`gA?4`%qOHB2KlNzmD;zJT^@WCX?;ACo%Ujg|UGj;bz
z7`LJn@(xx93177EW_R>Do9G&NuMbIZeHiqK8`$)Tm`E%meWSW7YeYqD^GCj+2sxOa
zXSB>`*c>4lb<kt|zl%P#fy&`a&Egm03wl61DGsodu{oH~P?R!!YHGkz!QOR;2i`M{
z#+{4hkJ_871iz2i)$skuW}vyR;Q9A%Nu0>Qj4CVYO=KNXcv+bDK%T-*6w!$fl78oz
zSh0dM##zR0KqUQ8gcjE5&G90BzbCQEDpIPGLK<uBE8KQ<)yrsWYdCS+B~sXu2Wve^
zusC%i2d68~6On<pmkr=pbwWKFPYIIU+M;SN4L-s6Bk}y#6|y9P_9^p`273<V+Rl&C
zv{Fbv7 at V`Yj(YaDnT4jY1eY|KA=x$KcgatE1O|P>UMEeYo+_zG=TMiqZKUR*@bhsj
zr?7GbFT7}S=iOm{^~m&m{w%LB$8ZO<%7+$u{;1LHM8%BzQC|}Z42Aei(;{bJQ`bQ4
z#)bB at DN9!tqJvFOd$G~U;FR2w&wFC?i`R=BCI9By>nX9z80VYpx3;xKMB!Hh#27>i
zqGZ91X$T&ZXFt(JfeZ5#%U(;#JwhLfPtS-l75Yv)YQ$W{#YD5DB(4~uWSx~wITi#}
z9w0&Iy{aWxIYrpzZb$BYu#x->F`EZ<8b^BM-x(s95|XXm8iV5322;2$HKUg;+>ttZ
z^Ehs>e6v~JGQGmAp!D-lB-4_R(vE~lg+ZDz%7UvK^z<GnHuZpqR(`vYerUJR)ZovP
zLcEIG{LUp0A>Xhe<r&lb4K5iciY{lOT@{|9H|d&}%CnuCO|lsL?HJZt`54(fk|QVM
zM55>*!G(Z~)FLn^i!p{%LV7*HMK<l|@^%v+T$9HfGjj5>a?n`OEDhj~A^rJo$86<{
zFP3iZH#x{_xD(*)0a?kSIqpM3FjDcx+b-ePA7DA at wk*<zdDDm1v2K~E#A3|3ZnG7=
zRm_%nfRR*->^2$AsQzNKiv5mgZRdtL<%L-zVM(GVV`Sr8Y9&88Noo*hNwzdz)KuVT
zmStUlOmwShUn1{{X6UWNWwbwZ$_Lw66`%fuJbG(-7Ww1O`2z{^c`-+Ni`;@zZ;dBv
zAe$?PE!fL#p77Z_Glfcu7na)qyFdzen#Fh|=;*BkV~cg>5^77Vb*y=U<hFJ9+WV1T
zPyPbw;UqdP|EyEvfarT04yS9V=!@9M#sAQ>_fMt*H at Bo=_4i2#vs8=2ge1E$IYIPm
z5<Dx|^jY|2O?|EpOO|k^QBSkVA(YKDF5CP`HWC(@73`r<rZ~o2ZBsh+3*=^BiCDs$
z)({1L;7f5KSA7<Vg@$|O`0mPko_w0&n*|=w7k0I(F7}Saxdn%DQl9$L3~oS>f;tb6
z=jcZ(k_e;O)Pu#Cng+@*P^MB=31?zZim&?6yoEg{dUc{gN<E2ee{odr`%GqQlrmUd
zEt at U{CgUVcCq?j$Q<u~Bi7Uf8ka#J=@L=oV^|6U;x_^J- at oe2>9$mfNN=?4`L=)FH
zR4~b=q<j>lE at vaLqTbBB8JE*jrFUj2QP;{Ir^wnUcU4yni?4*~Hz=N7fcHG8QtRc>
zNhqxdP>qc%G=1)vkhkjRk#p+xhwcR9vl<=#?v`OTr(*G0rb1?UCs}=xyHAC7w{iTJ
z7EGot7zFw*4oL1rc?J&Yw^IrWukCfJLf>ul2jSl9A{OGUOx0Di+~3 at SDkEk=Nm$-5
z&*KWi8QsR)(&X1h>Y&YgD`z%_(`}ZEV^1`-ytS)6gd${^KJ-u_4)8Af>8DSvp=mlR
zV4`b at 1&g|B*DzB)QflXS=+OJbL>POEVHr5=-=FU<f0IoMd-yEXQWwGcO6{0$vsZ!0
zRjzeZz6INrDh-3W9gMVNNys}6McKyvX|0PH_Q6xfqbHrMh4k7mDw>WEFM$}<4XVDf
zh73=>v;6Zen&?I+ZLQn9k{YR`RrK|nbZ~{Sg8y5`7J1&cN)|;dvs$YsqTH>l8I^jN
z<y0WlteqBMg5u2EueBwX(Zu_bU^hMc49(z*Mwo7|JBrTkS_zzeq^vbWf;;RPtr#Qe
zy at i2glQwAK_l``jSxoiTu*hvrk3P<$jfq(=vMjVtE?tFg0#?jtLDL<@`#BrdqDVmB
zJ&_|y8u@%(zsH4S;ySGA^L5qU2c!b+ID(dbq+%o+$S!Xc9H??s`9LNS-jjn?x9%i=
zNRPb8EW at iPS6o;ULZ&HM#_=B=%b&A)WW+L!EH{Ubf_8&XTPvIjwvbxvzMOCFGP08X
zDlSTBqBa%GoQfsY!M#O)N?g&^iHqewg1#n;U6%cdg|?`Zkn@*H at pF90oBUK+pNM|)
z>(3Qy9aL5JOlGQ2TpwYy>rDzCB8SJa6pOzw(5+LaE1jV!V-r^}eZ%RnlNkxMx6CT&
z?K3L<g^s$QnZ$;hq9|*;>HUa-MeL-&#a+f2$LcriaAea7GAO|t>l;TVx=!m5da-Hh
zs~0!vgyT)8&WD!+CmH5EZV55vQkz3zdq>783l>1z^(Hc}O6qtMfiuVA_r3+Eina(S
zXSTJ>3Mn{3q;+v)8P#(>I7$H~d}F?K6;S`OF9ryiCiVFY{uLx*qx92Rk&rf**7+nf
zlfy{<osTvjlgTdU<uRfjH9<g3`9uEbG|fe7`teL8rzsq+DR)~f(}J$W#>X>E%d(uR
zj<xfx7UHjcq|{l~@Vp5$jSm`r`5+-5kuKt>>(p#;b$Y%(Id(3cKM}!``K*J7?%N<W
z`MHos_*<{m1ue;L3)$GdwnWWV?~F5jy|Qti3yy_YdNd-aR2*^eO at Uk@U?&6u;)C``
zei4dhjbkNeDYx(Vl>s|EU0spi-(4#YD(7Hu1J9HU#B0LG`m?op_}(htbHBhuOvSm{
z7fgLI-ndKD8~j{ydNGF-w|U1ytmb|W3z=|}p4!>7M%PR`Kkp>UlFg73Ta&5fKXG-A
z+f+ at 6(1vDEYKb4uSl49hC0V~*T-%Z~6oMChMT^h0GPEoeZ+{8$+$O)L^Ciaha~bt;
zUQ4Mxk)C|TbRZ)zX at JeZ5L&1Lk)N++YEM}hhlQK;=R+V>7;)q}M#X3uU3HA-B{`*o
zru~w{%TqDTPtlEsx$6iAbAAxzXLR<MV+>_UDEWNtH$o=;1#7~bNoveZxu(tX(Q*G2
z9QPbN*`zSCFQv^kYRK~08~GR-Na(hvHLkV8%gr7aFwy<Wf_GEDgfLMtmd~#E?mwFS
zgLgB^^oQVKXou?Oiqp%<=KOB<MHgDA3IQk&q&eoqO;ewp!B(Ackp7382&9H!q>2kA
zwwDQIcf6<ZrP$T>ngpRF0^jE;$vw+AL~NFWk>;A<&~~o*(LxV0g_2w`YNNhhuE|?2
zG^HhPLbgjhUIE8(ccbTRr{i40b8AFS5<1=&a;S0|F*ZY)V8G31nYS$kH6D9tV9{HY
zpr1-;+112Szmo70VkW(2XSGE0Sd^6andKQb0xRFDy<v0xfQiS4SWQ#fiSi$8e6io7
z5$a#cUUN6 at 66_7^uf0|{V%<7a!oUQu6}$xek=*c+>?JAr+C(uYnnMG0bpdvX%EtoN
z!%lEM?oD~UO<uOhlDjI`9DJfc&Q_nRMV<57m3vud;)ESxX<-w$@3f$v)!yQe8oexT
ze|u}3sT6FDg at gx(7ESRRvga|=3$;qTP_}-7qL5}d at 0=dHd at QLqLtOD{&R{a0e>%Pg
z at G21MCFNtpWN!EZs?x at h!j?eHR at sY#Rf*UniX)8k;kS&R?s_Q=b9jO14b|~!y)pf?
zurNNZcivvv`N*X5(I|P%NK3+QrjjK>w$Mt1TS{Hx2{>L8n at Hk)t52`ed1&W)bOZu5
z&r}gui!p%PlWZh_i+FIxnR83`7&%ETvi(a^V49<AXs3b~FF37J<$h4(U|e>=4;%S9
z88s(U(mRCnap>zfX?|8ctRx8KIvJ2vS at AvI>X=ILd9SmF)H9nIV6D6s`P2=G_o(oQ
zp7p!(?gL3f5+R*n$fEt}NQ<NnmGyFXV*C$>V=&?@bffZVwV+AvSd-8jAtSTA54T9D
zsn~bP1+Cyh%c7|PIi`KIRC_QNj at cpqE|k39<3(J1S;zU<AQk)!VLI>zB}>eR)plw|
zi>p%xb%J+Fo}IK&%Tokrkh at q$)BSlRkZo6yKIlm^m+$>cqY=dI!BSn5h+RhHMt3yz
zs70&@oK2SmFS6;WEXB`x0`jl6`_KGw94kVX>X^mgCMq<HT3bwgoGq4kw>GG}n}qF|
zWGX8Mo4!+|K$AaZ8is at k>dG}cDHn+lFOzX0s?w%UDTHs%ubyP5fhb0_cHt1AjYBsU
zYD0RASQAM(TwLVw{^gz!*Akuhxzls8SnW-(Z0=4bm8w$NW-o5O8ry#_fGA(Psn^Wh
z{DJ`S<K>G2o9%1-lL;t$L*xE~bC#l6&ouZbMcWz0z^(zQQ>G90?)O7BKmO`4YHiIS
zpG?<q3bsrn%8&OR9#8RotKmKP?4*Z^+U?9T=x&hMc-mFuWn;^ygKdW+L48Rrro~<&
zV at jf=!6!m-v4fOT-s}w;tYuce4j{qh=v1R^zzNuC$;i8p+K?EKw*_al=XfmHBsC!M
z_nMXnxPmJP;KGjU5^!LA;P^ReI1M)-5u()s652SN- at 36;&bMlt<&b{qnXqz-w28lg
zVM|2sXR>d|?DOC#$-aFz5 at R`5F(OIDgRT{NNfcz|NRdm}@f^vOFywqvRG{o<I^U2H
zt3O*wP6$G<da)(dvYfPR`)Fokd+>$nItdB*mPJ#5k9IgtG=!;-vs9pYnqFA6u#6o*
z^)Gm6*n|`wk!oS_(6t7dl}_564>k~cqztRYg3vv&H-gM&>o~$<B(5%40lZQuvT56u
zW}yf&*95NV9r(ADv>uaR%f$^&c&gWwuk8r&QZYZ!^?`JZK>PwuK~^4S_(end;rJgn
z>hZklP}wZZt=H_&w;GC^lg87vmp;XmkH+(8hNs1b!3<d`ZMvt<SUsAzA0e+_kkj;s
zb}j|2eX%vWjW4#8YxIldcX-M&FzhyJDf0=5qI$hSxj4rDbPa*XH7}fT-Y2C at mW^Un
zfzLZ+>^LIY&6 at F-o>C%`-eRne55~IGP9_^wFq=*V?IJb!$ODLFT+C(r*bIS70k}O|
zT2C*nk2Uir9&&ndPXZ(l<4 at Kr?!T7tKI*8<VKAkl(4$B;%*1t?Lv<Tx`pl7+TG1!e
z+I!iUQ}9_S4Zfa at +Dui90*TvuoW}}*&Al?vt>-jn-fS#riZz9ZW_bmnN7mMCFbTbJ
z5l(KV+p)M*{}f7)roDwcq8;|8Xp-=e#NIgZYPSFSJ}!PTGChN%KU-0DW7~CyWBFU(
zBT~WJgB<F^M34y<+8zT+Fwn3ptND512|U>b!KTlhtOCsT6k*$C+K1D8dqbD8oscIn
zI at 0cdt_`rTaW;;{-q}#6*;QWv&!bgZsb?(}Q&c}^-b663((G~cVCN#1DOPT*H?<<6
z!>m@*pHfP1S+*XaSUZ at cdK?#7LUhirT8~dgEd$$4!bzBAHM}>n+`td?tSEN7ub$Rw
z8XGllSNEvMdH<QC)T9CZ0>+DECokul%j9LNjx*cY+$#0l9MN+z3`_*Ghvlfq7;8tS
zsr%*ZQ5%n}VAVM_K<JC86CbwwWmdyQu1W!?FRt!*U?&iPw`o>(DBo^XZBT?2e<~jv
z6wzD8Jrs$aU9@`yHKN+z7w-!S=!Q52*VHC;=%?xE#&lF2<gZVai5ShKLy?-1L?6-Z
zeocSsTi&bTBGg`IN?BHLfi~i&W#+S2alLLMd&jZd%fuhSSm2Ogbe{v-#__<i#<8&-
z?*{Ljp}|^Ng${{Hq}tAeqo<uLth<G!%--n<rO57JACkLyg3p~;9lVbV>HyaHbFX|d
z$vUF{#%t4vtSSMo{N3k_-JlWjJWj%Ni?;S{i+bxq4Trb0bKtn^7}}@}s+?RKmji7@
zbi>m4OnsyuI<tCr1}rCK!!PIWlOy+uq-pg6&TK-6KTpLdp+o=b^kU2Qz|ruraJhmF
z3GP|M)?3e!<wDEEaBeXEf)Zb6OHZ>-yTqDqd~mBbyJx6Q$?1}Gl;nMjM at Sn9-7ouS
zj{Zh0#JueziuGmwBWsG9Zy*Z!in8+X!fI#27^N2aEMzjSFYKM<<|ju;tYzx at wp(&D
zs3K%E_Ts9gM4i`?wFk(LjPC#()SJ+su5Zh8k;XspRo1s}N^xAh4>Ke*7#V1At?BSm
zOHSDrduf|I8BgrU={V)(?hFA}IXr?gckzwL4oT~HG>WwglZxs5OowIgb1yk){c$4y
z>AedIY1(f{1&kK(klEmi6sRl?a=J#ykUZQU+T)d{Gzy%TiD3w;_!FfO%HYr`N6I at h
zp(PHqM^b<0)uv;4Lc{vpvpFfaf@%oDtoD|Wpb5F=#Am5)J+^^}#dEoxnfnr*$i_C@
z$ko}LVoW*TVnnEGtY7&^Z&nvYS<#1uWGsrFYQO4led`EUpj=je@$_VX><;dQPoONW
zrDdZs_NHgb0HLD-7NY`X)Qe}`$eFltZruO7tBJ01X=W;TY!L_D$#5=!mY=+rat1Gp
z{q9d3Y(?THPL6-kvwD@^^$EVQwTw||nGBrARZD at w;^+8n`tx5}iqMiae&FH270%2-
zYVkB$gfyb>U4E2f^{w_q3{<TmsE4k9%Td$1cKj+=7>|RA4_B0YoenXl+e*nIDJf^(
z>ct0Mj5eqp(w|%|n)H3}l>o3sx5vf9uD-divLV}7yX`v7%bDY$g4EdHp0b*rt-$l|
zmUFlRM8ntRw=x7WW?H|Gr{AKatVK#T&b1M-xop=UH at DyOY8P8SjX&E+rT<>YJYa0q
zWzSrzq0w at L^BwqYB>i6-$v4k)Dm>=Z_oi38;tqmO%A0Ezsf}OM51l1BY6Q^ZnUc|_
zfYX-kw02hp1nrQUH_YkvpGQZnSbEgQ?qE5xE at P^3bntqa?~=u~^VM^&_Poz#FzV$C
zXd0ZG6|IK{6OUY3iC9Ekdmw2zFzC|omBw)FaZQ&5SOi*JRzH2ub%=iEK14TO>>d-u
zqU&=!k%BTX8qC?@4D3xXSmLEejrS`HB)7chYSJ?9d-Sq(cZ?LY^fSSZ;Z3jBe-an9
z#i;jfo;Qp;M-TH*TI=jE-Nx!hO~wxH{sKj<Q?+&DoRRYBS6{E9`;z8|61g2}#S%_+
zk%QX9AfK#W4qjD<6!qc=z%LCoeTtG}BtqL!^K&rXl-C>c*5k4QJJLlJ#_aN8y at 4zY
z^-&Yg3+Pk?o2tz>3t}_sLlI_q66yfU@{z$|PxzrRvfAcUThFazvB0fk=YW<nV&xR_
z`|#)AAPVJ4tWx6ql7diONONiYwMI#wj at m#8e^T*n-Yd87b?rcqaMEDKfpub01U8Q=
zu#UfR{;fI6>A0?7!6MP6HoouuJqgtTOk%7{BfiGF<B4JpnrRKk<#$f{13WSbKYZZk
zsWZYS^C+IOTLwOi?r1PwzyJ9Uf_168qE;spOoCBGbj<4fgQtANf=<iC&-s1N&j^!|
zpxFZVSboAjdJ`#9A+uUm?e~B+Hcvw>Kn%>@$odz1ITvl2dj+hx25`;Fk_P*4>!?q!
zXuiB3j%t~Asg2&=d8ec`KIYl(WS(YvNS35&g>phLBzb+?c&d(xXy%65NGf_02_1EI
zkD|_Z71fYe%x at n#V>p<qv>>d2ArNI}*BPc%dN1zjGx~j)cjJ<!IG(BS2W=0t$J~qT
z%OVLHwF?Iy$)u#JnQnG8Ll at x1vBh{UfBJKM8oYxi>F$a}?RJv&N3Way$V?z>NPlxm
z__J{qC9lF%h)47M0hflgP3qYbOw5H<jLOFRJPz97%chAIdcY2%BLj`3HmMaTRo4=|
zA at j^b`J~#6=XN47@!c94)<#@|lc0p!n3(yFDwCWUlt|z+yro<-P-Oy=5lM{Np2 at +?
zCHcQ#m%T=G!zmy917}z8hJ=By)TqZbkn0vxF4N?J!eU?bQWW43o749BJ&cn~zVx)H
zf2otT&gkJxP9+UOav*u&i!)h=WWNGiOz61L;;Kbf(biAbQ;n;GNqMpX*kveFN>amn
z<2(M7A)7`xh?zEAvzfJ>zB1prX>d5tR&kv&LR<S;uxxLjD7t1e+Yj6fa}MqxfVEf0
zqn8bFqV1DeQyc{WTgDKe!N!v_S2EG2VuRq5r^6d*Ab6XjxQa at H1UJ_#<V*SRg}(e3
zKZN`9IG=yQh0IDVGuyOV;-vkp!r&By9D{R%$*BJl-MOKbCmf>Si at M<_NJql>36y-q
z$%#D5u^x$Rrs=Z?qCf=75uQ?59OxI8P<!R+COzCmlsjp$qw4VM*+pD>i&+!k0MF(S
zU8+wYyFT$J>uT_#7c|eHoK(~@Z>p$BoSZ$R{H!~oP2SyUf;AxNdt-<mjN&!=5j1#9
zyIdyTMnbZ)J4`bqV3tj-5dMa1?E2}_s!q0WvcN5?R2h^Z!(seC(8=WfLK`I9-Sk-u
zaIz-dHp_eIaYu2am{G0~L3I73W1}z8`IfUcDVt*`1?>TWb|ZtsZ`Ty!uTnTv2PAit
zWreP;mB|)qL;C5kB0pfV^7wm7IH0p!IQzIqKZ5<PW!Yb#Ds{GeE)WUnMDP at P5Cdt)
z)_%keV6q8G_VVc|ue<eZA1RW8{Thur&OOU(l!8tH#JTvhG=hSuKtJ at m0m9*>Vwg#P
z$oHnVT6tY>${H3iIJ%^k`pU;Dc^7Z_58Tdm3zj%_lZa*8+P$U#YZ2bqZls*8-4DzF
z)hYau21L<SyGcE%81wjb{?5~#!Gj8j#bpNqIsU?7F(vZg)(l0Za~>O_IGAL1g?whE
z^O*8}mvR3^Cw^XrWOS>_q9Z?#wUJpJ&*7TAZ`MgcBlEa)3yBW}Z}-VOR&Lpix6-f|
zV4H2|R at iXfc#RA<qSoHNZz)bOYLg-4BnDsdr_`3{#ztVKkDc>?wXoF4=T)S@{r6H|
z61EEk{OdSMyy>z61IdKp9qF6?FC*S3DKsFPN?D404GsDst*uf9{`je+tXNL*vGwx3
zN_-s(`D)`+@|XFmE!dpo^AEhh;ey4PhpwZywiuhNYO4CVJnzGbnvOi9hLO8pao;a(
z^Be9YSSBtqKv{S|2~~lE6X|0n%wqmqKlhn*N%#PH5$!Dc)=^?Ir=wY$CoHzV at gURi
zix3RsFSUCo^yzw=Oth(hv&*TjT|wA2a0>1YaLv9n3R*_(AHIiE$#AA40WUSAWn-%h
z&z8MNJ+3SERN;nN_5+LB1W6yx=NLG-_~g&pjA!*)Awc`PTCMg%0B^<36K*c;rxnUg
zvWCy2?2CK?hYWm_xV{LN===2YFIu~w?vS{JmQDKRMpp1b(QCT#;~s;F6_92vZA5!;
z_*0?Um`ef0RcZzmZ6^vsLO<WYZ at l${4M2CTIL-4&5SmQJo2mx6M)rjeMNV$dH74sp
zmHa6q3GRDtd{<Pr=xOFxF$E7Qp at 4H~mYkHoIo&7+i%d|X2eh;(WFGbn at n=&N9$QTR
z0<}23&$f0_FRXP2Y}vr2YFpOV(oX>v)44%wUk6=F5Xc{}iDS@~Hk}5)Ci^uwyG^+x
zsVLXMb2uWW<?Z1!-d|JDN7YP;v+EUkQ(u!N?tS;+Ak`8RMccqN-s%mrz}+T$8Mh?Y
zR8j^K(rBy#3=79_q2*QcsH|!CNMRos|0GKax{6xz(D1y_rsvDWT6srpM1a>T at _TAF
zCHe#<-}pof=_mRd$rjdBN3rB!oKuqt^6Xc&rz7_AGJ*TU{)(~1an^lUl at z<(n2f6Z
zAR^J(u~zZaoAe9h^-x5Jfc7|8wBz5b|1uwm`4oFjqEG%)k=u2Yuv|QhpH<lgjtt-y
zcIv-1?N8^S at 99J~6Kt;Uxd`la#~Gd-Da_eA4f{z^+){hcNKOlQctBc90>pkRgKD=n
zt244_{Q6e$NY7<|%;!gQ?rZJi!1o{iD4QMX&1mc+mHP~aq^QUtHShE31zGdWXT(xx
z$~~E_?Z{v&)Wo3SaZ;hECZWe{n7*{%(P(?{uDlUgxp=x>&n3dJs>Hiwrl^v4e%o~h
zzESqNv*$eKh#f=tx-iD{Aw+R-8d;OUpTXZJ650u+0o0E0L3@$F#Wo&Alh27CM3&ma
z%z`-s)|0KAYK1Lfmf~|r;8KifcqWBU!K?Tjd^om0Ro%Qh6P0q##Mwh-S2GevoXKpO
z<DmIgMJl;57c=-}FZA@&-KM at 4#Q|TF2yx!qo2YHg+wlq0g=ScC#`Ci2T&?P+&L-Z8
zHuHl!1NNsIk(zzp#3ZycdA?0)bW|k9hyT<eu)0DfMnr(EmREuQBPKiM<lwVYpWF?_
z5aoQG=G~>!YvT`U(y1M!-FLUkW6zKS8 at E3fc%}q(BX)yCDRt&~CPlH*0^Vm5pD2!W
znD%pRe5S8;5Z>ptN2Czrob{jN?><eLxHTj-TOT~p%dMWD7z>J_x;Gs^GqA{}t*t%%
zii`0d`%)HYzg3b9Tm(Sd9aNN*?}bRUE at E6+q~~7Rdmn3lKV|4>F74bn%h+VRxQ^sD
zItuU6Us1i`(6w{;A{5-LbWN at yKDfm(%v!HM`@YOdaZA5kRg-rIscen5_FOpj;Xbp$
zw8KJ0h1&WVFHHT&K7!ps at tU1SHa04jM#lv*v=8Yj9FYHb1l?I!)1Yp?d*}T1aI1ZL
zkU6K$IDysjojF=K>1!?XfEUNH<gichCdUbSP6p~}5s|+dFj`99;SiR6v990^uB4<z
z>lZdOr$<or=fTptJeM^+G#*Tg*n+FL0rQmCMZ8Gkd%I7}>cmZC&1hzG`piAuIG1T6
zu5sD#`3=&yiu6ua)iI5Dy;Zc|_WHb4CtGRQ<|MoS30j4WE9go>yAs;=$?xQE%9nG(
zxB|qSFxC5dvAmrs#J(_mtw%u1)WwSBSqdCGZYNp&=Ar75cio!J?Pd7$;+^~7pwpj>
zjC=zx0{gC<jJ|8Io#)-%tIL}++4tjQx8JK4i(KIHfKU7=$zC3jE-Lm8ta4V6sEtv|
z*?m%JNz6iUru5uDd);$fUykMyKO1U#SIQ;An!H0Qx2e6Le?{35Wwi0Yd?-PMc;;OJ
zd`1VPLfM#IW(mf|qaH6F<`c_Kz&ncUWL3quJ$hrHe)>Vlif^O8<Vn;1+$_fGy%L0<
zgwWJihs at G^srN^NhVFv1wO(Fyl3F0^##c;YDhvF+&5mbO`Lk|33`jezm)^~PSR-}A
zNbc<IuYz0~?l!K`*hg7UOrEPulm=v<&rB(i)h)`1(6*_I{&C}#%pV3CpVz&#th^uc
zv_t|wr4!1Z82Ps7Nah{*!%*>n1xM2yVeV{y$t~YSe4M<smP(s%eP;KyGbpD1+qtS*
z=3)5^CxfIz#H!PenxjWja~Q+aFh}DvO%H^FqZ0NHV%>|+=c2XwT39LyS!)J;rWf`5
zQ<~CDD;{X&pSq~hhsmFd0qmp-c}^o)Dhigf^$Dd89gjb&x${ccmT at aA2YN+!?3w at K
z2~sIBraZ>^W!JrNrK(JK%ka3U$~QiZW)<b at E+c58aov3i@2`&XI6>v&HCYA+iKiV}
zN9}MIRS>gZ8J50T1SeN at D(e|+;YssdYhef8WWOSno|Cul5cVS5IC#IA8(Sxo9~U+a
zAh9J?Ba(3G0DpcW at uI|i{T-1zfl^@k+K*bfsM+4Z8M6Z5dqlY1r at w#M76SNue9MV(
zy-W_dADSI`4u|q{d5ktoS#}OxKRxO+ES`+@)8WNV-B}ueP#S^e$9Z#3Lv(%OUd$zh
z_jzi at LNIT<Zgnbf(?W{wSaeS&FWd9F7Oe#}*(!71ZsUdzFqYj7Coj-knf^(@dOvv-
z%A(X>lZSk0xodW+0fQ=<xi;L)<Sb%SOMvrl%iLw at sJ!?)=l0LJ0XLMp8hp#{uL9(Y
zGu3Y_w(ZmYfO&#wp&z)kx&1Ed5Xnk=0K+<a0#hN-UmNG($(KU;2$<!VHqa0Lb~B?H
za*!PA?tVDN4=P`KvV}YyA*xTjO459-X5+08>!gu0_Ju}R?5&!fngW086_>LXJO*bq
z%%c6~Dfn at Bz)-1>@TLz<+)Ct4a8i5-9gW7P89zPQpuXxT*>@#^YCW3~t5#ihmeuJT
z19Ed~!0&(d^R^p*zAbsT3w=~O9>kb&@$h%fyPd0<51kaXohBx|uig79Kc|yh{K{#r
zG_$D-r7T;@aQ)mbP%0eO%`q2!-}CdA^&6^Z9xO!maQ{J<kHJN<^=|4I_lGbSzq?VB
z8kwrtaIvRTevb#1!Wy@<(!chc_p(qp;(j#xbMGq~jCK`&3GWhOqohnT-r at KjN@K<M
zz(^BZWB6UkOOJ}8%7=}$6Y}w8?G~L|<(h<f#~&|mlz7tL62s#9zx&rPQc!(md(w}`
zD51_d8V~eC@=V&(`gEjj%<#tr%4tb at 71ihNyro~gyC=fxN1KJLM1}c_+Y&X7r#(;G
z%J1b<wC+4Y{C at zxKtaFY)S(Z4wQ5Q1%$yq1O2i&m&N>fjX^$PVpL(!k1D-(ipssPj
z&uY7p)ym~E0L3QE9tY=EHUrv?p!LC`;cN9P1v|5fHk|(ejac%>(y%;V;){O?>FYe`
z(lec?J7?U~PNZqY%1=aVMvUuCQ--aYtr_Qxfzq+{j}z&dBr-{Jbb!V($cHUlJRcRj
z)@y~_=rW@?;MbOTi&CFaYpdIW$qa;o-7-6z4{G`RMs-RN{oA`fw+F+uXDi|~kCE5v
z{{RxNwTro$+Gmc{xQ-=kD*ipqK0k>%g}Q8!%Rv$kkw?x?PNS`P#(}A<ZiK>ot`anp
zt}(?e&aUgKG2E$cRItGZoOG{=tC?aYCq8zMzN405qN7jQt9l!rCGp;^tIY2hnn?*%
zjA!MHdi^=51;(Lq6SeKzO_do)_!;yyhT4Ska0bLHpMR|^nt;<S5Jw at E*!;|SIX;59
zUM8(wWhZmel^Qf!j3AMI84OM~$K`Cs5DXR`m6 at z+^6D&ND<lxY+e(v-#~pK6TE4$=
z@`6X0Mgy-D$hAg6vA}t8fu45|JJ%zH-P^gktm3p*xp!04ZY*t|&1nQ+0AF?vD>lnp
zyy8%=<hzCv5HM7Cty?#1*jaC}k{Mk>f(IEGs!gYPc4j%I!NJ1xJ5L}HQBrM3P0c8%
zxqID2I`PylHawyo at AET`-K$GVvM?DUQsyRH$tFe*)84WnF~e^dXaNPc2Vs$uS~6<!
zK!ro_2J8XX=~*kzJL+jFk)=B$p+!h-#J~oTNFqna9)hN})+N4Ikv0*PP!&d1M{L&z
zcdgxBzyxdiwLG4nx21GCO!Dd4YI(#XmQGtAzzFYKML0EPa?Wa^wY56fbva>?BZTBg
zPYu)#zs{W}izT+yWSSK*md4^Z$sU5aMAdI@%y9_TJg6p8Fi$_^)onvi{mjwI<=s?}
z%lC)Ux at C!}NnJCBo*tc9ILRKj;m?b*TP${Waf^e>sm=-fy9(LW{v_!-eUnWlpP4`*
zBit0WcmvwLa?*T8AiIs$BE7uUIXSBn_=YCc at p%(onIj6ZkVsLJ$*$Tt?k<fxP2C)I
zvOE;(^Tsys=6g4UJ}g^Ldotd%P+LL5qzKX<VY at v2af-qCoAIjQOqN<?3Xwc`6K*@s
zPds{Zxm$}%Z5K|G^$J_tFds1Gf$S^K^;DZ()?pUV$Zh((>N#QDVy>Qlh^bA+F4z0Z
zjz at xpbzR2x+p+o>v4O!DH06&znDnU?K{@J8OtJb`>x}#_TUdlIUi9G*&!MT6K5t5J
zj2_);Os#iv5WHg|fSGQ4)ZSJOX~8+b=h~5WAQ6MlLTFV0WK`Z+9Z%&>Sh?pkid$$`
zRL3JH>rx1S9dT0mV09kimuDHEq_it-&ra04PaQe*s~Z9BNw9Vqq!u9Alm0ZjbH_QU
z_68lt)|5m5>6$Kw%h-S>Pk*f|FHG`%>fBZ`&G#a9&!Xn1{>q;l{Gu1!io$j2L*tTP
zGoqdvwEh at 3@-qZLoDQCp2+nbgR=pON_PMri1Ov3}_4Ln7)|A>CTE?#w0_SJVENBP{
zy*Yne`T#4;ubW}0J15Nik6MOHimtCE%Dm2F$vDnAr!*J?aSM}=nBu$N587$r9z8=w
zOSCFj%JZ_49 at tTi4OC4w4Qp4P&rH*-^vELTc?GT<dSvAXuTGWa%ZMPCxd-!Ss}3BM
z{rZ|5)rN<8soX8SrL>nbw at Bg{HMJkZ4--nP-`O%mtJSU~NPzs!bh2oPqDKlxELO-!
zf89%&3j>gHcp|N8qSjP`_FYQo-({uqE?s1RuK*G~>&}*WiFdL{^kb3XS6BC(zNPTe
z`$vuwdwF7#&5e;oA&`OYK-xb#!Mf0IEib;yEI}?0MPdizlg2C14yC&G%m5iAN07{{
z3LF8BIswm5rE+(ERo<$J9$qO6tTWtYP_pva_Q~n_R&ma;aJzPYBIlD~Dru_u{~(!-
zK9X!@32`b!$Ea4{kFF|syg4=O)5l`*U-=}5Ft$Gs8wV9)-^7r=h?~h+ysK++3}PH~
zQcug&w*>w*%}?<PNOh}wq|#!txAO^62_(2G4=2?3t6A1A_p%eoFm_Q_zo~j_Hn)+I
zRVd?vrkE7q0gCI>RkPHk7ZN0QkY1}fl4T{9T;pgXp&c>wt$SGXm9mxX^!Q^)+$6HT
z8I^+Mfs%fiuSPlaIsNE6{s)&Vf=Yhu^!!gaFzp<ZpK6xg%3H}+C}Me~JrNYK{VR6o
zThk$drF}l!$c2D??4hs$!5z;vr~R~atvzqnFS2OAXWaAJ#ue at +V}(EuI9~kqH07T|
zm)(Q7Lm-zoy*&&?@J6m<^IFr%k9N>ykyMlD26AgI!W%p95dQ#VrP{NsZ!EVFjK+aS
zBb*jLN|VID6fdsrlTWjRT15ac`ObcJ&mBkI<B!g?Vekf at YvG&Ax12?)>=HwF9NfX&
zVMh)Re2Va=o#LkL8zb7Kk>KgBYL|aM^08vi;ok3mr!JucaXpC{GMPqG{pIQ_GW$T6
zPSlphXN*crd1ZX6?<5S4xZ|xe;lwgoUfoN7<xdsWu#Q<Fn5o{RvanxjK@~OkiIZKq
zv%D~@G07p0H<SR|Rk#NnoE-J2{@KO8tL_i%Tpjj*d6=yP-g%B;EOAI;GN3z22ONGh
zvn){(49M6x%JM%kR(v<6!*}9|Vzw&?5=k7ftawbE<o^J?F`QR1 at e1uUeR_B-rg<Sn
zP*e_8h{ioVDwcJN^81Q;9tuy|{pRhwV)jX5wI6Do5Xe9w6e#P-{z9F3w@!#|fn|}l
z<7<)>5&D{Eg!F)#8tPYWw(`8Io#Y7JFmgHP*0l893Q6F3Cs(wY<qK~l(<-kk!2_|+
zO6IGYV=BERZ$qM<SAnDUFYBnfew!r13#S%xKt|`cRwiA!<gg!fcJ-%ytL+!1>_9f~
zM#N$y&fa_H`qkUJm^7UgqO`VxE1QxKyGTQ}IXjq-t_QtoSj at U+izJ>;l4d-`jBh7_
zf^to9PZ3&v?B?Ih>V*n0_o=}zk<LkNacgfiyR?wnGpv_VNZ<p{Q;wXGOEs0|fj^w^
z{h12<?2df7qs|9C{qbEUj|_T at Z#2(sa*{^TG-?-a0p~uX5#Fd+>q)F=*V+qQFWM}m
zVFMV0al0EsdJK*|>z>xt8{Yaee%kIGPSQ+haLDk+8~4yI;s6|sbp&UcrKtErT${~w
z^XwmQny{b_3VUasGCS3KI4)<jOUpJ`uhSl4?FY=kAfY7iD6W%BxR+S8d83ppaUhMN
zCoK~m3X$pDA8PEUimgT76KLb9hND$-&MBO3qv8D%M6$G=?)K(SK2Z#h5K-h3G7j7w
z-u&@T)%+)Ar)Z6OmquAU&n*zJ8=H19jCy3(KjY}GHNO$TZRV_Y7R$H<I4vP3EPYP^
zVys;1!sA}H(Il2(b!{ixTgcnAwl<Z?>PJ)f*GKlAE$i(Wg3B<8CG63qr9q*8Z$+g^
zZ!Ge^%3RH`hCKl7SDMz+%Uk<2_V%({THC*$6DVeO&KGopqYgTH*D-ae%ci61l1B`a
zF?j40a@)rN&rGN%zZExx?HR0YlHx{dxya0E^EqO2So#8c_pVBqyiG=&rtj)@Q^H`W
zM$v+|p>l1e&hFmc;v8C|M9nCfx;AhC9-LPL at ggg`Egl#lWsJy7l202PI2|J$#z`5k
zN}k%|OS9A`l{WcmJfX9fZh=RqC$)Kxk98Ais+78lNq)&}h6bA~(#}uJa61g=@B+Gi
zyNPk+bsdahg2O5Es%qyiXW`rb0I^tJhG6D)w=r)8y5Ol^-0u7_T{e+?lGwa9<U<PF
znJ0`At;R}#2YwDuVTzyO?S-D5;cZ7+y>kG!0!XF0Q?N{OtJLL*$vF0|PX7SMl3Ljv
zFG03rZWn2qL75wzu^yQ at u4daiZE{vwV>gD%VP<7!nS=y}zyM^E>T!=6-;2f878+=q
zRJ==Yk%kW^-+npZbvdpIU2?|TN4i8Z>Uy-p<+zSaTic#G9<IQ8 at t<1I at IS&`OUE~Y
z^73`D(yk=f*Owf-u>Kg-_5M}YhsD;zOPVs%vCWCW;qg#vq<&|i_!8;7Y;SKM*&dx~
zh}sgv%`AD(u*NS_P}5DDjPj&s>0KR{!^>X_SS&gl{{UvSyn7^*X7h48m&xV1Joc=u
zLruAs5j-z)B4!D at ZdDtn2e9_8`WeM)bzG`Dr_l0o89fTLxoNIevi|^?j3XGPlmnBG
zf2D5O=|cBRx|&__+{Y)$n98h?;0^{l=QZP>5qxidqw1Gd5GLC_yL|lfk;7nPBc3vS
zE9m2#VPy_(Yk4#0Baz~zQ9&!N<v$sGN1sgAN7(LMTY_T|ssb5+$>-m<rFlP({9CB_
zxx_A#5o~v(l1>Tj_*H#*R_66?B7AMe at D4eu7TUkqXM0%6zVW=|bIIh_#N%_Cm1?z3
z`={xc9F~q6l5<v<rlp%G<g~K3^TG(^V*K^SdY{jV%JCkvG}>LmTPhS*%xZZU&!?qW
z)~;l`(`Ah at zc>UBn+K>B&ZdWbsA$60*(6y*1 at q?lRa6|FJLfgxx{7}DdY+_dx^I;&
z3VL6N<<tR?$FWrlw$si#;CHP{Jt|v^l$PW=e4wmSbv?m9;Zo_EC)utc*&Kd!WJkjA
zSGfG^PhOVd##?EmktbOJ*s*d!^sXLtDz;l5g!$>yyWN-?t?$|IS~<Q**BNjz#bQf$
zFZREg8?(cJQJ0*46}zcv(rS`JCBqa!AUjz7{{U=PO?js-pKS!cVT>UM561DHqt~}e
z(skoXdTVk$pS7lx&pMt%aVi<p%WUBy9Z3hRYg)x^6 at unwSGa88{{V1$A6l~?hEq<8
z>i*%2-7!8&u=|<s at 7lA!;SkhrU>6WN$UxrkmI`?4Mr%rypuOjz%?eMOmwOjZvuxKU
zMEPU{XCHL_6?4qByN*fJZpX~Q$EWyL0jgU*n9m}ttjxi1z^>LKkE!cg_A|SxL2V;5
z?fLf%=OdrOrpi&eX06H-*v`B0bkpkIRA?lPND4;+x;ZrSb7WoxGf%hXQaBmxJ?j$W
zn|UJ(62x}&$0MGix(^L_fi(NJm3Ir30IT%dj`-=Csb7}xTNBKbz3!%doR>E8!42eX
z3jvLcKpFQH(cHj1mqRdHf-(tVgV6r~D$el*$NVH0iFG`ZNi<-7 at U}~P^I3NH^E{0j
z+X)>XB)3{3<u$J7JmKu*n%SD8P!TM<m4T0t!MY7%-*}i^N%C$oFbIl^$tR2omRC0#
zgT|Y&x8*>?IsUbCPVlYNPxj<NEYOg!TkXS)^(2pan)PYZjpeyip*yxk;okvXUfi^I
zay6m{Bj-Hx&{gdtLwN4)V7R$><%fuo*S1en*0wF<){-gSWg;DcknRA7^!}9XC&E|y
ztm6Luac>}FyfEWo<bE~tbHr4eZc<4ejF&WQmDxI3OC6QMZHoAeffFzs_rR`qK(o2G
zaJFiZxh3UBZWViSYqh_%fv#e>v1~G+jztHBV0bw9tUX53+Qw<00^iIfSR;Mmj)y+=
zl{(GE#XZLgR+3F<eZC{e;PX-{7CxiaqzH4{@u&G at fO^;UQ)lx_OoT_rziN}qI3LQT
z+lqITdgJn_xs|LyQ$2+!O}zolPvzuv6nSSHkH(9Yu?UQJqs#U0Q;5jx#XDj2{OL9{
zyOq4U40t^=Rt#kDc=w>8BY{fga*zZgw>Y6<_U5LaFfKxFexVBmC-FQA$<(!bn>Y(J
zNoy>JY%%ZL at 9t0Vit{mfl?)=ZrLSYx!R45YW4vQ!-I}Xw@)wnsIL8H?{(yBRqg(M4
zvqK4TyemjP@%m$r#<|I+H!@=4d2VGQ3Xu?tpL6L}<h!02e3>Bf7laIwk}x{t at N47o
zIld<q?o;<y_0;=(CQF9GK6;+?jrecwE}{EH&ZRt7>~?*M+hBG*$;jXV%~^v})3mF*
zX>|$aHnNkl5gy{)a0>z|3tLgEN^U;Rt0)9S%^^im-{t6jy=ufd9Fps{FC>3%w?$&{
z1<Ha5<0ql79aE25)t=8gTWF4s$5pYJ9^356VyN5WK))!->&Nx2d35HuP>ps)yO2OY
zWH}z7b{Vb`E30#HcN|g4Y>@B_m~gpo?*YyZE3<uR=hLGhA+(Yxb1d<$TO+8+=|fgB
zyDRD!Q6fug6~UHfY#a@$ThqBX{3`=R at TRY)YL7aZB|sfr<hfnTo=9G6N*g&I&}tU5
zt=-J<lMH#=_ep|!FaYj7d8+q5Cco14I}1qViZIw~jj;v{<#_;(K+P))nTw>A(==PS
zZtW5>vM-oSxjvsS9G;yHDzEktxzjH#ZCRSi2|UFy$PNyEU_t4QxU8>;9wXHCoo35P
z(TX*tvn<z5BLI%X at R{rY>T7z=^ZPSUU$xpx51VeY8Lf%(r@`9TQP<a+u2hxDyL*vp
zR?|O&{JUw)mr2BB2h6H at ZVgcJHmbTpX_j$W`I{}g;}}v*jf^Nb=t;>nn}6bIB9iY}
zxq?WeiQ3-X3IzE{0A!wnf_Tqr-kVanI?Pi=8e7?mWDj!dkdpEVB#aS(#yx0S4c(ab
z8f>jH>SoQJ;KS!^gl=_^rZ%xXhkC-l(WRd9%_c;MaLn6_?j&cNXB-UIV;707^=qrU
z7fI%_F$R)Y7h=k}!976Q2*=|~1-jYZTT2z8f+uDVk{pyEfCGMq6;~$hZcxynlSI?6
z=ES28Zc98Q$BqMGk3-lWdgOJFwMS<&rNoPGzs?Jts2PAKj`iAJT2H9yP+HnSbse?4
zI=#H32R&4_4hoK=HRoO=@gv9$lxwnUbn at Ml@;K)M(~h-+M(}!;H9r!^tXNrE#?yVR
zorsOsU_vrE_4z>lRd&x+xYg_!>e0<5wX{JkBDWb$;E%tKg|L4L&hWp1b-haB3|l&V
zqB9~~%m>OFJm8%Eo|Wkr`X#o5ZE0p*;JbXXs2fxOK-^oWJ--^OTvD`7Ps6r4Y>-?g
zs%1-=*A2chp-CJC7~_&YwJnCZ7l$-!Xy43~Ti}8atIPvq1M~0Nu6T=5{>rmDibHX6
zV3~_4Aacwb*E!BIK>AZOtscRqxx2HF{i1jS!k1$asLweAsrjn8Rjx-fdz!k2sc<YJ
zZ93T6YL_9Rg$iIWIUCr4=t%n3Cx>)0Y*gM$4AI)M?uj2bD&IS99euscbvL at 8j@IGD
zw31B{M;)uLCP_~PPI at kVdjnkeha$VsR3x&+aQ9axJFtvO$CWr_BZkSq`eLCjqvvfM
zG}bzPh$O#;QnOCW%&aiw*e_3Be at gP*OT+h`9q|>-t6Vm=cNtk-LXd~%Imdt3(!1{w
z>6bnsvimA;ffUCpUApA~RyYG3=NXQDipHO#!yK^RM>INvBz|7v56A%=eg{99s at zeR
zE~w|<T!!aS(;8+-)Z2+6w`9V^RQ%v6=tgtg;8yq9<F%eyt1eejypg>0f(XD!zylcl
ze>$-ylWl*g8 at s3>Gg?Z at 3XG^Y$sV{lJdU`oQ^b?rz>_|caO-}JuwF^P4Y!jL=a2y-
zC%CCwk8^BZCZVd&=h-!-v<TDO&maj5d$F}ykMVc^0QJ`!uXy3SRdM~3rpobYR*mG#
zc+5$5ZWI7I4*sW#<K8W1`_Htzy1BZxc2FaBYzcVW%s(t=(z_?{-JX}>$)QA&7-LZ+
z(v|uA)*Qav^MTNgn5wZ_C38bd)gthd>GpS8loCMlG;%S|?j*?A0meeMPhU#ezS7#*
zTo_N;zqF<WQQHJ`%LW~Y$K#6gJG(ix?Q2Dq$PrARW_Ozkj=*4&M<k!?T9z8!-->Q5
z^t%U|Q>Mu&9&DfKz`#HU83U7t(=_xGT~9@^x4er>V{b3m!|g<kfj(JB;9&E}8TYHP
z`0CNao*<43hZ4Nepq^w>poYc)$F6wvs#da%PUldwx0W+=8i$(TF~TtzY+(NY2;({H
z^sY0-Poda}BL4tLxxXy2gpH4us at x6U_*{>nsj_4%-p6~d*jnh<8m7N*a<a`8xt7#1
z-5AdSi0W`p9`(a%dMBNwCG0S?moi4mZg*~Bzo|Z;ll<$m_<g4}wT<?jbuiVf%K5N6
z0K~?AVh^X#`c_rWxGgmXi%(sP880L;DcKP0WMjsC6m-w6MYS|fp~pvk{egR?Tk2BG
zrqX5t-rX=!2LKH5l54KhwfMXtqFc=+o5eJ<gb`0Vw5<90iyU*o{3{X<71-N&g8g0A
z at Ih$PdC7qqPIL6^KRU$l=8oPq at Wfx*H<8&vrM!11Qk0UOLFx(5-xwGi=BmNFJtKy9
zvs^W#a$F^rn+RLWnIi?6#ty|E<o51<mB7ahwzl*5hgET>>1x=GSp3YqcIPLKoyk21
zG<cK6w)*{~6Ulrn^lNu`?JXjZ29s#OcYaEebI)wxde;+nZhUbOFxa!Dyn8LIBPYs2
ze~G=g`jRQ6X>L?Q at dx4>>&XqJx|?k#%Pj at EcPIGR4y=7^l(+FM-lL>PrC3?Dj8i`Q
znPpI3;Qs&$=NSqPFr%sKS1kMs;tf{*^`o=8xt89ncMc=kfw%wx)1e#=mF%7m_;LRL
z2vm0W_xA8Mrayb;$lyU_n|}Gv1+&opRNF`!(#9u)J`~5M%JXYhBGw3h(j&Lu_lN+K
zFSk#Z^RDZ{X5(4Z<ks%vMbm6Dwy`1rq0dqVdV!DfE1T6kR^Bqc8dieF at urjsZVP0{
z+2ynS-u2dNR_WnAKFZD+T1Zn7Kc9f2pS;-j$>i2ARu4sIyE=VOP-fHar5`a>`2x2m
zJu&q at mB`7dz``vF8SL)liJt8Fga$px`gHs%C^g$Z_(i5Gd?PW!7B*Qx`<c$u_}7VF
zd|x^ri2l{2x?7ilVQY=KG9Gi++>`lMRcpeEyqT>WJxb2eM(4!8iZ>n at f_pm~wzrlr
z6KY7zdH4J|730(Ry6oEvsadWLrzCGbKII^SKRV36)}*}DWqXN(KwIW6cQm6p=lu7g
z^Tg0zOfzne0;2`Og+ER|3i2yXRo&LdzfTPuEt?>PMV7DrpEsWYA3SlkNpC`Zs|Qh*
z8$EhKF?fjFvEXOr2RJ9DIjr*frR&XgV{f+IL6Syu$Q%v_dVS0{ChW^QI;xVmf0&R)
zK_1n#BV}gDty9{q5vwi4Qd}s`1ExM>$4}a(gh{7DT0`=xhFqVRpGw47p5|db(n2m6
zo)jE$PeCk$4oD#2jPNLmaCbo(Pvd(UdM=|itNpI=Ihpd2f;;ieS-jNG+F&uFw49Y8
zx(rjcvuv*;yS(zj6S|)-f;Ogq!lz3CX?F0>a~O&~5&QMe;A_g2l;q>N-D;lN3Mp(|
zj^x{EH@<91Bg&+t#AKsqj(ZVV*80ocI5W9O)Z;DuTxYGDeHuA at EMDqq7CEP36sUgi
z4c8ymxb0%@*1`!Qfpf_$dYb6NK6|4pu3dLs%`44PC;2WM%t<*pz~t~hl`ey*m%lbZ
zqrvklO3R6(1a!|~^sJo<?jad{r8dWaTx932ezi+b)t1{(jbjS%%O}q!a(ZOv+P0n@
z)=msw-W06ux!(BGN4A4PwrKp3Zx}^UpPxC#NBH&TywdMfw$gma?44tixqfhcYoXOs
zRMspam9{0S@~9h=$6R_>nqAr4MX9yPV=xXxXgT?X7)&&&!<JGj6O2={gmpT54M8`c
zxrm7f%QN*LpZ>i~cr9Wh%K~`cBQ8!xdkj}IplWDtWPL at X5=kyMC_8}e0IsJ~o+d?+
z8d(fYmBuo8?}~DM&aJNORX99N9W8R at xB|n?Q0W%THuI23^rmUnR_}BtOo?Q`{o8WK
z9qJ2fi-xn0D$&61O1bFO*!VZYKic|i^N2i#aKb4=a`^9$sH|(&_G;)O7}JL=tjx_P
z!_!}CY|~!DZ*LoX%!3C9j<wWl3T;qaTHHwXtO_&j`Hngt{<U)#4K2DsrNjcuB%7uL
zb;sTuR{o!HC7hG28NwbTVZyNe4;ABAl&ZBU5}ci&{{Z2P_`F4J{hxPXYQWqC1>^3%
zqz`_zv2$`RG|-78t0_du1QCJKyz)IJcJW=?3wXE8<;1MSXVhd at L#G)YMpd|txiP!}
zfjo5Q`BYAncT&*SFsP*BqHf&6?gYrLu_E)dV|naHzqNAO)wRR<$9eOmA-1^OKA7x(
z!nO4)i at S)Vf;RGO0^kyG!Li>y^~LHQAWb>~l3bbYGxDMy8`GMqG^E|)cT=S*OPW%#
z`c376IO3h<W2nVUBN at +Xlgs1Qzo(vu^6Zt73dfOy`cw9H;-*-!+Mngre8$Cfi>(ZR
zo@&O=YF{r1U5G>-U5)_!YI)MtmZIK>u2UU3{3*gc*aIY*&%E&!m7+J6!s+ at AydgjD
zcl;}#I=-i@&*g_(Xmf(2<xoGHAFX)UoYsX8b}yP<N56&1u{e)<OO`#~`5hJJr)^{p
z-<{X0$Iu^kJboQ(n{N|pmnK(@BDJ;(cC2f<LVJA2`U;Nyp|g>r^O{r``Mdrdu~2=j
z!i7~4sTf5(<KDhc6`SHJw-oHWkFmn!xM~SXOPTrq0FgbG;Jc*rE-qW<=Pt&m#cL*`
zs&4XLd!R`Q&CPV$cBHmeEA~So%PSRm0OmuEp2E5<63{a&w(y&+M8|>@fLVUMm(=&K
zDJL&_PgB@(QPC|C%xS(8oycGxdoW-w(7wR>lU|FZcyY at qk}wkoD(DLO=bpcXYUz3o
z&njE#gqMym$fNggub{0nbhgOW(81<J4=p2n-2HleD at CHRIpsFY>2xb}wnviU1y>m!
zPDjva4!>Hnr0Di?$c%>K_CPSOG at JrE*F~kux3Zgcg-Qg^%7eF4R<w7s)pcnHl#Oq0
ze|T7Z>~{KnDsE1>!M>3ox_KqFh+0emL$O$|JeFa=!SxlhZJ?#9{f<8^rE}(7sh5mn
zg#>U0IW^L)t(&~JA`@+CoaRDyg&hE1hv{6lp?Ebbmyc|VWXxDa9tQL3z;pd6H*hmG
zj})$-bM{92J;Z2&H)t0j81SK2B%FGlwOad0j_Jg+M3-}>4Zq3=WB7LVrfXJ3Zs3t3
zO^YBck^MbBwY{d_F#iBYo+w0E3=kX~dWH0(&_+Y}7Au3NJ@#XDZ0>>`yQMsxz;ytA
zSgn0qOt*q)VvVAmmu!A-LW3M(2>mNoU1{K$N>$Zi1R{<+!;ZjptiyPhX)M`vxs&H7
zXaP at b=J`>$9F*P~dz)K`t)h;0k=>c(C3jAvfO>VPd`oRA_&p$%ZX~;i$F>6)KQP8f
z>_>h at b~<g->M=-XWfw!`cUbd}aoU}JB9JP^%{|FbqC(gW?~htVoR*W|(%{}*-iNYf
zQyNbO&A~^?IN*+_p60DZrZiKzj^lJvs4y5I%f>wkBN(gtr1K;y&pJlH1e48igP&~m
z_N^}thK?B#?P5ezyi0E{%HHLB8h0kwJoCnSRn3e~1lNWrZl5nU<|an|6h4^ACmpd|
zls*`DeP-P>*|iNvP?Z+aD3 at v42_?%nM8{s;F<!IcL18uY7XJWdH<xQC+9QTo$CjOe
zJddwEaa!7arSxjdup6mQ{I-@=O#nC;$4=O#Qqxx0?>rsgYwZTs-Ysh4-&55{19#4$
zP;d|ua&hg7)7Es;cqZ~78={CrJjnxr(<40XTz4dzuj1brzlSD+QNFsdx3+-ok`hdY
zL*HQ|mL8SK-F!^bz9PkWrRWzjL#SLa@&=&_#~W}mMmmr(aCtN)!p=csc05h4YBm7b
zycU>?%8E?IBc86H0ncx0SiCoFZK+18>mARRg|)aX<rV%V&(K#xp?DI{M9>pWvM!e@
z-f+D<H=X|gJvi)oZRv{G0_OTfd#gxV=?2!7zE at N2#t83Am>OLUcJE1pQ at jEgVpX@x
zBSN6Y$Dzv-atA-HXtjmDjS|^uwheJ|i at D`lcZ5^?M~r<2KN``~?V!@)c58*2T$S?W
zIb0v_9zD-BlcCvKUigOY?kOI4*~wdnVhbJsRU80{G6%0}tAaW0Q%~09HlpoX-^1d4
zvP8K{>D7)5fbtX)ase5~HPW_$27_~B9gK7T0A~d;Y-z*E8P0OeftuFUO}?#bd1NP9
z3Mg4uIgtq&QakaC{uPO%%G#ES_PT=p{vu+05(J!OU({rF>_tm#cF^KHU$1I94xsQ`
zYB5T)<`uFr7M3t at eb#^C=s^5^D?3Wi?zJ0Kh8<mQpK~;6EW1o#llR8neR|`H>n%JT
zr|Wn3S1oWNy1<F0KYMl#4snoq>r{2!J at gq?NblsDNTS)YDH%M|&}F)?>r|wcpw;w7
zZ-X at 0yxZvRQLir0Z)qYwx?_`u#z&{~tB<0**6khqA+6<IyBWA&ym7}|@z%C9O(NdT
z$$rr5E~O-Yy_~5=37!`|=YV>gRn1twn+h19^Wrk5-`*B0&p9~H9jWsQ+UR*rUW;*|
zX_FZtNv`6aPqJZf0AMzp at z4`j^!+L=7CjE~KQ0u4Y|eVh`;h(aoNoUBCb|OzH#g>s
zX>0rABeO=#8*fd_dGz26XPVsB{5xl;EOE&->}$9EREQ9%?4b0|PAO?}q}`G{`YR!%
zSzl_A&vPpTC{fU|v46*=Kb2ucqNS|1voz^)*Vkg<WOgm(Z3BjHe{O>{=(?_tbec0;
z$!1nnL$IMOymSn}a1JYs at F$0+vx at 2~>ri1?jPXQB$&id~_6OInr*KT{?DeY+A3(Zo
z8uBUbwGd&6e7&Vu51IYI1B$?w!ekyrzm(7-#<CZ39%s)ao`m%|?ZBzUmXW7x5?-0D
z;nWp4j7S<djt+dVeLZRz)y*b58GhL*w~lO(5aLM_Jpmjj<CE9Ys>E2MuILt4+FiZu
z_aGvVv`m)ZD=`BB2lu$kbL*2_#<;qkr5=rGszUk?groxI3wT*sr$9MoJ$E;_<2(wb
z at e{@n>$)soV^j-mAC$6V0l~#9j+h_*yw^3Xc!KL!vXAYTb6prQwFe*%OnP8awT;wt
zySq&b;NGd?xGpaAb%G5nT<u9OrSiy5&5V4&4*l!4 at TbFlS4FwGx44}x^w=3Cn&EPd
zI{-jX$FMx(r#0p}{{Y566KeKw+na&wV-Q`CTCbNI06H-5Sa-fN*7Z#?OH--Js?X;*
zX$t~z??CM)eHX8I??Ld5q|#3;a=Cx?P=H<E(*vpZHS^!Z&x)F#k8Z>aPMu<fTkNqC
z44`nk&u|BBmCM~~QyDiI3$Z(kGZr}SikjNg>T?%Zz>x+CVbpcSMCA%`=9986ohIFu
z<w#-F5=ma(?d=)9?662<bste)fvx;f)OCLX!(*z*uRIuquLs|marbtQ;?6m*Jh|0v
ztR!H&e5?Z_5ymrImEG*pPa`|KqdwrN!2`BOYWes^VeMbDrK0Y8SbP$M)T%49u#;Ds
zdpUfv(>BgfoDNSwKMKlgl(>c~8 at PP%g`|m)bSJMh&OWUno(K at g6cE5NaL3&HR;HzI
zCBB7gcNDJ#u*gio*ljVNySE&ZoR7-5++?L at dQqtq?P9l)rklUA?0MvGlm%P}&-+Kc
zS5FN6nk&_Y;DQmtNDtivb5^bO4Kz>oqD+S2LXtY?*XveoqKsMGTRiU^R}4WtNgm$(
zb-iGx at akn&T<@J6Y?0kPjiN^z2_P7gErn%2PNY at sJRL&#8KG&EkQqk{fzu|s5#i|m
z$g#yMMzOEoX61*iL8M5QOkhSyK+AF5{cCS&O(zuY9JOTAivIv2DWitYVgyQv{P}DK
z2fbFgu(J&)c}iT#CU&nX7u(dDnn)y`NuO{nBM`$K2=o=1bp&^S6}Z_TZ}o?%^ds85
z={ctDE?>myg%@slYIZ5$T_?y}%TpqVz-f6 at FOI}^Jl8Ga8z}SUq*Ek&hm`ENG7my4
zrnbAjgF+JXV6isVS71!TKX}$$DQj~Sv)^4$F5(1Hf^eW`g|0jzsZLIHCCqC$IY-=9
z?s6K2zj0+3mYkFYk{su5dzzqZ%iDRg#6lL!$+&PUb6?X;(H6JNEcnRTyMfm=ooi(d
zpwPnjfTV?Fj^L7vGxvr%XVSg5Q6!pHIMq1W$-_a0-%Phfy0(x at h?+3145Sf}#&c8u
z0KzA1lF0h3X$I)Ss_((ZatIys(zjnrveWLK;#kAQ=W!eT&N&&!ZYw8T)#KE4R=d=R
zjiuVCFh|MLa{AzQti815r9Dh}Dc_oC(2mX-XJ{;6&W+<#D<>Eu)7VxQ{2}{wnIo1k
zUmJo(*$3Y>Ew;TCrK&7!)5guPGjZRK(xSb+xzR)2Dj4Eb$Z!iO8RRuDZB;H-?fJ8R
zt3^xNLtjHL#X2N5OAVB^=>^QV23XI`IrZ;YH>@<ovbMFH#E#n~k(liqbtk#6NwL!H
zd~>T=Tk00_A|UhOU~tT!bovVCaes#w*4q3wm(s-cle)S{xd4px`r at nF#c5I5m{gTS
z-?ACu?LOlERJFKrAa9rucW^oodsla&YLXkX9B{wc;R_nbn8 at cC1Jl&|)~%UXtk&Mv
z!31#~tsq^yKpipOxjX$x=)NGdyR|`ZlWt)YY)0YV+ZE%^s;=6xF{LVW{pNI<q}Gje
zliO^DNege4mw<Y8 at 6!gdA5nb<8?ef^momx%h8YSzoyBwBBbMUk`WcPa+2dC%(aR#1
z2R#7&D#ga58CY&D#!sEGy_|f*(4N(tXuU3XQjD*8EjzOw_f~o1byZY{%ps)vpksn~
z{Ho`MppHl`F06r58(_PSneaa at G5XVW4JO=Li>aMfHW_~?s^n)qeSVe9H;p9FG|1wx
zX+zz)D-d19k4}TVbbBXJa?{-QRcOU?RM~Yec(-4K$>&WZ%tlO+2gqMeovY1tPY}uC
z3zfE(=^}`osNi5 at wrX8lUP+eW<(-~(J6V3|+IwT#xqG=R-Oxb}SPW%J9R4-*cuYUD
zUh>rWEW;e?yFuyrpS0?k>VFDy$MpQFVIB_y1Ky<AOD;gb9Zzcgx>L62;9Ra+5a4&_
zm17tufB?xSpsbBk#yW1DzBt%k+z;W1;Q{w=@UCY2#20$JS)E;?UVNBA5s$7q*NceF
zDNy%g?>{5h!erI49`ya#oi?GbtT4#Bdadok at x0_hhuypW707B5-0Cwdlgc$Iv7M~j
zA&=;}!4=cr=uM~iVf9T?;nE0 at G*+>u7FR!XdXdjPE6z2IUgqK^l~EQ}VUV~*UtB2d
zUnPmhR>VJf*>*nH3762quW?=XHeKarW}0P^Z at ZNkRrVDV-z~9kn6riZ#{hm6$_;vH
zLYUeTz~G?=aQ8K44PBYS+`=Z>GQ}7t^RGJ6J&P-Axu-SPp2Ff%0=EDb>sDf8Fx at il
zg+ at rvBzspQY|`pitlngsMnD7jK(5zA at Zs?k$ZlmYX{bizJT%AC*iuyW6r_?iJRxH*
ziYHYB$6*`%_dZ_bC;O^Di2jxAx-Nh;sTyyXox4>^{HQbRdYlZC{Hu}DZDC1aj at Si-
zK1iXA;S=aRYin8Y6KPPzr&&Lrsxc*o><Ilc?_0IXaZX&%Lvr@=;%kpCITACDR3<Tx
zdSjrrkX%WqZ&ds66vlYt=B^Ss^<^m?#M|zqK4U18gdM%Be?;)oUreiZ-h8i;%A}vq
zoKv=!GO^!TU44f}p6o^zSrj5l<8~CBWMi!!7;zE35=}9*c=q6 at IrPt^bJ~Hh at asWi
zr`fa4{{ZWxQ?@u08QME;_N|ne*H5&zjy6xUDRz8k3+hPVX0j+{_2S*gQ6+N#;c3+2
zRDKnmEOEl<AVeH=+s$3Nw-(W?kwYZFFa(i>1L!*bbqYq_Zgznlah3xarXxR5X7c}l
z)hyDmKPey#cl>KFO4J<R6Cy~+peLHZWeDl|R^*;<+DM2bk}<-h3CRQ0o&{!H+R83c
zNtiL6wn&2qp4~q#lzI&snw9KHay-{;0fdPoGBNLyj+Co#jktY`uv3%gU}Sp%%|m&3
zEv;0av)i0)XO!(M!;A&$PCY6aWqWv(C~q=e6(c~wKiXs4=xGc^U+k?z?GYA^-dvri
z+zj;`^HN?<Zxg-Tk0Y!}y9{ulah&>-O_t(2D+zqml6e|GmoB at A!TYP&{#8rEei#?l
z%Xl2aWI!^c`H{~Z2RI$Y0&)7 at xpm@QCQG<2{>2M2$zc-^(#`?qM^T(9><=~EczaPX
z=ze&OM2Gik0;pnf+>YN`@ul(pt99`q at 1cx;Wv-xO@~u#9+Pq^tWSnP{Ubo}F6vN>S
z3f|!@46{ujNMI3y!H*=K)EYRnmziS9{@X^=?r*PdKeBC at U!LOVg%cit<brY7V-*&o
z<Lx6z at Z{RV-K at 5OipKEEyh`1adz$hO8+evqAIT1zCA8Kz*0-Kt+2&wEj2+F#ek+T;
zwtIP=7$dvAg=F%gS$R)41Tz8X54SYz$7QpetK-icUwGqG7gv**En>*GwL_GQ6a3F}
zROj(U?dh|LuDrNyHu(u25Fs5KAa(bunw^U2TKCw{eY!MYrMXb;+<SA!;a-oVcq2=P
zL4mKlo$VrAIb`|48U5cs!<=Uxl-pLZuCYn<Jv+euFMUqQB$EARxs4Ofh>ff=I`PyW
zTJ%V6)LI$lX#AizdAaC4^ItmZ`jFDKdmHO!5YMy%kUz;JO2a5dI2f+(>&8icV<a{=
zEU-kXLJ$i`Sa7-Q27gM689jAI{nv`qQN6fZS2ITu%7_rSVegM|_~NQ~hs5#tUrM^v
zFQ<%O7}{7MU)_gc(HpIDaclGGT8TH|EbOIRM*I07cjKtf6~%btRnxp(Wtn20-u-0>
zZyL?!Bf>zzBeC!J(*+yoi2N_(ZDL;%9ZOKi)AgH?1;p+Mh~pe5JZ;Do^b9fE+gL>L
zM;gMUhLEuUDevxcj<xfbiM$_kWp|=hk}}&)7TIBMy8~o at Jmj9{y|U6%d848Ww28_D
zU}FbsFZ1b1*tu$xI#05g at p&8~DI9H>t}!a(h8T3LJFOl)M(X4pL+x@#$_ylcA?^kT
zBR;iK=Ty1SEGA{RYqVwz3Imoo8<%Ow$6CLlY1SI0 at VmDgC6uboBOnYAXP(_g1qjLZ
z36SZSfJG>cO1;F(z+z4n7oX4n0IyPO7fTz%BFMJzG1zV+<I6n;{ETDyRolq~7WWX{
zOAv|?!E7lD+a#Lv9~1mlwuat&8%QC#wvZGu5=bD79y%IhNwN0+C5GQxf;ZZiR`(=b
zsF6a+85j<Y-=H|A_?O~-nWVvY6cb%)cN{!X7DbPcK2lenKc#sU=Crqxxlm%kz(2%A
zQ2+-LD-TSO)YUCcj!U!K^nVerjeI;!{{V`Av2`?G^eCZkEfP$0l#q7=(*n3i{28lD
z9;>Qe_=4L`)M1pWSiVDC06*47z+fpI4|?IHo at jR>C~{6nC$GLKWWAZ!_odl^0I at s)
z+w!ErQ(ex3Q1LySz7dyBp2h*GywS)t2>$s4vCkvZ1B&D%xROR;Fk%T9C`rvnBKhm)
zI{-l~>OU$pyX&i#lw3#U!ZEO({B^3h+-xMbP{5zOR@>9qRY;j+c?>fKjZWRY0jn3r
z-rR`U$yd+G-zKO%rNLmyyJ6rF*P6~vrE^HT>P=^L71WYMP^5rl at y30s{+g26-XyU@
z5g>B1C?Jna8pyZ3u(g&{W+r5fi#H>XdLK%L{{X~x@<$9t;c$gqgcv8#pT at kpxcX7j
zI<vNx9;Ef?Ub^y at _jky$N6ypO_6D=Ht$O8Uc;k{WGoZpllffM4{{XFAiujP-Ng+OD
zl1R-a6%T9>KMtRbU(od^+Wt$HV-%<53RgQx^!#haoSk_&P3U_RWeRlNmc7j>W6o=P
zNiE15QM}OH20cMOm7g`FT6N@;o3k{soyB`7;-z_fk}Z}eP*k%i7!FS)^Y2-$cJ-0H
zrM;=0kIcbF=1gONYnPH!_#THsN=EFlt3bE*>amQHavMLxRL+ET3sqRIl`-=C<8VHh
zs~TcS4a=q2bV$!2j23P_Urh5`x{ZWZI&w9riXR~5!+*~*e)c^<u8(f1dx`2PQs#WI
zIk<c)1-yZ-T|{>A{Hy#-YURDt&utu=P?&cZ)tF(sU>{nwd1jKt*FJHU8E~=|;F37T
zJ7iTDPMaKFU9cyXJ7qa2eFwEmtn0f)S(-+aX)E6MH6A${(l50SEnMs{kG!KDznxLk
z>}_qY1+|pYJ-R}rq>u%FGr8iq&0kx&w}33ShF0 at IjW+SKrzh5}XjgLHSzON~XtAP|
z^6)_oj=Asjtm)9HPF&X;a7Mk9w<xXUPqCs#EUMTnspmg|Ja?>%?J=&5J5QL=0#xT2
zJ(uZNGNz{bo7`K+B(O=4!5k1UI^cbJS7o9=w;FoI6|}<dJQ-LG$F6bOj70s5=WhQ1
zpy|4Ek0!)=Ub3)4Y&9DOj%7PsoVNA<01tn9&enAp2BP*U47RYuawP+R2<Qp#T0SDY
zPYn2iIHc7T?w$~`N3>=i_ID1X)<x~?dX at K^Dlte?C6 at rV{{X6$KY6Joxs;zR)$}D-
zwA8K87Baj_c9%VU>pCq$2c8}9teaSnsrnkwgus!gBPe1mf!7f2>s-kZSlyVAJ=B>D
z5b^T$$gbPL#rH8=*{d4<Ah^7|N5moo-G$t7f-7slJ{qyr67p?W8=#|NM9sZ%k+|ci
zu2Wvr#P(@8pJc4rSev--k<@yA6$YQKYD;Y@>B}sr#|+W^#V3rG>^ZJ$RI3!Bp_Nx2
zYaI89Ah@>i70s+?ZJc)nV`TfRyRa+R^#1?|!gQD#@>xvnh~60a;{=m|o}S{kSMdF&
zwBj4>L1WY#?)j2(z48avx_vXv_elqvtD7x8+Yy;rm^8-(Fda`%=UHPpq at xupG!dyZ
z`J(hRE~ART*~M($e9FoiU;x^uj0|(h$E98I#1`6ZhM9GE;wy-ph{+p{Nav2?uUT8c
zs7A6vQC2cz2d2@}cfE7}01>opKx+0rS|+7pwxVGRH_RM1(op*2n(|{&&PpyvTa={l
zV;W6=OS`$Uw`k{*S%XB##groB?_#oiVIk5i-YZsA^3atQ<dOz at dRCRq?w at ch;POje
zE8xt-1%KHmq0MwU9-ST37ba*UF)0!ODFm_X2eo!Z!kW88Mh?ly at ZB!MQoHdXo?I=u
zkrE4m_n3~D{`b9gPo!J;b|#kLnCvCCM*O3CW4&zrLa~A!X4_D(j3hG*PNm3EAnDI+
z{{TvlQPk{K9NpO4`6U(PSs&#LI|J96^j&{wqSDY!Mw{i;- at DNq!fV#^yDj90Zwwb3
zf^)zlwQ&9^)S|T3T6<U9bH98d9t?QseZ6aA#U3=X)3>d*fo_6P#GLc(*QIe9g|+91
zE<V`>nTh590G4V_0Q#P5*TYfORC*)I#o}z8B>9;XmKVCU`6XqNN6WL3l6#ZySvPj_
z+Dv;WJTVx}ZP?n&Y!&Y=St3>{%M<?feu`?gxY11_M+(Z(51Y=Jb~_KIabA>Vt&bLQ
zPCVUD*!^?I8fJ<a7D0P)&_@~hLHBR)t}_1s#QKK6Dyj2biNto0DcjGtf5y1~01xQ;
zkBF{&feW>=<(gMJRO7Jz@%9z#J`syew1ZEbL)*^bm!S;(uxsAM<EvscZp+B?@Y!Y^
z2)UBHyv!XF!%qgPKenP+5COBylq_f2n13Pp*Qv#)S)?}O!gYkJ1F{uY1wFkgX!LZv
zLmQ{=_U>>-Mk(5Dv`ZU#7R_lIwgW0`5AHG4SDSRsnMuoY#=bawM!SPti${gfTU*Aj
zA`zX;dS~#(c|@KqGR#Z-t$~0#SFUS+1SZ!!MXKt0wz(CQ6U<C6fb2o&8zcert~cUm
zf;>C${{TX?wT9+RN5mHoy`}rABlRoWJ-&vnDmo4=trq7W{{RUTaX#pwW at Gn@H&gVf
zAl5E*X;L`giC;XruHHRKtYx#7KovIU8TpPYbHl>YIZ`X}KiLV)jch)1>^(lUBZ{_$
z_qOM8qWFC#uz9XzG1;a($$`OR{nhn9<kz8ie9dzVaofg`fx-sEGOj;TeQV7wJWp$>
zUaGXRL#IXpK>|hqi3gzWPf|^KkA!@A;Qc<##B~8_aEcUtrY7e-NFW- at D$I(Pk~)Rb
z at 8YqF8zLgQ&Ly1?l#hKvpYMGtori|5^j%Tmdr4p91?H78kV)^Hetgu8 at t?z=X^uD4
z?qRfy1&J-;d_Svafm##%P4FeOO*}fy&BU&p18DfjCm7EkjU8 at sT2?e6(yct at gb5=#
z4Du1RTa4qLwKcYz{i)&$Rk4}vqq1Y?G)xE}fKKnjisDn_hlF0{SzgNgOdDfM<*)BO
z at EeMEh`u&>b4AkMPtf6#;^KebOL{MsjKqD`C+2K-sk<7dF2|wV#bxB(-rw8{Js}<C
zp6X}9bJ&ig<DeYXL-FUqi}HBGt6p1xu^)3-Ru$Md<hyj^r&{@M#$Gnn{8K2CQN4Mh
ziGOzpIF2*yqmRb9g}rqdX;iK`IqyoxL}_(r)?O$5p>znMNOa#0-@$wUA!nXEV?FRs
zKGn!-9~+8V0~VXKl32+#$Rj=Y1Fd}Xdoc%Y at 7<A)zgAi$SfUXzRTwxO>8m2WlHBzN
z_~m at bn`5;@9Ipj={cAt|7hbBj(o1mbG!4Opm3FB1$0P7Hz&k*LVG4kJ#~ft;0F6{=
zW0A`O@~9Z{(DHq9YMMl-+1kgt_+R4~zlCje0Snpg^BP25(u{NqlgDc4?7lB((%cIu
zw?{OLH%lU6Yv$N4zRb9a5|NLSJ^kxK+VVCECVU*>N#M}37a{gs9wJ+d7^i~7OwS$+
z_z4yUs}sd>zZAT4Hjm(zyjC#WNixDCPD3}RPIwi;{4eoZYia)g2>z?7Ev3DX6F?op
zgU?Kn)~kGbit1fQPZ4UdPp2$ciqTkp?Yp}X_ltU(&8rj1X(Y}=Px!B?*xX9d+1aEF
z+q{%rxIGJQ?oX|HK9S=ae~9->a&0aX?3TqPwMhfCYtwR$=O-ZIyed69XWfsKlZ+PR
z{uR;qH^m3Q+Mo7_^5j%fC5?gFSGY7-=y8i%YI;7C;Y~hE%b9N$I2Jg(vhq$uvN=B~
zAmD}z)Q&!t$?E#$ybNH|%*o{zFLNWDzdeU<t#f+6izM+K_|#RSh8NEf=bZXhbj0ew
z#k+EmlB2k*x<*`$?rB+HK at I)2(t|JW12|)l$KJh8?&nO at VUKT>8<o$<<wzr(eqy{e
zZoIcehApbVo(C&UUldMm(%E;3j(%)#2&DDc)xp^#(>z0OJ;9RYfV8zFFPaY3Z1yDo
z0G^dz9ceT at FhvlL%_k;ge=xA;@aHwkMS6883f_+~M>|~Z2BTXGcvXtCFY$S0xD=I$
z<!M=u*LB;SXqk(Z5iZ2X3J0bIK^?u+eq58W5{x;=@QiU(r;y669BLx;QQUW?wc}}1
z!X1MvfQ1Rk&O7^4zNWmIT-#3 at UfEdO>C!jaBA9%P&61}*jdgwu__8f*?X5K{W}L#n
zH2KSg9UJN^&+Y6b)-D)Xz;|%mfE07olfe9HrPR%BJN)rH#g62U?*9P5aahTn3Ywml
zK8o=liLI?{((uXhx at 9Dj3bO;w03Cj~t}^@L%jnk4r|B}Jq-~L9Dt0FsDhGah*O%OC
zWXTK;<SCDLEJ#t=N2hwvis#Ii%#Zi0p1J$9a|CelTC;1!e-Slb70mMLI)h0ve3+B&
zueJs_tobf3LZ(>>2N+ZLxTt*8NZMwJUw*(ErmG~98H+l`yrg7xspjl-a!0m?j!LX<
zWGF%8V>up`YDv}wCETFTMD8l0$umID9BNrd1dM*P$BO1?qe%w<62za%o$f<|dKb)b
z+ at h3yn8w50(=P4hf+-|IHxNEw at Ty{X<0ydbaDM9a&!tWF@*~8+GoFCc<|C6$H!`nf
za)-)g%b(@enPn`u$O4U#@&leQewCv=w#G&&=R16%QF820L5hkUMoF9O7WS&zhy<cw
z0sxOdaK8`tPpx_Na|$${E$`@W3 at qgv+QSP#yGxap<A67D^5>KM>m$UTAeM^r%hTK&
zSQN97$zzTND}}Z3ozA1FOq+M#?lClL*Ka&y+ZC-YwGFnKVxG`JKbWkS5-I1o2h{pk
zlZmZ~sP7k}=z0|J at Up)B%N`@OlHX2`P=@9yR$ukFx!jop86E45)uynw@{uQ7i=;(a
zB2_sc{yjOa!X!;eB$_+<E!>~pDv}qcAm+JWvsh}g!z-k6PO>ycOk)Z=;<zxbQcs!e
zcGaf}O(eH2czW9E<5shZDO1U5jsb2X00Ymc{{RZn at pYxmmC{?XKpxrfvqaw{>yk;p
z_s=wvq#hfx6IyP2kGP0H!)LBP3fsN1Hy8G8AVC+Dj_!J|atFR^X>vI!x1q at 4C3trz
z>34tdl0#~#8$?RBQORPXJ+sIha4SOA#y<>5?If#`<=xA2LFfmt{-(4(#TA|SlF~dp
ztCo0x=rC|cY>L1+usY1L$#zU*1$?mIdmnWBR}88~PnCQpr-!1W8(g>g+g*^0*2Hf4
zMUNOo?Ah*f-m6_{GilaH%<DWV<s>_fah$Gc+FjadHXe2BFPy9t$BgU*;0m#2c#`V(
zF<Z{NE{R8qLBSvcm9BR;9kvGfC(UD at dy80Zn%uK6lPpoYXPlE!Phkuf(Ohm*196Sm
z1 at nvwxp}1o at jT*JHqZbN?Z at 8iKAh7Y+TPaiSWe~R3~`glZmI@;wdg{mRh%BARg&g#
zXFK9AYvf3oL{5vjiX?!tjNtUD-X7G2jqBS2K_ko&l1SWppTe&AzS?a*6`C~*bs;M#
zB$Z*eJIAQ)^{ioY4xYyKZoJ9bFpkOw(f<I~uE#s3+c9{#LLSAW*O}ek*xFiXgHnR=
zpt+UUO=}A7EsSA+>O0kK7XEvRq*$4hpuloF6V%ohhAt=9wHU1R2_~8uGF7ecF at ezf
z3hgyd0iW#n?=;Kd98pLE+e&a-Jbev$&T21`tG&T;)QaReo1}*0Se2wyn&DIz2iM!v
z*0HC!7jjKB2=YeGQF-Z4sH?io+&WF?EK=>5gCSlA91MF_C7*~9?3zn?L)<&CQ?nbr
z@!Gv=b9|}9<C9#@FGF at cPCKz;Ss(2%02V0lp!3k at uWH2C^s9^C6fUW2ENKjQXGc74
z9Y-CrPCgmeZ*;M$Td$i4VjpC`yi5<hj>F!i(rxW-bnh=$xtworkVF6<Qgc|#lApa6
zpL11J)mB>AyA7b%5XT($^4vrF$AfOt%1<ZWt!dWpYo)4~7S;&~PuxCNc6*Octw$e(
zw0$DsbtW_1M5R>4D}C;B$*z*_D78qHtl>>Q)*u9l0|#7nBOspswZ|%ugIt?_M71eP
zQ-rnABk<<3mv=V?^6ZU~05Y)y)qw3=9wFD|)h?8LrZ~{7P@;g+{{Xd)$E|dl=AUhC
z1<Z=1`SArqvv$M$KY_0=)n=bSjc#@qo+bgNUc)?nDqTg2na5rgDI}Lu(KH=V=7!^7
z65Mdj03e<RU(jZzxYru?8))vOX2R`Ii}Nmh`wa75XQk^mgc+ at z2ax56IM1zmPL&0e
z7UD~l*))r=w*LUSJ8{^G=c`5(F64R=lY}D`xrO3S64~g9FnF-gU at Nc$l6c9iO*h1C
zsOj=s*@+}r{%zpk06F|<@kWttsN6~?neMII?heD>aO;Z2gHp8c_L%(0tN;N>_3!Up
zP=z@~TUKK^)l*#BByGd2++2fic9=yOiY#z=&hLIJFItMy_RZyzCR>>B(S;*v!5GhO
z^%jw<T=<83?U`bQa)*Rq+2{!C$7-i?ulDHTx>f`am6RV^>!%J`d(O>vJvuN|tr~i+
z?9SJGKR&B&W3+-ck=xDRBM+35(NL|6Z2}vOItzR0%FO}*8XSN&j^`W<^`sHIszVjR
zK{7V&%nKZI*jFXuFB$8;ACh||mI)znLduJR%j?%X*IX)2tK@^!=EmWuVBfTsy~{HA
z(@N1b2;!F6FJ^!cWsCv~W8bZFUODlVhl%EmpwrAn0sZMaNhhxZwR6_?^XeA?K}Bb8
z;vjytTI+4I$fpe1$6Vl7t4|G1GgE&Tsq)n^Q=D8<v`^TN2cznLWsWiSdtd_ at 5pX>)
zzLg{k4w2#%x45^S;!9^|M1bzfvB+=!u&xin{{RqR at Z|SRJd#Y2i2ln6AG+E`Sb{mp
zIqT_5tbAy()GwK%(&TAl$ck|(j|1Eewd$vB$($tJ;(Z;VYE$dNMYN5P`Z8QvvK)H#
z#w(EV{{Y2(1H$b!t at Y5pzl*K5nhD7r6`T+N^&HpE{vr5>tm^jhMAz4i0DqDgWn at xu
z{8(*VteT6nrL^j>zbqF$N7kdRhH8sy?DVaB<DS2-Axl(;OR|g;<=ZGMPpM<niu27z
z`h8aJOS{RYxSC=MO*@u${7qJlV*{_2g$FsuA*x>>Tul>CgCGY03{@*y=CO+ChZ#JK
zmCG}5K=i48-Q`5F0z(1EzpX_*!r{~cSwFk$P{@EX1Sfl7HsPF8yWAtn%@~}A4$|U1
zymN|Kbp<#p6G&qr#yg(XmhvUs5~`86K3+k_F~=3Av!qcSi}IiYE%c+9O(fBN;itUv
z?jxC^by5r@@lsprEi8CqRDp~h1}i7+LS;r-NLA!xj(sYBJMAgv02Rr at Z8;SU+hM3T
z&@N at 2L*c at cjN`3bTjsb^BRC`+U<#t4mg+WkETA3d9ZzgfZV9<%cw`C)!y(3gwKr{#
zl`YFN%_MTftbcaHC51;437yKf9dLQ(nIj9A0bG^O%t_^GPL<`z3S2hQGF0(R+!rOT
z#kXI!Oa7;510!(AseqCr<@&ck*#?<!ddUNoQ at bHgrhTgOBxqyvGi#1_V}VKNN|!VD
zQ50Hw-MJI06jR0+lU8N2w^cEQ13a)%f-5re?JRBp6Zx*kb9)L=sV2fAW-k1h2=D1a
zk}g!IWhbF-TYahJtcAS_jAEb`>k!Svh1mBTZ55xWU0hs@@7n8(9AkH}s?st|63ynw
z#aJOx$o&4b5~!oAIw3{MKIzd7MJ=U`Qam02E7qHJsn2;Nskx<C{pRd{8qa$@ux~_Z
zANZNO4{C-h8Co~hH-{smXFpDA9Ii^F-m*0&Nm)c?+-LZ+j^CwJpHSZkiQCO^Fvtf5
zPpv*HE33jw6orV%0rR`?tG50d@>$)^OrtHlgO8x?LYA78>GHcHBG%){w`jgljl^mc
z at t@^Z?nH|KIc1eb-MvE&^==I+R?S$WIZ}IeKDBLZ?jm^AJe)AeX*-Hs_8+rXvNCLb
z(dLGB32avdagt3*_7sI*$aA&5vyaBK-%m534gx6Z6!2<DVT&!ZYo44QpPe-#+#-=n
z4-6-HJDcw0^s3UIw2ZWm6X%e<{{Z^cHOwt_HXjj2y at xrf@m<=9(ODJP1GlLl`(x6g
zQ%k8ar0nd7)ZE&m0kQB7(s|7!2xWz&kprH8)^$FWCEetlZBnU>vtyipN`mHiuHaqh
z!LUIHz#q<~O%|v%W?r|~UJDzWSl(YQQVYi!`B{fTew9WWu^`Hnkq9|B!OzyCEG?JF
zkR(btW>cP(Udb(zDN+JlmdPAr9 at IJMbZP99)sl<UTZe^Ffl>nkayjkvsim?OpEND7
zpPL1T@~X1OEYh5^Me^jxI^cBXtHRRVDuC`wHqgv+IO{@p)#xpqleuATQtlv<L`!6i
z;NxkbE`%<diDt)E<bEQmND|GYMJy!AAQs_!)nR#TR(a&PMYy&b=T<l>y?Rzss~D at u
z+u1vBp|uvJE)`^SQH-muDVMsSfUe?H<o+Ypvu3-ryjZ1akVgLiI4Qtk*nMf1TB>Ur
zirQ|7%!|31jy8gETvajj=<l)9PX{W`nQmQ{>o(0W8<?Mv_o%M5hO at JIoO2lfcFC%`
z%r_c6=482zVwrz)8pcS^x%I_HZ)1{Fx4D)dG1O%X4Zn}2c~$Z5Zv8iSoy!QImpWH6
zH4heF>FTb4o7;y$1Zdo=7VDo{$(vZ!<MCvM_QHE;QC1%*vZsQ1&#5`)v~_(Z8+}^R
z#uArJX)&3m+#OtTfDeA+nSZR^UU-3S3M^J>5R8HI1v$vcHH9RXzX<Q#;;N>lZe}84
zX;J?GX5E?H1+B}uF6Dl1`+mRudehPF6H<!y!v6qu!m_UCamr-pk76rNS4gDNr`4gI
zCXj6g2$V4k-My=Y(e5XC?=?82m0+F1DiC at D$s^XfRY_Ni<<X#$jXNc(I*$-(*4CDg
zMW)XzHj at C7mL^7o_iPTi^sIjj=vO*j${C|$8%R*R;~ruI)C1H10IyHdwRnW+CrM=`
zv$c9)92)HP8+|%0Fuao8EK?w0XU0KpiVv?Cu1U^Rqsb?Gn)^Tbeb}K5y`8&VT)cp!
z2RSZZYmvqm{PeAV581u_fm`erF3ubuy4?d0^WLfGpJcPUnj>z%Y`RhAsW?&qAa&`-
zUwY5hb%Uenm(~^y<Xmp~9zsZ0C!GF6^R7u=s<AxQf}HecRJK=oe9*-%=?NQ*`1yDk
z!1t~%T(rNkP}4I;Wqe`A3WMr9_p58-jY3@>Gic&uiv|4Cf=TO+{8X`PH$EUQ=DORR
z;IqFVe7t_5rV*7lc8=;*BRXnEewU~%_0q#6C^*L8NN`e60K*g885I_%1DlIt$lq(q
z#~+lL9dVT-*ELQ2M;@80UfSDB9pq^0uPVf0;I1~6>@)h+iycMu+uf}bwbKtb<<IWW
z<EP<Pq00H5#MG(F7i~(qt^WYpH4BJBJ%`y2 at 11didbi_N^|0?9jl{N`Na?od3=%o#
z^!;l?#P+88;==j1u~#<t5s&$47f{XXT2`^7u{Evf+#_HiVlW$wf)D9ds>U{UJm^AF
zo0EH-^z8bII&BW=_Yy=n$6=pJ^Sg@(uC?2{7|FI(ZQLMmbNoGcuTx(TomR~)N=X9S
z0EHSgR_oQV-`csK8TfYYD`(XH&TZ|ZPdX`-0p^k0itEGFN=_|W=S^61Q{1uP at nNCq
zrT|Cw^SAEibAy5WACEQD!>gvJ68X}IEee4wWw6TF^!~Nvw%XRE43e?(E<EKDG*^wn
z<M at H>ee2M?J)`KCme5}6SIsjk?T%|md5S#u&r|iRF*ICd&mmBnjBJeW5O{jxH=hDq
zi$xx9oUNQG<FD4cO-n_VE2|w+HE3+%D!ZgotAW=i9GdI3FBIHZ!*_3OG;3!Alo=gV
zdS~#dwBHfj>pDc5DZUb!aIwgVg-&`g>Ham*3iYYR&N_aE6ND!{^(#%|OWREn>GX8_
zIVv_pW5||HnHd~$>s)r5{iAVdCDgX2cvS5&#^H()_r6}Zs~Xm~HiMzxTgxyP%P*FO
z9B?_wABAi96Tw%Bp{A*Scr5MT5-b~ebt8^_>tzU0rsmq$?>Q$@P^zOIyPC2-hcAe2
z_Fvr0u*!ig<A0Rr92Oq<uA at QLtwx>p3wv~1D|q%5Mg+I_iS_3-G#AlpdSQ{#EH9%{
zu}tm8-o*CBaWAO1hTZ0gA%qrXWs8tWJ$d#0GhQ6!D($3tbkb4gdYw0mEF}KT5PhwZ
z8-&V|a0&kJvFTo8<6jHg*y)RX6pY?p(JV^aw;txYZF9#js_98 at YZsY+ZcL9Ff__{M
ze@^wwY2GfEQ+<-eOmY*101kf|?8DKmO<kHwbQ?}ukMOj%kEm&a8(}KRk3J?|W6w&x
ztxf*`2)r}H=Ff4a%Ex8~_ki^0)K#llq0xqZ!<%XMdABNdFz0X?^#;86S=UVdAZxoD
z`C^VnC?kHy)b{4Kry16(f3xOu*QpzGG)(sK-NvHJ#EBCp&9+1+dgOpV#-h5>q?%hR
zhr4U^%L!Eu?g1N5(<ZK3>H4MZ;JKd0)uD{8^o<wHeD^r*U6rghdSvEUgm&vNA<>YW
zkUFpb09v|dTiG<0ujFS(4=h7%t9|D=Yk6{)*6>@baS(U1FxobbyN|COD^FJOnoLaT
zVI9Ah@}&03^Q(8={{ZT)C&hQyLsq)Hu->tf7kcEULC7QCtZ63h%S}yIX<i>VlJY+b
z!Nx$xH8pU`qg7h}06U)U4;LIQPi0Yj%XTxZwxxNfMC8g;$ghlpgUK1Dc%#DU;%zDQ
z7~u};1clIT8#B)b>shyVpJojr+{JMtp>=m09(rx<T+jR^I^<UJ*rnS?Ym5j9`Ei`%
z+*frhH1wPvsPJ*P*h;HyT{b^f(G}reBg=)9V5<DQ<AYpH&YLt+F=RX(G3*U?dR3L(
z{-RCv=2*gp9#P02P&!w$r-U@^Uqg0i;<ih+Mt7Zdg>d)-k;x;Usjj)=))vZoo(>|U
zF%>Te*!8&$#^wl0COO^4KMH-czI=v3B7muaqp39(onb4;#hsfYkVbzq+NWD{2z7`o
z3{E$mNw0Cp?Ugrc5=D0`QOZjdxBed0UgF{h9%DC|Ha=a$u4%(c5|%R0n1>vUWRuNL
zacg9jtXf<!052UY7dWn at dnw;dMTo=^91*y$0goSrJtdJR4ZCj9ox`E3vspzwq-zQn
zP<n%cJ?eC~Ap-1Euw!v!%^uY)8E*{QzQZl<)@#Z42E<@|-I|=YCRe~vHeloo at lK1%
zia7*>aQ^6Q(!qBfj_s(B at 8u_x_)_+<dji8sJ0aH=uE>TcF&iDjBb?HhWijkA$TxKi
zK*dcSqRv=GubsKidQlIZADAZL68z42<J{EyRTD>t=F&)sY<#%(Mp0OD%Exf2Vberj
zW+&Q=GH`lx+N(!>1gPc)d1F at Ou6e5wxt3kh89bHhik#!|sFh{VsNtTR%$iGhE#LQ(
zKLepWeQMM<R#J~BNLg2!%=xZoAV#l)xbGj8T8`3E<(Lr&8OR)(pJ?rPgP|0yH*-<i
z+RifjvIi&Ss*`Hc-YHliA#s3QVEt*4ME?M1Ssopz-`;Mg=~NO+c&>v;@|IJPv~l#R
z=aN@!N{udx<d)IQu3=Xp$;Zq$AI_~@#_u5wa{gps4WGh&>67Zw%obF4^3}HNZV%R;
zZ|1p~6_Naw<)u{lewp>Gol9$S)HV2Z6zLGo%_NKqxaV#%YC)t35lSO60gwT~Kcys~
zPZFdOvtXUsY#*geXH$s$=3X#S4o-i<q1Inyu19M>xQxUYq((UvnC?E9`kI`wD##AV
z at J7#=XY%x_FkVeOjGj{>0fpSz6(^f at 6q_aTrjHx3v<@m=Nj0W`mqg2M%J6|Tz=&`|
z#=EoaQAvKVg=Z4%9ZZ}Wrz?ac+sv;Q-erE?!m;MRHzlHt9hmS&GlN$dIWKvcy*5`m
zIPWI8U|@(v0Qro7ijPs2OQ(t<KK}rl7+;qM+|pTD&Gsd?00}TS&eMZT`x$`>O(?gC
zn at 4Ko@O^73NvkNkn?^TUs|y|M^D83~s;#y_2TWF^m*FH+xX8PB;|KJpn8h8j7UO#p
z#z^Pi6;|rymLx}noc{pJMK~2orJk&nNp>y`Mp==+dzT=9r>N(O1cXz#SewizaV&fL
zRcmQs(+8b2WGivKj~|9;4=vKOKs?1PPQr3UVeMOP%;<EZ1f7PIX;?_C at p>~h(dcNJ
zJ54IsBvJ+$+~E##PrXpOxVYaWmnBBulp>K?mNw`mmPK}yvB-}+FV>woUHjUOO7YRy
z(z at 0ohH(*%;}Q^noD#&<dyILp1ci%^qdXc*o$|7>MhvF|o^U-yF|S3NGdoDf87R3J
z9>4u+zH44h6Sb6HrH0bp<ZhloyH0pH?b4g6T|*O%ra0sYv=v?g{VJULf;vO9dV+R<
zPYgYAS&yvQ#jHKFf+>-kX$PqJLj(OP9bS0rxe76-JI`aHxHDMBmlrUs>KEi>=OeNI
z0P9s7J$T*(2I6r76)dC<pl3Cged77wN-U7OZY5F%8;?WR{4150ON2pd=15DY-B8_m
z&*hrstBGzZFlMU{FN(##82GjIiwgr`ZeWsl7+s<a at K^v(rvvq at S#=w`+k3|Y&z4d=
z%&#mxE317r<~tX;do_v~6^3IOBpy#+rDo~ctWj7@*02XL0>HB15_#i2dj6G)o8|6f
z94nOl=d1h-&knTuwcOTazQ&fZh9W`Ee;>lSy(aoU30 at _{h8FXY=1IHeIL`oQp1mu9
zyP9Y<E4#Cp9z`L*=LNbS=UU4I9w5`uYAKs^h%j>aK4 at TbpP;U4^p#B{{nl$k87w{M
zwYJA;{h at WIS^#E;Rasf&jV_aC+1Q`Ef==!@_Qi5uGu0w(V#+|V+s^jLCJ~LGFejhn
zDx5l<$~MVLzT#d!cVr%%)(?&zX4TTw*a at MD6ook%Y%yQ1F<8)`p;JUyyj0X2j+eu_
zwAzJ~vKW?WyvAQJ{{RR-Fdwg4zv1mN=385vTgCGH)4fPw#DIVL_0M=|CbY7>UnX3#
z{IR#n3uBBP)vMsyS_mb5Lk&8U`?Yd*gVg4_YD!e1+%z+zKW`N3JDPCae`aZ#g{72!
zSa?_~C*KS>+DYx#isN-J6aAjX6*nZbU at pb^f{vWmLE;Tntu18o0?yuNQGxQD<onid
zgJO>V0K|gXw8bW2``H-$sSxFf9rM%itESW<=pr#Rxuld>z7K-q#Q_91j8$;XWIIP*
zFntYrRfDa|G!v?b;~}AhjDe5h`sOu^bZNA^{Z_)p(V(#riDG1Lyt{q*;P$J26uwu}
zV6mGqUlrbFn~<#Bg+A5gSF0Mb=C+3MbEcyTk{_sBNnxkWeJU2Xd6{s(bSGXt&wBGO
z7wWgZAcZBjVzWlZHVnUa1aR0q`&Xk}_<~4mZ*6a-M4C6iiFw+3uh$^<t}QhyXs+1Y
z*(!^z%1-`wW3C7DtE0_sZe5Pr_-}0+Mph~4`qjO at W4TFMK%>owWR`F5XSZ%ErP82}
zQ at ct_ERfiNl`y_}^(U?et!LP+wwna6BdyvbKQm6BF=9Z;BaSNNp1M}}C88uY=^4ub
zm382Zem!WFMDF6XIMq4fsdC7J!;WRqF10uoF>yPxf+ktQo*NyH0;uSkkM^?2t#X$d
zjDIwi>~_jA=z1LbS5;{&7WR`(3az9&JlLd6C_$CC6WpA~6|3l$*4Gf~cKUlW%PO7l
zPu!8oU*Z|ZO374J8-vj3gcl-7okp*y+v%1Fq_C25MA7GyfH8_wa*L-W>rJvdK&;ux
z3cuscVc%RNl0BW|KwXExhIiZaBmV%eNu=s;dmORJ1H}}1UnW6-{PxMm<5=>0w?x#3
zv#6P7_g5Ep*9UFIv=b2`%8~r#P61^Hty%bm;?J at 8VCj?HE!C(2ZIzI#?E at Q!r?25u
zE%iG%wHe~L-3+dxL<cXlbjPsB=~aAbrwj2k at wt0*8vLq&V;%8b^x&l^b1e>vzUsU;
zIQ=J8veeoap3I2ClxHCAJQ3H{uiD%{o&Jq3$fE%jOArs#RSh1}DB)2(+^VSC<F!x~
zRllut657c<oY#igT|B+J7n765Km-wwU#)u;+Sv1>S}}rMN;*%7B-3tPXSYeWNy{qv
ztGB*Kp{|<$07F^yukAZ+S~z5yK(Sh?kfamTdJsKpgz%@s-9uTkmh)CKLueeWxKdYs
zGtbc1q4-n7t9=}6d34KR04686KR)bZ1K4p~71U|_%3E%8LCU1Q6PUR8eXi=d?StM~
zNgk6F;JwO`f}j(UI*gtxtD9A~)wKz9)SN*iJ6SD=$RvLcu{gl3eLm*q##!Oii@|K~
zl~g$;0mcaQHOqLa%-ZTJE|a5=vP!JYBZHQ~$s at nGuQH{7ZzUON+Q(FAIHx%7bec|+
z43o9>%u_`ZN3+VEc7;ylj+ytW8g7jPPxdQmhm`U&oczS(`kKy%#P=7vCDPlvJF4vs
zDwD_4)}!#|q326DJEN6ZLI9;kF at uBKn#rlbIb7|bZ4`HZfkO93w(yp>EX#1p=vWx~
zGcJ0zdsbD>v2ANOk!@pZg#eEweo}LgN%i&mSAXKW4I{)O?H37fvmn^d&L!udJ;<*f
z)U^+=!+*@Iw&W~1QUN}MSFeSu3`AA$&D74dKVaPSv-`&Q<HqLW3k1yxI5S2LKx)R&
zuH?T-+Ia2p8Vqktk~7qH<J8s_o&BZuqXe3btjiJ;z1NX5XCNPH+?U3&TiwrZr&~vD
zr96RzQhdw+?Vh;yuU=F=oH;4SQ^i&J>U&8_$#gqE4qNS>d11J91#(e-Rbz|{X05)r
z4c&z4C^u^gZCp47Px~XU){QP`ue4><<Gop0HdPSkVN!Z<IW?W*8!L-@{{S{SI9f0U
zXSaX7>yRtUrA{)bY4kl`YwmlcEgsozY<|yjzEzZ~yA0WP1m`?-$E9I-&%{DoSZt!W
zc at p0sZ&JK^V!D`FZ!AHxf(TbXD4EEAOb_$LUedlC+}_?@NivD<6;+lc0n$8=;?G|E
z*ITVdi|47(+0v<29JKnLF5!|`=V>2iKItTL>6)v1bdpWx1GM7+E^BAv4*fq at p46)D
z4T2Y-^sY|cCc3&rAhu6CdVyZ;DMqvu*39_|^xYbcn|mIU at YV|*e&XiP+)HV4 at Hg+b
z1yFK2`h#7iwVtH*>7-vst!^bR4a}r~dkhiVjD9u6cw at lRt^K9Wn=3S>`Wz9Dao)Xg
z5wv?LEp-%GP&j2so0M!EV0P!VeC|F=+FCNxw^Hd+mG5KGroIZR3Lhz?8$sR9YV2{e
z5vXaEf(}myHRhMTDY&|pCV@|u4nfaqjCh{$t>0l{-*mn|&THLryWI93Hi}lZr>Mlg
zYPaVN66Yix-;GBsn^jOq1S&ajm<#o+UkB^9sic`N-Qx2Y4hR9qIrkj}T(s0JzRF~R
zIb#m&NN=BkSig5^T<KM#JuF}QRE99H&F8On9-m5t24X>ATm7 at h9>S{H>(;XW0IVx-
zCNgu5D}Eh9)$N(mD8Se-;c`zMGhDSNRXZIqog}=>GjBDtjN*OBeqj>|(26v<fpfk$
z9RdsxYZFozQ&`RAOpzRAL-0jQrFqg?M!TVR3Km%r!2sjdo1ZE`s@=5L%;+o(7BJ1`
z*-JdG`4dYa;CldRlFfA*Ka at m~xWgelAE-4-*)Htlc?^O_*mkIV{RS!<6LWQwa*DDO
zk^^vkD7Egd_lebyQti86Ll)a;kqG<7BmNa`Rgqx~m&q&jG(AVxH5KNUsH9Ms8Z?X@
z#O?!+=TY9vCCqU%1k72%MIW!NV$+PT7B^p-Hsv;~rAtkSj|{U&yNh)Tj>fCp-dxNC
zP%Av0enrUwtLd6tl3Ph5O&SO2n}+74WES!jkO>^A#^Zvx?@dly##b?F4eG2|m30P*
z3&wC87~DTmnugX3!+DtmP{ew(9-oI=uMOqGOE=E%lgw({b4&J-adQ^Sc5DHVNk5sZ
zi>b=o><(~NQ7?&W1k!n)a7aJ|rroUHLH%kA%}&^u<BACe)AEwUf@?<YZgnKyQ6gc<
zi~y>*=mll9yyjw(M5w=c8+LJyq~fuRR?@hoSw&tbw9&}q2>wRKS%DQ&SZ+*!2J+rR
zfb4ORS7Orky2#fObMq3doR4p6wf0!w09*Nkcixq<SK7NAWRiA9F|Qf*cM=^sc-3B2
zZNYYqa=%_GD~P1R?0mW4hF)`1>UyojPA#Cuz_`M7sdVHsr<CynIE=PuBo;a7D>{|k
z6tuZ;r5d-Bb|76Y(QM>Pxl2nS&JbjS?NdPowx4bUExpDLN&s8jn#`D8YAE*6z{@hR
z91MQ7Z&Y}+jXnroBLv|GnI_<QJ*qyj%=ItW#y<&U$t>kvBVi%q=3qGWtm!_|NnbO~
zlXeQ^k}9>HsWg*;ZpKGJ)Z-kAu`^EuWR(I#&hg%{_N_|qsk%-3rKl|lVrN2wsn|$0
z6I)tE_2$QL{%Zw3Tb at Am#YLuSGh7FbP5%HQ7s&vF?e(bPzB0^8!4pZ at okoB9)m+WX
zSMmh8b~UD!+C&k_63RMZ(<J&+Ex at rNK*y8L91?x7DvkBz*PBB}984FIymL`$rs6qY
z?HgnRgelEqIm-93P+B!|T}lgUi-JrM-AKJv`tkIrj8U6#EO0HUBb6h8_<Gg5i$t|8
zKF0-t<8SF$I>(4U$f7v|HQ8)I2si}excn<sCk4#Vr6|c-QnD9Nxlgr1hE~BCP%=3m
zPpv^c{E=)Z?7ub}b~hY$$G@#*>mDPyT{vyGRk~+YWo7w?JmdUpD%(_s=KA7WjH_G7
zBr46%3xY`Yr|s^ONXL`kQF}h7#*=w8SJ!EK51kdjl4vA9^33!A`*G9Wxp*uZU1$4R
zSwpXySj0IjGlBH&S_1YbpUSscgFZ_M!5QyYVvA4H74PHy^w&`p^0W6(8RNG#h2<-|
z>)7g0rAo?6o6KxF^|i`1jopX=!C0C+sUz$CYZBj57QQCa?WFRIF~n3TIaLSO-- at HH
zt?KHK&dSl+GAqRBLE!O$kD;nMEHUa{C0TV_vu9)^D$J>tI3Fkj{jXZeH1v1dtqv?s
zH`-5 at nzKzF!KZ3gdbRbfly|Y)IFHLn?igjk1QtEN!nv;$cs}08c<rLUj7|uSXk$_^
zz<!|CKZveU3DhYx=!{pbD}<dJbL<^I4o~G(wHwD at 5TtE1vbNK@Nsr81*EP!uQjF54
zCYNS)Pa6lMma9vYwd`2v-(*P@$C;8pjZQKF{b}9~d#h`;xt_)DtqN at sNJ=XM)Pvam
z6>8>tZC>U%-eGSl=aRih=t%EVYE9<YLnLy$HuMks!c_X5y@$1Sw5`cK+2&NGIo9WI
zL at o8srKQ5x5u`>fggP<@0FlamUBz=gA=Z;qd#kAQ^tW=L$#U*~L&guaY)viRu$M5(
zuRXy8MHDDV!r=D&Gf+sMZnK&zwwugY!o9l5h1-rtuUv3*S4q>2OC_mQDY;$T<h(zx
zYI>%n8J^%>S+B~`!pA4y`Ey-_8oY3`7~t8#-g0rl>F?7uTS?Vybjyc;t<AgaP+Hx8
ztv=6Cwh><6vYUm4xbqH1)4=1oHNGO!e73cYYH3l{PjgP=NW0Xog{Gf_afOkxfJQQZ
zpg*l|{ijawwSj9?dyAmkE at XgZ!B)WlcNypNtp5NBYg0#{OD&8BZBkZ!ilZkAGlBF2
z^sSv1_eRqG8zuehaotG5S+}%hW=oE_!R=liCUdfj+sO2xHE7B^vX;5xD{FN&<8x2t
zw6jVXn*bgZ4!~!psjhoP)(z4%<4DrHY^)=U^2?sM_4TZ4sdWqGTf0=ua<OA^7|7d<
zw%|MZW~_K;NxXHQb7vz)26MM>9dLgETE>K93!Y_KlB-cGT-EV3H at EjUGCZ(8VaXVW
zs5$BGas27JPlsB=NrvX}#IwaF>=1Z9nZ_uy#-V>BWxRxKgtKhP^dC+uQ&zf;`Wd55
z(n`ZBKs;li&*mvroT8&jFVy;6Ejc)<i(;kZcFcz1ph<1W^5)z~Q=eRYYC8)!v>Vlp
z%D$fq?u;1$J0H|~dR04(8Sf;93$|edpE2Z(qz*cE=k%&@Ez4>VX?G=V^x4$LllB9~
z<0N490AO|Fno1Y<6VzCXHfn3r+Ub+PZ{?2S%2{!5Z at 1)Z4yPS|8l!RJ8(9(v#k<cC
z%z{n0Wh&n;04Ive at m{?h-jNoJ(LdXv0pfU at I6lXq&vH6qv$TB@>c-#gm)7z}Xg0=o
zu~NsYVD|>P>EWsJsZ>1GH3{;^{utGh#CAHixn{bxnYpx-5iwRM@)CGEx{P{PSu}bo
zYHKxv%q*phD%wq-+_Ib=PhQ`haGJ1dsiV2HjsmGF<8u{NOb*@Z>6S~V?wRf(mPJt_
z01Ixx>@ol~HL1c;T$%+pDb#Lm>!H!=-W#>KoZMTTvm7_ekWV=xplD;h(;5w~vod6I
za0u_uCZFMZn01!T{F2WVyMW6Z`Cxyu{(m}ui(rn`rhPtX8rD{SCf$Y at dJOt!y>qIZ
ziAGJ_=!6}d;jzbB_+(mKy3aAhq?V8myY#ENcAF>mm8@|won$0SbkCnDKpR_crg+D-
zU4>-TbmI^~ZE{A?22NOX&2%y7Q`%W**7`_Szqof>yR`s}4xoEy`Bz<hO69b-JoQ7`
zyY$@Y-&IXZNx8C;SRs+3F&NvBryLdS&m>l6fo3#~DtoKwjo+6hB1yjE`{UOcs>4dR
z(H<*{-zkNx+st6#pO+c>1E0>YJV)bH*G$W$+*`>cN6ZjA5L?$H{42wZB{bt5Z at WDe
zXhWK6-HRIEh%IgWMHZqQ!)4_=q;es`zAy*S=QYG%d_lX^uI*sG)y=eE{D#<WD1A<9
z&bM=Wdpt%Kx1KQ$Ss3A%6UYOnYQfWdD-VgU<uXp1S&c%((npZ)dgOg8_ko9`mFj<)
zl&jU8KX<z|^}G2jEtSr+zh`m0MprbB$JF+%4FX>#*b at cB%_z^9Uke#MdGB2PpM-S%
zGFejcL#oO-4y;Dc!nzxYZojkQ+I*OXIT4eA{x!7e#V%O8{sX1W8T;zriLHI8%rvLb
zt)+X(wv>Y`PnD2K$Mdcq#WsoH=w`N(d1fxYV*=S%e%S}ox1-hWG|_o;r^*e&#uTgI
z?NE7P at 9kU%i*K*>+wJ!YxTyu14pa`AK9x91QjKdbgfUfDCW~H&5qT8JDR~$I{{T6|
zaC7P_L&G{?xYT2kU8W(+7W=<U(Wq$Bv$19n#v5))&*@a7Q(-rftYq($as_=w`QvE4
zPnhKPbuTrc-RSz;_;zD+Y5^AQmPHvGy9^$ps9ku#Yd3CXh2y%DablotVb>V#OQWck
zG=UwXk&f-p&>vInR94a8xS7&GZvp=RT8uW4*0>!wDK{ml)|*mNrtEbK;tbjdEyJp+
zg0AWpZaF(^r<O#6!WTNmi{cBoZlBao8Hg at ajOTXmUNegFeREr#ZDE6Y?-}`*kF9do
zdiB!ojU|69 at Kl_GT(ZDQwVHPPZgx*GQGW8j;4 at m(t~CqEB)FBPke+02rkBIgyc&#B
z at s&KO?mO08lQgF%si`gH2<pUV2a(e??<l1nRDArT<t}Hr?b<(xWjB`b+4)wtA9(@;
z$n3S+>H757Vo8z+uCAhBlNnzO;DeUw#t-tY8{zke^kk?K%$umeWJ#MLPBFpj-!<qS
z64ULk{{XcNN><`U9%OPh0X<789X;#hag@@NyiZDmr8jo<EMGL2-d-XRMu$6<ae-0W
zTFrGhY=WV&u>c%*{VSq_L4wgA%#v4#5&NyAAI`7o+Af at R0VdZ~OcR#JKK1IkyPHb~
zJEcFF$m%w6LJ}ECTpXcH at tWDv<#f}Ep?Me#Dlg14_<bv^y3_3-Wx03~R0C*sImh8s
zwyr0D!whjk$bMfX0+KuQ9Mn0=>M0#G at aj7AFC&_V!dE)_B<^Cd%5pZ~pTf25bcyts
z7T?WjTX8$SwYhO at iE1uI!brkB%?io$0rbaTYONzIEY7pC@;`(gdvippLM+mj6(;8Q
zWhpe#b^f#|azHA?kVVqE4Mxt|;?6s3dsx*%f6Fx5$a`e|6$p6z{{Y_H0-JXRbirTB
zs at z^(t+UJn2)~A1qyz8GWm0jeX1W at yQ+&6*#kJESvJdve^Q2S9&A_Yodv2{sj~T}U
zZVhDZcOFwmJhK;-v&bDuJXMSPXN^Peefz%RgU{Bc6R6#!Z8%ekQjUgQ#-Xd(NLD*=
zRfZ7c9MkS(nZkMSfcXQa27B-;s<WEKA&n+LpeM}gH#U7a=|jb7JA1TbJWR!doG}>f
zTF2ddt|u(L<?$TOqo-;*t0TiBIgABWBNeCpfvU|Np}BDzfJ3HvKKQNstJJet<wq((
z!p5VDruzGb^9nF0?-DbbwM{EF?P4PdYi({<xY82NG*xwy;GBjBClzYTPn}L0RS_{5
z108A^?yc<STZw`U;~|^B(wcRvSshk6Q`ZV{n$|I=E8W~2CCa%XY|U>4vZ;04M>*|G
zo-)?VJf$Iya5y9y!MfJfhVe0S2N95V)p>kQ;zfk1eC1D-RO{1&vPH)OR-)Y2GeC^7
zJfSum70v+q)myD?Ah}4R%*Uw5zk17W&$Y=RXbI#V+5Bp2Xf9%yx~M9C=;_DSxa#70
zoujKe>ER<zH<Gv9CDhS9&h4&}4vPN(bdLEodfUip0T;2EitWLCk?bm!&Fs>?QifRz
zx!$C7A71rF>e|KFn8A)fa#%id=~?sCdP*ZyVBV5u_07!bA%Ozmk+`#dxu}}j9Y at TD
zc;%Hy$Cw<bA4<))fu%<Br!dM}40E4;YTOoAntD8j;wDmix!u?D6jYX+*3?j at ljU-_
zi=iwH<l9^rB~n<4dN}L}6(q}Za0^KjGsnRz#^Ktu4&>P=ky;{1D~yx))_Y#bXl05_
zmy~V{IUd5VS=qjaG at _#?Vhc%{(^U#nY&hkQ9Qz7owal+~Hu9;5ZLSx$YGn5?t6P1c
zu`7^(e-=-z8lQ-?{Q%m`%qLk~!?jP{z$Blpa4Vs>H+IY&M-{%r?|8eN%9#!^oSwC2
z+gnJ|;v|Vyc=oXesL!o=<lZd2zPjB#xkzR~y%BojJu%;<Ph~MP-boClZkZG`bGHO%
zzrA_WtH|t*sxtQ4TFBk;4~eFbq=_?+Br_1b27CM02jUMA9b0V77|*@JGIU&e`f*(a
z+^J<7Lvba%(v&2{17L*dlaqt&YnqC~`$<;P(k9y=ED7a_>67W+vZpR-Hun4sF^W{$
z<afEbZL3*ob{6R at tsI*`W at FCmbIo<S9q)&uyoK&9gcm6bM4$pi!x7F&^&Hof-&-3Y
zZ*9zTLl)@)IU$aC{HuRWYin_BB$m+KTsbaeV~;Fj0FQd!ttB;Riw%l(<mpvg9fUGN
zbEe-hK)y;8LIDK{<R7j(RxR8yTiZ=Eu!nR*i6c1411B|AHJdp#J7Cu`G|w*C6bvFM
z$j)=mU(%PyzA}eVm-{~1Oi^2ACjbn~j)#i#nyE^pVFl{WiujsQrq^SV6F#Z8KoU_H
zjgCt<eDEqj%G#n1C(44`df*O6*FEbwW>>nB(lI0j)6I`yz{uqF{A$LGmSP!a)MO~j
z^CXe6Q<KIpI at hxs#UDFPZAn|Hy=ABiyNRNPKQ1UfRN00qzJosG^r{m6{`y&DNetn$
zwGSnIKN_1$yk8IA&37DWb%@xkEC4weAm_bfTzH=5O+;#G39~MDFl0Ev9D)x}eMNJ7
zFMY`)vDNmp)MEB$Z*Sm;Be9NDWt!^&lkE+;a(eFc`c`$d<+Qq#&<A+}VlOF%0LN4K
znq->pt!To^NW at V{QI*4dg->z#RMxhzTHQ6q5=)GX%IUjq2OWQ%5vL~aH*?lfrO3US
zEVqbGnR at s7L;+=J#^pS1YytA){nJj1TGISUsau=-HMO5>87JCX%p{U`p1n_M%(~UB
zqKPfzNYO*>Tpawxvd8JoT(-P6TVaCD3?LD6a!{|BI{dYjYA{cl8}~7c+<q%E#=GHr
ze-CNG^-&ov6e>tuo- at I~>Fa}B)V>};Z3 at 94Np4Q(Sr`RnQ_1`@R{VLYNpU5tX)Yl0
z)l5pmk=Jqj2pFbV+Y8xk?j at c`)&&Zijz&6T6zI9Qr#WhKN}W2D++1%Ii<Ud&J_)h7
z`y)oz*-(=co^$*khgxOUseP+WBV9aFL3aLQ%nuO*jyC#x3TCI_h_y%}kldqkUnn;c
zbI=b?wXWJL=;G4WdogIP>PojP>))SR&8kwB+q{nWQmM at s1!!2SZJQX<-2o7>AvUH9
zW4&l-zA><iQkK{`X_SQ}6LvkYdYZYdcxD4TTETmEm5Am=QI?Glzd}WD8iZ4Ms$qb|
zA~%+ at g~2Br9Q)#>Q6-30ZJl)_>9o>4z9iGNzX at Gg-oU7s6UTH0*G9?40nT&K^HOO4
z01mW$PfwcW-u6|xk}yI^GKE$g05}^#BxkL8r-!1OOue)h`<~sT9%ZVr4$i=UdB+*g
zUX{|p;%PK(T1ep&-9s2CT_p+TAL7Wt1KeY^XjrTzXf9kmL(#*}pJ?iN_rxt){{X>$
zC%Dot;wJGG49bm=xn4*<pW{{6P?_!RE?4(*-8Yo0z~?<rpui%vd|_u6x#G0c^*d#T
z-erw3ZiUzocqD!UHLL#s2(svjXf14Rr4zR6hgiN?Uq3Ggo}A{r%5sEbO-tgor)_R$
zQQcdyi{cGCOtSk7)^Mw8NtGbB6b;y6gV(NV-jAw2xoLH!>vyGWB^iW7nGrBK3=dwM
zRlgCrj9bZnEN~QZ1F#B5ILY^_lSibx!2`^u;#b~<CfFZ6un!}>U3uCTdYp=!YF+IA
z05Q7uhijwhGDJ$mvLG;BO%pUSI)n0L4iCSra<KSTeN#x(5?jBqOPJm!D}cRA4Wx8F
zxvth*r_k0GG7XA$sCV7BJRJ5Ws%tlK>UOsfvi!jct0zQZ&=d9TSkS93uUFLPoEnmb
z);SG7PSkuYto at cr68<(pBHTu$ckz>edE>okzlkE&v~vSp?jekew;5mIBi9)96?092
zuBNs7W2D$P^A8M%90BW8d_b1o9+X<y#cL$`m?<o70c9P?Kf-baZz;yDPFKHjBT`i0
z<IuC<O+jbZP+O}JXjf at 6W;P__oOkcfdi1XmYH?_u82e722ic~EV=RcE5?G#B=y~a0
zU*PRN)5Fq5sKAmy^G~}0w_-EF+&ux$=}>sf#S`h4msYaN6!JewVQhJxg@>=wxiK`p
zv0W%^YlfdKK53M7{{R?8e+|*UilSMrGazBxSq3_KV!8bjK!aAq`dOad^beFuK at 7*Q
zHA}+LU0>=%I=#qP$znMOJx{f4Hr*pzwz;+@<&d8;706Ux$0MzK3X-7*7)sCZIVwrw
z>L%8QqNjp%?K?$;o0Ima6gx{XC(PrJK9$Ytm)CJ5aR?R`as))E1M8ZWJFCrB&eA3f
zK|WB~mUr*>exI#sc$-PKw$ZHGX{EP`8CAT at ZVCo_^z`dqZ8<tqN~61M^yf`DT9UPl
zj{sTDb*sDE$Pl%<xDp-|$$(V)AO5{}J|OV~Q1~x?x_VvMA!NBm85p|Ya65rmnijEW
zbo7G4!dr;IZ!$;79=~{Z>G{@ojxI*Oq0gsBaJKR%{JXd%k+YM?>(?C*YUiuXh{Rq>
z$sKfJs8P}CVQRYWk1P*yr|yk$B^d`9Y at Mt<xgV8s5L~X=uHGk#8NOC!!9(hK?Vi+l
zn$P|at3=aoZRNAQniMX;<T3T<q4lm;U)G~bTWec+<nqdX at mL%K{cGs3)E6(f?%z|v
zsfmkjQ{63>b0bsKCzkeA5*Lg%0aMg_Rb;(XxKdG>NaSaeP!I%}SHS+29MY_g0`ZRZ
z?kJ?JeAK4q+?lUqt{ZPXN!*SxwB(<{wWGLM^uaDeB9OaRJAwDEOYH^)3K4VHb~&fT
zCFDoUPcc-D#~lc%a7?IFaeC}syVWrqvAUOXcz&23m4_p4$vsV7+S--ck1-LL<9vr`
z9^}@A&x0?bv-?zX+ugx|x!{x?r_!C{9n9OiIq;<YD&3 at hbm*R^*1lTkax(91?IQq#
z-lBraRk>L9A27DiJ?gH6dVhnht)6c=B6!aLq50H|VTk&5uW9&g;d0lh5<GA`B+Bm1
zlOp5gQIB40!dpevd^@Q`lG}MRz at fIn``0)fdE^jl=#4TPm~^XcLe3Oa^3i5sa944{
z;2ucMLB~q@%umI+>tPo+yJM$&g|~)SgGnHAKZljgR~l~gCu=vOG3sk3!k+I`n>Q@>
z!3W(O6YpIvoo;RIk~W(l=NryXt!}W=-bc{Ytq5$&v1ylb+j&H+5p4hha%)3JiU^&f
zV6rqrg1sB-Qb7sbBh4qsZ~)IyQrlcugCbhUk<3X97-v69xk4#j{{X=`BP+W_T(W-2
zD>0HXsQ6K|@J(BbNVSbZ!WCCMR&=B8Zk=ORBbFR{aaR`Pv;$?zfWO2CdeSh1in=*!
z%C9zzlJ8Hoy0 at 7?1=EAi^Qa at 41)A9T$m_sp$>Sg6Sn+C5X~sZ`?j&=Tcgbe_X)I=z
z*t<&+VC|ojbf}jkmpe9v8DE&xhFe2CgJ5|h04lFQYE`<Gu8^`O&*B|xBT$wr3B1*j
z7m~#twuAW8Csek$J62F+3zi}97xAo|p-)rgPEyjw{Hq*=iB(b1joo>wl4_Aaf)oNE
zIS10PVV(<l+`}NAPLG4Unwi71s~;(`*pt$#ScubGSl$>lDQ;^vp%ulmY%1g&hCjlx
zr`7Q~#&?3;?*oDLsN}g)<~5K)0R}}+#-Kw0Lee;s4an<QI-b+a=!F$e%g~<WSzSoK
z=^lFyxD`5E!h>zCzSlv^ZO_#6P)R+rtb#O-Ilv%=10&M1<y)KSB({#|!!n(_mAMBU
zDwJ1LX6I*Q*!@Q0>rI)N5oC~_3v#3IsVwEx9#JzrxsN2Wp&17iZr8(iPb$RFeWln8
z%F+T4xT$XRR<MG2pjBD%gC6{6*B-UYQnX|4#in(_GM4J)X};Te3ZFS)-<1(YMse!Z
zv1_MZOKlWhc;6c5W=BpvdRI55Opbh)0xOb2?H;+n=C(XXq}*xn3y1Fz;5!5I=N%0a
zsR*>TW^NAeT?-N4G-<d;41o(NEW4OuuiENbRQr|SjbtHmc75a6VzWFS;rssp87!Y>
zghOc>@0#vF!X at +>9Z#^QUg$QqSMHx^iP{+oMq}k%k4oZ|Xv%z%m%LVr>8%ZGogPBc
zn`H^e`AGqZ$Dyu%cqCK2q=8`I#jvm~?@;O*rQMg4=0EPE&c*IYs(R0jWwbWYfT`w0
zS&NL2dsk#Vv_FXMk2bXE!Y)yEX05)v1K<AuXPD(?NWpGKGoRrfl|^x=+-VU!mr;aJ
zz#(Dta(ye$A=l-S{7oB}rt>mb553Te>F+f;_1lD7W&2X2EYh?6+zz1oWY(%&o2}0>
zIFD)6<-BjIPjli3Wb;@&j1>;-VL`yp*OOT~rQDXOX9C=L at _DTx2kwR>ay$0#TAIG8
zEta<|k=r{=F^L at mE=l7II(<6Ux}@5ITPCLz3us%;Nie2TNWsDC2eI_!%`4rbp=IuM
zZZ7g<8dk9`nQe1(bpaR~SLW&)xcX!DsTS(uOM`ldAa=mme)t&s$LpH8Exg*QNqr58
zYbX%qkq*E!jDmXeS*<nUnWS4Oq=(Ag<|qXuU~m_n<BH_G9NvjPQ`V_!ZZziap|#>$
z3q#@9^%!n9YLgv{5CDfj4nuMDJXZ^8s^8g|mey^kpbRE6$?xq_-RiU5%?e7U0*qv6
z7;w4BAbwS2Pt`5$<!z9t4!L5>)Ou&@T@>Ksc)xh@=UK}Wq^yvd_N4P_5Qf;(6&Wjx
zoch%>ad-WnbsSz%*oR at 1eb)Rc8SO at +c<Tgm?~t4+IM3r=z2W}=hVd?y0k|sqipE)2
zBq`5te0%kxyy1q5a?t0Z>s7=#MDndNc?P18O&doj;gU7ycYf7dPqv=_08+b>b`eOV
zIS#la6M^*l){e8UE}waG46&PQo==@3;5f<1Tz<8CS at AHs@ST;Ue`Yg=2591NWK|z@
zF#|op=84W}MoDg6Of*t%Z{{AiJbFd!_UcjRjlmLy<f#L{asD-prrfZ3OwEY-AP>;~
zbq=K%p89DLOa??HLwwmBaZ<@^<&>64i?5aw%L63i`tx1aN-F1zH}5+u8dmpGTC`I-
zLKs8~jPOSzJomt at E32D*b{OH3bulsfsybj`5PJ+(B&q$OaXc^|J*{T*0(32d$Q_Rd
zrFHs6wU)7?Cfi at KT&_QSfG9XT<M6<)db5ouwx_k1sX4e_->Js7xAsf3WfS?3`IuiZ
zw~)uM6{%%s;-$Z7XS5d<s-`fY1T4pl4E7bLe`}?9Z&J3oh1qVdBt?+*DH!Yj00KF!
z;jK>$!Z7)_juNRXgFBm?XCHviy>ryWa(ofj%=IbJN^UZHc0B7`@YUvtFqT$P6ae2q
zAit-~+79i6 at qlsdTGMKh#>oarw*>)^9y5-gt!gdhrn9L!NQ&DKMyjqz+y^Xu$*y<D
z5=*A+gn42IkTh!_bJIBW$)XNbQc}?KF%;#?I<a;`+r!Z6Hup~@`>eb6Mip~~$<BG;
z_7$+2DT7Xq&F(;e?ZPK5fH(yA$>yWC)8V%GeAnwKlIr5&q9HjdfcpBLe=60{JU4YM
zlsC5#M$ND<@1()n267j<#bG-9sq3-TmQt1{-HkT%*2c$&^qb8d4f0wgt3rQ`vSb8s
zL8oeZlv<P!iDL#OV<T8wE*m%?R=wwqba}LUbx4|9g#E|O*J(N6dmmcn;hIfi=X^|`
zWx|h<PEo-<2=?n<C%saqJfmaZgS|dWS+0iv0Edmege)LPrJ3L6-~2<k_u{E)cK0^^
zBl|X&Z at gZrND8l*v9g>H!ye}qJU$?MOF3;VmoE!%`$fX-4W6U{oa2tTH0b<UccN-K
zW!l~n?2gRwFaL)@#{+lcO)17sTeer#<$K>=#T{QweIr?t(^Pq6kxG_3a0tOFdE|~r
zs at M9ZovhPJZW3snaU3D`?a$uMJNj2i;_X)2#%pVHBp~WAGHphEf?fz<%m+c#cjp!6
z*OtV}BmT{AwyU!`!}CUoow+|xTJEE2k+n at 9V<^tH6}KHc%%1neaZP0yZzgMKqf`u3
z1{lcz`kJq8;;Zdy+U6?-X+P1(XqzFvgYf3F?AF*qY?9c!Gac>@Fmc|ZH}B!tDT%h)
z at BQWo+83uMt_iNFVc{KC=RIomDkUj1l-Kp+cc3`i9p%&#5EO&QrzW^R3izv3ytI{4
zG~H-X5>$j3Ral&z-h#a<-%YpiE~9JYDSKPO=^|Nz$c27jbKj9!o)GYz=Z7J?Te!#B
zUUTJ$*Y}%q%Mv}XF<!(ylxa64c}tpjgt_dymMpbP{{S6m4F#Q at vfQNVkuZ>>nLSuA
z$2|9>@UDS*q`)B8Z&9Obmy_)6%z?TRQ?RbqKL#!T0EKlM<kW727V(K*6k{8%SnY0|
z0sLzs{^H9}F=-QA#TCJ}Rg!g58GcL_Z&S`|!;MJKnl!Xuk=cr+B_%uEFGBT~hb=W3
zF4s%cB$`$^Y at j7@KI)%91vXC)X_D&jT-~&qh1$ik48Bzd at De-ooaU(M*D-i=NuN5A
zy1bWaHN)`y3=Ds=cpr^%8t23>?6hUHws<bac_RTy>x}b`D5FZGrD(R!Db$3fmdNcT
z)NOSAV&>oo1Xl4C2H7{Gq3RzU4o4qK^4}Kt^4 at KJ=)qxX at JLhu;DM3+U3fmYtq%-q
zP5p<c>gzSZ)$PeLG)z3V4bU=U7zVt$aW<o=O3qA at GjDx^j!!*0SFMD?FKI4*hIp(~
zRO9UWo~N$rQCRq8E-kMt;klW1y{(&W*bjX7Clyyjv`6stSD$Pva>`3bD_~<hV0W$t
zJt|o*MWB?zfaRIN!jD?$w2NYHuAqujc?F=@B#Zd@;DCEqRH#OkHk7p at jw(*1Wl?Cq
zGt#_0<jVHw(@btu#v<54h9$W9v&D9w6fAE1Iy}3hZ7hkgq>4GjikpU19is#vuUh8*
z8tAw7T6Df8mJQl{i<rz;2uLh?9+>aIK9z~_TgMu9rG6xu$&&e*cQ}-&3a6ix05WUl
zoM%%P6%A6{_hDJejHNpyZ)w`p?cq}vm29xc<7~K<V=Bj<_{~z#^}iALc55v@^4iLC
zs0k-n$Us%M5xJa=%0>r6T$ZhUd3C3))srg2C<Du at jiVj&^sJko6>75G$9<_Z*LMOX
zNaucbpx_T|0bZpH6OxnC&%WmtBNY~-4R-k&9~3qHL&SQj+v+CLcx>D&y_yiYBRrCS
zTJoJ)43{io1(a|zT{X?s<@4NJtC78dKQ;qn*0S|2CQt1_0x(x9A2>K1Wc06l4^A~A
zp%dq^GL27pT*9_dEb*+WRx)sXYFoQ#E#&>tEIoZc8o01p1!2BlH~6wR{3$gJ5^GCE
zx>aYllZ9c(&!Mi<fXR at VoMRtTRwUGB_);kyq*%t(2e9-W)oM#9?R4ak+YbK#!a&G1
zn0dxIB8?afh9;hHiHx!D&{l?+*AZQ{iWF}-f-<)tp4`=+3ixJk6>GNoeXE3;W5FPi
zpTfPXO87i<o9JY`vr~LX1$PaI>&U^+e15gZh{V&Nz42<@fx%mNGgo*emKbGdVnEJ}
zhmUI5u+gHp(o!qyNg%%59vgx(N}dYw*1g^fIW+A?@;Tv!?JjncJSQGr;f<#w?&qoe
ztBkmg&d<e+*04!!6mOWq6)073Sb|4>-&*jNVLGyLX!Pmf-!C&{9v{*hO4aOz>a(@K
zEGI$x#O?~7xUSmwTUU{7ViA92+)MV at jzSb*eqaw>ojzY$%1vr3t!7!>V=;zkKhiMZ
z1{fQCvPE?|r+}@s9SY1ecHU$wwpX`IHV$`W_dM}Vq|>{SJsL6PX(nh|>DM=9WoS!E
zM<BiiJq=nOMT{k8$tp=WZa~dRsCa at q2<${?v8~*~1q65QbNPOC%<9)pE+sM#+(rp-
zyeg6FUG-{9;e?LraHS^s*2iB3{l2AY=Gr5X(|6Lb?yd!#k-I31EJ1f6IPXyC*NOH>
zrH*n*Oppcu2c>x5#v8ptKM-8ZqT=qz!h$!A8_PqFx(}{;;*}@uUo5}O%DY%!dMfGk
zJ)#@PZZ3N)<&X^TJgEA96 at 9J#-EOZ8=GrXfw<pX;^shbmVIHd;h|w-~Tx!uws<zQK
z;}CRL0H4S3JXd(DtIcGsWELdBE|V~gm4<#&4{_J=tnpOp)28PcY2TrAYtgASO)X4a
zV^w=QhKkw+F{<tpK7RM06)m5Mg2asOPRwr~UrMiS1>NM$Ez?5R48RP?8;?r2rdVh;
zbF7!1Y_hluCephPa%;<YpJN_r&zfFZp4B`*Gvsj7zQh-LmA<=pkfN0&;5)Ak{{ZT!
z-$N+LBCXEcb|aIH)vK-B=xYpf>GH{L>Kib(A&+7Y^sGB=R&=;$HxWMO9$aX59&0s<
zopp5iU!kYf<408%T++1jqe`=Ra<Y-P<_8(8*Ajy-$lDc0PV<6KaauPrUtC0mA}pl?
zVTRM6Vcxjd^(iHqN0gR8b}F}aJ#Z_gjdfL8N1ZxVB`#>_YC)#8>x+*&2<Llj>+C)0
z_v>#NjgaC=IBXo`4{utyvqSa~{{Sr5;}QeF$5DzP(rnxdnZ&Y2GD0BEYgx*jIQyuG
zI+CC7C1f{FgH63Ivb at G@{K_yh{&=f#EwK$6#>z?C85k#V?oDRFr`lg%#JX*ZEQuj!
zlX(iO>T-MLv`Sm)mkk5N&f7*vUBnFVYn4{1EmJ$HQ=s-*vqr|{w6s}fhF5d)qUS14
zZ<KRc-X*_+&rNHyYVh4icP?@WC%69qs<w1^APFUrgwssx^2j(Uqpk%}*V5Bpw|G))
z5uYub;|vG6<nz+GpS at R_XAGR_MaDav_KwkNL|v>Xw-5Y7KZ&ilCAQTilGf_yV6r7L
zho*VYJZH9Qw}y1|(=El#(Ra8j<!w`hKr1IfS#32vR`T&wEy*Dfx#Kwp9k{NwC{&f+
z$jQ{Gt$i+bjjlGHEMe2Gt{{fg{DGu9Tb%sBam{j?{-NdTnr*~@`D-C(8@^r4-M<Q;
z`hyE`c(6N{w>-vx79BE4#aO+$)gCKpKFYGgA}M^QKBl73Zt5vA>;C`?o-?_3TaM1}
zUrRXWmoNb``JK*rAC at Zue+ylBhf_(H_p6<ZsBl2fU&gl$iMVrefbVp}zHnDO5D%?d
zEjF2G$hoy70Uwy*hJ8*eH#sex*~KbLk^4oZ at 1c_)gEUw#?jn^Z9#d`3;zkb{7#{V0
z%6oemKE-Wl>u%C{WW+Z}S3KZjB-c;jT_|cM+t0c4WHPffJ1}HWJ9-Y4*+FEQb`sLj
zV`e=->OY8+jFVc?=ChSeS>occs|hYz5lOzR^Q}+d?Y+h2)Uw?Dp4>&|eW`(E>7Ba=
zB#%%#Q+y%tGEHw!p7z%E$5_=6D#L0nj3*t*3<u?2qkSN=w0Wdf*s-*Qfxu8X$)mx|
zrdjKj8mws)uW(gbNOQJ8-SODhQsta^UH(k-VVh$iCi#<HZjs2}d?4}acwS2jO$raQ
z?F;sMGKNMwfi1YVAD1=7%kbOc1*Y3cd^dXqng)=`I-QY>^T-G5UtPhi`GIjL+T95p
zR#vz1BF{<}R;?sA6UA<3kWVOz2-gR1n*8kzf&jrMJPM<R774h;ZgjlTwOOfX->3W&
z;!hIzJ72ZGo=G&@@fs<0nk#oG>Q7Ke_Wf%f-$~VPjK-FetQg!&A&i6g*S~mQ_SEpl
zhAu8N%Z(0e`&g%NX43AOD4ccNzG!SHCukgJ8Li77+t=a!)I at 4N5b*?ZWbp;Xtg1$S
zU%r5o)6%^-Qj}V{CHrZ<XK%dlFAVrL=>V7!aST7b2#PXF@^DYy!5rrm+}n7bYpa+e
zN#}^HLPZddm>;O)kVoTQxZk!f!R at wf{gL7r;h6{8OW9fNfS#ZX10nhhd)71l)&Bqk
zbva{3(=}@~FNb at L3eonj_lCyFKGn~Oz`RSm-p8#=9afBO7%%(@A2?s>vRD2iyFO%}
z*`c!>as!ULh;HKzpRQ at 6PSRkUJ+ee{Op-!D1%W)0M<>u%(>MPB68`~b9}q?vd`ER*
zEX$XQ=fk9+$EioiC)k?vZE_!hce;Y#>Ha>y(}RtkMaPGyb>MyBwoKsr_paDs+KNe>
z%N06}snXxB=a%a}44&4>b!ZwW;0&xIG6MYPZ_C&J0IgBkTU@*mq+>E?DiHN2>s{jb
zH^Ca!(<QgYJu22Y&kc8?UBl&oe~GZbX1Dwg at M8B{zcBb~R<`jxX(}S$X}0$b35?{l
znP|XJFnXT#ok~-uYwAQfJ)(NWdLDUkZT3kmq7g;*#$xkE4mRXtY5sMwV{&eEz>ZSF
zH60@#b*n#H)1ix7y=kUPpWiWAEuSD@@B#0E_*ZT4`@ouRv#r|O-a2YF605UEGx=?}
zuLs<J^{dIm)TWi{?tKmxok%HFOMl4ne~2uruSexFTt(%e4OnbsjNp^sr%J0Hyw1bs
zDAC7&q~s|+pW$7<#s2_@@8DZ))=eg*qDaWCbY<q%f&06C{{X#QCY7LGYj<gIk*zcZ
zhUIgCgWo;C$Ln1<X~L})D7&P27 at uqH-y`_D8hRC+mLfE|gvUJKh`wK#=N_HE#- at 8Y
z>?G7KH7h7)TckFyERTnW3V(UeM%~i7ReM&N7$J^HBvlI>$}$v=2q&g`R}14`7V4JX
zC6I*xnTg~EZ0$X})!L;;%8}_tlqk}0oU~@L#TB=Opk}lX!k3$8yJlceY|c+?5`Rkl
zvHL!$rrG}hWz1)`hXBPa<gyZZ<a5s)3gUcu;uy6(6He3Y+>0FM;UNWMmSBEnAe`eo
zj at 17E0r-x}+RkfByDKYKi3BZjCfFH?%DK;e#~7|UxO$G4wCi)y$|}PTInhskr=;2V
zF4I at PA7QzUI|h$l;iMa9S(xCjY^lc|tz-C`!_)XK-NY8NBR186+HJ_W>z>2CQIE!t
zr|N>&O}UAPVZHYO<^XaS5y1fT#cUmB_WhnIph6hCnf%P|1aa4nrn#d^v~4ME*tZ2r
zZQjQ-2Z*lWNghkM<8T$csZK}${J;U!k^L)2Tk$0FcwYAI2m{3nt_!Ileg6Pj<zT<Q
zmsA$B+Q%d<xt>OGoPWGKeJiNfJZWujr`*}uS;OV*5t&$gxFf!J;EL<1M$%3&xm0ly
zl<uW#3*p^CwOApZOR%g0mfV?com6+N6CAd;yP9y2MY&JPL68&1KPu*|Mg7*BYjLF_
z&VwPq<+g#>+MjE46{I%ui>A1ge6p(?s3a0N{Hm2G)O|e(tyS{1CeFGq5VgjgA-iH@
zMJeQM1LXvPlhmH3u{7(Y)UH0y1--P8N(lm40pE||9*5l3OB;E0JE!}6gY3&L=Veor
zPg9S4aa(>U at T50?4{u}85pHK$1B- at H8H=3tBz7m(m$Qu~qXv2Nl-k=uuAeoYhFTa2
z)8zo-1R$!M@^kJh2H(XxW|62{!*6u9(8)i}@wQ3=c_8!6OQR*c);?6=eX1n#rOza=
z9Xah-cX8?3Ua1_Gb`gH$I|bNfAmcgPU8|N+k`75(Caib*#nc!2HL^=_G;J7UX at JJ{
zEJ$OHr;+)Z<eKuv>s&;5T3eU^3|s-ce|Y;JO62Z5VR5T!ra46MyqG2=gz?8*XQf!w
z{8MYE&6B!pCzf{{5`9RlXyJX5QA<{EPNS&Z-iX-o29T2J_g9ZM+fxOX%1lVS at Ta#y
zUNb(eCar$rcRNlaS!K%<8SnJ2svjQ3G_M87HsQb$NCE5M at Nf@a)yR0F);&8?nJxFE
zE<>xh!NKPQSE+=AqTFgNdLCs*%(>$9It at k$JTu|TS?o1qCEe_86v=Hb%FCWII*&pP
zayG2?1>{)>&je?$v8>^|N*H9|_vufPa{G{z>TzC_DY&P1dzenDovf{6sU9bbQhANQ
z3+8KhQ;q=QrSPt+d3mo`+gbT(9BuM>m;<g!C%tg+<)#aqXN=a3rNimB%d_T?AC#%&
zA8Luwi;GLCe^{Gp?_=IIuNGcj>2gDJt46l*Fg`?sVRN2JpHcL#cf&pt)BYlBm(pJ9
zEUK~Q6(lQ4-p3flW9s8lZ8AA^n{fLg0u~$)I`fXdjbZpHX1>+F&uuWanSt3OHqnal
zsNp#&P1BX7-5$MMW#t&ujpNwv{7r8kgtYrxNUxrBM%y$a4Eu4Ac<Jd}8eGk*>Qcun
z?QZU%MF~<vbI8f3c#}}n>~Gf6>gi@!GE|3F7$?+qtPMwAn&wE#b0TBrUYs5)(8JQH
z2rIk!oS2+MWjz&==xJZtL!?HI=nAutxs+sq{?DhqbcaF<p~tCSyEN?>+4e at si*ey!
z at c(tp+FLFCqg+i0X&yyYP)IoL0Q9blM$n_wuAL)!1+snQ9T&ZmpXXc6NiAKD6w`ZX
zVYZ4buFN-NBFGNMOkg))O?G-ErKgAdHF(;REycseOgmUQDE0pUd)}GjKMppZwpQ}g
zrZ&X922wped9FWQ*CiTdHcA9&i?x+bbB^cUuHM!v%o_G`yGJpoUK@#>-x)rG6-Y5s
zaZ(;zsOP01L6N(ybR}b-bJ;!zX?E7Sb>^=&VZ4e!EvHu66zw?#_Um4;CymAY%@xI|
zVqIONAyqeHu21Lb(!O}`9<gO>ENOM}MzU}F*baIO_7&E6pTySIdZ at Lxx$`ZRgG;dQ
zR_W5dV;O~=Y(dpU#Vt=%)qG<XwPxSh_u-LAj^UUB6lab<K1Fd}DAvWboFXPS4<E|%
zMslcnf-zoysA~FsgB7vfT)Al^1b{*81xE(4A&5h5D2=WNl5GC~v&hf+?^{v9sA`eX
zEJc-((b{;5OD$sF;zkUsf?bYO9^F6AYt+0o at m@PUHb|wBrjeMkN{`MDW9#*=2Gwna
z^`tk at qe5AXQiGkj7$E*Rtk|_fZ!|$$Z<cu(;MaH6qgFbT3{<H~=g>Ye at jQPQT4b=w
z(#LO!2t00V{{Z!>n|QA9SkA#LgEwHiFdV64p1$?W*_67G#JMW1!jaUI{HiT$T({G2
zw#ttrjt<D8T%3>OE0t5bvR7nF7glY%+UK|YHqz$tew}LzvrS`Z9_hk1((YV{;?KSb
z_7&~kDYCfI{vO`iMRrUHZdu~CjS*1?QyCzTK<;bF{{Ux2x4h6A<{P1#Ipmh&*KQA+
zBJGT^^i&Oj>c+iy#`i5RqxCCGD at pYm>#G)q3tLs(@3<a)fzRn(u%#G5r_`FYs<y25
zJTu^@jC>>i014cel0g^tJW#Khd37Z5$17ogF3_t;dB at cHS2u6sTb*-S at l~duH1lb(
zYEn%Ug;`+o&H&n9=Kd0S{CTaZehm2gTKHLUX`%RT;?CmI`q&|g+2Fj92xTaofw6w`
z5;^0V!|~>Us(dcfEi{cyF70*On=oy~#llLi`<o?76M=#O$<Gu{P<T~IE8EWI>ZIx7
z-YQM2D{Y~BOVY0A)gp4fY)%Q>jf{F4=;rW1xErnHDKKETlRI3V*{*ZLUMCt(lVI0v
zzDeX8j(Lm#0o(dkwwvN}e;Z9a&LFpx$s(&`aLz?|a;F(c_oJ9OTGG^?R`4CkLvEUa
zn7~jmoPqgu>&0w%N5iY(eGJ~gBzJm*=Wz2z!y18rGtc8m7m5D>wltA>Z4)ZKQDfbl
zFf~f+UboX4HPrPxYY7SY)_Fj{KGl!0Rei^|WOXcL?X0!#Sd}%sVr!{xjl3pA*wP6x
zf$8gm{c4V>;G3(9c$OL0bVL!z`A2*n^|5Da#wl)X%IXkJ%w`t_PrmAc)@^3`=4*9<
z5fos%e+bWCQ$nWbYYh=jtZG{Oq0o3bIdmfOT*)2tz7;SEqU86^NyT&?1^9d7e;)XX
z)5Crow_B_Efy|G at aK^o4koHl>xhDWs8+l@!hGRKI{n^|CfI#YV&*fik{>c9T3?T5Y
z!(C at s*Dd9SO=+Kc-J?Y5W`KY at Fb6Ez^uevLuvp5Rl5M50k>}$oLX9^yxxFv!r=?He
zn0z at duXAT=mX`4WXJ-K0Ix%@C49HoULUGB!PzEc6)W2XI3s88Zlg9e{ynJD;Er>s$
zuQ;;(vAhvss$55Jpm^g#vPqd at xzc<@(+Kf{g>wwdM<bkI*VkVLej;hV6nqhFtmzu0
z+QqX-(E0av!rtLoPb(@8Hw=zO0k5m6f{bk`!|*<073wtQ32Efd3Ag=&E$wC!L*xBT
zaB>vsaOdc8AkAcWkNyeeXW}B0P2)Fdk;IE5X`2|4(>rCxBVWZ|@KHYpXj;~(Wu|yn
zUf1B$rh9pBVrXEEok<O}J8mN*gN|zsKlmwT(Q at jrd^Fdcm}Ns>K)D~4V=O5tJIXqm
z#<gaZr>CkUm-Z3XKFA at p@s6Ju#u=y5-*bLa^sK9o*aO6?E4{ysG<h;QO<^$oLz>r5
z_$bw^j8%RZYX=;h>TrMYG?pLmQVll$09>-tQ{lF*x0iB=Vh2;V+q)ogNB|F*b6I^?
z4+P&XpEFri#Lm~3;)>o5zhKMn3*74W9wF2;ZF|i{YfD%qxwcO?c-+#s8;XS8g&pyp
zE6n~O{>)xB(tJy*TIrq@)$X)wdzlTb<+NsC@#iW=4tjCVHS`a~58Gq at 6y4UHZ{q&|
zhFa}|>H&?r%W4*rqZK%1+!%br(z~l4_$j}`(m&IDIpS*(-}i7ykIGtKQ=^Ed?kzlw
zp<1ms at n6-i%IC`~@T<k}UqKzlk2Z?{V59p-HtJaVZv!>IVf1Er#FrO0e{7jpv9`BX
zkqPO5#{(Yq^$Pz0!A5=#>kxT2G5CbQ<0Wo%e>DjDD>iGN)ci;AL-vJBVc^|$v^{*v
zR?gPu3yT|DxrP{_Rsuc!F at urE2BugDa_F@|ELJWG at p>LdVc`v9Nw|*S*hJBJdkYCv
z7{}AtRmDJKXf7TY;|FwdnaOfbQM3X;rt1)<lX-J%sHxLsvy{Pe9pkZ)Ty at A9&U%a<
zYn{|QeW2+OmbXdnW*p%VL>u{^*1X3>McDA_)T at b~Gg|o?nw_P^)w5bc5?JL88?>OJ
zg<*q&a7AWYTxr(6CeS=Prs^7h_Vo84Tj+Kt&6;wmP8o^BY5*jY>0UG99~^v2_ at Q~I
z=)M?RUk&V1Bikl!FAhJ|q?pKJIskd;T$k+8 at Snvxf5%-C`K}9U5u3I+kolYb%_t<3
z>EAw;y*e at 7vuapbOZc}vSH_>T{*&OnE^A#n(q9wn#4^Ww4n>4V_>Zfw^cYc&b6+ud
z*W!+;<2_qdz0~hz2T{2DM9?Y(LO{X-7Xu2Q06JIL`WM43GQ;+C at ETmD^`@itV=c}6
zP`}vVX(VE1mOuy`00{IT*N|&-Y3<?5O<z~iBQF=1cQjF;9#Ci6802y=bB^M^k!A6x
z2)6BgN~0+^HAWgm+UL$IekW*FHY7^hRk6l>>S?tobf&{7xws&eeyA(iwbsylENm?`
zy*kG3dFFX!cy0dWw<TPF2SPxsonymZ8J@>bx_ura40oPQtd?ZPar{DDjyc9XL9SYq
zAxSpg$Du-oBD|v*!{XTT8TF^TaPqr55ynSqWOsY>h6)GqF~Ak>Kk$cmHT0WpeoZ9B
zqn7d}Fc<R at V!#C-FdXEZ1Dp!W)qWRfn!kuHZFF5fR=AoHs~wv~Dv43Q<)|bQpbmZb
zs`fGEQs!17RI9>LgsHoyXX<%UYbkDV5e0zz?d$9+eFoy^Th{IDE#j7WW{@sdoM)-}
z3iZzr{?9hLG}gCQ5$cg!POPltsR+Z7mhGNKE0?#D=i$zouEC>9`}G*$gsW|5P{Vj-
zZ~+a*A=3<UDwPJ{>PF2Y2HKY-(~bL`2A}ZnR<On6vel$ix0JMz2poR$B^lh!&fK0h
z^{- at q9_q`XE{$z_EuM*Kx9s|Lvy_58qX3 at d@_GF$in;KHtz)Hcm1JASQY4B<oli`Y
zl0OR7)AWmLEf-I at lJ+RxY?%c27-e3cHh2V@@G+Gq87pX+^w=0-)NdDdy1()%-rd_x
zbN1 at 10h%TmL%43*KyPZz(mY9fp=x$_ at ujuPTA<pI#>58Ow=4<#e*s#Tk)^CN7$8Y5
zFbrZg3||MIo2Ct8X|}gMFxO(Yic5Pq at JyoRg8bl+c>Fl8HS$jGqR{mvS;9Ai*Rj`Y
zzA4r`NvB>U_fXmC*D9{@g<R}W$YYG0j`ilpRJ6FfL|Ms>IJ~ruHaQvx-2>Ft@@sN4
z%CTe2MDo-(3n%pLT;{Q<L{=t~Pl;}hc5$>W2Uhm$TTz55M%31fmrhk6rjgQV*Qq?Q
zz*2a;&Q>xxVtVwfZxCuJV(D#Vr&_}#la_1An6!=56bg9T&V5f6294rLZ!Tc4TXeaA
zk|JnhK4EMF!9M--(z~l)3)<RBw^vrnI|R&WxH6=Tj4}7>KD3=hO<I2=lC+}Qbl<Z%
zn~w at 3*&AE<jCXP(jNlv$liQ)`#c?ux55Cs*85+v|IHY62m9g~W>t5HX#M+g?nY7X-
zP!?5`{KEiXf;#4#X$_s2&4!gENI>&E(#%OGmgldodsHk{Xx&3|o^<KdN-uN928V6o
zePTNa4AbAmh{~4x-Of4bUbEr7FG$y5y^~kEXSao0%C>^!Ld>gz*<+o=W2QK+H^;sb
zpIPxJzFTPRQyW<!BoqGE`^Kt6 at P#!UWTVY}C8{Tx3`C3-CoPhD;}o$GRp7a*a=zz8
zD>^jYB^&(gbGN#NjC at Y8+ODL!ag^<aB;}Bv32xkV;)|Q%X%?wz0g<B*y=9g6lmc)%
z4Dnv255h<!7J(sEMi^PQ<=sI9;CAcy;MAJufGjkB3u-qK#_+wi)QQqTwpZWsf;!{+
z)B5EID8aV+9C4jkrtD*QPsYvryITmAq{ed$h!|yak`I4xYR%LkzVObLm$tA+aeO9s
zcL|akkDCXIb-#foi%fdvljO}U$IB{7^1N<OZ&BX0Uq!gn^ecb2%q5kk^3|S0(DdWA
zWglfuPEhN)=|d3f!6~n}=PtDdnp at 4+Qb%y;rP-pl0I)xebWnJPEe^p&?T4Fhdl#6D
zNg2-vq4gC<#C{!vMHg2$%Ph0qZSo>U3J*`1jB}1_Z^J?>-wA3`- at Ukw+c`3(=`cq`
z?l5Yq){05NT^!P^{iJD2xAk+JivIrLp6b at xH?xTb`AORGjEr&VlU+8gqyGTHF?(gG
zNUI{x5c4i$VYhP*p60nN3q-w>PP+zHiaCi%5<)|=?#MX)m9?ltYk8ztTU=Z+=!Q%&
zHvG5%Zv3hx87W#1Lkf7BjX23&bnI66i>uj9p@}E6fLy}(j`G{&Vn5r*U!{0fyRH8K
zY))AQ={H~%7$=@M73{weJU{)hrfJr8k}b5(K5VJla5*e`XPUuZ2ScW5_KYEh4MNi>
z^A2P at la^9&1~?23F<y=uR47B6smY0{FM%9BvuQTBd2f8yM$X*?VrFx<Iq&**s`~bw
zKC>#@>6W*5Vm_uoNm6=pdsnSV;kzwXD_AFz+2%;Vw=y|m2_*5IKNC&A(=L2A(kzz|
z-6}A~<F)z at y|^7KRf>vhx;T`dD~jrPMgEO<p;|!qaTv|QlA*ecbqC(DWGq`f&3i}0
z9|hiPR at T?H%PiXgK3 at ET&+v>_p6T8R)GqIWTw6(R2w~<i7$JSL-n~jSV^TcVF>1#&
zfGZEJTMe6_N6N#Hd(_&^sItGB5St^3iVk@=tnJ0+I}X!~is;=4)}K<^P?vd`e)pQk
z6 at K4avQ=4Nwvr3D`Bq2D{#DGyZ7s}<aB!n6eJj!Y6X7^@9}iq=5zN-UR^*wTH?BhD
z9DXEMJx2;ryp0r_W at m@IIdS6~x0X<`SVrMwJF$%C0De{4P4ItD(C?wk&3Cwk^2+c5
z92&>bG|22U>+8tmnJj#~mN^Bmcp|;C!=56s at gIZjFE8Yg(%v<M`D^nj2ky7vdiJgg
zwJImg7igWdDZ*bK=bS-nZ>Az0N<XvTS^%iI!6>~O>(aFR9jMs&k6+cU7TyaBX`xgO
zq=haCAoJY!HQQ>w2-3V=ZE+`>&+<3fzHkDA*!trYz~1;i>p~50Zl+8Sqi7&t_aBvW
z(!^4&b$v~woLc2t9EXiHi8TF2;bw0*x%qdU#c(h=uQ!o|;pAq)+)h1f(7bEmN#l8D
zmNtwcnHag?k79b)om^pv+r~KJy{b}+kGk%8^_!Hg(Oju#z{UvRnnpq#WcyI;P-Bos
zN^ozJo~E`i8xbhk+;TlC@<>EE=W+L|jo}Su4FcO-lTMv9o0%FIuL|NfVblZdgH49p
zAxxWNUYw3aCM49hD;-W%w(_#L4UzKl4|<bEtBhZ%xZcrnNCyVJ!}fIWhlhMk;vHHI
zV at Hbq#!WQF#zNn at l#m0f3}L(19jbgiw9+j+N2pCBi)%SWy at aT^OQ$c651<^MsIE6&
z4o(k4wm4dohdgySjaOWGBWNPbP;V{}6W7+W>~3UP2}BId^5l%wi?NkV!m4`tjC$6G
zgYKhUUMQ{v9#o$wX$AuO=DJc*j>j&tXSACeG=+`5oZ?OhUp_V*el?k^_-<`V&rb3!
z9xY8Ikj*onF<l7-Q~}c%IXOAaVru>$xYG3Ni|Fq>=%JNkY#<yk$Um)PX&RN){p?op
zT$tV5AZOqM?_WU*7zoQqyZnzTQ>`Vs{7<5PXPsKl!f at +0I>qF6x~8Rb8pRVS3Q<tt
z^VcNtRX#BIyW$7K-y8n`Xz5oM7P>{rh(Ub_IE01TP&aPp at vje;U(~eg{{S*sgH0Tp
z2KCMeHS2o*sp5|dcullzN_{U>v(zGr<IjRYaBbC&Lb3h^By>EE)x(RzQ+J&<+T_jY
z<7WpJ-KEj3pZOlyrugT?xBmdM&Z**Se-+<f_?pt@!Z{vUnat*Ems1|joS*=DoYx8a
zPIy^7Iq_2V-b<^i+ckn2B5TP^l6=D~x%AzWk9x-VZ>L<r at R!9}@@kXYL#FC_T=MDb
z{;K4e*ef~f@&HKpYUw{}*`%@YY;bBiqUzd=Gt6!!+pzgkEOSCg^a}e&`=-8TtRSQA
zD>Ku at Vk=dO=aaMl03>-65+!zdHo6VN9R3wX$5xs<OPIrCNZgk_YAmjrTS>VLUm$MD
z<GK1%EMQ4qY#bsguN?^)=DE_gtm2Dt*zG(I;^xuqXSBFal~0-zc5+V~ewF8*Jl8EX
z2Dod~6W-lSaEgSo<nVLs2SHu8guDrR;(P0XYq-w^oR?EL<RnSd{<Yh9PvMrEbLQO%
zY?f<e-fnMZNX~iTcXCf17d6#`r^_ce?9TprxQM9BWOCmGHP`U>fNt$>Os_DwFA_<g
zl}-Rr>Cm6Xy<*SCR;3EFq+BaEnZr380qfGZi*E<m-=?h%w67egWi{MjKO2x|Cb_Q-
z+}eplUBo3q5rZ7$9o+NljMqLcoYQh=O&mj|H42*_Nca-UUl?k(cG_IAEzHt_lFt_O
zO{_YMbAygM*W4epr- at tP$L#6in}d2q>C^uJv*WmM0ePmxWbx4a%zd$69DE7!eXgbP
zL&J7f#xSyKcGkgj#xuBpK7zgP{t6MPPjlcO3V3GLGc20!v$xA%yxSKG2i4?S?!eGg
zsHwf=Mqydjv?I35=6-MZpTqj+h5Rc9qZ>&CW)n0|Cn1q>>*`r+^cVgKx#D}PpM<Xw
z)9$ZQ=UA7_xPYgZZJ48MxGW9{1bm?L+Nl25AG2ike+4wzG at Ui|8+{W=dwbt5RTCnB
zkGuoJ1!O<)6YW-i;FzekzYF!dNR0bM%oii=5$qtz0+WH=at;l9eC^TYZ1QN`N~9l^
zkAp04X14gN;(HmlNo at Ls@9v4?a?HSgELUXLHu5l7<0w%u0A7Q>4L9N*hil+}jQ%+<
z9n9AeYWMJkSTc$X?s5;V2(ErF6i4=$)JJy|TgK=6I}^9Pa at V4!`Kjf#Z4R6jSgJ9N
zNi^4*J6mfTd7`$MypTr24- at _FosD?@x8r!UUl88KZM;ouJczUB<{**Ae*s>TKa6yH
zt4PCJ-mIy>&9n6N72|gr9hSf1y;vKIn?x<=jn=HpcQNV*P6lfXBx+txtX;g(t|oEO
z!fO7dj~V=C at pr@&vR at JSj{g8#j>2OtqFzb3L{A3;+yPnMA-h$w9&2s$Qv*JvQ*V4B
z99s3Zon<W7f#VX%B#<>*20%O?PHDdqZ59|JKnm<CR2~jGSG7WvVGrHL%eAa{wX4c<
zN>1$WJ{ZkmH^Zw-*`WUbOOEte8H at G925vvxCcVqX+E%IHF9BU>S{3}i**cB%bETpp
zKJkslSl=0pfTJW4oMOIV_(e0Wu=aWX07s7MIf5VWG1v`#r>*GAdjdxrg_V#r5;)*G
z{oMO at KU(FfdTz~~Z<c9GD;XX!xS!(}$6F5;yAk5=3_4hNjZpJ<ZpcNw;T`)U8u6>9
zGN?H`arLiJ at Mnn|!2UdaOHs5)v`Ha0I>wqL4$r5|+axD%8I6c_?get65Ii9#!><_X
z-XD~Ufo~{lYmTCL7;cV1?8-r}FBc1Y at H^;DU*7Bao_nXsd8FS<a+1po;$bXOA;TdD
z<tlp-#e28IzYwR1ylJL*uEbl}c!t_J(^ZO01fO&gFWQuJ+;fIe-v_y`B2y#Gjd2)Z
z>C(MV_Ga)M-;F*i+r?w2HT|?uTr|Ol?xEcStZgH98_2%^3gU;wX16-#(pOCMp9=oc
zz68>~8)^O!)pV^+_eJ{xTV7hMG3Ma;VNTZHz|SL(O8M90SB`!RUFlk$ix#osDD at Y+
zg5iwNMt^py6vHOZ?y8_%XO6trrFf6_dD6ZaU8bAkuZw;S at Xo5Shie5B-drHZ1fm5Z
zylVI0SHOw&Tbr$8<JO^haWsZWB-6YpJ0T?cvsb+dRntR;FP82RditDKiTr8c&lg@@
zOui(N)o!igv+~WU`7PDAI)jd_fzP#eeg^PVo;L9R0Ek~jk$gvOJ;&N+kyON%=!gR3
z_8<UBt2Vy_e`Vny5Aln|jNRCHU6g-X^?!zb4*i=vBV{F~neoHKc8MnOFQ22lYRbb5
zt~L-y*QF}XqfN#t at 6_wVRFqm%=1F!)@EtzyLYKieejmEmEK(^qOB4COc3<ItVm)i<
z4};pp?xXO^*2#4*v|L at z!s_bUV<t!gaE*^<3b_N*6zD%?f7wr0ki{3rG7FQ171j)A
zx6FYR+}!*I9te+1)BYIUkBEL9@?%kZV|fI>V>_|)g<yJNh7_I;TJy20tHY>Mj;QqT
zc&70)c&o)rtL}X5 at wK%N3e7s(Oz)yyTZu$63^I^#Ne7|MYso$&v*~&<IN3bQ=Allz
zf-VThOdQwiK8^btcpqBug}t|m(^1xM-ZCVe<ZFG5dh9>}#(%w>;=I#D{{Vtzcq77t
zS9!cocd12n30T`$jRIPX=YBxJBixGV!PKixi-kz5v&GC^DwUM5?X<SP{5j440K;>5
z_u<By;k!$}4_SDs+fcGr`%To(Y+`go1v09^jtFi>c{NW?{{VuT_*Y)kS54J^8fo`;
z6E~InyR~&<dwlR$u=xAo2g8pPd^*v*EvI<L!g?(FTZvOqmsd%P$*?27&Eo}vkEcrU
zh<|184tRDwQdmAK_!92+c#7IPT*VND$ou5(B%0n<llOE-JvmA+N^s_XKhU|ad{X!w
z at t#{v7sNgXm*KXlc;9ER at dcoV$ckh4M20MUr2hbYaqcVSkBq()@dv>#iJFIoHA at I@
zC%8~yzhQvUlb<p+0|XFj)pc*#w_ca`QTW^8{;-+OBJl($eL6k|>t3UI;i-Ig at DA(1
z-Zj^>fA~y1FJSljMzi+#C0naCKRvvTtiTlcKsn?UKDEbR3mL=SS2m4iqSZLH<!5hQ
zPlL5DGf26U>_SPyknF6GGt=qMrB&4RJF?N*0F$u+4VWaftVr38J?qnLBGz9{mdeUl
z8pe3DExhbkX*mId4^Fr}#b|hU!Ip6&Pa{Y6t-e><LUMy3k_rBPmGg4M#+}sC(``?r
z!OE<ua;D0 at 7w{&x;fI-SRxLkLDd$NFk1?VoebvVV;~WoK>$JK2nPD<p&oju%tpQM^
z1J^2g8iT=FSK96_yhY-jYUjef9lM>awAWihcQwOAaK#4Y+6FLKo}>UPpz$u0u}eM8
zma_(}Wh9}J?J|Tg9n}28(1Tg5HF}VB8d7$?oenv;(OiqG>)gwdNT83;Tad|;e$G4K
z{{TQmGfcmGtt(g5ty2Qjs{Ncq-fM>75rK?nw`$Mv4zD(yWb?-qVtFCh(xyIeTjn88
zLxMT>t}<5Dqk>&h);m*e3Mrm at WM|qC?_7X%_c_jZ6^06mtt-`99aQi&Wl7a~S*5Ab
z+_m<rX0s}SSZ at lg{<8<K<C at j*uY~+h;>(w@(KM}3TALVj((PX1A}6tB7$2CY_*X{L
zd_CcfKgS+Cm(1|>;*p|we%*`{>obvu%XN;~N%@}{Zi`zQ&+VD<Yr{Hiy`G1zXkHT3
z!3hP9jibb|K%{gG;hDO1Jeu}s<?*PmC82oKu+nj*B>e2{^0wzuWBWDyTDP}Pv-lra
zxR-wP`&5uc7|&6ICTf2be#id+5Oq%s>YA^K+fVRig at wA^G at 704VhLs57jIFUXADl_
z2*}5J at X3E~KZ}Q1w_ERt+N8QN%!c7K+h`+pk8s`;nD7oWgX><y;?MXgqU-+v4=3=|
zr^C7YNnsQz4aTG5TatGqgtyAm2;)`UdvZDH(z at 1HLKEh;r-<uLS~;tA>G__MZ>lDV
ztX^r6-=)pGQ~71!kUUZqZmNHXdSk77=B4{RYRN3oiIQD6%_h`dS=`&ajkF%|U^hLE
zJ?rERCi?5db6o0{8VjOBKIKy>`J~8U8jNI~RDZyQdh8$YQ9p^gJ*(M&X4trnL-O82
zW at y_OAa3dO_O73()3(P&Tzw at a8VxIVIbRb%bsN;VmR8?wBP%MAfrH3C`K)`%-CpY2
zJGHYnZn7&#$7>PK80de(xXa&+R~K_g^66kSj$OjZfJr-v>FZQm;vJ;d5lcRiGc;|y
zA2%Q$rYn_TB%PC1GRER)PO_Z@?PY)X2cXZX>o at mMq?b1L5=3&ON}vIb10MCWp?E)0
z at eS<HEHml0(1a{ubuA`;h!fhpwY+PfUdXL2t>vVI=X_2EKPv7#Kk-p5q5Cz9Pj=-3
zgE9tXQO8`5T7TJfq`k{On*RVZ31g{V)4E^Rk<$3rL%lYVVd0+AE(=NsBLf2)dYsi(
z at Zs?vhwU!zBa#T#CMZf3l4Vbnf)8Bw&MM8fiFNss+7+<^)-)^S$&5KYS-Cu%b*)S7
zW5h3JU3AE90-OYfT#$fcZa+HCSw=o8 at uz!sXC+L25>DRH5kp~TpsZePx&;JDZ*cf!
zIp?V7zv)xzwlQ2Y&erzoJhtB=sVv-lqX#%OiQ)ZT=lf1b2|iwbb!~SR(;h(>LC~I`
zt#!IykEr;eO2;cjYF~sgfy#n1eFlF#3i;}>sY-9k=+V;%sp}n1bu^fCt7UnZM;}?k
z`CExO$0U9yrB}a#+UH4Gt?YxTU<*f<kYl0Gdg?VF4M(S37;i37{G`DsKX&7i!_aZX
za=PxdX>9Pk1^&ymqicBM{n}vlZk+K{oT^Kj#_F88eiOt#DQWihTIv*xtG3=qn1PQ$
z$FExEE$tz?k#m>}u)xN0JK)!6taw`Y#+r_!eH3#f<@cm=q4|^8fsQz=4NF73uz at Z1
zNhHeKNC(@X74>wbXec+S$%`j<Z4J*2cy~>@GFv)5%u*7jL<L!S>!0af$7d&pydUA~
zdwXCm?h|6kg!0lw2dn2hjt&pfytBr!$)V{Acg+pgm>N}1Ml*ma{N5&*T_ at YE+IbL?
zE-}W#*Mq^YClf}cSz7Ous8ob?an$Rh at j7ZU&!?q~5m>px`D!*GIr)B^)SgJw{52(o
zl<fc{IT*+};Nu?EO5N8^i6q+;kV=JJN2jO*y*o#_2+^yI+Nj<}!g%Y7=X9E0=Eksm
z&g_dq)wL-#A*V{-O}r1aq+T$+j~#xs+R3b1>7HB>gXT?^GZVifu0>Ol<{N8yW`ZIk
zWIYrE&p9>bdhd+yENscPRC$XKCU3l+n57y%)#)1^k2ERA-qh&)OMRtywSK{ID=pI>
z-NzFWLwb?vjw{Qx?*l!QA8ECf9y7R=JZ#5Np7m=_(RCZR;=Y3FGj}|M2-S!=`ks}y
ztuoo^e_*<o?K15-iB1_9k6!iaLWOKRqZn&_Y<YF7Q>yQ493O&wH4lt at U#002Pxe&2
zm_%j%?+2gKrPcf^9*J{x41uJ0WGXZ04+fdxH5Ps@(%H*=w^8z^{h?jI#Yh!=L#UuT
zoX7#&-1V<Qa&c)H(Sn<m-pJDN2Z-X6_I2>)jE^GEZ>di+DIYEgIKljD$U_jo9OFIv
z*P^wAmwyk$QSNyX>;R{tf;p_2JSTUkTCCApEJ76?X3$5}oYX3jTe1{6RhL87KV=&Y
zK<eHhn%%?c$zmFGWAdx+`EosYI5j=~nIDZT>_4=;<nZipGRO8_Lddz@*SR=6)o+59
zaCmBK`{^ChV`NpJaq_X<kpu2JR*!`*PL+Lg9Ql&k?;GGlfR4Q64{&S3#m%`l4bP;?
z=Lp71TQkjdzlA<Wg>Q8!CGzF9@|HMGH%g=&wm+z at 7fST(x{b at myDj#{&fa$b06L2I
ze;3(bTxsuV1ZyN_B_Wk_<}N`iySG95)eBz-LS{?57`Mh at 2=<zZSKB5=Q$5Briq{W}
zsHywfvmAX4I-2%w#i{&n at ZGejG}wGSuRW~JB#_IfN53FoVC?j+BgIYO2en7=)|;x>
zUMmJ;d32Jg1Jeo!HOVFVbjco^R-T`66grKv%-B|CB;z0{ueOY0_GiabcE7u?&-};g
z)>4&<;zPY|7kqMOl1KHgPxu|<tu`y`jT2wDON}#Fgj-!ReL|<?aC>7l=lbRBOX1r%
zV=BfQ=}}yFPNVt$m5Zmp*>xrgapnxE_pXkPFJq22X}v8EsEjatF7TJc4+ZKoNiD{%
zbo-qeV1<%+qLtl=Blv(IW4W$B_JQ%Ho$)W?F1>N3+)ot6EbWpDi*lQ`+bT-L=ZrFA
z9rIp+;9H44E&Mlv+!TKl_-<6X)8>(Pd4&jIj5~vj5m?sx<M`{q9xT-LYkON=U~4UT
zGbCXfd&-5-cONsb3+-P&ilfNfqOQ+IH5}I at w~fB;kNnRrwNnU=(+2?p$it>_&03Dg
zT3W*&S72E1Msk0`s7rGc_p_y>=*M!V(t2})_~ibTyMC>vqmZp6`?idpFgQH=SI*9z
zN^L2tHg!H%@Se&0C}@{i at ph{;7V_y+Y39M1pAwSXkOyVQQ|bkIHkmB#BlCm|!zbnh
zWPkzsV!g+}zp_`w&l7kuJKqf4X*Sw^scf<s#<Ga)j4}hL1h3wQo at -hk*canzhA5Ly
z&?1c#ZX;I=Pt)YDV+|Ro+DgY<D?%Dd>7{LtpCPzwU2I%5-dtkVXq%tCxo`$O&OZ#-
zFKqI{CXQH05w;Mq>PY_p_1D%HKd=YIsUpj1+9|jLAMzGlep`C7f5ARJE;!pQmWrj$
z=V7ZaUch{nIEr$cNh605RZdB(zmqt>*!xeLQ~2ZH=*9{D(DT?H!6SAj@~^M|0BgHV
zSN;-xAH))9I;H-XqG`Tut<9CWnl-sItd7mMB`}czk~`NS`!asXemeL$@iGq)_?FjA
zk4?6;nlyWR;WPQJp-0Ps*qZw9P`I_%G at HFT@JVhiZQj`2+nkWBrA}1!>sw)>;U9RZ
zzIstvdZY3C#D5(8P2ycOqt$hryR&kvW-`poT)6qNbI3U(9-dd%f3W`miac53Z8K3#
z1MC(Wf=8y!c-oqmN$mlVBq$dJSg087n)##lfc==C;YW!^i=+6O*TjmE2^@J11h6Ul
zio+x`5$Rsz{{RHy)~<B_0Et?jm8sqCzLQ9j(QF&#k_3WODhNOCwR*FRlrL=<u=Qh6
z$})cPJg at eyxo-^q(|$X!ni5{;Q~O*aJyKYsar&{ZGP$^uPPX%}p3ci7D-5 at b=O6e0
z$^7wOVt&{^vsaCNAbe at N@fU}@H+!quUFr77ZY<@6cF2L1f!^vz0W0SZ5`N9zC-`Tj
z&8us^4XV+tLHVxlWw#}XAYfub#PT`{>ZMzj322WE(n-E#_h*<~c>3DcosBAvGL4_<
zRblvzr$;MDwyowi12F19>0X`T{{Vy at CGosrv=0gDTG|o8v$QV1_tC<S#MX?Tv46z*
z%QE~j)e+B4(p!P~dDXACQQVbDK8KT!i8^VM&ifpmcHO)G0E-#UI#&zv6T~Uv6AX|k
ziBxPV$CF<~uk1zfWrKgkz0^^ULL|2s{{YC<$9Tu~VDUGEFJQItRgv)g_YA&N5|o-|
z8T;E~bMJxQ6%M>wv7)CKzGQO020RtwKNaittKq*7>V6@(hBGbHdUPg6j4P`v5&759
zz9#sKcW995x7K%F9=St?gHVCsn>{~_57N6Y+2_EY7XB1zx}-h~_<eDz*xyXECatPQ
zELp|?QS->8sON#)^{=FEG#`rIFtCOn66p8h5V(@W+37b?pIkK3v91d9jY*!BHz>#4
zX`c#dx}~*`iXgd^8Lb>Nb4Ga&6L8 at E2D+cx2SwDiFN2z1scR#?zu;{`Ef)UZ9JR)m
zHd at MJJAsgd``4%ZMg53;PKy=SfHbXPE+vqgn=NwlPZ408lN(1T%l_`%d)HmyzuD8`
zQrkzSc!$H0Tv+Nl6uKU(B$}15U5oQt$O4jBqk+li2BT*iBSkjesiu6r at Mpq4Dfo}^
zP<mfQ at b#Xv4AF+3`&5okBElp0r6ow at b{$FLzV7(3;=c|4#eW1 at JT+r%{vy<$?A9@|
zVef9X{L at GWB@ler`T^Fv{{Vo02(*8LJ`r6W!BXc|pKQ9GqPWcSW1t;EE^wpq?_UXi
z(Ox&Z_}}r at RfA5|kuGen7sI|DwoH|Y3o_l^vBno at S7J}1`c at P$@Kffusn=T(Da9#U
z%VWXq{4FPoG)-T|UL>C5QrC6sxgpYnzwa()2RAozXR07O6m;Bp`L*V);ZYW?J-43G
z2;|x^Hw2Hzo|XDSd at G?_d=p(iPSDcc39S5$Hva%pw2384cu=#IZe3NBZ{5Kx#P=2O
zpN{?<-*`_{dwoYwxzpr0kz$@Qq$wF3eF(3h!>HEgi${f8x3H93mgmu42l0-Db>a9M
zTJUa`^T!zT1U9N3e!!?JjQtKduR321cvs>Nihd+(c6t=L4uRo)E(;rNF#r!Xr*j}f
z!0s2!U^{IGwR3(F_=%@@b3?bXx{BiFdvs?H)O92;C$|-&;WwK@{hpUozIkK0 at gIq9
z^%)p)@8n12#yRXBRzHP!6!KbFd;ly#)4oKiK{&VO{{SnWO^C!&RAD7J%J#a_>(<6!
zhx`xW?~C6Vyc^&@2ie|ue%|tF*82KOkF-c*Uz<2QD+E^jPkQ}x_*d|E!XF593rhzK
zXjYnb)E;Hfj5PB$KJ&<VVr$^v*n{BY7Vt&!0$Gb{QqMi5tN~6^JZyK*PEJLBky^~Y
zQ9|mXEvQSd9FfzWy{k#n_7B;qH*V(|sH*$QHYe(Gc{CA_LBR*8Jq-j9a7I3~gy3ef
zDEY_sr2U+9FA at AT)-Sv%;7vMz6}`+i22D1`HMy7v8}LRm@{^I at 74aw9d_(a60Q)z=
zKM*`MHIIh%D}&@mtZDvK(KbLPDKH2Cu*e6!et>?~nx?s>`~vY7rJ(9JdOovZBzG{}
zSxQm-wUh=K9;==`tKhGS9}|2{@rU+fmg~irGHV*ohkQkBEcF+M_p1c3$-P<E1G=v#
zuNCOw-#mF_uCMbv`pelqc*@t^cRNdufj$I{@?aoiI5$SP--#Xq(>x`nTHJVg+4joD
z3xsHzXrzs>KJf$toB_{z`oH!B_?c_*7vVY4uLLq`x)TWU at T)Vz-*l2jP7X)nE9u+4
zKHB!s+T5f!7NmwY^1!A%gOGOg$RHoWwRow}n~at0bA3(Jk2EFu{{Wf!Nnw3fFAVCJ
zaO+woZzhdojx9z8jpM>$2vP=Bh#xm!t!?}%y74!QJU4Z#c%wpxP17a3dwWZmZGxr1
zP)n-kuHFDT_5RQ8N${S_;%9{H(%?ZJrwz(^8kma{M5iFAU~)%4bn#yXYmKgaKi8zu
zq|{pe!qRtJcHF|+<J5utE$ffeSCK52FU)KEc}CKEtG~ms>(S0}nSB?Bc6M4jerKlZ
z{si;>7+uM0C6d|dvpiPfTW>b<#N;%K89XjZ?&G_6uM7Bp;oVD4*L8axZcS5B(5>cQ
zwCa|Yp^_cw3`w~Bf!iQ$C!fZ>{{TU`)qGX(Yfid`&TFe}Hs(dTOL!g3FM;>T2OJE7
zdRM=G$DT3KB=~u(X;Vq2>9^Kb?L4MZiX~UUM`Fk3BO7zu0=)_}Y2k47J(AY#dLs(;
zs^Y8DQ+ioDcW1;uw8z71kAzeBLJOPIduQS}TIR&d34-NNZOY3DIYY?rjJ4Z*E$|iW
z9vHJ4j0&C<(e#Ut7Wj at yFolcdEv;3_z%oM-&U1y6)QaW5X+2I)jUOJDSk-m=X&|-K
zPK{=Y+b!U?-cU+gJT6IgJ@~H6_Qw6Cei`^n;9cLsj|5(y66$x~XM5dd#k{L!cy<LG
zeet$6U8Cg#zH7k4QjDhDRgv|zF;ydnjvn{w-}U$(GyHMZb**nw(>!b9Iju}O)CN5(
zN4A}JSlS>0DAp0oagKvOc!F!pqKi=RHQW~W^E6h-K1j2`0C%rc_!seC;Rk}@pHlH>
zfo^<ttxiXjw|5>@wX)!4RXHqkoD<s^73jM6?N{(~Q)_sj_$vmNdl)`!Ru^d#OnAoU
z@{3?&u^nsPgi_gD`8-A^5mM<|-nKkH;RnHq{x$qh(>xud+{2|!dL%z-ol8d&q8229
z$>4sq^=`fU1^)oTsrX~!Xz%_a>F}lG3v)E7YcOd90i;-vXB at D}Vl&hXb4P_g;GsVX
zJRLk&T35k4T{86*m+h8wpqv6QaUqX!&wQHazB2y+!Aq__BYZva4}|n at 1}1>I&9B&`
z)MdUiNgR3kfL(xc2_KCqxnD(Njua(RT9UV;Jm2A_qo-+}0KM at HlSO9^mvi>$t-|I>
zN^V%s{r+Hi>*cSdaz70|50Ba}P}J_%ShdjRNd!v_k+BX)&hkg8&P{Xjc*9G!_$hhe
z`%B<8d;Lz at DIzFvwy_~%<m0 at IPaN@IKzJ%2+1J8e3RoramG#cEBubK8TZ!Uzaz18{
z3xEOj&TBd7yvIIgq*LGUK6f4&(LNP;`&rPubEe&EG3lkFNVIE+<MZUm!x>py2vp~R
zn(FL6JNPS40 at qCVA>r$giby)fqjhxTXQ{&=&(Kyk#Jk at BuD_+~J{#1pF72*kb-uQ_
z4DST1!n(T*m2SB0Tn4G)8wl=K>~`hA$Z1)2?#S#ZM^>(Z#VuTJ{Qm%}5LtMp&d0|3
zo~3c&oigUy?QT&tnM3`a-_29B$A;Vr5(?y=gE_2C4_LU+wOeV^XqE{UL^2J^#2ny`
z;Ny{1=3;KlxZU#upU071U&I|N!WMRVdGOA$f2>@%Cgfe&2o@&5#>2So9eVmwO{bx|
zv(c^3sPxZ at z7+Vs1+(bh75 at N)TUE7y9ZKFCfhD}Hz!E~I=26!m<PIul{{TmSm2iac
zLF-?kcz0jB at aCfh_MdR@T*ZtyIM1jfxIUHax;MuQcr9ZWw#_{3GU7J at KVC(97+UQs
zHh37EEMBljvB{@fYf*zNL1#`<a0cZ+;aQhjefEi|Mi%Vb>Bcrjxl3O?@r-~Ma*XFa
zO>s8g7?G684V-Zy;CYt=KcKA$ela|FF9oEj-aj#zAHx-{GX;mmu4>j#`rNDyd{!0O
zl&i6K{u2)eYu1{~m;NWzp*l1IceT5;wzF%Gm?(|}ZTsK8-Z&Y}dA6bP8{tRG&F9(p
z!tA>TWA at v4gD~iD5Y?X>>Y87R<&x!eXd!kvWDk$7-Yd>-{3&l|brsc|A83VGGuqrI
zBxjM3d9RvEjVbad#ar$^uJtDlcYFH3(DjSo+AqMmmX)Gu66ii5TWu~GEp1tKIAC^;
zN8Z9mNI{dHg|a~4RjZ-!(%;5<27}@+1o)#%n_3prM?333GDkaYM=E0+9=}TG{7>+w
zPWYkXFArFFA at ofpg_E`4_Kn)v#w6d4UQz)h5r91ndOwQ(2l$7?zB%xn&bRRs!5?qY
zEG#UZId$c at nZ>p<^CGa%2Lm<L?RlR=nmp5niLEwV-=W(6(H{-I9{d6DJXWxHV^G%Z
zz(_7GC%uhXRoKXz2u<0 at Ah9{d2TJ*RZyER>S-J&a*S4r!f-Ty3?jZ-i%0NGreWm+f
zX(QtA!(B$}!TPq9;w7 at Tj!U~s36 at KQF|*}>I5+{h$EAK}ld=#G-s1<gaj8wpY1-G*
z(DiFjqe~A$Q23hnwRcYabv}f+`z3{yw9rf>j^Z_yL(UaRH~{|uN{zMnaH1)qidAwL
zaq@$Kj8>1s4~zaL at GpTh8%;059t^)`Hxfmu>v}@n-4t0d$#Pc#i2!4 at dv}HWYx_xf
zn^ds1)AU<?3~DSA*5cQ~cD7dRNX~b(INGb0Cp-XanPHUGq|Rwp_HnyuU)8_J at hic5
z;ycJJw0m2t>zV#o<Ft&sJ9Ov=<54%kJsvsdgT+4)G_MU at +nujz9i7GW=z5&_OS3=l
zD*9*RpY0o~cn8AA;r^ZC$^28Uy8i&g-(E096ioQ$C>0fU#t*M8)bYi67mGh?e-`+|
z;P$KFnY=loq?g-c{?)M4qPLJh4p}y;^2Y<_1Rk~NVe-h+ij&y$tKwxAqUCSv=4a?$
z4fqRZr$=FV at fXDR>{|uwJUXzTB=s#MyaDQJ{<+}~+0Vmw4;A*I at gGu1wy)bP;<Q*>
zJp8Yc4_o2?0BDbeHva$!yj!JMcy{i2wA<Yh&i*^MkUGxphs`L%f}z0}?b5uO>sZx~
zZB4Y-Q%i1fnAq at f(!CF3N-FWc-g8E7ZAq_p&A;<LgR@`RO5S+o7M~Lgh{4tT?>yuj
z=Dn}NKL>wj&xk%6 at vn^RH7^?ZUKG>g)Gy+5Yax<30m7*O?*9Okf)7gg4mhUHLa at bs
z(fc6yZdre1AKEJKkk^(mSVxuW#Sit6S1n2u-L&d-LU46q7PM~9SGV4II{35T1 at v=T
zT0!H>8*w2%Yo(RIRzK{Gr?;(3Kg6v(Sp!G#*Iu^qS%M=h+6~R4Sn9GOj!H(vtk at io
zj8C<8+6Vj+<Kq38xw(;aNg%nm%G-ZvZIrR)ath!u`ukVTGcL8 at pArRBn@`p>o5BpS
zw%IM`iSdv}LI|%ewF-B-h0*A_Ms7|D$$I{yto7Yq`L5!$(qxVZm5iv_RslFFbJHH3
zX<)t8;eyse1-Q}NBojj>1c93jj6Fs&KM`M2X<iAi{j)qhd8z41Z=-x@)2%n(*+u)S
zZxY&fl~iz(_H1=OT-SnKTVD8L{^G+|v=+A(&-P74u3#;2i^Cyh;Hg{y7;}(CX$mxj
znnrGNwcyMvDJDAn(_QMZ`Bt(t;@&{ck`6(Qld88k=cfm?ThjDBA_*>0^@$^rTY>gj
zik~e&!$%`=ovd=F9qU~9raK)z4M9!A>L*eXUENJ&xrK{>v8x=jZjUE%8O>FO_B}bJ
zHrE&Tu#7BL#{_N at vjpkEEBTXJ@<lxmDL1T{;?Xki0ILl5D0xxMu3B5p at S!u1ak??V
z{Ofe-@=I^!$7^y<a;2A`s%zm}hHc;3 at -|QW^ELD`!q!$${Ern^qxPTTWnEu2z>Ss}
zb}7jLbIn?})vcX_Tw31mQH3z4^UZczK8GYwBywoQ%8sQv*HNbUXK_-RX^%Xdg-_I)
z>yBSp>&^HabH~$*<x$hr+4vdp-^1Szl1MM?FJY2b1m1ZhoNgUJ>;+_eTk*z|u6WN>
zyYQvV&!k<+4cv&4n5np4Nl<!oj%&8kbcqDk?KB#Bf;I%&FfP+}+FOi%6yJ#61i!w!
z&We`$H<rA_(T&9CAm<qzS1oKKgSABO<iFsW)5OMhsT*mg{{Zj|4}-Qg+JB9-O><wn
zv9q$bl`f@%Y0Q&J)P?fY91?I&?$!2h{4d`J&1W6Mrkc?Xo@^mmkAADq&{xQQ1o(Td
z>9YCPscm$Keqj`<&nV;{l=Gi@?8d8g40l#uOT`=!vcxVS%VEYi^uZu~YvXZltS9e6
z=i6Z6LZl-U*Y)y0Ml at fBz7O$Nh4j0b^$YI}>Q at oRcK3Qpi*iX)R2EUl0nZ1o;ab+e
z419N>Sik%tUlNCiC23T~y5g${;sE6`qa>0?J%an!2jOpt8dcARw3&SApo8pig3>}|
zNWM at 2c8?(m#z1b^HP&hR&9<bgHH7e9uW4+i5)t?VpVGV2(H>P*%Q-EzFURB0i{1~k
zyOYG;2ej3qgrdfDNz9U57C0qP at -~c<nwvuXr?eer`Lyf3A6M}Hrl`_1T9%yqLa56&
zRP+L@*!as-)16igN=3)~vY77u8=BjH8;xcLw$=38Tj-c!m at d}+b5up&a at Eg`blqP^
zo#EB&rSg<ZEHTE>$r at mt%&c|+$5I7xnoq=?6JPN3I?jivTI+gz?8_X`NI-HpA$ZO~
zr`UKmPSRfcS^G|>;wi5O+2(^*XxW-21c-yE8D2=|)}7#Q2<V>=v<1<8JEwnV=|X8I
zTPfU5u{4ZXf|58~o&_2Sv&VcP at W1{RhsQm4#=7N;#i42UN|v_w10v>RRR9lETx9y3
z4_f+jOVD(C4N7f7+eXuEujgXY-a}^^%;moEE(YVDtz}0nXKI+dus9w|l*iz5KT6xv
z8!VwGW*Pgk#xwbXKb2hSIorsJa8X`oLtN&u at cY94CGiEWv8w2reygh3!q)K3cMz1q
zjzbU?vIa;T<2Y7*&&6FX+U9#<r|Pp^Ln6oI!)zOV=GvuLkcTI>?D~qfo-to4Tbq9j
z>o*+X-qIU+31PtpY{cYy`c_7+&vT}RwYP~PiB>3(VPipsQS1jwY!>m`M6tw+9BMEX
zMgXp6-{K{!U%_d2q-$DROu-gg>n)LnJpn4m8R^Y+eJC1hpp}OYfqXr0;!Cd($D(QD
zUb<9SwIgn(cL*@QIT;unaa)v74JWwCp-Yw9GAzrG*pWjFgOGXd2*{_=MFR>el-GQ9
z7MZPoWm=s%?*`5P0B^l(byC?Xx$@W(fu5qd-xm1q#vUJ0vctnJrOIv>^Gw5xjHpE-
znpYLiPcBFto;q`0A$|KD{5HDrt<Q=qwENu`T)SyZl33mm8?>M62#Lcl&6AuC=hnSb
z!rHy=ucmpI_UmtQt at A8#luQr`mCF)FJD<wDtM-unnvd-X{fN<c#{U4qcRE3k#MW@{
z++P_v+ at u^RrljMuCQyX!&aPbXx4;|!02*IulHB;Y+TO*BeTHo^HI8BO{EpGG9ls#x
zD~<Ti`!#Dn6udtyH&*%`&Zi2WvfV>*ExUvL*4&Sk{A=iaA5I!Rmt|tJJ;K_+kO`$Z
zc{ZpUiS;<o<5w$4)tnk>>|s1LDv7Bh@~_1ou&2fy4}IN_hAp)zA!T^J!>GX~NFa}u
z%9GQkE1~gU!Jimv{{Rm at U-)}b at aC<cUfXGNrR<khGMi}b<hl;VStC{$DhqLu$n>w#
zUmp0O{1xE6b6$?hO-fxl&Rdx5;?C*aRFy%1PbUMVd1vgw`%K+_(3bunTdxS+cvkO5
zc#=~r%<;<4yM^3}c-#7l>iXqbH8!<JI>5m}(}=$-oFDAl;ORadcwa=)bqzw&`7LCX
z%$6I>WNs~j2n3&~uJ^^hAJ%?6_=e-d%*RUbEu0Vbrg%bMOL|xs!ZFX5pk$nLgV&m$
z#-1^4H^w at h`T%9Klgd|P-4p^pTI;?MT5BgqyVkXpg4*L%lur$vv}}SHhC&xCOEb1|
zN%aD_DoxarZ>ir(E}T+NV}HQ_4+&{INh-Fnrzds_ji;ZAn%B7i#M#RMjtBLuKMNJp
zZ#8`!<v!1HXM_=eVVCC^_6%Hp6~1<~fPWW4Mt_|m&kOyoyh&-Md^XiAt}X(JwCjl$
z*bZ5U+N at 8eO@4Uke-`ykBjJX*;25nm$#h+5jF)dUw(Ev`39KJH6~M<FSLvsWz6WSu
z6?|#^uj1HZ*7RF at 6|%I_9h=H8yu6ahf--Z31E9e@>9*gp&%z5#c|Q&OI;3|tO2_j#
zu9`JtO+ICFnzcDj+`rf0erbNspBb0-aq(oD#jlfdZ!~6Giz|utE2-;)*p8yUpVYtL
zr+yED!2OfMlgWRM65~)$EAv$+^slO{{s(+H)4&$~0r1LWp*lna{;689d^_-^s^Z_n
z8ZEb>hfRS9{F1Jvc-5CQqD?AwDMytwes=il{t5}N`2PS;YX~&^EjHbxS6{HhB$BC9
zk%uSO+Prhb{xH^jN2jE3XQ^M7e>2O5%12;-;49X at Vl6Z)3mDNMw1Gkl0`gEX`jDco
zqcm%^T&VP3D(T{tCwN5}RKw1<$0PDj;Qs)`kBZ+8wTSf(4EQ_561l=%Tg|7>_It>?
zq=~TSj)$oAuNd)X!f%Q8ji~C^z7z2khMgqMJ3H9Uu)?gwg~?unIQ%R3HsZ=Fy at pcm
zRPJ2J+#g=G6q-%6%E7^qFvA98K^}w}QpLGR%G$F1gwzxxD_hI{3H<oaVXOJYU9LA{
zIQflX>iSfYNWW^7s}9YcYxlpz-?Nv)Ul{p^SMYw5aPBZ=NIa)M at Fc;n6!C}r6BFRq
ziMPI<HE#||+=FR$WI%u2kRRtu+oY_~&Fm}1-uM2z&&JQQ#Q?&}6b{SMqj}Xq9%0RX
zi+n-<0D?p7mf}f#8RL5$O?s`isR4n{w)M!*;a at F$Q2mKMF?=dnXVv^0eQ{!$&E}fF
zYKI=VOp*ACj()`Q+vC5_{PsK=YrKG~F5Y=K%}+k93#^KYk%kM-4nZEDTCaC!HKeSP
z#K`J!%EJU7LMuzez74zZ--moPtlT;qeRke!i**B)SmkJre-+I~wvuMboMo|>_Q>&{
zH=o9uZ({^zQJ<;evrOQ6eJQNrv78EC)tdVhYJH|N{{SsTGDi}x?(PtC%XQ6XZv(C=
zJkW!v=98${{hCI{?p={GSOJ1m@=Zq~i1=o~^v!1tP3%}QJ1mC;1w7QgW}|!*vM5q=
zJjSQah3uLvW<E0G^QH5n2OG2a(?*}DMvWs`dGRRuniIPN){8p{wHV$@I3DC6Eb59&
zARS2qx4kZA_6HQVBonCqBl*;kUc4*}b2^_;O=ih5IT?%sIO~dhQLM_venO)>oP$TS
zk`HE)zXyr62(gRjDmn+}`PKNmWp;RyJ9)V3$%FZfR~+chbC9FZP_Z_1yw;xHTRlbW
zmq%mQbPX%S8rO!kJ$l;6-D#S1u)}uoNH;`f-LvJ+;-_gD0|SiptjYXd`fb+FD90>#
z&p$SCUW4$GEq_D!d#qks=(f6+jWT_fdyAJpx|P7%c7h2bsK~`)c+=s<)VdwViUcsg
zH1iFNk=m-Ny97Tw4aDv|WPyTn(!5#Y at QSCicD?Pf`ZYce&E<jm<s{rvz4?;qdnLX8
ze<Qm1OYl$P_r?ttZxi?{K%VnVmE_aryn^K-X5bkRf<eX at b+0P;o$x<f_*dfF&kp#b
zMtvt$w~9H80#$6JgD61+gU9l(wm;yVU$p-Kg1!;_H}PhL<8Kg+1l(#-URi~y-*9Nc
z$&IRepw4}3$iHt7h`tQ?$MI`R at dtx-$#p2sn3mU<4FkuCBa!ytJ_-3)cI{lGQhhW&
z3KZ(jGKnca(D&bf{{XSy!|#b+0q~!R=RP8zNRvzQpwpn9IM_?(Zg$^}&$}ZXE9`UN
zom*Y-iuiX}zSXa6^R&vdM{6&Yj0lS&<cwn{jo9aoE9MW`-{OD7PXK<(aYy0Z8pBuB
zG|fC*==RgZSl*$TjL4x}6CfOcjzw`R{{RIB`27~4Z*8djH-k!!M+)=LqFt4YdYl?*
zH?tgRMw;fF()DcmMqk(~;Wh2g+9&Yc^G;6YX>~Vp$K2+w$NL9-Aj-6!6fzP0`}xoQ
z&tEm$e%${6v~I0`JQ`2Kc=b4Aa;tG~pxtbcc44 at VzV-E2!cT~Q6R*A#-1vvbx at MDM
z;+uwMve2U|YVpQ8d8M5E$FANnz$cp0Zfi#)CqoT=EZY(P0Ag>0w{csg--E60mfdzk
z_KT_C%UtBD<<16s3bhyPRq#GA0r+jA$bI9G{-vs|Z^aK4UFhg-?jq84NXGKgPhlcV
zPw*8l@?+FzJXcq3tZS>GK`qaW^x5uMhQuFciNHVJEX7D2_Kf{&K52IkV at sr0++iQs
z$KYWY{{V$!p<~)NAFk at ykM?u$PL1&6#9j;VzM2032$q+vjNCSu#Jb7y;zjcd42`SX
z99Ko+FN&TI at Scx%sOnxO(>#kvjI#)?qjzi!;Z;saJ%IJE9{rxbZQly~e(|oS;fVB$
z&kbsDME5pg`c+|f3ZIzp2F3t_ROf@&icguYW^_jmqP?VImAai~kMN(z at M;$}dY8?8
zZtp@^)9ja4uv$ZS8<5E<FtBbgLyUbZfz&_Xou3M|eNyXD)GmBaeS38yO+3?TN(_!p
zSe>zsroNLp=9ay6TLJaDjDK2%{7s at o_w~IoPrc-S<4W$<2}hZ7yV&v{hrh9}!%v0&
zBh$6*0 at qcx)hsjQPTG^40x(sSU@$$w714ZV{hhoA at v}wLAl3AHXtk-}XrR`u;|X;W
zW922s-WkUYkzI`5J at CW_58_QAf7|ST<6c?f{{Y(yz&-}}y${39UGJdO-T^9KM+cc|
z@)3~`Ba+zXIK?EJ*mUUH{EKZ*$-feKTT$?~zpLn)gjbRUxp*#-NLeDhjN&jiZ~-_!
zjbU5GbEmx0wx2Eau0)9MKFN|*7?U_ZHq)E~*w at itw#D9=;t!28>bfno$4=I*R_X~>
z7E>kcL*@lLk^=r_zG<Jt;#;PM9W05GNaT38F*6VOZMV=LPS~v{8)|h_<x<mUsY!fD
z!yqvPRH@>E7w>cRuPPeMxb7*-s>|<RZT+_ml0HG at o@cB_;-+3h=jv)`{9ad``TCmD
zp6}rfjqnoA<o^I_>mL(!BO<hGbR)LYLcSH*0{q*TqLb=)uMllsV8;Z3>6)jU!aJic
z?7K;))9yWuJZ3`zCFkp1UFXE1sM*-uJO24o%8=)hM??8n&L7(n=Ov9#7l>v^yuIhH
zde&<=qbVmPv2QJWt|{()8ENqW6^36p>6+ at auZmDh7>em)xQO<ZK_lpTiupo4e&ZP#
z%vp=YS22<E5`MKcG1x3Z{p>DPEFF43!;$y*fxl=kRZZhx1!&qoh!ey558C64P`KQ?
zKE|Po?p6g$;{Y+|3IMKGK>q-Ofz7D=K$6E>_<y15kxhEg>3XDa8%vngq$>=P>?*Ph
z6(k&HzCg0^-Sj&`Zzrh7BoSWQsOwgKDE`Co1U89mx6!Ok2>`rP!L(yOgl!}1UptGX
zMlDMY^!$&Y!quB`jbxs>v-BTZ at wS!VZxP%0b6 at e}_-|dCAu8B-mI&mxm}eWKV1865
zI2*Hy>f^Z7t!%%v9O)N&Vy^epw9QFliBtQ;NOpnrHSq`S(fdn$9r)Sdtu|dD^^f>Y
zbbyw?O=2U3qazZlK5}qCAp3jQ%DM-~KNa|I!n%H&;mul2F)gnpx_5;9^RucAk^_*)
zyD}7vWsP~t+Z*ynnZ|l+zKt|~+4x#p&m4GW<NF$MZF>akA||03hs{P_*~lZfBZ?=F
z#hM%c0Ew4}rj{|*Yg|gW{{VpJ`B#~K&)*hp{w at 4B(zSVRo$f`n32^aF41(j!9%l6e
z<@ve{bgW;F-?vto`!wr%UWoAO9wF4O5KlBv%(11sB;XQAIb(yz9Xirl6Dn;~_I*!f
zv+=crlKFC%wU at d|Fh}5PveC7BNdhulA;AX(*E{g<<2Q%CHh3>h at g23Drmv;nCg5a^
ze8}6QBMxxD at m73sCxQGM;O%F`_g0q{Ho9G_-AI<M%FGmJ0A!4lf%ww5LR at 7A<1Nw8
zc%Q=_FEC;~GUQtQt)_}yI_ym*_mDT3V=6EdFJgZ2_2S2e?6ofsL3q#Mop)Bhk^V{I
zQDYw5b=s^s9k?f{uORTh?cb at -;d^~nZvtD~X_+vruxh(xECA{m58`SIpZF-OQIZqD
z(Xah<)(7;8uaa9>u14MO_ at mhTE8*W2Nqsx&udkj}t%cIY$iFs7cP>d7<E499V9ZGF
zYvL=f_$ci0f>XhIa)H;))!X_-R3`rbf|6=XN0;GE3NQEdIa?q2=&E$*E`>&wy05(Z
zuQleLF~0bi-w-sbZw~2}$>Bwk6M1<gkdq{2{`ci$xDm)3M>X=5&- at gN#6f>^q4-go
z{+is(Q2zkOg<;))!ALx2>_UIS8D at P%b4icRT3*gebUs!5-`CuJigDVC{MNkx0D_Eo
z>tWmC4+=y709^F4*!<-+mvR391s3u0#f0%jow)adM~wdfJkji=K3Mga=l)0NFNu5~
zs_H&2w$^M0lCoQ<2-lu*$i@!jUzDFl>y9g*yZB4uO?O(4Qq?tG4qL7RNo}V~8E`rS
ziAH|7?O&dkf4A?&Ek@`=2a4~SM>s^auz at mtzjau;m+gP?ml29jFT}bdC_&s(MURgE
z0CWn<a)mu7G`(59JRM5QnwoFXH~JpO`%M1S-xR-R?~YP<W5N2Rj-jRLwpQ|A+r5H$
zFFS%tlEk*{yE-=+uc`k4XHVLfK=}Re&hKB9?YujzXyb0NXLlyp?OPf1Hy`<C-9hd6
zSLLRgXR7>Hy12f%z4J90Ck=IbsLD?aI<euIxWEJ2y-VPBr#I~B at xMoZ5sPVjIjy5;
z+SDRdp4p>(23I5HV;i#P8Q`$&YMNac5o!MBYhI4lcmDu_exvDLEnQ&)X~#>|;y-px
zFIS3O{sa%_THo4|#zM`c>QJ8T<Ox)MD9v68s(#8J1NEE9B((74I!xuVC(!j7ZCH8`
z6|wqMFn-EyqLBU(_`Bo(01YtVV|_qgL_M~+=~JPPxz_&xhxxC__v7MCHVFWG!EEE8
zogNea0FMDyq13H!f7D%D&QCasRbqa)HQ at gM@PT}I at ZOpu(LOF|J|nm at Za?snXyJc%
zw;KVE-<;ND+V|}hqp3QV!#@G|%?DYu+wZf;!`MhDu)W*-UxWVuD;vHw at NTcK{8rTA
z)-=nRJR>cvckzE at s4`s`uq1`^j58g%0P?*%*Q at wT##Vkbv at _US-dQYUDYw73^4}QX
zfu21uYvr$sU$mdaPYZZD`u-1ry4Qz%Ltz)275M`G#3}=j+X%n|CwDl-d>!J?+uP&c
zjv<mC_)6u{E!b at -q(GLueN=Azb4@}|WK>l at wKe(vN9`u3rbwEdrTkHWI74qLI5?6b
zbBvCJ9!J#GtHqAW49#+FB2W(bT~Od0^37j at AMn#37PJp8D{mionlU4 at KHWl7l6v(g
znthLqwa<zkGST7Hyi2QUQ{CTN+et2=dnBZ9kyPXpjB{40OIzt<M5w!3P5i&$pS||%
zuL?5ACRPE2gBWc0<BF3az6|}Rzu=`dp9cI%FM_ at v=~jBp_LQR9>s7zWw?|b2WN4&r
z#yL3y(>3KD2>$?ruKYxX_9?tc;SDEQ(u;iUXB3vQ0o<!)hJK>6vmddx@=5k={Ys*|
z+u&dA0pTCo6Vhw0cv|q6OfBY}afP_Ff9|^X9*j6O=?cN$VzQV1?%|)xk&L3??ICEd
znf at vKQSlU>Ez~XaUlPruT3X%xjUcsD+}ki3L%B|J#j(%u)%_RZ4y6x=HE4Ce6YBG7
zk*51oZt+3p43CwMluD7*pF>oY#MQ0leG}4**O>S=E4z&WwJZ7jSum9p?fYk#s<_Vd
z#@0E{aod54!J2Oxq<5PC0EYD)Xlc-~3uWR!lB9up;X>~K_B*pm#9b}VZ0Sa8^UKE{
z at KLWHXd2b-l$sBO?5BasZ;|dLe{Yv?u1eqb`1sSU&W&zt#3bWxmEq=<i1sd6XYi^~
zZ*xcN*7Hm6{{SQO>YlAAz*5-u?O&JI9~XaWUx*Wvq(|eejeyG8=@Hwn)HjqcKN|F3
zg5M1P0B9{&#UE+${(-M++C-pkU3*?In6OFQf;m at d>D5mZIJ8GS8)-YgBiDax4}_lz
z^jG1#o9`6-J-?pp#!PzthietQu^iwQkg(m?IAu8%`Jwwl{5!hvr at -HZHy3d-&jrr2
zrTH$S<wUs-hmTcoc;lM=Qt>CjS at rEA-rre<&%)NoujWR4K`f9+O5i(hQ<6P69`*4r
z{1gi7M)3at!hZv38gGlVPZDanPOoremrS`?T_KVn0Av~4k1a-Wb6HCIG|Qt#Gj7r8
zx%u_>S!HjM#JBsaQznOW{{S?Wi3;~JFclr%wSO@=x^g`M#b(QOGaR&x`Sm%iE^{a|
zMtw3Ui4NA}j>`F}k=w;{a}-Lr+`&L!b5&TkUTOB1X43Krvx6Il2OS7Gq}cfmgG}%a
zse9ue?2~3z`K1sf2d6y_eKF2!=&ypG2>c;`;t6ehMW<cr78Y{F9qrUI1 at jo6-mF>U
z<pZhiY9HA)<5Temjy2yINRaB<u9c?Ee5-i?mNo&ENoe{Is!tX5PLJ at K>sk15KZ|_0
ztn`b?+{=9mtZ~7)xsU)btCs$Px~WA)bIW6rvvnox)Bd`iA$aHEl$w8!^$k12z8}=I
z$PDu~k#uu3H*hH>R#G at e+l-!>tgjDv>sI(kllc3=No`}PO>H)lt6E%Jq^J?VSqN4H
zDI>quzQD2Zt*5~KH(0&XbxThe{{Uy(yzt*oZ~L~}8EpA&#&gFb-o8H7{8=xJJZIu7
z+sI=^@iY<YKM<mTsVt){w07sxija(wl1A~1SLd=zW&Z#VbHwgG!!ZpMk|LhWfaCGa
zL*-jw0dT|VAO8Sesmu+X#MbZkp>|Km)NMX_+mEJeozCv<YHP^ew=~2sZQbXb4^;mE
z>(+*s;raD+X0nRn=~Us2Fc!h|;<>Xke|5hq(bK#~s_4+N*<D;(#>aDcY*Z8LS<TAc
z;#c#zwHQ+8UfI51D_`+FTfm+m(axW7;lB`Tm-;BVzP2r?Brh-7qe4-`L>O+sZ0E1b
zj`fG)=;bt>ds5RO at l4v~oHq{|URtRUTp&LyfZX7W93GYDpW0H-b at qvKaP0e>yBx93
zPJXr0K81O89mb^a+v(Q0^J9galG$JaAmsPYJ%v(Hdbq2a%N2-(T{zX3FHd>x>9J}!
zwB#9Eo3<yQAPTo{_8q`^a>zjbIWQ09Q0YDu)U_~L-p+f49pR0i`2$@QpToZp at JEL=
zo1bWGBtNbx-5z#{?t2%(Z;Llgty$RW(90%;Zvj&Vmn2c#fUENCX-H1Ja(S=5{4wyd
z9bdy9AJ^=BS9t}7v1uLUyf>GqlSZx-g>X2}%mzml`GcbTT=5_5&#CILSw^<LBE5zM
zk_+2N<yfKn`&c@#$qYJUk)FNN!N0Vh?KpfZqb`l%tv=&MYfx;ZHV_fyw<8DBrw7ng
z`$=~-P>WvllKcMvM18H}Uk}0X`$GQEy}8tUK&s&;w6)ajpm;&Z4$V6%6(kXWbDHDy
zuZ=z#(?(Ol+Khv%d78e3A^eP;Yv)$@_xn>@Lo}c8jcIbMxiUsAEuVKe!Cdk)lheId
zKeTV{Gh~sw_$x^Pjs|qAT#v7%P2Y2M8f#8v^X5L$_ at Dbkcr)OIpM`Ey!&hD+UlCfh
z)B?)V$xLcC<S`04$?cwoy(hz|qJGfd4Rn2G_eRvbKW}xqSnVYd#c-G<c_B{+85pnc
zU1#>({iHk_qRpvlnnsG2c5&x&+rUgKkUr|1f%L532!Fv`eki@*hW`Lf at a~`q0e;a7
z#!s*+f29`eXyBSwlK%k7wLX{qw0;$MW8r7P`1M^n>rnpCyVULMqf48Gbai4`_zF3~
zn)$2XHiInR8$27X+Dxj}cd^^u!~y;NyxEP^k=qSiXYEJ(a`=z-g?|osUsmwdw}!@(
zefGIh-d1BPmD&#{fr5WJ)%X$dKIg%j&Cac5qn&c*6_3h*$|F@^*~1gt=}vFlw^7xM
zIblvOU2og(KT^lRPlu6={{X@(X4vl1NPqTfYWyVlcN=5=5q&rD+<%)_#5dozFU0Hl
zWGmp$4q6=iqToEtDuu`GN%3xUAn4v0fqQM!2|voF%!dfA9GBz%N8S<qHSh(4sZR>%
zs8sIDLZtD|c{TBGh`t@^UOe%yhkRqQ;{O0vJ|<hsi+R%!eVEK+!kmJBLcKi=c~^@6
z0BygEUJ9Kf)U32L({7dFN#fJhNF;VAkZ^0g_+R7AH&pmh=jzujtHEa+kX+g`n5D8t
zZ{0n+<c5%f%sK#bn$jzy>P*s%d1CK=-M<4T{t7LucvnK3!8#v@?Gs1TBDk9BS at h_@
zC@>Uc<nx at KdRNENf5-7LUS3>_Ym*e-Tq0RKx8>ynJdg=KoLASn)`{>lSb`*B;{xdI
zD1AXzW4(q6C1g`vEysht8flufrPh*{G0SPhGx at W`!<_uf^8?q`sl~}8hdP=@FpZM*
z{{S=Pza7~8JMe#quJp?-Z&~p)cGyO{ip?yMp963T<hB9G1degixn}WKgX3}K_;*m4
zdd;X~Kax{CSK&QRQ1L#caUGSz#c?r~ITkWQD{>F(RBiqq>n_0m0B2ln>+`12YhHSf
zMIXZFpBi*(zr^%^2(QEI-5zagRq*zwC9SetE7 at A#h4Um4<`cZBAwv<n1D=Bw=da^U
zI~!u~y at 1DgB$3blg<glR_zM33z&;g=!`g(FP- at z>r}mP-m$6F86oCRO?P3wgRy$8P
z#%s>kz;_YkO?PJ(JzC*^#*>ugtYi2OmYQ~#=FKk+>)K|wt=U-5;hP~9#HkZBFCcM~
zjE-^Mt7twOO?SqrrCTSOvt9WSg*=tqK>aaYCx*N=;r{>*=o-GidE(0mwOu(-Y1%|l
zw6k8y`2~Xyl@>mvvFCsVaXt_6RK67PC5EjYT5CzxVc#Si{{Tvc-O{LU3TaDC5&CiP
zd*FA&{{#j2NJHYEhxVGhB4k;>x+u~-g+JC8A2^I>w;9K!coKXM at YjdGXb&1%T4<2!
z+6J2xSC+bTjMD^JfOJAe3EDIHit0Q|{{RIT at V)PYG)V0H6Mrv=?SMBTeMOf~m4Lt|
zCFGB6k4&2RheiFSJZGi+P1U?-XzF!6PG*vLRdW#?kS}FXfCr$hT&Z*0w^Ki>P8A!I
zUoBHU!1#sXJ5L&XD7d}1 at IH^>OAS8ZB!^JbwAY7oGlT)=VsZ}eyPC at QW$@cglE>o3
zh4!hZ-P&l{Dby_Pt)Fszq+y1`j^TEi at L!7m0Jm?&KZ;sjm80HVTj|<PoZe)17M9^s
zNiaZpGo8c&a5 at i4zwpDvuYK^>R*oz4Cx~@YV!F3^0s(Hgz(wduAp81Pl~RRDn8j9{
zy~Lf at bKk?)($LGRVd_Tnn^v;X7+(`&vu$SkY*G1zN!%1?KU(q+2x+%AUMjYRScHcp
zvZ>y`cRje`y6+e3W_>zX<YG&mrBBzI^er>u$A)|}4VQ>?eG1v`t!+iTRxauyiT8&r
z$<={n8TR73TeDU?c*92GeJ}q21pff>uAOh;zZU5)a1!P_=&m+n_)L3G>XqYvwDyjk
zKmDM5N2y=l6w at tCR*<BBdQhl21oTv%wdNlN{xRNoPsW<9!ozNZT$V<h$MO^{lA%xc
zLmcA0Z^6C>z46S~`qkJk7?;R}Wyw<b$zlg20ggM8D&?)2Rc!4qBj3N^pWZ6B(5}2g
z;Ol7|Su!r8Z48aOYXTBYzfe&A0=|&_rZo at v$6ttKoUisgxctR@$@@Nh9l!8?r+wq=
zEm+8!HNN}pF6!Ju;@QCsB9MM%?l}G$_b-j!C5yyA0{n4h3}!~S(WeR&=Qv&8(ub)P
zr_U7pkI#K0Ubl<GR at Rd<c`Y)TP#&whBv(zOr^AbdmGukOwq at lZOCbC6{?_g>UM!l_
zV#Q-EgVz;H`$-FZ>f*;>BaBJ9l8^XZk9RE2C4hs9r5RtkJ3kp&={Fkm=R=7Ni3_m4
z#U}%kgPe0%4WQ28kqRDvg_rs*ec}HA1m5u8gQ|Q#@s6pf+Ud`8Hl-DuH+QhbBc>t9
zSj>Qo<%z|8Po~@H&8x}wT~5>N at aofAm}Ao6NYuv;=ZTyFm0S{A)RA5VOx{=ssx;%w
zleOHH{(A;0jIlN4R#uJDc1uNdbMdO@!aAMI7>3cw>y-rm03 at z<=T2=lc_6#FhT3Ip
zGDzeypF%Oke%;67jW5FYH=l3Rrq$%IYdFu at Es-OZOP1RjC>$}t+;PAhoY&-U?Qdb>
z&0F at 4_>Xycs>=lJtj?wwqZnPSw;g?}vjLk=8CQ}~OMbVtyYx6JVI4R*^!~e^VKZAs
zpnq#y6P)1ef30iT-|5hxS+7xu8OV*B`qv<I?+HZQ-rh((wu<ft4173ai7hml)e<y7
zk at PrFHy$&SjGFpLy>9Gz&h2bTW8ym<D^Rz-v}c}pUveq8!u}`Hy7)dk>k#P|T69*n
zF+*^2@(X1$4^SBLKMG?t9~MC_g)OumAC?0<0GCq|Fh?gD>&0^dNlE*GPu93`I2<-I
zN>$;^(duCHTy6%NrH84?pQApp{g@%P)if>=>vt+dX{p=WGFz&%MurwUfMbunirxLE
zr(3TF_)aNpZX>p9*^=Gnzk*o2p$J!wC{yQ&LvnZZW071}!GDN49lycRp;_uy`Ui<D
z?xvnwi>SB5s3VX{J_bW3+$rtPt$AOKd{nx=ycy+&R;&Rn)G&y=;yB!J22L<Cc{r|w
zl2%$Av%8a&w|d<74~2gfzQv-=r|bSUv(hyUK0yVbzM52fs5Xs_xG7wZx^hR|uYT~4
zjeKo+3QOVt01;Yi(Gifkeys%Tf8ZO#ei*OJ4IS&y-)hlG8<u#}VZr0AVZq`_ZJaVW
zRvp2?{OW8t&zs_J at czFO_BFmed_eG$C-&B#aSTM`edVJf=l$$s^{w4E_Oh1>FEq%c
z0CHlJ75NLJe$XB>&>;}o_?K0N- at Ge$<uU&0Bv(_We%1aivm?&Fg7kM=+gRKm#~G)f
z?H>OCg}*DGu91G!J{i^Q=dsjn?xD51iJ+Md8A`g9Bk6-*kXnkvWv<`ar^?o|Nfb;+
z--I~|e*i1F(?4vC;dM_5=+}e0+D$d9pUH^*E6+6zYTLy+rlEgnYSwYhaQ8OwiG0S1
z9OrKA4cIxZ{2R2|IjhG@=r>x>TT{?=EoLkDVV6vv-Zipfe93&x{{TAsF3x}66^;F}
zfZ9oIY!Z1GIgt(sBN+W_Sf!`fFQvP<`!uSk(MC|Wocq*l<L>;Wj!&g!Y1V6ReKI(}
zL%K1J#=GSP=F;kNDOn?G=fQ7n;#R!X?gpS`K{_ZW=4R&y*jI6zoshvM$X&)GwN?4C
z{^<6j9}aBKiM7kkLU>x`Y^_>lhz#y!0b^W!abHvTN8uH|iyRj&iw3av(p{M*ggoQS
zi)@Ogj at cX><nfB}WbG!A+O&<{r^}xWJ}`KL_HFUar;WTS(aRB5hU&@k&|F4(qX2z>
z5Np)F$Kof(uNP<<X0t!R&j<LkOTM;_=H6{TTu|mWP|$%O$T&TXe1Gw~;XaS0X at UfW
ztr*$EVQr(S8cThK7*PxTu4|l|<}qRSx#|hxzK;I at f@=IxyYXMZ`_Br_%Qmgy3&U!O
zE09{%{&>Ck`IqplTi0WyO}KQ^^8C&B*QJK(CDs1`WzQ7bT&r$rbW7BfZq9cPE=A`x
zr*Gp=1$diKTYY=sx5Vu=*b)B#6B~QSjeC)~WHt0Pwy~=b`^^EyKZ+aF{!9gD_~XNp
z{6z3(r=Z-&f21wq1^Z3C%xf%UFkn=N_Q%lDZQDa7%HFYGkNKW9zY}~lYi426z7hOI
z)NNC-v$%~2^gd*u5%sJ3C&up($zt}N9{3UBXSH5DyPNAskxA^p$i!DEFYIKJ+Q$Xn
zwc;IGDEJF4?Xm_Q<c21_L*Wm>{{Z+>dR_IOhcsvsEBTgtr at hqt*%_5~j0oWaf!eTy
z>dD%0vhREThh<fUgg<pFzwovA^Ztj6_><%P{{Vw^%ZqEjhrbK_DXA&U(d!-|w);vF
zGxNs`Y}v;(QNL<$9$(@eA6 at WOfo_m!UIweGHa&_&s%u-vn$L-Kj~Qy$S|oluRBM8!
zFAn$;(HA3+`1`r$PM>=f)_f1pwXJsZUmi4<$F}JNP_?8!E!3ime(y7LBzA>V50nB9
zPaIc8&P3w{qDlOp;Pp5QuOED9 at e~T at U-8I|#}a8?3b)f?{{X+2lMH at U%4 at UuhI?S%
zCh>l;7-QGOKN2i-_&tm^XzloBzO0YJdIg=ibK%%-?qZRA$V>s`l}HD8`<aOx<Bol+
zoz*@DP2%qmL$B#t&YR&qHsK<1XQg;%$*(XJZU*W_EHmu9P&HP4?dhlFd9H=<H{p%f
z!y~V2R=O^^;ya6ZWU_1RYWC{QoMc8pxL{p#)wbaCiuj}U%6l&h{6Ek%9ajGULzh~f
z?QbK~yg8){OK4zN-C4`|NL;g!2VMcM*LdtS&kWkDUCkPmP%Yl4DtU|ttF}K(SH}MU
zwO4|C1Mw%vkZO$vpW>1%)(4eX$}Nhq!UhKzIVba}al1^lR%$X$b6>ytpO4p**v@`J
z(BspZ+VEDX;q4Of?lo%&wV;0NGm at x1@CYWp=ehlvz8c;WyThv+pZVhMKdob4e#n0f
zuA-}^U&7=5dEB4tR_x9s<<>um^C<C8!&$*Hcs|*4-7cjc`!#a at BeU?9v#G&8n*(U}
zfk2YpIgEvldV<|MSJgMau`hw=<_Wc1T#h+1wm&tlUtRr!?POf&z9X79BOxy$2lZ1)
zXg+IwlRx$~_{-tnfd2p&W4qMtA64+>?X;G65i^a;9GC>2FxbX%-oCwG6zcvJ at cyge
z%_`<!6L<*{Ys)KWqiNz68S at t*Mt(qcpZ7(4H+%aOd_dA?^DJ)k`^~(JTx=)v71sDu
z!k-_099v0mq^0B#OBs#hw7o`GQ`BwU(DxO!Cm2haqFmtBuWyq*O3&hFf_zzVdivg(
z_P-6qZs~t(5NkD>22#Hyzup-HeFc2E{k3hV_ at h$3vV_{{g at iV-NZDk82H3+M=KyEl
zHPif?z#kWUQoc>@gQ!U!c!+FB!TJIPR?>fE--z0_W11^n8YTxGe8GwK`EyrRs+(3K
zGNlC4ce%<p!do8`nRO-cc8{jdbml>Abt9`s?ATm>wdJ~}+O*5rttMq>g~}I0m24iM
z_Z9E+{>OehPrIsV&;I~z7=P at wnRD|Uc=|~&(&_Ua$L$~DE1cKbL3jJV;2sV3xjE*#
zZ-?Fn*1jcc(dimOA(@8fmS+hZYCEwt>0|ab@$onj*dKqikMOIyf9#j>BF7>pvbP?q
zbO-VjAoh{(_%qSGA^S1kX%WD;o)+-#xguk9vg*>QW9x<E at UL?4{{X{FeK{c`!TJWC
z$^#a(K5Hv_4>B?c>0dMG{{XWu#FIEnjbhr)GtxnH&CjM5y#qr1oBUm3!LGg_&uj-c
zwlb1GHWXQP2)bTx<a@=>g0F8agmL(fQql%K?Tm1$kI4mc_x}I{HH*_AUx|Jq4C9Y5
zDFgB%j|_Y`)bw(Oe;w<3fL`Hgl^68{*Let%)dD>2FvbH);GfV6cecj2y7z9s56Pc9
z_ at DL~J|@*3`t!#(A2%)lGRteZhy#vGRPlbtdiI at X1+}k_*<gt_MjG9~1F+$%=wWbo
zWlE2sr8gr#GXQ;aMz^@E?S5zXpE at _}mEzC6AH)cV_41|v0OG2o{{XT-jojhmt4Cb*
zWtaSG=`Xe at Zp=H7C|mykpXGD(Zq-+paQFWJou4jUe#bsDxkrvq7-`Oo2sueP_N>c)
z*e6_8^B2WBdP=7&h at 6bq*M{)7%Fb4iUCu(tNItbL?{-6rd&&ME<a~j3`w at 7=U#;5f
z`fbG7{{UGdI3$jptFzJn0AxL4=Sqz=Zxss*gmxu#<lLlo%N!j374&G4_!%Vk=7YN=
z0zmX6QEto>T6gAWgj)W{cJY6$@xHLf{e at Njwa{4p%hp<R1OEUCcZthmjh7)u>0X?{
zix5fc*Njt0AbhSf?r~MGa;)v~KfRu7u71o~FNiEfo~7bX5#C#d-XorH;4tV$M_SwP
zSHP_c!EFcG at 3lM82s;wxfnRLk4CA$RqIp-VjQbivdpO81fIEiflTGTu#Xi4_EH;N?
zPbv5jnpV)XQ=RBbW2VJ5Rj+01o!RM})mblJJcTSzP-?kHqTKxF&~%>{_|sUAPSS2Q
zJy%n^W98b}mzG&uSvXb6JXfY!{>FbDb-+Bo1Nf?8>m{?G{{Y8`uUr2Bf>`L^YyG9+
zy^nEwEiz_6c;K)LpZt2iTXn4tFBca}eNaO at QlPnL{{Vh)xjQ!Q+NYjQGgRc&t@?#r
zJfNc}%XQn%$Ks8j{1dn1j-bFF18NaSMo-%AA&ZY+nd_<2zu=bN7_ZD;eU^)2WyZz2
z)}aj9;9w~^=D$_^J>mF=#4Fn-)Ab1NEbUrY^+{d^P_j7-gc%^8p8>lsN{KGC4*}Wu
ztHieYb?%^=L}t|7++2B$cXF(MbqqjZes<fq0m(QVX0f}uiiF<sXX3x at Bl{|NgZ5<B
zG;J%zk7Fg~r)t-63kl4ssI9jQa5>F*><bOE77+$3({RZAtM1?UD=xn#rSWgUKWU92
znS3=AvO<S&Mv_Nj0X=Kr$)r|cnKll%sZzK>JyUl!b*~m)YtY%lcjXvuBJyF5I1(_c
zl5z5ZlahHkHD1qNxv*txX<8DXfK!4y8qZAaST5<@=crV!!@-{m?|f?<lIiiYK!<6T
zcL=%tYVPlHnv7Pc=I- at b^&6L-X}8M%0C|}5Yj?sP8r8f(JddVZ-QCX;lN@%4S(uNf
zVa89rc9;JE0dF+9w5xWK-dnv!WP%u#n3Bvu9N>GOz}MJ64n7m<KMk}v?JQ6=$sfGB
zbMraxf!J}<i at xGdnR}@Ck$wvNMAsw=JT-e7=kH7c0re!-p1u1pc<V*Aww4<>^(UD!
z at map(5%f96e+v89Sg;v(1ml7ZDW7C{7!!a%{v(QzwE8pizeM<F;>`<Rv6E8JH4A7~
zVY%7{z{hfX3jI<2kp3A<;xB`GR;j0IEv4!(&vztuF~+Xma_uUh9tkQB73T23#u?x)
zN1lxn>|@HX!5@*Ve}P{YpzyYVuXq~gQF{wlx at WY#jFa|jge7zIU@(6gsP;F4a*U%b
z`dIb9gP#(tbS-ySyYUU2w)!3Il-3%A_wjivFk_ZEI5@#!#~y~hWwHIR^q&U#-W%7v
zJ0$i<B)5v_T{4NS@>L1WdD#Kf2rKuD`_=ydjlMh9HF)KZ#5%^8sl<^-ZD}i|hE?*@
z?iUys$EHnuoAGw)E6B5rolLg957&|^wObh{eI&2Y&eXMg6uX)`REl^SM=>(Vk`q5D
zKKR8&Z>m@(H>#`m9c#`@5#FAXu{}*LX2znHi63-+%wM-Rhrefk177GC9uIF3PjRRn
zL2d=o#Ic=<pkS%wVDs-?b*KCk-%9ZMs_8!sg2b0I-Gsf?B$Z3byI&)3BN^k}*XMLo
zvXhfi{iyn%#=JV&MiUV}dXd)m-1XLBG_A_Jb?NiB;C<Jsf5A%MQMtRGKZU*@^KLF8
zx{$ry!w)tuxZrL85uVlZpN;+^OXE)zYW^a>)9uanr*$RV>=TXd#f~%En&6iBfsf@*
zI*4W3az-#~qYIbeu#$758#Z&-#nrDKNm|~9squ0lJ1yW`dPXW`_>FxS!n+J`HsEnw
zjH&~jpLew)At$D5)8=Otmt(Yx#rlT7d2MX-63*ch%x)JaAAqkY{{Uy-fwJFhK#gS@
zMza)<ff8O!hb}ojUPw^H at Hbb<8V!$^IG$nCl^L$%O4hEdWmdPINSGXkM=M*wDJRTk
z`CO8Fe2=#LVfz+o_P0|_apC=M!m_y~<hMd#&#ywik*__U_BYY)<sp1iepK~Ei8EhB
z{>~q?PsDq_hkA6kI=$#N<H%Lj6=zx1K*NlHKs`G4uU-EDh2L$gC|?!$D?!&6IB8*v
z$&~(J^Z1Ivt2+auXJ|_6)uZ9L{{UhS2sNQosOq0+Kl0SN{-YJd>z}Z^i6J^yh_?fh
z1=YR){6YSe`Ze~CgWCEZGS6M`l-<lsW{H0cu>B~u_%q at E0247^34B4)wHZjy*{_qz
zlj*_h_*9bVN;>QJ-2AE6e`9YR>42MPto0S at Jek6i_%<ugb>D)1H_#ND&kkRr593&i
zujVsfv3j at c=i{BNOAQ)5N71ZqmALvg4S9FOJttK7d!k(4Yu2-PZAZwL8jK8LQXYfl
z``<xLE9@)DeXqTL!yl4&dQIhnl(@H+2Oq;C6+f+Zeh0eSV-aFQMIlYz$C~zU9(-fh
z{@T#B_JyxNNy%L?O5^?pxvm4m9wo5x3Rtzak7=V_A~?AgQS6Rp-SV&*;DKG3bmLJl
zn{F*#em~?=@nW^bq)Z#jMR3dq0lu|9pCFz!SHjGzw7xozYOu7{+MIC1dm~3^%mlJV
zGRnQkteY$5jT#e{bo-&W$n0y`c8yMM_~eeUvG1R<``T)LC%V!dqhYDrNos;t+N}LT
zlh_h5pL+X8M)78!;|~q!+NPa1*>%k}D6Dm at 7CFF{-c$uxXYXNv>N?lu$AWxOb>WW@
zxp#YXX*|fL&M<zp^cC;Kod?EDx0>y>#kQ^$cWOFS!G=kSea3J&EIH)**Urycj>oM{
z#&AgW&x`*65+G|ky%yhA*KH-1AGLXQ6C>%jR?+1QS0o&lR_Hy(Ys-ISkJ?8{{hGcf
z-0S-7t>xc`^{WGEbsdg8#FZR0ZUG=1WRJ$Y<HUY1)8Mk3P0=h?#@1&tO(QXRXJg4M
z=ii(TE6aRitwVWX6`W;SNZ)q;!`79P+_yePlGpnFwm)FJKmPy)Jopo=C|R`~V at iIX
z=~{a*{Lq^8Ei?Aq_#3LivPJP9ONV#xT%@ru`tD9E at HQRs@@50+S7FpVzO%XZ0+ovA
zp!b9MKl4oe;?@5EZXbcVJVoE)6@}6M<&-l{fAQ4CaGKBj6x-mIm>64L>w27k at GbP>
zfc`GaUyJ8g+y~DgKIat+>IWzHe~C0Cx`(u)wuAY<@<{z>*T3Mdegd!zEPNNP-?lze
zJ<KqJ`EIW<)xY4cacT*uB%ci}o;l(2BhIG5g8ablJ3rd(@9STjf@!8DQZP at T8Ld4p
zz#b#<BVxlwySpc$iW85|6g94dJWUwr;UB&K0Gali{{X>MJ|SvqH17-eM at 6v=*-t#p
zcOnuo!Davqdtg`Be+T~nYi|Htcmm4P$KEcUO?Kii+Ki5`Z*LpFSm9JZENjyvo~FMn
zyfynX{6 at Ku0jC`%HvpL~W)bo5WY?tVKe8sdIa8_lh8TzOExI&^>641u3Z1>{+`?Fu
zH at 2Qj^*-eIgW<0X+s-jx3iz7C#Ckm6G7q;c)bQt^$zoV~o=1A)T4md`J8V5d at DJf$
zZ}7k1?Z3kxJlX2E_da<2>{9I!xyN0gb^L447j&5;c0Dm!$t3;OUq3dg{{S*)*&AnL
zk;idLA3wl4{qCltB2E_^`uCu2Tmr3*<xMLRi5h1+N0xE!MMn1w7=nNd@#{_jnRB~n
z2OR}9T^W?ShQKR~4zvct)^*9;GuLS%k$y-1=;~NdC5=uPf!`ohLQ+|Y<0H3BP%lv@
z)NNu1%$*dT3uclDqMT+HE-}{_6vf0ya;n9;9i3?n$H1ycTyeqePTfJWM~j8e$_eT1
zQB3HV;FFwYmF04zs3SeaM$NSgHtxOpiUI0K at v9*UcD{OnOe89iji))?+N4YGCNROz
zBN-j4oy+bc=U}}-?L~s at u^9`)t~uj9DXkbY5HQ07I2=<F;R=O0&!IhO07&Ke_oyQ{
z0+ at -GF@wM-s1$7>Gk_2KU8)gqgfHH~`=nIsD>^p>bB+fTST-6hijS1%Jm6DYDkkP2
zjQaCNWbcd)cn>tH!M^ardXCh9YO#xvFH?}DaZNHv&C6r(6f>1#bAWw%(@ti{;f^zt
zRKR{)2j>_AAhj^Dez_g82NfF$H4~M{90jHGJi~@ljD6}X2vHz`$@2)~9e-M3zn!u{
zCmjLrO_-6%I9zd&%|_A|Ew~W9n0KPX*P%c5l%+zE^B$h{9GA1HB|s;p0qamOSCKwL
zzo;jrGHjL#23X^zR)pP`66R$eHUY;zwG!Smju6H<?$uf4XyQAV?j#O*;-XWA`A^N?
ybr-nxFTL4T1g7N9I2Be)*u>b_!zY89uEa3Taq0l;Q7Y~MRk4=9C#?uINB`Mt6;`hR

literal 0
HcmV?d00001

diff --git a/ext/fileinfo/fileinfo.c b/ext/fileinfo/fileinfo.c
index 9eabcca..4c9665e 100644
--- a/ext/fileinfo/fileinfo.c
+++ b/ext/fileinfo/fileinfo.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2004 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.0 of the PHP license,       |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: fileinfo.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: fileinfo.c 308327 2011-02-14 15:32:02Z bjori $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -478,7 +478,7 @@ static void _php_finfo_get_type(INTERNAL_FUNCTION_PARAMETERS, int mode, int mime
 			/* determine if the file is a local file or remote URL */
 			char *tmp2;
 			php_stream_wrapper *wrap;
-			struct stat sb;
+			php_stream_statbuf ssb;
 
 			if (buffer == NULL || !*buffer) {
 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty filename or path");
@@ -486,17 +486,6 @@ static void _php_finfo_get_type(INTERNAL_FUNCTION_PARAMETERS, int mode, int mime
 				goto clean;
 			}
 
-			if (php_sys_stat(buffer, &sb) == 0) {
-					  if (sb.st_mode & _S_IFDIR) {
-								 ret_val = mime_directory;
-								 goto common;
-					  }
-			} else {
-				php_error_docref(NULL TSRMLS_CC, E_WARNING, "File or path not found '%s'", buffer);
-				RETVAL_FALSE;
-				goto clean;
-			}
-
 			wrap = php_stream_locate_url_wrapper(buffer, &tmp2, 0 TSRMLS_CC);
 
 			if (wrap) {
@@ -512,7 +501,14 @@ static void _php_finfo_get_type(INTERNAL_FUNCTION_PARAMETERS, int mode, int mime
 					goto clean;
 				}
 
-				ret_val = (char *)magic_stream(magic, stream);
+				if (php_stream_stat(stream, &ssb) == SUCCESS) {
+					if (ssb.sb.st_mode & S_IFDIR) {
+						ret_val = mime_directory;
+					} else {
+						ret_val = (char *)magic_stream(magic, stream);
+					}
+				}
+
 				php_stream_close(stream);
 			}
 			break;
diff --git a/ext/fileinfo/php_fileinfo.h b/ext/fileinfo/php_fileinfo.h
index 2c2e06a..fea0d53 100644
--- a/ext/fileinfo/php_fileinfo.h
+++ b/ext/fileinfo/php_fileinfo.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2004 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.0 of the PHP license,       |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_fileinfo.h 265634 2008-08-29 13:29:42Z derick $ */
+/* $Id: php_fileinfo.h 306943 2011-01-01 02:51:27Z felipe $ */
 
 #ifndef PHP_FILEINFO_H
 #define PHP_FILEINFO_H
diff --git a/ext/fileinfo/tests/finfo_file_001.phpt b/ext/fileinfo/tests/finfo_file_001.phpt
index 7452b52..2632303 100644
--- a/ext/fileinfo/tests/finfo_file_001.phpt
+++ b/ext/fileinfo/tests/finfo_file_001.phpt
@@ -24,5 +24,5 @@ Warning: finfo_file(): Empty filename or path in %s on line %d
 bool(false)
 string(9) "directory"
 
-Warning: finfo_file(): File or path not found '&' in %s on line %d
+Warning: finfo_file(&): failed to open stream: No such file or directory in %s on line %d
 bool(false)
diff --git a/ext/fileinfo/tests/finfo_file_002.phpt b/ext/fileinfo/tests/finfo_file_002.phpt
index 6b8ae28..9ed19a9 100644
--- a/ext/fileinfo/tests/finfo_file_002.phpt
+++ b/ext/fileinfo/tests/finfo_file_002.phpt
@@ -18,7 +18,9 @@ ksort($results);
 var_dump($results);
 ?>
 --EXPECTF--
-array(5) {
+array(6) {
+  ["%s/resources/dir.zip"]=>
+  string(15) "application/zip"
   ["%s/resources/test.bmp"]=>
   string(14) "image/x-ms-bmp"
   ["%s/resources/test.gif"]=>
diff --git a/ext/fileinfo/tests/finfo_file_stream_001.phpt b/ext/fileinfo/tests/finfo_file_stream_001.phpt
new file mode 100644
index 0000000..5535259
--- /dev/null
+++ b/ext/fileinfo/tests/finfo_file_stream_001.phpt
@@ -0,0 +1,26 @@
+--TEST--
+finfo_file(): Files and directories inside an stream
+--SKIPIF--
+<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
+<?php if (!extension_loaded('zip')) { die("skip"); } ?>
+--FILE--
+<?php
+
+$fp = finfo_open(FILEINFO_MIME_TYPE);
+$results = array();
+
+$zip = __DIR__ . "/resources/dir.zip";
+$stream = "zip://" . __DIR__ . "/resources/dir.zip";
+$dir = $stream . "#dir/";
+$png = $stream . "#dir/test.png";
+
+var_dump(
+         finfo_file($fp, $zip),
+         finfo_file($fp, $dir),
+         finfo_file($fp, $png)
+);
+?>
+--EXPECTF--
+string(15) "application/zip"
+string(9) "directory"
+string(9) "image/png"
diff --git a/ext/fileinfo/tests/mime_content_type_001.phpt b/ext/fileinfo/tests/mime_content_type_001.phpt
index 5adab8f..72dd201 100644
--- a/ext/fileinfo/tests/mime_content_type_001.phpt
+++ b/ext/fileinfo/tests/mime_content_type_001.phpt
@@ -23,7 +23,7 @@ Warning: mime_content_type(): Can only process string or stream arguments in %s
 
 Warning: mime_content_type(): Can only process string or stream arguments in %s on line %d
 
-Warning: mime_content_type(): File or path not found 'foo/inexistent' in %s on line %d
+Warning: mime_content_type(foo/inexistent): failed to open stream: No such file or directory in %s on line %d
 
 Warning: mime_content_type(): Empty filename or path in %s on line %d
 
diff --git a/ext/fileinfo/tests/resources/dir.zip b/ext/fileinfo/tests/resources/dir.zip
new file mode 100644
index 0000000000000000000000000000000000000000..f133b961ed2ce5563cc83d1dd6148643278b6077
GIT binary patch
literal 392
zcmWIWW at h1H0D-hxKRYl3O0Y1<Fr;J_>4%1JGBDTMNBZsp;?fFk21b?_%nS@*A^@mc
z1gM?^tou#!f}$WGFBXV-pt?&^i%awh^3vg^fJ{O&<u%WT;^$8%JxWSQc<}X00VmU?
z9tE8PEGqmq at 8@$bvEa5*>TcY^F0p&=nQhEQKWt-VoGsR=M~m278(+4V>-fOn^vO4z
z*Jm~c at yuISr}uh}&@6 at kZ$>6LW?cS~fcj8?;jJTx3GpQ>#FuDpgP4TNk1&%M7?w1G
a0uN*o!pFEwWMu={$^?XSfb=yGhXDZm##_h$

literal 0
HcmV?d00001

diff --git a/ext/filter/callback_filter.c b/ext/filter/callback_filter.c
index 9a641c8..1a2ec37 100644
--- a/ext/filter/callback_filter.c
+++ b/ext/filter/callback_filter.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: callback_filter.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: callback_filter.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_filter.h"
 
diff --git a/ext/filter/config.w32 b/ext/filter/config.w32
index 8426d69..0c89bdc 100644
--- a/ext/filter/config.w32
+++ b/ext/filter/config.w32
@@ -1,8 +1,9 @@
-// $Id: config.w32 201777 2005-12-01 00:48:13Z sniper $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_ENABLE("filter", "Filter Support", "yes");
 
 if (PHP_FILTER == "yes") {
 	EXTENSION("filter", "filter.c sanitizing_filters.c logical_filters.c callback_filter.c");
+	PHP_INSTALL_HEADERS("ext/filter", "php_filter.h");
 }
diff --git a/ext/filter/filter.c b/ext/filter/filter.c
index 02373e8..cc9c4e3 100644
--- a/ext/filter/filter.c
+++ b/ext/filter/filter.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: filter.c 298196 2010-04-20 04:31:11Z aharvey $ */
+/* $Id: filter.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -316,7 +316,7 @@ PHP_MINFO_FUNCTION(filter)
 {
 	php_info_print_table_start();
 	php_info_print_table_row( 2, "Input Validation and Filtering", "enabled" );
-	php_info_print_table_row( 2, "Revision", "$Revision: 298196 $");
+	php_info_print_table_row( 2, "Revision", "$Revision: 306939 $");
 	php_info_print_table_end();
 
 	DISPLAY_INI_ENTRIES();
@@ -559,7 +559,7 @@ static zval *php_filter_get_storage(long arg TSRMLS_DC)/* {{{ */
 			if (jit_initialization) {
 				zend_is_auto_global("_ENV", sizeof("_ENV")-1 TSRMLS_CC);
 			}
-			array_ptr = IF_G(env_array);
+			array_ptr = IF_G(env_array) ? IF_G(env_array) : PG(http_globals)[TRACK_VARS_ENV];
 			break;
 		case PARSE_SESSION:
 			/* FIXME: Implement session source */
diff --git a/ext/filter/filter_private.h b/ext/filter/filter_private.h
index 7cb6ca3..5f49827 100644
--- a/ext/filter/filter_private.h
+++ b/ext/filter/filter_private.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: filter_private.h 297245 2010-03-31 22:59:09Z rasmus $ */
+/* $Id: filter_private.h 307670 2011-01-23 09:46:06Z pajoye $ */
 
 #ifndef FILTER_PRIVATE_H
 #define FILTER_PRIVATE_H
@@ -114,10 +114,10 @@
 
 #define PHP_FILTER_GET_LONG_OPT(zv, opt) { \
 	if (Z_TYPE_PP(zv) != IS_LONG) {                                                                      \
-		zval tmp = **zv;                                                                                 \
-		zval_copy_ctor(&tmp);                                                                                    \
-		convert_to_long(&tmp);                                                                                   \
-		opt = Z_LVAL(tmp);                                                                                  \
+		zval ___tmp = **zv;                                                                                 \
+		zval_copy_ctor(&___tmp);                                                                                    \
+		convert_to_long(&___tmp);                                                                                   \
+		opt = Z_LVAL(___tmp);                                                                                  \
 	} else {                                                                                                     \
 		opt = Z_LVAL_PP(zv);                                                                        \
 	}                                                                                                            \
diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c
index 73b06be..6c98a84 100644
--- a/ext/filter/logical_filters.c
+++ b/ext/filter/logical_filters.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: logical_filters.c 305186 2010-11-08 04:36:15Z cataphract $ */
+/* $Id: logical_filters.c 307678 2011-01-23 16:44:58Z iliaa $ */
 
 #include "php_filter.h"
 #include "filter_private.h"
@@ -88,7 +88,7 @@ static int php_filter_parse_int(const char *str, unsigned int str_len, long *ret
 	}
 
 	if ((end - str > MAX_LENGTH_OF_LONG - 1) /* number too long */
-	 || (SIZEOF_LONG == 4 && end - str == MAX_LENGTH_OF_LONG - 1 && *str > '2')) {
+	 || (SIZEOF_LONG == 4 && (end - str == MAX_LENGTH_OF_LONG - 1) && *str > '2')) {
 		/* overflow */
 		return -1;
 	}
@@ -710,8 +710,11 @@ void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
 			if (flags & FILTER_FLAG_NO_RES_RANGE) {
 				if (
 					(ip[0] == 0) ||
+					(ip[0] == 128 && ip[1] == 0) ||
+					(ip[0] == 191 && ip[1] == 255) ||
 					(ip[0] == 169 && ip[1] == 254) ||
 					(ip[0] == 192 && ip[1] == 0 && ip[2] == 2) ||
+					(ip[0] == 127 && ip[1] == 0 && ip[2] == 0 && ip[3] == 1) ||
 					(ip[0] >= 224 && ip[0] <= 255)
 				) {
 					RETURN_VALIDATION_FAILED
@@ -732,6 +735,41 @@ void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
 						RETURN_VALIDATION_FAILED
 					}
 				}
+				if (flags & FILTER_FLAG_NO_RES_RANGE) {
+					switch (Z_STRLEN_P(value)) {
+						case 1: case 0:
+							break;
+						case 2:
+							if (!strcmp("::", Z_STRVAL_P(value))) {
+								RETURN_VALIDATION_FAILED
+							}
+							break;
+						case 3:
+							if (!strcmp("::1", Z_STRVAL_P(value)) || !strcmp("5f:", Z_STRVAL_P(value))) {
+								RETURN_VALIDATION_FAILED
+							}
+							break;
+						default:
+							if (Z_STRLEN_P(value) >= 5) {
+								if (
+									!strncasecmp("fe8", Z_STRVAL_P(value), 3) ||
+									!strncasecmp("fe9", Z_STRVAL_P(value), 3) ||
+									!strncasecmp("fea", Z_STRVAL_P(value), 3) ||
+									!strncasecmp("feb", Z_STRVAL_P(value), 3)
+								) {
+									RETURN_VALIDATION_FAILED
+								}
+							}
+							if (
+								(Z_STRLEN_P(value) >= 9 &&  !strncasecmp("2001:0db8", Z_STRVAL_P(value), 9)) ||
+								(Z_STRLEN_P(value) >= 2 &&  !strncasecmp("5f", Z_STRVAL_P(value), 2)) ||
+								(Z_STRLEN_P(value) >= 4 &&  !strncasecmp("3ff3", Z_STRVAL_P(value), 4)) ||
+								(Z_STRLEN_P(value) >= 8 &&  !strncasecmp("2001:001", Z_STRVAL_P(value), 8))
+							) {
+								RETURN_VALIDATION_FAILED
+							}
+					}
+				}
 			}
 			break;
 	}
diff --git a/ext/filter/php_filter.h b/ext/filter/php_filter.h
index 1cbf5c1..011ff27 100644
--- a/ext/filter/php_filter.h
+++ b/ext/filter/php_filter.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_filter.h 297245 2010-03-31 22:59:09Z rasmus $ */
+/* $Id: php_filter.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_FILTER_H
 #define PHP_FILTER_H
diff --git a/ext/filter/sanitizing_filters.c b/ext/filter/sanitizing_filters.c
index 08116f5..d429310 100644
--- a/ext/filter/sanitizing_filters.c
+++ b/ext/filter/sanitizing_filters.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: sanitizing_filters.c 297245 2010-03-31 22:59:09Z rasmus $ */
+/* $Id: sanitizing_filters.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_filter.h"
 #include "filter_private.h"
diff --git a/ext/filter/tests/015.phpt b/ext/filter/tests/015.phpt
index a9c4a8c..476615a 100644
--- a/ext/filter/tests/015.phpt
+++ b/ext/filter/tests/015.phpt
@@ -28,6 +28,10 @@ array(),
 'news:news.php.net',
 'file://foo/bar',
 "http://\r\n/bar",
+"http://example.com:qq",
+"http://example.com:-2",
+"http://example.com:65536",
+"http://example.com:65537",
 );
 foreach ($values as $value) {
 	var_dump(filter_var($value, FILTER_VALIDATE_URL));
@@ -70,6 +74,10 @@ string(17) "news:news.php.net"
 string(14) "file://foo/bar"
 bool(false)
 bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
 string(10) "http://qwe"
 bool(false)
 bool(false)
@@ -78,4 +86,4 @@ bool(false)
 string(42) "http://www.example.com/path/at/the/server/"
 bool(false)
 string(40) "http://www.example.com/index.php?a=b&c=d"
-Done
\ No newline at end of file
+Done
diff --git a/ext/filter/tests/018.phpt b/ext/filter/tests/018.phpt
index 10840aa..af52b2e 100644
--- a/ext/filter/tests/018.phpt
+++ b/ext/filter/tests/018.phpt
@@ -24,6 +24,7 @@ var_dump(filter_var(-1, FILTER_VALIDATE_IP));
 var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV4));
 var_dump(filter_var("127.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
 var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
 var_dump(filter_var("127.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV4));
 echo "Done\n";
 ?>
@@ -37,7 +38,7 @@ bool(false)
 string(9) "127.0.0.1"
 bool(false)
 string(12) "192.0.34.166"
-string(9) "127.0.0.1"
+bool(false)
 string(9) "192.0.0.1"
 string(12) "192.0.34.166"
 bool(false)
@@ -48,5 +49,6 @@ bool(false)
 bool(false)
 bool(false)
 string(3) "::1"
+bool(false)
 string(9) "127.0.0.1"
 Done
diff --git a/ext/filter/tests/bug47435.phpt b/ext/filter/tests/bug47435.phpt
new file mode 100644
index 0000000..42705fd
--- /dev/null
+++ b/ext/filter/tests/bug47435.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Bug #47435 (FILTER_FLAG_NO_PRIV_RANGE and FILTER_FLAG_NO_RES_RANGE don't work with ipv6)
+--FILE--
+<?php
+var_dump(filter_var("FC00::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("FC00::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE));
+var_dump(filter_var("::", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("::", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("fe8:5:6::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("fe8:5:6::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("2001:0db8::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("2001:0db8::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("5f::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("5f::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("3ff3::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("3ff3::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+?>
+--EXPECT--	
+string(7) "FC00::1"
+bool(false)
+string(2) "::"
+bool(false)
+string(3) "::1"
+bool(false)
+string(10) "fe8:5:6::1"
+bool(false)
+string(12) "2001:0db8::1"
+bool(false)
+string(5) "5f::1"
+bool(false)
+string(7) "3ff3::1"
+bool(false)
diff --git a/ext/filter/tests/bug52209.phpt b/ext/filter/tests/bug52209.phpt
new file mode 100644
index 0000000..49408ea
--- /dev/null
+++ b/ext/filter/tests/bug52209.phpt
@@ -0,0 +1,10 @@
+--TEST--
+Bug #52209 (INPUT_ENV returns NULL for set variables (CLI))
+--SKIPIF--
+<?php if (!extension_loaded("filter") || !empty($_ENV['PWD'])) die("skip"); ?>
+--FILE--
+<?php
+	var_dump(filter_input(INPUT_ENV, 'PWD'));
+?>
+--EXPECTF--	
+string(%d) "%s"
diff --git a/ext/filter/tests/bug53150.phpt b/ext/filter/tests/bug53150.phpt
new file mode 100644
index 0000000..4baa4db
--- /dev/null
+++ b/ext/filter/tests/bug53150.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Bug #53150 (FILTER_FLAG_NO_RES_RANGE is missing some IP ranges)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var('127.0.0.1', FILTER_VALIDATE_IP));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP));
+
+var_dump(filter_var('127.0.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var('::1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+
+var_dump(filter_var('128.0.0.1', FILTER_VALIDATE_IP));
+var_dump(filter_var('128.0.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+
+var_dump(filter_var('191.255.0.0', FILTER_VALIDATE_IP));
+var_dump(filter_var('191.255.0.0', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+
+?>
+--EXPECT--	
+string(9) "127.0.0.1"
+string(3) "::1"
+bool(false)
+bool(false)
+string(9) "128.0.0.1"
+bool(false)
+string(11) "191.255.0.0"
+bool(false)
diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c
index 1a64040..37e8099 100644
--- a/ext/ftp/ftp.c
+++ b/ext/ftp/ftp.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ftp.c 295820 2010-03-04 12:52:58Z iliaa $ */
+/* $Id: ftp.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/ftp/ftp.h b/ext/ftp/ftp.h
index 9e48193..291391e 100644
--- a/ext/ftp/ftp.h
+++ b/ext/ftp/ftp.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ftp.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: ftp.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef	FTP_H
 #define	FTP_H
diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c
index f06fe6b..2859f43 100644
--- a/ext/ftp/php_ftp.c
+++ b/ext/ftp/php_ftp.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_ftp.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_ftp.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/ftp/php_ftp.h b/ext/ftp/php_ftp.h
index 1155fd1..65957f3 100644
--- a/ext/ftp/php_ftp.h
+++ b/ext/ftp/php_ftp.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_ftp.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_ftp.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef	_INCLUDED_FTP_H
 #define	_INCLUDED_FTP_H
diff --git a/ext/gd/config.w32 b/ext/gd/config.w32
index 9299c1b..12fa1a3 100644
--- a/ext/gd/config.w32
+++ b/ext/gd/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 300833 2010-06-28 23:26:48Z pajoye $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_WITH("gd", "Bundled GD support", "yes,shared");
@@ -66,6 +66,8 @@ if (PHP_GD != "no") {
 /D USE_GD_IOCTX \
 /D MSWIN32 \
 		");
+		
+		PHP_INSTALL_HEADERS("", "ext/gd ext/gd/libgd" );
 		} else {
 		WARNING("gd not enabled; libraries and headers not found");
 	}
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
index e20cef5..4c5faac 100644
--- a/ext/gd/gd.c
+++ b/ext/gd/gd.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: gd.c 306075 2010-12-08 08:45:56Z pajoye $ */
+/* $Id: gd.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
    Cold Spring Harbor Labs. */
@@ -4228,8 +4228,8 @@ PHP_FUNCTION(imagepstext)
 		return;
 	}
 
-	if (aa_steps != 4 || aa_steps != 16) {
-		php_error_docref(NULL TSRMLS_CC, E_WARNING, "AA steps must be 4 or 16");
+	if (aa_steps != 4 && aa_steps != 16) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Antialias steps must be 4 or 16");
 		RETURN_FALSE;
 	}
 
diff --git a/ext/gd/gd_ctx.c b/ext/gd/gd_ctx.c
index 7a4f5f2..47ad9f6 100644
--- a/ext/gd/gd_ctx.c
+++ b/ext/gd/gd_ctx.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: gd_ctx.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: gd_ctx.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_gd.h"
 
@@ -76,7 +76,7 @@ static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type,
 		 * PHP_GDIMG_TYPE_WBM */
 		if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|s!ll", &imgind, &file, &file_len, &quality, &basefilter) == FAILURE) {
 			return;
-		}		
+		}
 	}
 
 	ZEND_FETCH_RESOURCE(im, gdImagePtr, &imgind, -1, "Image", phpi_get_le_gd());
diff --git a/ext/gd/gdcache.c b/ext/gd/gdcache.c
index 695f289..fb0d6f4 100644
--- a/ext/gd/gdcache.c
+++ b/ext/gd/gdcache.c
@@ -1,5 +1,5 @@
 /*
- * $Id: gdcache.c 262909 2008-07-18 01:16:25Z scottmac $
+ * $Id: gdcache.c 307588 2011-01-19 15:23:07Z pajoye $
  *
  * Caches of pointers to user structs in which the least-recently-used
  * element is replaced in the event of a cache miss after the cache has
@@ -159,6 +159,9 @@ cacheFetch( char **error, void *key )
 	key_value_t *map;
 
 	map = (key_value_t *)malloc(sizeof(key_value_t));
+	if (map == NULL) {
+		return NULL;
+	}
 	map->key = *(int *)key;
 	map->value = 3;
 
diff --git a/ext/gd/php_gd.h b/ext/gd/php_gd.h
index 708b934..f33c5bd 100644
--- a/ext/gd/php_gd.h
+++ b/ext/gd/php_gd.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_gd.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_gd.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_GD_H
 #define PHP_GD_H
diff --git a/ext/gettext/gettext.c b/ext/gettext/gettext.c
index 09c580f..8a8f49c 100644
--- a/ext/gettext/gettext.c
+++ b/ext/gettext/gettext.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: gettext.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: gettext.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/gettext/php_gettext.h b/ext/gettext/php_gettext.h
index dbaf5fb..313cd13 100644
--- a/ext/gettext/php_gettext.h
+++ b/ext/gettext/php_gettext.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_gettext.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_gettext.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_GETTEXT_H
 #define PHP_GETTEXT_H
diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c
index 8d36c7f..d130151 100644
--- a/ext/gmp/gmp.c
+++ b/ext/gmp/gmp.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -957,12 +957,10 @@ ZEND_FUNCTION(gmp_div_q)
 ZEND_FUNCTION(gmp_mod)
 {
 	zval **a_arg, **b_arg;
-	zval b_copy;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ", &a_arg, &b_arg) == FAILURE){
 		return;
 	}
-	
 
 	gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_mod, (gmp_binary_ui_op_t)mpz_mod_ui, 1, 1, 0 TSRMLS_CC);
 }
diff --git a/ext/gmp/php_gmp.h b/ext/gmp/php_gmp.h
index dfe2080..b84b3b8 100644
--- a/ext/gmp/php_gmp.h
+++ b/ext/gmp/php_gmp.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/hash/config.w32 b/ext/hash/config.w32
index ed3c465..5ea795b 100644
--- a/ext/hash/config.w32
+++ b/ext/hash/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 271856 2008-12-25 13:35:05Z scottmac $
+// $Id: config.w32 306363 2010-12-14 12:12:26Z pajoye $
 // vim:ft=javascript
 
 ARG_ENABLE("hash", "enable hash support", "yes");
@@ -16,5 +16,10 @@ if (PHP_HASH != "no") {
 	EXTENSION("hash", "hash.c hash_md.c hash_sha.c hash_ripemd.c hash_haval.c "
 		+ "hash_tiger.c hash_gost.c hash_snefru.c hash_whirlpool.c "
 		+ "hash_adler32.c hash_crc32.c hash_salsa.c");
+
+		PHP_INSTALL_HEADERS("ext/hash/", "php_hash.h php_hash_md.h php_hash_sha.h php_hash_ripemd.h " +
+		"php_hash_haval.h php_hash_tiger.h php_hash_gost.h php_hash_snefru.h " + 
+		"php_hash_whirlpool.h php_hash_adler32.h php_hash_crc32.h php_hash_salsa.h " +
+		"php_hash_types.h");
 }
 
diff --git a/ext/hash/hash.c b/ext/hash/hash.c
index b08bcc1..9e58808 100644
--- a/ext/hash/hash.c
+++ b/ext/hash/hash.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash.c 300972 2010-07-03 13:06:14Z felipe $ */
+/* $Id: hash.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/hash/hash_adler32.c b/ext/hash/hash_adler32.c
index 9b26278..4514eba 100644
--- a/ext/hash/hash_adler32.c
+++ b/ext/hash/hash_adler32.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_adler32.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_adler32.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_hash.h"
 #include "php_hash_adler32.h"
diff --git a/ext/hash/hash_crc32.c b/ext/hash/hash_crc32.c
index b3b6640..aa4c167 100644
--- a/ext/hash/hash_crc32.c
+++ b/ext/hash/hash_crc32.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_crc32.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_crc32.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_hash.h"
 #include "php_hash_crc32.h"
diff --git a/ext/hash/hash_gost.c b/ext/hash/hash_gost.c
index 5a430e3..e165275 100644
--- a/ext/hash/hash_gost.c
+++ b/ext/hash/hash_gost.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_gost.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_gost.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_hash.h"
 #include "php_hash_gost.h"
diff --git a/ext/hash/hash_haval.c b/ext/hash/hash_haval.c
index 528b284..c327f81 100644
--- a/ext/hash/hash_haval.c
+++ b/ext/hash/hash_haval.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_haval.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_haval.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_hash.h"
 #include "php_hash_haval.h"
diff --git a/ext/hash/hash_md.c b/ext/hash/hash_md.c
index 419466f..f07b4b4 100644
--- a/ext/hash/hash_md.c
+++ b/ext/hash/hash_md.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_md.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_md.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_hash.h"
 #include "php_hash_md.h"
diff --git a/ext/hash/hash_ripemd.c b/ext/hash/hash_ripemd.c
index 95c14e4..b418471 100644
--- a/ext/hash/hash_ripemd.c
+++ b/ext/hash/hash_ripemd.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_ripemd.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_ripemd.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Heavily borrowed from md5.c & sha1.c of PHP archival fame
    Note that ripemd laughs in the face of logic and uses
diff --git a/ext/hash/hash_salsa.c b/ext/hash/hash_salsa.c
index 357ce2e..728f433 100644
--- a/ext/hash/hash_salsa.c
+++ b/ext/hash/hash_salsa.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_salsa.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_salsa.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_hash.h"
 #include "php_hash_salsa.h"
diff --git a/ext/hash/hash_sha.c b/ext/hash/hash_sha.c
index b3e3f89..e4ba1eb 100644
--- a/ext/hash/hash_sha.c
+++ b/ext/hash/hash_sha.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_sha.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_sha.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_hash.h"
 #include "php_hash_sha.h"
diff --git a/ext/hash/hash_snefru.c b/ext/hash/hash_snefru.c
index c91c7e4..0438605 100644
--- a/ext/hash/hash_snefru.c
+++ b/ext/hash/hash_snefru.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_snefru.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_snefru.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_hash.h"
 #include "php_hash_snefru.h"
diff --git a/ext/hash/hash_tiger.c b/ext/hash/hash_tiger.c
index 5674eb2..2389602 100644
--- a/ext/hash/hash_tiger.c
+++ b/ext/hash/hash_tiger.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_tiger.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_tiger.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_hash.h"
 #include "php_hash_tiger.h"
diff --git a/ext/hash/hash_whirlpool.c b/ext/hash/hash_whirlpool.c
index 9ddc69b..f6dd243 100644
--- a/ext/hash/hash_whirlpool.c
+++ b/ext/hash/hash_whirlpool.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: hash_whirlpool.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: hash_whirlpool.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_hash.h"
 
diff --git a/ext/hash/php_hash.h b/ext/hash/php_hash.h
index 3ae7905..43b06f4 100644
--- a/ext/hash/php_hash.h
+++ b/ext/hash/php_hash.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_H
 #define PHP_HASH_H
diff --git a/ext/hash/php_hash_adler32.h b/ext/hash/php_hash_adler32.h
index b42da4c..f2ab2ce 100644
--- a/ext/hash/php_hash_adler32.h
+++ b/ext/hash/php_hash_adler32.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_adler32.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_adler32.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_ADLER32_H
 #define PHP_HASH_ADLER32_H
diff --git a/ext/hash/php_hash_crc32.h b/ext/hash/php_hash_crc32.h
index 0631091..e4083c3 100644
--- a/ext/hash/php_hash_crc32.h
+++ b/ext/hash/php_hash_crc32.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_crc32.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_crc32.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_CRC32_H
 #define PHP_HASH_CRC32_H
diff --git a/ext/hash/php_hash_crc32_tables.h b/ext/hash/php_hash_crc32_tables.h
index ce1b162..1865180 100644
--- a/ext/hash/php_hash_crc32_tables.h
+++ b/ext/hash/php_hash_crc32_tables.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_crc32_tables.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_crc32_tables.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 static const php_hash_uint32 crc32_table[] = {  0x0,
 	0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
diff --git a/ext/hash/php_hash_gost.h b/ext/hash/php_hash_gost.h
index 9fbe9c0..abe2f27 100644
--- a/ext/hash/php_hash_gost.h
+++ b/ext/hash/php_hash_gost.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_gost.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_gost.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_GOST_H
 #define PHP_HASH_GOST_H
diff --git a/ext/hash/php_hash_haval.h b/ext/hash/php_hash_haval.h
index 76d6a45..b02fe8f 100644
--- a/ext/hash/php_hash_haval.h
+++ b/ext/hash/php_hash_haval.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_haval.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_haval.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_HAVAL_H
 #define PHP_HASH_HAVAL_H
diff --git a/ext/hash/php_hash_md.h b/ext/hash/php_hash_md.h
index 8394ae5..83cfba9 100644
--- a/ext/hash/php_hash_md.h
+++ b/ext/hash/php_hash_md.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_md.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_md.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_MD_H
 #define PHP_HASH_MD_H
diff --git a/ext/hash/php_hash_ripemd.h b/ext/hash/php_hash_ripemd.h
index eab0505..77ae2c7 100644
--- a/ext/hash/php_hash_ripemd.h
+++ b/ext/hash/php_hash_ripemd.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_ripemd.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_ripemd.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_RIPEMD_H
 #define PHP_HASH_RIPEMD_H
diff --git a/ext/hash/php_hash_salsa.h b/ext/hash/php_hash_salsa.h
index 2a6a589..471775c 100644
--- a/ext/hash/php_hash_salsa.h
+++ b/ext/hash/php_hash_salsa.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_salsa.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_salsa.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_SALSA_H
 #define PHP_HASH_SALSA_H
diff --git a/ext/hash/php_hash_sha.h b/ext/hash/php_hash_sha.h
index 213f329..260f70a 100644
--- a/ext/hash/php_hash_sha.h
+++ b/ext/hash/php_hash_sha.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_sha.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_sha.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_SHA_H
 #define PHP_HASH_SHA_H
diff --git a/ext/hash/php_hash_snefru.h b/ext/hash/php_hash_snefru.h
index b016064..e013a5b 100644
--- a/ext/hash/php_hash_snefru.h
+++ b/ext/hash/php_hash_snefru.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_snefru.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_snefru.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_SNEFRU_H
 #define PHP_HASH_SNEFRU_H
diff --git a/ext/hash/php_hash_snefru_tables.h b/ext/hash/php_hash_snefru_tables.h
index 4d5f4ab..2e920f2 100644
--- a/ext/hash/php_hash_snefru_tables.h
+++ b/ext/hash/php_hash_snefru_tables.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_snefru_tables.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_snefru_tables.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 static const php_hash_uint32 tables[16][256]= {
 
diff --git a/ext/hash/php_hash_tiger.h b/ext/hash/php_hash_tiger.h
index 3d4f4b8..20842fc 100644
--- a/ext/hash/php_hash_tiger.h
+++ b/ext/hash/php_hash_tiger.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_tiger.h 305650 2010-11-22 13:12:28Z iliaa $ */
+/* $Id: php_hash_tiger.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_TIGER_H
 #define PHP_HASH_TIGER_H
diff --git a/ext/hash/php_hash_tiger_tables.h b/ext/hash/php_hash_tiger_tables.h
index 9e1f2f5..dffb8f1 100644
--- a/ext/hash/php_hash_tiger_tables.h
+++ b/ext/hash/php_hash_tiger_tables.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_tiger_tables.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_tiger_tables.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define t1 (table)
 #define t2 (table+256)
diff --git a/ext/hash/php_hash_types.h b/ext/hash/php_hash_types.h
index 6e52662..a728f18 100644
--- a/ext/hash/php_hash_types.h
+++ b/ext/hash/php_hash_types.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_types.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_types.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_TYPES_H
 #define PHP_HASH_TYPES_H
diff --git a/ext/hash/php_hash_whirlpool.h b/ext/hash/php_hash_whirlpool.h
index a871c23..773f502 100644
--- a/ext/hash/php_hash_whirlpool.h
+++ b/ext/hash/php_hash_whirlpool.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_whirlpool.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_whirlpool.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_WHIRLPOOL_H
 #define PHP_HASH_WHIRLPOOL_H
diff --git a/ext/hash/php_hash_whirlpool_tables.h b/ext/hash/php_hash_whirlpool_tables.h
index d40e80b..02a20e5 100644
--- a/ext/hash/php_hash_whirlpool_tables.h
+++ b/ext/hash/php_hash_whirlpool_tables.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_hash_whirlpool_tables.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_hash_whirlpool_tables.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HASH_WHIRLPOOL_TABLES_H
 #define PHP_HASH_WHIRLPOOL_TABLES_H
diff --git a/ext/iconv/config.w32 b/ext/iconv/config.w32
index 5fe9715..99b83d6 100644
--- a/ext/iconv/config.w32
+++ b/ext/iconv/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 295968 2010-03-08 15:51:08Z kalle $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim: ft=javascript
 
 ARG_WITH("iconv", "iconv support", "yes");
@@ -19,6 +19,7 @@ if (PHP_ICONV != "no") {
 		if (!PHP_ICONV_SHARED) {
 			ADD_DEF_FILE("ext\\iconv\\php_iconv.def");
 		}
+		PHP_INSTALL_HEADERS("", "ext/iconv");
 	} else {
 		WARNING("iconv support can't be enabled, libraries or headers are missing")
 		PHP_ICONV = "no";
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index 128c267..fb9d127 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: iconv.c 305887 2010-12-01 14:03:36Z iliaa $ */
+/* $Id: iconv.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/iconv/php_iconv.h b/ext/iconv/php_iconv.h
index 9ed9b2a..72266f6 100644
--- a/ext/iconv/php_iconv.h
+++ b/ext/iconv/php_iconv.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Revision: 295968 $ */
+/* $Revision: 306939 $ */
 
 #ifndef PHP_ICONV_H
 #define PHP_ICONV_H
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
index fbfbb6c..f10c69b 100644
--- a/ext/imap/php_imap.c
+++ b/ext/imap/php_imap.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -26,7 +26,7 @@
    | PHP 4.0 updates:  Zeev Suraski <zeev at zend.com>                       |
    +----------------------------------------------------------------------+
  */
-/* $Id: php_imap.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: php_imap.c 307691 2011-01-24 03:52:00Z stas $ */
 
 #define IMAP41
 
@@ -482,6 +482,7 @@ const zend_function_entry imap_functions[] = {
 	PHP_FE(imap_body,								arginfo_imap_body)
 	PHP_FE(imap_bodystruct,							arginfo_imap_bodystruct)
 	PHP_FE(imap_fetchbody,							arginfo_imap_fetchbody)
+	PHP_FE(imap_fetchmime,							arginfo_imap_fetchbody)
 	PHP_FE(imap_savebody,							arginfo_imap_savebody)
 	PHP_FE(imap_fetchheader,						arginfo_imap_fetchheader)
 	PHP_FE(imap_fetchstructure,						arginfo_imap_fetchstructure)
@@ -2369,6 +2370,46 @@ PHP_FUNCTION(imap_fetchbody)
 
 /* }}} */
 
+
+/* {{{ proto string imap_fetchmime(resource stream_id, int msg_no, string section [, int options])
+   Get a specific body section's MIME headers */
+PHP_FUNCTION(imap_fetchmime)
+{
+	zval *streamind;
+	long msgno, flags = 0;
+	pils *imap_le_struct;
+	char *body, *sec;
+	int sec_len;
+	unsigned long len;
+	int argc = ZEND_NUM_ARGS();
+
+	if (zend_parse_parameters(argc TSRMLS_CC, "rls|l", &streamind, &msgno, &sec, &sec_len, &flags) == FAILURE) {
+		return;
+	}
+
+	if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+		RETURN_FALSE;
+	}
+
+	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, &streamind, -1, "imap", le_imap);
+
+	if (argc < 4 || !(flags & FT_UID)) {
+		/* only perform the check if the msgno is a message number and not a UID */
+		PHP_IMAP_CHECK_MSGNO(msgno);
+	}
+
+	body = mail_fetch_mime(imap_le_struct->imap_stream, msgno, sec, &len, (argc == 4 ? flags : NIL));
+
+	if (!body) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "No body MIME information available");
+		RETURN_FALSE;
+	}
+	RETVAL_STRINGL(body, len, 1);
+}
+
+/* }}} */
+
 /* {{{ proto bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = ""[, int options = 0]])
 	Save a specific body section to a file */
 PHP_FUNCTION(imap_savebody)
@@ -4243,7 +4284,7 @@ PHP_FUNCTION(imap_mime_header_decode)
 					}
 
 					offset = end_token+2;
-					for (i = 0; (string[offset + i] == ' ') || (string[offset + i] == 0x0a) || (string[offset + i] == 0x0d); i++);
+					for (i = 0; (string[offset + i] == ' ') || (string[offset + i] == 0x0a) || (string[offset + i] == 0x0d) || (string[offset + i] == '\t'); i++);
 					if ((string[offset + i] == '=') && (string[offset + i + 1] == '?') && (offset + i < end)) {
 						offset += i;
 					}
diff --git a/ext/imap/php_imap.h b/ext/imap/php_imap.h
index 9d869d2..5e9c029 100644
--- a/ext/imap/php_imap.h
+++ b/ext/imap/php_imap.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -27,7 +27,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_imap.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_imap.h 307691 2011-01-24 03:52:00Z stas $ */
 
 #ifndef PHP_IMAP_H
 #define PHP_IMAP_H
@@ -114,6 +114,7 @@ PHP_FUNCTION(imap_rfc822_parse_headers);
 PHP_FUNCTION(imap_body);
 PHP_FUNCTION(imap_fetchstructure);
 PHP_FUNCTION(imap_fetchbody);
+PHP_FUNCTION(imap_fetchmime);
 PHP_FUNCTION(imap_savebody);
 PHP_FUNCTION(imap_gc);
 PHP_FUNCTION(imap_expunge);
diff --git a/ext/imap/tests/bug53377.phpt b/ext/imap/tests/bug53377.phpt
new file mode 100644
index 0000000..1a2173a
--- /dev/null
+++ b/ext/imap/tests/bug53377.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Bug #53377 (imap_mime_header_decode() doesn't ignore \t during long MIME header unfolding)
+--SKIPIF--
+<?php
+        if (!extension_loaded("imap")) { 
+                die("skip imap extension not available");  
+        }
+?>
+--FILE--
+<?php
+$s = "=?UTF-8?Q?=E2=82=AC?=";
+$header = "$s\n $s\n\t$s";
+
+var_dump(imap_mime_header_decode($header));
+--EXPECT--
+array(3) {
+  [0]=>
+  object(stdClass)#1 (2) {
+    ["charset"]=>
+    string(5) "UTF-8"
+    ["text"]=>
+    string(3) "€"
+  }
+  [1]=>
+  object(stdClass)#2 (2) {
+    ["charset"]=>
+    string(5) "UTF-8"
+    ["text"]=>
+    string(3) "€"
+  }
+  [2]=>
+  object(stdClass)#3 (2) {
+    ["charset"]=>
+    string(5) "UTF-8"
+    ["text"]=>
+    string(3) "€"
+  }
+}
diff --git a/ext/interbase/ibase_blobs.c b/ext/interbase/ibase_blobs.c
index 91c3d25..92df8fe 100644
--- a/ext/interbase/ibase_blobs.c
+++ b/ext/interbase/ibase_blobs.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ibase_blobs.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: ibase_blobs.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/interbase/ibase_events.c b/ext/interbase/ibase_events.c
index 77b33ad..a8fa86f 100644
--- a/ext/interbase/ibase_events.c
+++ b/ext/interbase/ibase_events.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ibase_events.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: ibase_events.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/interbase/ibase_query.c b/ext/interbase/ibase_query.c
index 8a58593..a510814 100644
--- a/ext/interbase/ibase_query.c
+++ b/ext/interbase/ibase_query.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ibase_query.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: ibase_query.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/interbase/ibase_service.c b/ext/interbase/ibase_service.c
index 92060d2..b02d215 100644
--- a/ext/interbase/ibase_service.c
+++ b/ext/interbase/ibase_service.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ibase_service.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: ibase_service.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c
index 2cd5468..39964cb 100644
--- a/ext/interbase/interbase.c
+++ b/ext/interbase/interbase.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: interbase.c 300764 2010-06-26 16:03:39Z felipe $ */
+/* $Id: interbase.c 308618 2011-02-24 02:42:38Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1424,6 +1424,11 @@ PHP_FUNCTION(ibase_gen_id)
 			&inc, &link)) {
 		RETURN_FALSE;
 	}
+	
+	if (gen_len > 31) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid generator name");
+		RETURN_FALSE;
+	}
 
 	PHP_IBASE_LINK_TRANS(link, ib_link, trans);
 	
diff --git a/ext/interbase/php_ibase_includes.h b/ext/interbase/php_ibase_includes.h
index b83a32d..c2c1256 100755
--- a/ext/interbase/php_ibase_includes.h
+++ b/ext/interbase/php_ibase_includes.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_ibase_includes.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_ibase_includes.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_IBASE_INCLUDES_H
 #define PHP_IBASE_INCLUDES_H
diff --git a/ext/interbase/php_ibase_udf.c b/ext/interbase/php_ibase_udf.c
index d285ddc..fac8bbe 100644
--- a/ext/interbase/php_ibase_udf.c
+++ b/ext/interbase/php_ibase_udf.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_ibase_udf.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_ibase_udf.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /**
 * This UDF library adds the ability to call PHP functions from SQL
diff --git a/ext/interbase/php_interbase.h b/ext/interbase/php_interbase.h
index 2aa60ff..a93fb9a 100644
--- a/ext/interbase/php_interbase.h
+++ b/ext/interbase/php_interbase.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_interbase.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_interbase.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_INTERBASE_H
 #define PHP_INTERBASE_H
diff --git a/ext/intl/collator/collator_class.c b/ext/intl/collator/collator_class.c
index ee16ee0..58a11fe 100755
--- a/ext/intl/collator/collator_class.c
+++ b/ext/intl/collator/collator_class.c
@@ -29,6 +29,7 @@
 #include <unicode/ucol.h>
 
 zend_class_entry *Collator_ce_ptr = NULL;
+static zend_object_handlers Collator_handlers;
 
 /*
  * Auxiliary functions needed by objects of 'Collator' class
@@ -73,7 +74,7 @@ zend_object_value Collator_object_create(
 		(zend_objects_free_object_storage_t)Collator_objects_free,
 		NULL TSRMLS_CC );
 
-	retval.handlers = zend_get_std_object_handlers();
+	retval.handlers = &Collator_handlers;
 
 	return retval;
 }
@@ -142,6 +143,12 @@ void collator_register_Collator_class( TSRMLS_D )
 	ce.create_object = Collator_object_create;
 	Collator_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
 
+	memcpy(&Collator_handlers, zend_get_std_object_handlers(),
+		sizeof Collator_handlers);
+	/* Collator has no usable clone semantics - ucol_cloneBinary/ucol_openBinary require binary buffer 
+	   for which we don't have the place to keep */	
+	Collator_handlers.clone_obj = NULL; 
+
 	/* Declare 'Collator' class properties. */
 	if( !Collator_ce_ptr )
 	{
diff --git a/ext/intl/dateformat/dateformat_class.c b/ext/intl/dateformat/dateformat_class.c
index 7df9581..74c193b 100755
--- a/ext/intl/dateformat/dateformat_class.c
+++ b/ext/intl/dateformat/dateformat_class.c
@@ -24,6 +24,7 @@
 #include "dateformat_attr.h"
 
 zend_class_entry *IntlDateFormatter_ce_ptr = NULL;
+static zend_object_handlers IntlDateFormatter_handlers;
 
 /*
  * Auxiliary functions needed by objects of 'IntlDateFormatter' class
@@ -73,12 +74,36 @@ zend_object_value IntlDateFormatter_object_create(zend_class_entry *ce TSRMLS_DC
 		(zend_objects_free_object_storage_t)IntlDateFormatter_object_free,
 		NULL TSRMLS_CC );
 
-	retval.handlers = zend_get_std_object_handlers();
+	retval.handlers = &IntlDateFormatter_handlers;
 
 	return retval;
 }
 /* }}} */
 
+/* {{{ IntlDateFormatter_object_clone */
+zend_object_value IntlDateFormatter_object_clone(zval *object TSRMLS_DC)
+{
+	zend_object_value new_obj_val;
+	zend_object_handle handle = Z_OBJ_HANDLE_P(object);
+	IntlDateFormatter_object *dfo, *new_dfo;
+
+	DATE_FORMAT_METHOD_FETCH_OBJECT;
+	new_obj_val = IntlDateFormatter_ce_ptr->create_object(IntlDateFormatter_ce_ptr TSRMLS_CC);
+	new_dfo = (IntlDateFormatter_object *)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC);
+	/* clone standard parts */	
+	zend_objects_clone_members(&new_dfo->zo, new_obj_val, &dfo->zo, handle TSRMLS_CC);
+	/* clone formatter object */
+	DATE_FORMAT_OBJECT(new_dfo) = udat_clone(DATE_FORMAT_OBJECT(dfo),  &INTL_DATA_ERROR_CODE(new_dfo));
+	if(U_FAILURE(INTL_DATA_ERROR_CODE(new_dfo))) {
+		/* set up error in case error handler is interested */
+		intl_error_set( NULL, INTL_DATA_ERROR_CODE(new_dfo), "Failed to clone IntlDateFormatter object", 0 TSRMLS_CC );
+		IntlDateFormatter_object_dtor(new_dfo, new_obj_val.handle TSRMLS_CC); /* free new object */
+		zend_error(E_ERROR, "Failed to clone IntlDateFormatter object");
+	}
+	return new_obj_val;
+}
+/* }}} */
+
 /* 
  * 'IntlDateFormatter' class registration structures & functions
  */
@@ -161,6 +186,10 @@ void dateformat_register_IntlDateFormatter_class( TSRMLS_D )
 	ce.create_object = IntlDateFormatter_object_create;
 	IntlDateFormatter_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
 
+	memcpy(&IntlDateFormatter_handlers, zend_get_std_object_handlers(),
+		sizeof IntlDateFormatter_handlers);
+	IntlDateFormatter_handlers.clone_obj = IntlDateFormatter_object_clone;
+
 	/* Declare 'IntlDateFormatter' class properties. */
 	if( !IntlDateFormatter_ce_ptr )
 	{
diff --git a/ext/intl/formatter/formatter_attr.c b/ext/intl/formatter/formatter_attr.c
index 851b2b3..46d61fb 100755
--- a/ext/intl/formatter/formatter_attr.c
+++ b/ext/intl/formatter/formatter_attr.c
@@ -311,6 +311,11 @@ PHP_FUNCTION( numfmt_set_symbol )
 
 		RETURN_FALSE;
 	}
+	
+	if (symbol >= UNUM_FORMAT_SYMBOL_COUNT || symbol < 0) {
+		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,	"numfmt_set_symbol: invalid symbol value", 0 TSRMLS_CC );
+		RETURN_FALSE;
+	}
 
 	/* Fetch the object. */
 	FORMATTER_METHOD_FETCH_OBJECT;
diff --git a/ext/intl/formatter/formatter_class.c b/ext/intl/formatter/formatter_class.c
index a6f4510..07d07b6 100755
--- a/ext/intl/formatter/formatter_class.c
+++ b/ext/intl/formatter/formatter_class.c
@@ -25,6 +25,7 @@
 #include "formatter_attr.h"
 
 zend_class_entry *NumberFormatter_ce_ptr = NULL;
+static zend_object_handlers NumberFormatter_handlers;
 
 /*
  * Auxiliary functions needed by objects of 'NumberFormatter' class
@@ -53,8 +54,7 @@ void NumberFormatter_object_free( zend_object *object TSRMLS_DC )
 /* }}} */
 
 /* {{{ NumberFormatter_object_create */
-zend_object_value NumberFormatter_object_create(
-	zend_class_entry *ce TSRMLS_DC )
+zend_object_value NumberFormatter_object_create(zend_class_entry *ce TSRMLS_DC)
 {
 	zend_object_value    retval;
 	NumberFormatter_object*     intern;
@@ -69,12 +69,36 @@ zend_object_value NumberFormatter_object_create(
 		(zend_objects_free_object_storage_t)NumberFormatter_object_free,
 		NULL TSRMLS_CC );
 
-	retval.handlers = zend_get_std_object_handlers();
+	retval.handlers = &NumberFormatter_handlers;
 
 	return retval;
 }
 /* }}} */
 
+/* {{{ NumberFormatter_object_clone */
+zend_object_value NumberFormatter_object_clone(zval *object TSRMLS_DC)
+{
+	zend_object_value new_obj_val;
+	zend_object_handle handle = Z_OBJ_HANDLE_P(object);
+	NumberFormatter_object *nfo, *new_nfo;
+
+	FORMATTER_METHOD_FETCH_OBJECT;
+	new_obj_val = NumberFormatter_ce_ptr->create_object(NumberFormatter_ce_ptr TSRMLS_CC);
+	new_nfo = (NumberFormatter_object *)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC);
+	/* clone standard parts */	
+	zend_objects_clone_members(&new_nfo->zo, new_obj_val, &nfo->zo, handle TSRMLS_CC);
+	/* clone formatter object */
+	FORMATTER_OBJECT(new_nfo) = unum_clone(FORMATTER_OBJECT(nfo),  &INTL_DATA_ERROR_CODE(new_nfo));
+	if(U_FAILURE(INTL_DATA_ERROR_CODE(new_nfo))) {
+		/* set up error in case error handler is interested */
+		intl_error_set( NULL, INTL_DATA_ERROR_CODE(new_nfo), "Failed to clone NumberFormatter object", 0 TSRMLS_CC );
+		NumberFormatter_object_dtor(new_nfo, new_obj_val.handle TSRMLS_CC); /* free new object */
+		zend_error(E_ERROR, "Failed to clone NumberFormatter object");
+	}
+	return new_obj_val;
+}
+/* }}} */
+
 /*
  * 'NumberFormatter' class registration structures & functions
  */
@@ -171,6 +195,10 @@ void formatter_register_class( TSRMLS_D )
 	ce.create_object = NumberFormatter_object_create;
 	NumberFormatter_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
 
+	memcpy(&NumberFormatter_handlers, zend_get_std_object_handlers(),
+		sizeof(NumberFormatter_handlers));
+	NumberFormatter_handlers.clone_obj = NumberFormatter_object_clone;
+
 	/* Declare 'NumberFormatter' class properties. */
 	if( !NumberFormatter_ce_ptr )
 	{
diff --git a/ext/intl/grapheme/grapheme_string.c b/ext/intl/grapheme/grapheme_string.c
index ba883f3..1784d02 100755
--- a/ext/intl/grapheme/grapheme_string.c
+++ b/ext/intl/grapheme/grapheme_string.c
@@ -70,8 +70,8 @@ PHP_FUNCTION(grapheme_strlen)
 	}
 
 	ret_len = grapheme_ascii_check(string, string_len);
-	
-	if ( ret_len >= 0 ) 
+
+	if ( ret_len >= 0 )
 		RETURN_LONG(ret_len);
 
 	/* convert the string to UTF-16. */
@@ -87,7 +87,7 @@ PHP_FUNCTION(grapheme_strlen)
 		efree( ustring );
 		RETURN_NULL();
 	}
-	
+
 	ret_len = grapheme_split_string(ustring, ustring_len, NULL, 0 TSRMLS_CC );
 
 	efree( ustring );
@@ -110,37 +110,37 @@ PHP_FUNCTION(grapheme_strpos)
 	long loffset = 0;
 	int32_t offset = 0;
 	int ret_pos, uchar_pos;
-	
+
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", (char **)&haystack, &haystack_len, (char **)&needle, &needle_len, &loffset) == FAILURE) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
 			 "grapheme_strpos: unable to parse input param", 0 TSRMLS_CC );
-			 
+
 		RETURN_FALSE;
 	}
 
 	if ( OUTSIDE_STRING(loffset, haystack_len) ) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Offset not contained in string", 1 TSRMLS_CC );
-		
+
 		RETURN_FALSE;
 	}
 
-	/* we checked that it will fit: */	
+	/* we checked that it will fit: */
 	offset = (int32_t) loffset;
 
 	/* the offset is 'grapheme count offset' so it still might be invalid - we'll check it later */
 
 	if (needle_len == 0) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Empty delimiter", 1 TSRMLS_CC );
-		
+
 		RETURN_FALSE;
 	}
 
 
 	/* quick check to see if the string might be there
-	 * I realize that 'offset' is 'grapheme count offset' but will work in spite of that 
+	 * I realize that 'offset' is 'grapheme count offset' but will work in spite of that
 	*/
 	found = (unsigned char *)php_memnstr((char *)haystack + offset, (char *)needle, needle_len, (char *)haystack + haystack_len);
 
@@ -178,31 +178,31 @@ PHP_FUNCTION(grapheme_stripos)
 	int32_t offset = 0;
 	int ret_pos, uchar_pos;
 	int is_ascii;
-	
+
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", (char **)&haystack, &haystack_len, (char **)&needle, &needle_len, &loffset) == FAILURE) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
 			 "grapheme_stripos: unable to parse input param", 0 TSRMLS_CC );
-			 
+
 		RETURN_FALSE;
 	}
 
 	if ( OUTSIDE_STRING(loffset, haystack_len) ) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_stripos: Offset not contained in string", 1 TSRMLS_CC );
-		
+
 		RETURN_FALSE;
 	}
-	
+
 	/* we checked that it will fit: */
 	offset = (int32_t) loffset;
 
 	/* the offset is 'grapheme count offset' so it still might be invalid - we'll check it later */
 
 	if (needle_len == 0) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_stripos: Empty delimiter", 1 TSRMLS_CC );
-		
+
 		RETURN_FALSE;
 	}
 
@@ -252,40 +252,40 @@ PHP_FUNCTION(grapheme_strrpos)
 	int32_t offset = 0;
 	int32_t ret_pos;
 	int is_ascii;
-	
+
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", (char **)&haystack, &haystack_len, (char **)&needle, &needle_len, &loffset) == FAILURE) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
 			 "grapheme_strrpos: unable to parse input param", 0 TSRMLS_CC );
-			 
+
 		RETURN_FALSE;
 	}
 
 	if ( OUTSIDE_STRING(loffset, haystack_len) ) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Offset not contained in string", 1 TSRMLS_CC );
-		
+
 		RETURN_FALSE;
 	}
-	
+
 	/* we checked that it will fit: */
 	offset = (int32_t) loffset;
 
 	/* the offset is 'grapheme count offset' so it still might be invalid - we'll check it later */
 
 	if (needle_len == 0) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Empty delimiter", 1 TSRMLS_CC );
-		
+
 		RETURN_FALSE;
 	}
 
 	is_ascii = grapheme_ascii_check(haystack, haystack_len) >= 0;
 
 	if ( is_ascii ) {
-	
+
 		ret_pos = grapheme_strrpos_ascii(haystack, haystack_len, needle, needle_len, offset);
-		
+
 
 		if ( ret_pos >= 0 ) {
 			RETURN_LONG(ret_pos);
@@ -307,7 +307,7 @@ PHP_FUNCTION(grapheme_strrpos)
 	} else {
 		RETURN_FALSE;
 	}
-	
+
 
 }
 /* }}} */
@@ -322,31 +322,31 @@ PHP_FUNCTION(grapheme_strripos)
 	int32_t offset = 0;
 	int32_t ret_pos;
 	int is_ascii;
-	
+
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", (char **)&haystack, &haystack_len, (char **)&needle, &needle_len, &loffset) == FAILURE) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
 			 "grapheme_strrpos: unable to parse input param", 0 TSRMLS_CC );
-			 
+
 		RETURN_FALSE;
 	}
 
 	if ( OUTSIDE_STRING(loffset, haystack_len) ) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Offset not contained in string", 1 TSRMLS_CC );
-		
+
 		RETURN_FALSE;
 	}
 
 	/* we checked that it will fit: */
 	offset = (int32_t) loffset;
-	
+
 	/* the offset is 'grapheme count offset' so it still might be invalid - we'll check it later */
 
 	if (needle_len == 0) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Empty delimiter", 1 TSRMLS_CC );
-		
+
 		RETURN_FALSE;
 	}
 
@@ -361,7 +361,7 @@ PHP_FUNCTION(grapheme_strripos)
 		php_strtolower((char *)haystack_dup, haystack_len);
 
 		ret_pos = grapheme_strrpos_ascii(haystack_dup, haystack_len, needle_dup, needle_len, offset);
-		
+
 		efree(haystack_dup);
 		efree(needle_dup);
 
@@ -385,7 +385,7 @@ PHP_FUNCTION(grapheme_strripos)
 	} else {
 		RETURN_FALSE;
 	}
-	
+
 
 }
 /* }}} */
@@ -407,17 +407,17 @@ PHP_FUNCTION(grapheme_substr)
 	int32_t (*iter_func)(UBreakIterator *);
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|l", (char **)&str, &str_len, &lstart, &length) == FAILURE) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
 			 "grapheme_substr: unable to parse input param", 0 TSRMLS_CC );
-			 
+
 		RETURN_FALSE;
 	}
 
 	if ( OUTSIDE_STRING(lstart, str_len) ) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_substr: start not contained in string", 1 TSRMLS_CC );
-		
+
 		RETURN_FALSE;
 	}
 
@@ -456,7 +456,7 @@ PHP_FUNCTION(grapheme_substr)
 	if( U_FAILURE(status) ) {
 		RETURN_FALSE;
 	}
-	
+
 	ubrk_setText(bi, ustr, ustr_len,	&status);
 
 	if ( start < 0 ) {
@@ -482,9 +482,9 @@ PHP_FUNCTION(grapheme_substr)
 	}
 
 	if ( 0 != start || sub_str_start_pos >= ustr_len ) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_substr: start not contained in string", 1 TSRMLS_CC );
-	
+
 		efree(ustr);
 		ubrk_close(bi);
 		RETURN_FALSE;
@@ -541,11 +541,11 @@ PHP_FUNCTION(grapheme_substr)
 
 		length += iter_val;
 	}
-	
+
 	if ( UBRK_DONE == sub_str_end_pos && length < 0) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_substr: length not contained in string", 1 TSRMLS_CC );
-	
+
 		efree(ustr);
 		ubrk_close(bi);
 		RETURN_FALSE;
@@ -586,17 +586,17 @@ static void strstr_common_handler(INTERNAL_FUNCTION_PARAMETERS, int f_ignore_cas
 	zend_bool part = 0;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|b", (char **)&haystack, &haystack_len, (char **)&needle, &needle_len, &part) == FAILURE) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
 			 "grapheme_strstr: unable to parse input param", 0 TSRMLS_CC );
-			 
+
 		RETURN_FALSE;
 	}
 
 	if (needle_len == 0) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Empty delimiter", 1 TSRMLS_CC );
-		
+
 		RETURN_FALSE;
 	}
 
@@ -604,7 +604,7 @@ static void strstr_common_handler(INTERNAL_FUNCTION_PARAMETERS, int f_ignore_cas
 	if ( !f_ignore_case ) {
 
 		/* ASCII optimization: quick check to see if the string might be there
-		 * I realize that 'offset' is 'grapheme count offset' but will work in spite of that 
+		 * I realize that 'offset' is 'grapheme count offset' but will work in spite of that
 		*/
 		found = (unsigned char *)php_memnstr((char *)haystack, (char *)needle, needle_len, (char *)haystack + haystack_len);
 
@@ -640,7 +640,7 @@ static void strstr_common_handler(INTERNAL_FUNCTION_PARAMETERS, int f_ignore_cas
 
 	if (part) {
 		RETURN_STRINGL(((char *)haystack), ret_pos, 1);
-	} 
+	}
 	else {
 		RETURN_STRINGL(((char *)haystack) + ret_pos, haystack_len - ret_pos, 1);
 	}
@@ -752,7 +752,7 @@ grapheme_extract_count_iter(UBreakIterator *bi, int32_t size, unsigned char *pst
 		size--;
 	}
 
-	/* pos is one past the last UChar - and represent the number of code units to 
+	/* pos is one past the last UChar - and represent the number of code units to
 		advance in the utf-8 buffer
 	*/
 
@@ -790,10 +790,10 @@ PHP_FUNCTION(grapheme_extract)
 	zval *next = NULL; /* return offset of next part of the string */
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|llz", (char **)&str, &str_len, &size, &extract_type, &lstart, &next) == FAILURE) {
-	
+
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
 			 "grapheme_extract: unable to parse input param", 0 TSRMLS_CC );
-			 
+
 		RETURN_FALSE;
 	}
 
@@ -801,12 +801,12 @@ PHP_FUNCTION(grapheme_extract)
 		if ( !PZVAL_IS_REF(next) ) {
 			intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
 				 "grapheme_extract: 'next' was not passed by reference", 0 TSRMLS_CC );
-			 
+
 			RETURN_FALSE;
 		}
 		else {
 			/* initialize next */
-            ZVAL_LONG(next, start);
+            ZVAL_LONG(next, lstart);
 		}
 	}
 
@@ -814,16 +814,22 @@ PHP_FUNCTION(grapheme_extract)
 
 		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
 			 "grapheme_extract: unknown extract type param", 0 TSRMLS_CC );
-			 
+
 		RETURN_FALSE;
 	}
 
 	if ( lstart > INT32_MAX || lstart < 0 || lstart >= str_len ) {
+		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_extract: start not contained in string", 0 TSRMLS_CC );
+		RETURN_FALSE;
+	}
 
-		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_extract: start not contained in string", 1 TSRMLS_CC );
-
+	if ( size > INT32_MAX || size < 0) {
+		intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_extract: size is invalid", 0 TSRMLS_CC );
 		RETURN_FALSE;
 	}
+	if (size == 0) {
+		RETURN_EMPTY_STRING();
+	}
 
 	/* we checked that it will fit: */
 	start = (int32_t) lstart;
@@ -839,7 +845,7 @@ PHP_FUNCTION(grapheme_extract)
 			if ( pstr >= str_end ) {
 				intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
 								"grapheme_extract: invalid input string", 0 TSRMLS_CC );
-			 
+
 				RETURN_FALSE;
 			}
 		}
@@ -850,9 +856,9 @@ PHP_FUNCTION(grapheme_extract)
 	/* if the string is all ASCII up to size+1 - or str_len whichever is first - then we are done.
 		(size + 1 because the size-th character might be the beginning of a grapheme cluster)
 	 */
-	
+
 	if ( -1 != grapheme_ascii_check(pstr, size + 1 < str_len ? size + 1 : str_len ) ) {
-        long nsize = ( size < str_len ? size : str_len ); 
+        long nsize = ( size < str_len ? size : str_len );
 		if ( NULL != next ) {
 			ZVAL_LONG(next, start+nsize);
 		}
diff --git a/ext/intl/locale/locale_methods.c b/ext/intl/locale/locale_methods.c
index 51c0292..bbfb65b 100755
--- a/ext/intl/locale/locale_methods.c
+++ b/ext/intl/locale/locale_methods.c
@@ -14,7 +14,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: locale_methods.c 292566 2009-12-23 21:41:05Z stas $ */
+/* $Id: locale_methods.c 307392 2011-01-12 00:29:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -264,7 +264,7 @@ static char* get_icu_value_internal( char* loc_name , char* tag_name, int* resul
 	UErrorCode  	status          = U_ZERO_ERROR;
 
 
-	if( tag_name != LOC_CANONICALIZE_TAG ){
+	if( strcmp(tag_name, LOC_CANONICALIZE_TAG) != 0 ){
 		/* Handle  grandfathered languages */
 		grOffset =  findOffset( LOC_GRANDFATHERED , loc_name );
 		if( grOffset >= 0 ){
@@ -501,7 +501,7 @@ static void get_icu_disp_value_src_php( char* tag_name, INTERNAL_FUNCTION_PARAME
 	loc_name = INTL_G(default_locale);
 	}
 
-	if( tag_name != DISP_NAME ){
+	if( strcmp(tag_name, DISP_NAME) != 0 ){
 		/* Handle grandfathered languages */
 		grOffset = findOffset( LOC_GRANDFATHERED , loc_name );
 		if( grOffset >= 0 ){
@@ -1042,9 +1042,10 @@ static int add_array_entry(char* loc_name, zval* hash_arr, char* key_name TSRMLS
 				sprintf( cur_key_name , "%s%d", key_name , cnt++);	
 				add_assoc_string( hash_arr, cur_key_name , token , TRUE );
 			}
-
-			if( key_name == LOC_PRIVATE_TAG ){
+/*
+			if( strcmp(key_name, LOC_PRIVATE_TAG) == 0 ){
 			}
+*/
 		}
 	} else {
 		if( result == 1 ){
diff --git a/ext/intl/msgformat/msgformat_class.c b/ext/intl/msgformat/msgformat_class.c
index b710ee7..bd29129 100755
--- a/ext/intl/msgformat/msgformat_class.c
+++ b/ext/intl/msgformat/msgformat_class.c
@@ -25,6 +25,7 @@
 #include "msgformat_attr.h"
 
 zend_class_entry *MessageFormatter_ce_ptr = NULL;
+static zend_object_handlers MessageFormatter_handlers;
 
 /*
  * Auxiliary functions needed by objects of 'MessageFormatter' class
@@ -66,12 +67,36 @@ zend_object_value MessageFormatter_object_create(zend_class_entry *ce TSRMLS_DC)
 		(zend_objects_free_object_storage_t)MessageFormatter_object_free,
 		NULL TSRMLS_CC );
 
-	retval.handlers = zend_get_std_object_handlers();
+	retval.handlers = &MessageFormatter_handlers;
 
 	return retval;
 }
 /* }}} */
 
+/* {{{ MessageFormatter_object_clone */
+zend_object_value MessageFormatter_object_clone(zval *object TSRMLS_DC)
+{
+	zend_object_value new_obj_val;
+	zend_object_handle handle = Z_OBJ_HANDLE_P(object);
+	MessageFormatter_object *mfo, *new_mfo;
+
+	MSG_FORMAT_METHOD_FETCH_OBJECT;
+	new_obj_val = MessageFormatter_ce_ptr->create_object(MessageFormatter_ce_ptr TSRMLS_CC);
+	new_mfo = (MessageFormatter_object *)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC);
+	/* clone standard parts */	
+	zend_objects_clone_members(&new_mfo->zo, new_obj_val, &mfo->zo, handle TSRMLS_CC);
+	/* clone formatter object */
+	MSG_FORMAT_OBJECT(new_mfo) = umsg_clone(MSG_FORMAT_OBJECT(mfo),  &INTL_DATA_ERROR_CODE(new_mfo));
+	if(U_FAILURE(INTL_DATA_ERROR_CODE(new_mfo))) {
+		/* set up error in case error handler is interested */
+		intl_error_set( NULL, INTL_DATA_ERROR_CODE(new_mfo), "Failed to clone MessageFormatter object", 0 TSRMLS_CC );
+		MessageFormatter_object_dtor(new_mfo, new_obj_val.handle TSRMLS_CC); /* free new object */
+		zend_error(E_ERROR, "Failed to clone MessageFormatter object");
+	}
+	return new_obj_val;
+}
+/* }}} */
+
 /*
  * 'MessageFormatter' class registration structures & functions
  */
@@ -135,6 +160,10 @@ void msgformat_register_class( TSRMLS_D )
 	ce.create_object = MessageFormatter_object_create;
 	MessageFormatter_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
 
+	memcpy(&MessageFormatter_handlers, zend_get_std_object_handlers(),
+		sizeof MessageFormatter_handlers);
+	MessageFormatter_handlers.clone_obj = MessageFormatter_object_clone;
+
 	/* Declare 'MessageFormatter' class properties. */
 	if( !MessageFormatter_ce_ptr )
 	{
diff --git a/ext/intl/resourcebundle/resourcebundle.c b/ext/intl/resourcebundle/resourcebundle.c
index b525ed1..237d6c8 100644
--- a/ext/intl/resourcebundle/resourcebundle.c
+++ b/ext/intl/resourcebundle/resourcebundle.c
@@ -29,7 +29,6 @@ void resourcebundle_extract_value( zval *return_value, ResourceBundle_object *so
 	UResType               restype;
 	const UChar*           ufield;
 	const uint8_t*         bfield;
-	char *                 cfield;
 	const int32_t*         vfield;
 	int32_t                ilen;
 	int                    i;
diff --git a/ext/intl/resourcebundle/resourcebundle_class.c b/ext/intl/resourcebundle/resourcebundle_class.c
index bebd0e8..a8a4bf1 100644
--- a/ext/intl/resourcebundle/resourcebundle_class.c
+++ b/ext/intl/resourcebundle/resourcebundle_class.c
@@ -109,7 +109,7 @@ static void resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS)
 	if (!fallback && (INTL_DATA_ERROR_CODE(rb) == U_USING_FALLBACK_WARNING || INTL_DATA_ERROR_CODE(rb) == U_USING_DEFAULT_WARNING)) {
 		intl_errors_set_code( NULL, INTL_DATA_ERROR_CODE(rb) TSRMLS_CC );
 		spprintf( &pbuf, 0, "resourcebundle_ctor: Cannot load libICU resource '%s' without fallback from %s to %s",
-				bundlename, locale, ures_getLocale( rb->me, &INTL_DATA_ERROR_CODE(rb)) );
+				bundlename, locale, ures_getLocaleByType( rb->me, ULOC_ACTUAL_LOCALE, &INTL_DATA_ERROR_CODE(rb)) );
 		intl_errors_set_custom_msg( INTL_DATA_ERROR_P(rb), pbuf, 1 TSRMLS_CC );
 		efree(pbuf);
 		zval_dtor( return_value );
@@ -187,7 +187,7 @@ static void resourcebundle_array_fetch(zval *object, zval *offset, zval *return_
 
 	if (!fallback && (INTL_DATA_ERROR_CODE(rb) == U_USING_FALLBACK_WARNING || INTL_DATA_ERROR_CODE(rb) == U_USING_DEFAULT_WARNING)) {
 		UErrorCode icuerror;
-		const char * locale = ures_getLocale( rb->me, &icuerror );
+		const char * locale = ures_getLocaleByType( rb->me, ULOC_ACTUAL_LOCALE, &icuerror );
 		if (is_numeric) {
 			spprintf( &pbuf, 0, "Cannot load element %d without fallback from to %s", meindex, locale );
 		} else {
@@ -420,6 +420,7 @@ void resourcebundle_register_class( TSRMLS_D )
 	}
 
 	ResourceBundle_object_handlers = std_object_handlers;
+	ResourceBundle_object_handlers.clone_obj	  = NULL; /* ICU ResourceBundle has no clone implementation */
 	ResourceBundle_object_handlers.read_dimension = resourcebundle_array_get;
 	ResourceBundle_object_handlers.count_elements = resourcebundle_array_count;
 }
diff --git a/ext/intl/tests/bug53512.phpt b/ext/intl/tests/bug53512.phpt
new file mode 100644
index 0000000..a1b1dcf
--- /dev/null
+++ b/ext/intl/tests/bug53512.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #53512 (NumberFormatter::setSymbol crash on bogus $attr values)
+--SKIPIF--
+<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
+--FILE--
+<?php
+
+$badvals = array(4294901761, 2147483648, -2147483648, -1);
+
+foreach ($badvals as $val) {
+	$x = numfmt_create("en", NumberFormatter::PATTERN_DECIMAL);
+	var_dump(numfmt_set_symbol($x, $val, ""));
+	var_dump(intl_get_error_message());
+}
+
+?>
+--EXPECTF--
+bool(false)
+string(65) "numfmt_set_symbol: invalid symbol value: U_ILLEGAL_ARGUMENT_ERROR"
+bool(false)
+string(65) "numfmt_set_symbol: invalid symbol value: U_ILLEGAL_ARGUMENT_ERROR"
+bool(false)
+string(65) "numfmt_set_symbol: invalid symbol value: U_ILLEGAL_ARGUMENT_ERROR"
+bool(false)
+string(65) "numfmt_set_symbol: invalid symbol value: U_ILLEGAL_ARGUMENT_ERROR"
diff --git a/ext/intl/tests/collator_get_locale.phpt b/ext/intl/tests/collator_get_locale.phpt
index 2fab35e..3f5dbaa 100755
--- a/ext/intl/tests/collator_get_locale.phpt
+++ b/ext/intl/tests/collator_get_locale.phpt
@@ -19,7 +19,6 @@ function ut_main()
         -9999999999999,
         9999999999999,
         1.2,
-        9999999999999999999999999999999999999999999999
     );
 
     $coll = ut_coll_create( 'en_US' );
@@ -49,4 +48,3 @@ Locale of type -100 is false
 Locale of type -9999999999999 is false
 Locale of type 9999999999999 is false
 Locale of type 1.2 is 'en_US'
-Locale of type 1.0E+46 is false
diff --git a/ext/intl/tests/collator_get_sort_key.phpt b/ext/intl/tests/collator_get_sort_key.phpt
index 0186c26..0fedde0 100755
--- a/ext/intl/tests/collator_get_sort_key.phpt
+++ b/ext/intl/tests/collator_get_sort_key.phpt
@@ -2,6 +2,8 @@
 collator_get_sort_key()
 --SKIPIF--
 <?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
+--XFAIL--
+Sort keys are not fixed, comparing them to fixed strings doesn't work.
 --FILE--
 <?php
 
@@ -30,7 +32,7 @@ function ut_main()
 
     // Regular strings keys
     $test_params = array(
-		'abc', 'abd', 'aaa', 
+		'abc', 'abd', 'aaa',
 		'аа', 'а', 'z',
 		'', null , '3',
         'y'  , 'i'  , 'k'
@@ -40,7 +42,7 @@ function ut_main()
 
     // Sort a non-ASCII array using ru_RU locale.
     $test_params = array(
-		'абг', 'абв', 'жжж', 'эюя' 
+		'абг', 'абв', 'жжж', 'эюя'
     );
 
     $res_str .= sort_arrays( 'ru_RU', $test_params );
@@ -67,9 +69,9 @@ source: %D0%B0
 key: _+%01%05%01%05%00
 source: z
 key: %5B%01%05%01%05%00
-source: 
+source:
 key: %01%01%00
-source: 
+source:
 key: %01%01%00
 source: 3
 key: %26%80%01%05%01%05%00
diff --git a/ext/intl/tests/dateformat_clone.phpt b/ext/intl/tests/dateformat_clone.phpt
new file mode 100755
index 0000000..886a98f
--- /dev/null
+++ b/ext/intl/tests/dateformat_clone.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Cloning datefmt
+--SKIPIF--
+<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
+--FILE--
+<?php
+include_once( 'ut_common.inc' );
+$GLOBALS['oo-mode'] = true;
+$res_str = '';
+/*
+ * Clone
+ */
+$start_pattern = 'dd-MM-YY';
+$fmt = ut_datefmt_create( "en-US",  IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'America/New_York', IntlDateFormatter::GREGORIAN , $start_pattern );
+
+$formatted = ut_datefmt_format($fmt,0);
+$res_str .= "\nResult of formatting timestamp=0 is :  \n$formatted";
+
+$fmt_clone = clone $fmt;
+ut_datefmt_set_pattern( $fmt , 'yyyy-DDD.hh:mm:ss z' );
+
+$formatted = ut_datefmt_format($fmt,0);
+$res_str .= "\nResult of formatting timestamp=0 is :  \n$formatted";
+$formatted = ut_datefmt_format($fmt_clone,0);
+$res_str .= "\nResult of clone formatting timestamp=0 is :  \n$formatted";
+
+echo $res_str;
+
+?>
+--EXPECTF--
+Result of formatting timestamp=0 is :  
+31-12-69
+Result of formatting timestamp=0 is :  
+1969-365.07:00:00 EST
+Result of clone formatting timestamp=0 is :  
+31-12-69
diff --git a/ext/intl/tests/dateformat_get_set_pattern.phpt b/ext/intl/tests/dateformat_get_set_pattern.phpt
index b0d02dc..6489232 100755
--- a/ext/intl/tests/dateformat_get_set_pattern.phpt
+++ b/ext/intl/tests/dateformat_get_set_pattern.phpt
@@ -58,12 +58,12 @@ ut_run();
 Creating IntlDateFormatter with pattern = dd-MM-YY 
 After call to get_pattern :  pattern= dd-MM-YY
 Result of formatting timestamp=0 is :  
-31-12-70
+31-12-69
 -------------------
 Setting IntlDateFormatter with pattern = DD-MM-YYYY hh:mm:ss 
 After call to get_pattern :  pattern= DD-MM-YYYY hh:mm:ss
 Result of formatting timestamp=0 with the new pattern is :  
-365-12-1970 07:00:00
+365-12-1969 07:00:00
 
 -------------------
 Setting IntlDateFormatter with pattern = yyyy-DDD.hh:mm:ss z 
diff --git a/ext/intl/tests/dateformat_set_timezone_id.phpt b/ext/intl/tests/dateformat_set_timezone_id.phpt
index 76b4d47..900d424 100755
--- a/ext/intl/tests/dateformat_set_timezone_id.phpt
+++ b/ext/intl/tests/dateformat_set_timezone_id.phpt
@@ -19,7 +19,7 @@ function ut_main()
 		'CN'
 	);
 	$timestamp_entry = 0;
-	
+
 	$res_str = '';
 
 	$fmt = ut_datefmt_create( "en_US",  IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'America/San_Francisco' , IntlDateFormatter::GREGORIAN  );
@@ -56,18 +56,18 @@ After creation of the dateformatter :  timezone_id= America/San_Francisco
 -----------
 Trying to set timezone_id= America/New_York
 After call to set_timezone_id :  timezone_id= America/New_York
-Formatting timestamp=0 resulted in  Wednesday, December 31, 1969 7:00:00 PM ET
-Formatting timestamp=3600 resulted in  Wednesday, December 31, 1969 8:00:00 PM ET
+Formatting timestamp=0 resulted in  Wednesday, December 31, 1969 7:00:00 PM Eastern Standard Time
+Formatting timestamp=3600 resulted in  Wednesday, December 31, 1969 8:00:00 PM Eastern Standard Time
 -----------
 Trying to set timezone_id= America/Los_Angeles
 After call to set_timezone_id :  timezone_id= America/Los_Angeles
-Formatting timestamp=0 resulted in  Wednesday, December 31, 1969 4:00:00 PM PT
-Formatting timestamp=3600 resulted in  Wednesday, December 31, 1969 5:00:00 PM PT
+Formatting timestamp=0 resulted in  Wednesday, December 31, 1969 4:00:00 PM Pacific Standard Time
+Formatting timestamp=3600 resulted in  Wednesday, December 31, 1969 5:00:00 PM Pacific Standard Time
 -----------
 Trying to set timezone_id= America/Chicago
 After call to set_timezone_id :  timezone_id= America/Chicago
-Formatting timestamp=0 resulted in  Wednesday, December 31, 1969 6:00:00 PM CT
-Formatting timestamp=3600 resulted in  Wednesday, December 31, 1969 7:00:00 PM CT
+Formatting timestamp=0 resulted in  Wednesday, December 31, 1969 6:00:00 PM Central Standard Time
+Formatting timestamp=3600 resulted in  Wednesday, December 31, 1969 7:00:00 PM Central Standard Time
 -----------
 Trying to set timezone_id= CN
 After call to set_timezone_id :  timezone_id= CN
diff --git a/ext/intl/tests/formatter_clone.phpt b/ext/intl/tests/formatter_clone.phpt
new file mode 100755
index 0000000..4e8d096
--- /dev/null
+++ b/ext/intl/tests/formatter_clone.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Cloning numfmt
+--SKIPIF--
+<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
+--FILE--
+<?php
+include_once( 'ut_common.inc' );
+$GLOBALS['oo-mode'] = true;
+$res_str = '';
+/*
+ * Clone
+ */
+$test_value = 12345.123456;
+$fmt = new NumberFormatter( "en_US", NumberFormatter::PATTERN_DECIMAL );
+$res_str .= "Formatted number: " . ut_nfmt_format( $fmt, $test_value ) . "\n";
+$fmt_clone = clone $fmt;
+
+$res = $fmt->setPattern("0.0" );
+if( $res === false )
+	$res_str .= ut_nfmt_get_error_message( $fmt ) . " (" . ut_nfmt_get_error_code( $fmt ) . ")\n";
+
+$res_str .= "Formatted number: " . ut_nfmt_format( $fmt, $test_value ) . "\n";
+$res_str .= "Formatted(clone) number: " . ut_nfmt_format( $fmt_clone, $test_value ) . "\n";
+echo $res_str;
+
+?>
+--EXPECTF--
+Formatted number: 12345.123456
+Formatted number: 12345.1
+Formatted(clone) number: 12345.123456
diff --git a/ext/intl/tests/formatter_format.phpt b/ext/intl/tests/formatter_format.phpt
index 413c71d..f47b123 100755
--- a/ext/intl/tests/formatter_format.phpt
+++ b/ext/intl/tests/formatter_format.phpt
@@ -9,7 +9,7 @@ numfmt_format()
  * Format a number using misc locales/patterns.
  */
 
-/* 
+/*
  * TODO: doesn't pass on ICU 3.6 because 'ru' and 'de' locales changed
  * currency and percent formatting.
  */
@@ -50,7 +50,7 @@ function ut_main()
         foreach( $styles as $style => $pattern )
         {
             $fmt = ut_nfmt_create( $locale, $style, $pattern );
-			
+
 			if(!$fmt) {
 				$str_res .= "Bad formatter!\n";
 				continue;
@@ -74,8 +74,8 @@ Locale is: en_US
 '\$1,234,567.89'
 '123,456,789%'
 '1.23456789123457E6'
-'one million, two hundred and thirty-four thousand, five hundred and sixty-seven point eight nine one two three four five seven'
-'1,234,567th'
+'one million,? two hundred (and )?thirty-four thousand,? five hundred (and )?sixty-seven point eight nine one two three four five seven'
+'1,234,567(th|áµ—Ê°)'
 '342:56:07'
 '#####.###'
 Bad formatter!
@@ -83,11 +83,11 @@ Bad formatter!
 Locale is: ru_UA
 '1234567,89123457'
 '1 234 567,891'
-'1 234 567,89 грн.'
-'123 456 789 ?%'
+'1 234 567,89 ?(грн\.|₴)'
+'123 456 789 ?%'
 '1,23456789123457E6'
-'миллион два сто тридцать четыре тысяча пять сто шестьдесят восемь'
-'1 234 567'
+'один миллион двасти тридцать четыре тысяч пятьсот шестьдесят семь запятая восемь девять один два три четыре пять семь'
+'1 234 567.?'
 '1 234 567'
 '#####.###'
 Bad formatter!
@@ -95,11 +95,11 @@ Bad formatter!
 Locale is: de
 '1234567,89123457'
 '1.234.567,891'
-'(¤ )?1.234.567,89( ¤)?'
-'123.456.789 ?%'
+'(¤ )?1.234.567,89( ¤)?'
+'123\.456\.789 %'
 '1,23456789123457E6'
-'eine Million zweihundertvierunddreißigtausendfünfhundertsiebenundsechzig komma acht neun eins zwei drei vier fünf sieben'
-'1.234.567'
+'eine Million zwei­hundert­vier­und­dreißig­tausend­fünf­hundert­sieben­und­sechzig Komma acht neun eins zwei drei vier fünf sieben'
+'1.234.567.?'
 '1.234.567'
 '#####.###'
 Bad formatter!
@@ -107,11 +107,11 @@ Bad formatter!
 Locale is: fr
 '1234567,89123457'
 '1 234 567,891'
-'1 234 567,89 ¤'
+'1 234 567,89 ¤'
 '123 456 789 ?%'
 '1,23456789123457E6'
-'un million deux cents trente-quatre mille cinq cents soixante-sept virgule huit neuf un deux trois quatre cinq sept'
-'1 234 567'
+'un million deux-cent-trente-quatre-mille-cinq-cent-soixante-sept virgule huit neuf un deux trois quatre cinq sept'
+'1 234 567ᵉ?'
 '1 234 567'
 '#####.###'
 Bad formatter!
@@ -122,8 +122,8 @@ Locale is: en_UK
 '¤1,234,567.89'
 '123,456,789%'
 '1.23456789123457E6'
-'one million, two hundred and thirty-four thousand, five hundred and sixty-seven point eight nine one two three four five seven'
-'1,234,567th'
+'one million,? two hundred (and )?thirty-four thousand,? five hundred (and )?sixty-seven point eight nine one two three four five seven'
+'1,234,567(th|áµ—Ê°)'
 '342:56:07'
 '#####.###'
 Bad formatter!
\ No newline at end of file
diff --git a/ext/intl/tests/formatter_format_currency.phpt b/ext/intl/tests/formatter_format_currency.phpt
index 715f122..c53f831 100755
--- a/ext/intl/tests/formatter_format_currency.phpt
+++ b/ext/intl/tests/formatter_format_currency.phpt
@@ -8,7 +8,7 @@ numfmt_format_currency()
 /*
  * Format a number using misc currencies/locales.
  */
-/* 
+/*
  * TODO: doesn't pass on ICU 3.6 because 'ru' and 'uk' locales changed
  * currency formatting.
  */
@@ -41,9 +41,9 @@ include_once( 'ut_common.inc' );
 ut_run();
 
 ?>
---EXPECTREGEX--
+--EXPECT--
 en_UK: '£1,234,567.89'
-en_US: '\$1,234,567.89'
-ru: '1 234 567,89 ?р.'
-uk: '(грн. )?1 234 567,89( грн.)?'
-en: 'UAH1,234,567.89'
\ No newline at end of file
+en_US: '$1,234,567.89'
+ru: '1 234 567,89 р.'
+uk: '1 234 567,89 ₴'
+en: 'â‚´1,234,567.89'
\ No newline at end of file
diff --git a/ext/intl/tests/formatter_get_set_attribute.phpt b/ext/intl/tests/formatter_get_set_attribute.phpt
index c523346..95a2643 100755
--- a/ext/intl/tests/formatter_get_set_attribute.phpt
+++ b/ext/intl/tests/formatter_get_set_attribute.phpt
@@ -25,7 +25,7 @@ function ut_main()
         'FRACTION_DIGITS' => array( NumberFormatter::FRACTION_DIGITS, 5, 12345.123456 ),
         'MULTIPLIER' => array( NumberFormatter::MULTIPLIER, 2, 12345.123456 ),
         'GROUPING_SIZE' => array( NumberFormatter::GROUPING_SIZE, 2, 12345.123456 ),
-        'ROUNDING_MODE' => array( NumberFormatter::ROUNDING_MODE, 7, 12345.123456 ),
+        'ROUNDING_MODE' => array( NumberFormatter::ROUNDING_MODE, 1, 12345.123456 ),
         'ROUNDING_INCREMENT' => array( NumberFormatter::ROUNDING_INCREMENT, (float)2, 12345.123456 ),
         'FORMAT_WIDTH' => array( NumberFormatter::FORMAT_WIDTH, 27, 12345.123456 ),
         'PADDING_POSITION' => array( NumberFormatter::PADDING_POSITION, 21, 12345.123456 ),
@@ -155,10 +155,10 @@ New attribute value: 2 ;  Format result: '0,01,23,45.12346' ; Parse result: 1234
 Attribute ROUNDING_MODE
 Old attribute value: 4 ;  Format result: '0,012,345.12346' ; Parse result: 12345.12346
 Setting attribute: ok
-New attribute value: 7 ;  Format result: '0,012,345.12346' ; Parse result: 12345.12346
+New attribute value: 1 ;  Format result: '0,012,345.12345' ; Parse result: 12345.12345
 
 Attribute ROUNDING_INCREMENT
-Old attribute value: 0 ;  Format result: '0,012,345.12346' ; Parse result: 12345.12346
+Old attribute value: 1.0E-5 ;  Format result: '0,012,345.12346' ; Parse result: 12345.12346
 Setting attribute: ok
 New attribute value: 2 ;  Format result: '0,012,346.00000' ; Parse result: 12346
 
diff --git a/ext/intl/tests/grapheme.phpt b/ext/intl/tests/grapheme.phpt
index d65c909..def9110 100755
--- a/ext/intl/tests/grapheme.phpt
+++ b/ext/intl/tests/grapheme.phpt
@@ -772,8 +772,8 @@ function check_result($result, $expected) {
 
 function grapheme_strlen($string) {}
 
-"hindi" in devanagari strlen 5
-"ab" + "hindi" + "cde" strlen 10
+"hindi" in devanagari strlen 3
+"ab" + "hindi" + "cde" strlen 8
 "" strlen 0
 char_a_ring_nfd strlen 1
 char_a_ring_nfd + "bc" strlen 3
diff --git a/ext/intl/tests/locale_get_display_name.phpt b/ext/intl/tests/locale_get_display_name.phpt
index 1e84bc2..cf89498 100755
--- a/ext/intl/tests/locale_get_display_name.phpt
+++ b/ext/intl/tests/locale_get_display_name.phpt
@@ -130,9 +130,9 @@ disp_locale=fr :  display_name=i-enochian
 disp_locale=de :  display_name=i-enochian
 -----------------
 locale='zh-hakka'
-disp_locale=en :  display_name=Chinese #HAKKA#
-disp_locale=fr :  display_name=chinois #HAKKA#
-disp_locale=de :  display_name=Chinesisch #HAKKA#
+disp_locale=en :  display_name=Chinese( #HAKKA#)?
+disp_locale=fr :  display_name=chinois( #HAKKA#)?
+disp_locale=de :  display_name=Chinesisch( #HAKKA#)?
 -----------------
 locale='zh-wuu'
 disp_locale=en :  display_name=Chinese #WUU#
@@ -201,12 +201,12 @@ disp_locale=de :  display_name=i-enochian
 -----------------
 locale='zh-Hant'
 disp_locale=en :  display_name=Chinese #Traditional Han#
-disp_locale=fr :  display_name=chinois #idéogrammes han #variante traditionnelle##
+disp_locale=fr :  display_name=chinois #idéogrammes han (#variante traditionnelle#|traditionnels)#
 disp_locale=de :  display_name=Chinesisch #Traditionelle Chinesische Schrift#
 -----------------
 locale='zh-Hans'
 disp_locale=en :  display_name=Chinese #Simplified Han#
-disp_locale=fr :  display_name=chinois #idéogrammes han #variante simplifiée##
+disp_locale=fr :  display_name=chinois #idéogrammes han (#variante simplifiée#|simplifiés)#
 disp_locale=de :  display_name=Chinesisch #Vereinfachte Chinesische Schrift#
 -----------------
 locale='sr-Cyrl'
@@ -221,7 +221,7 @@ disp_locale=de :  display_name=Serbisch #Lateinisch#
 -----------------
 locale='zh-Hans-CN'
 disp_locale=en :  display_name=Chinese #Simplified Han, China#
-disp_locale=fr :  display_name=chinois #idéogrammes han #variante simplifiée#, Chine#
+disp_locale=fr :  display_name=chinois #idéogrammes han (#variante simplifiée#|simplifiés), Chine#
 disp_locale=de :  display_name=Chinesisch #Vereinfachte Chinesische Schrift, China#
 -----------------
 locale='sr-Latn-CS'
@@ -230,19 +230,19 @@ disp_locale=fr :  display_name=serbe #latin, Serbie-et-Monténégro#
 disp_locale=de :  display_name=Serbisch #Lateinisch, Serbien und Montenegro#
 -----------------
 locale='sl-rozaj'
-disp_locale=en :  display_name=Slovenian #ROZAJ#
-disp_locale=fr :  display_name=slovène #ROZAJ#
-disp_locale=de :  display_name=Slowenisch #(ROZAJ|Resianisch)#
+disp_locale=en :  display_name=Slovenian( #ROZAJ#)?
+disp_locale=fr :  display_name=slovène( #ROZAJ#)?
+disp_locale=de :  display_name=Slowenisch( #(ROZAJ|Resianisch)#)?
 -----------------
 locale='sl-nedis'
-disp_locale=en :  display_name=Slovenian #NEDIS#
-disp_locale=fr :  display_name=slovène #NEDIS#
-disp_locale=de :  display_name=Slowenisch #NEDIS#
+disp_locale=en :  display_name=Slovenian( #NEDIS#)?
+disp_locale=fr :  display_name=slovène( #NEDIS#)?
+disp_locale=de :  display_name=Slowenisch( #NEDIS#)?
 -----------------
 locale='de-CH-1901'
 disp_locale=en :  display_name=German #Switzerland, Traditional German orthography#
 disp_locale=fr :  display_name=allemand #Suisse, orthographe allemande traditionnelle#
-disp_locale=de :  display_name=Deutsch #Schweiz, (1901|alte deutsche Rechtschreibung)#
+disp_locale=de :  display_name=Deutsch #Schweiz, (1901|[aA]lte deutsche Rechtschreibung)#
 -----------------
 locale='sl-IT-nedis'
 disp_locale=en :  display_name=Slovenian #Italy, Natisone dialect#
@@ -275,9 +275,9 @@ disp_locale=fr :  display_name=allemand #Suisse, X_PHONEBK#
 disp_locale=de :  display_name=Deutsch #Schweiz, X_PHONEBK#
 -----------------
 locale='az-Arab-x-AZE-derbend'
-disp_locale=en :  display_name=Azerbaijani #Arabic, X, AZE_DERBEND#
-disp_locale=fr :  display_name=azéri #arabe, X, AZE_DERBEND#
-disp_locale=de :  display_name=Aserbaidschanisch #Arabisch, X, AZE_DERBEND#
+disp_locale=en :  display_name=Azerbaijani #Arabic(, X, AZE_DERBEND)?#
+disp_locale=fr :  display_name=azéri #arabe(, X, AZE_DERBEND)?#
+disp_locale=de :  display_name=Aserbaidschanisch #Arabisch(, X, AZE_DERBEND)?#
 -----------------
 locale='zh-min'
 disp_locale=en :  display_name=Chinese #MIN#
@@ -320,9 +320,9 @@ disp_locale=fr :  display_name=chinois #Chine, A_MYEXT_X_PRIVATE#
 disp_locale=de :  display_name=Chinesisch #China, A_MYEXT_X_PRIVATE#
 -----------------
 locale='en-a-myExt-b-another'
-disp_locale=en :  display_name=English #A, MYEXT_B_ANOTHER#
-disp_locale=fr :  display_name=anglais #A, MYEXT_B_ANOTHER#
-disp_locale=de :  display_name=Englisch #A, MYEXT_B_ANOTHER#
+disp_locale=en :  display_name=English( #A, MYEXT_B_ANOTHER#)?
+disp_locale=fr :  display_name=anglais( #A, MYEXT_B_ANOTHER#)?
+disp_locale=de :  display_name=Englisch( #A, MYEXT_B_ANOTHER#)?
 -----------------
 locale='de-419-DE'
 disp_locale=en :  display_name=German #Latin America and the Caribbean, DE#
@@ -335,7 +335,7 @@ disp_locale=fr :  display_name=a #Allemagne#
 disp_locale=de :  display_name=a #Deutschland#
 -----------------
 locale='ar-a-aaa-b-bbb-a-ccc'
-disp_locale=en :  display_name=Arabic #A, AAA_B_BBB_A_CCC#
-disp_locale=fr :  display_name=arabe #A, AAA_B_BBB_A_CCC#
-disp_locale=de :  display_name=Arabisch #A, AAA_B_BBB_A_CCC#
+disp_locale=en :  display_name=Arabic( #A, AAA_B_BBB_A_CCC#)?
+disp_locale=fr :  display_name=arabe( #A, AAA_B_BBB_A_CCC#)?
+disp_locale=de :  display_name=Arabisch( #A, AAA_B_BBB_A_CCC#)?
 -----------------
diff --git a/ext/intl/tests/locale_get_display_region.phpt b/ext/intl/tests/locale_get_display_region.phpt
index 47ebeb7..354fc06 100755
--- a/ext/intl/tests/locale_get_display_region.phpt
+++ b/ext/intl/tests/locale_get_display_region.phpt
@@ -163,14 +163,14 @@ disp_locale=fr :  display_region=Serbie-et-Monténégro
 disp_locale=de :  display_region=Serbien und Montenegro
 -----------------
 locale='sl-rozaj'
-disp_locale=en :  display_region=ROZAJ
-disp_locale=fr :  display_region=ROZAJ
-disp_locale=de :  display_region=ROZAJ
+disp_locale=en :  display_region=
+disp_locale=fr :  display_region=
+disp_locale=de :  display_region=
 -----------------
 locale='sl-nedis'
-disp_locale=en :  display_region=NEDIS
-disp_locale=fr :  display_region=NEDIS
-disp_locale=de :  display_region=NEDIS
+disp_locale=en :  display_region=
+disp_locale=fr :  display_region=
+disp_locale=de :  display_region=
 -----------------
 locale='de-CH-1901'
 disp_locale=en :  display_region=Switzerland
@@ -208,9 +208,9 @@ disp_locale=fr :  display_region=Suisse
 disp_locale=de :  display_region=Schweiz
 -----------------
 locale='az-Arab-x-AZE-derbend'
-disp_locale=en :  display_region=X
-disp_locale=fr :  display_region=X
-disp_locale=de :  display_region=X
+disp_locale=en :  display_region=X?
+disp_locale=fr :  display_region=X?
+disp_locale=de :  display_region=X?
 -----------------
 locale='zh-min'
 disp_locale=en :  display_region=
@@ -253,9 +253,9 @@ disp_locale=fr :  display_region=Chine
 disp_locale=de :  display_region=China
 -----------------
 locale='en-a-myExt-b-another'
-disp_locale=en :  display_region=A
-disp_locale=fr :  display_region=A
-disp_locale=de :  display_region=A
+disp_locale=en :  display_region=A?
+disp_locale=fr :  display_region=A?
+disp_locale=de :  display_region=A?
 -----------------
 locale='de-419-DE'
 disp_locale=en :  display_region=Latin America and the Caribbean
@@ -268,7 +268,7 @@ disp_locale=fr :  display_region=Allemagne
 disp_locale=de :  display_region=Deutschland
 -----------------
 locale='ar-a-aaa-b-bbb-a-ccc'
-disp_locale=en :  display_region=A
-disp_locale=fr :  display_region=A
-disp_locale=de :  display_region=A
+disp_locale=en :  display_region=A?
+disp_locale=fr :  display_region=A?
+disp_locale=de :  display_region=A?
 -----------------
diff --git a/ext/intl/tests/locale_get_display_script.phpt b/ext/intl/tests/locale_get_display_script.phpt
index 1b74e90..916441b 100755
--- a/ext/intl/tests/locale_get_display_script.phpt
+++ b/ext/intl/tests/locale_get_display_script.phpt
@@ -91,7 +91,7 @@ include_once( 'ut_common.inc' );
 ut_run();
 
 ?>
---EXPECT--
+--EXPECTREGEX--
 locale='uk-ua_CALIFORNIA at currency=;currency=GRN'
 disp_locale=en :  display_script=
 disp_locale=fr :  display_script=
@@ -134,12 +134,12 @@ disp_locale=de :  display_script=
 -----------------
 locale='zh-Hant'
 disp_locale=en :  display_script=Traditional Han
-disp_locale=fr :  display_script=idéogrammes han (variante traditionnelle)
+disp_locale=fr :  display_script=idéogrammes han (\(variante traditionnelle\)|traditionnels)
 disp_locale=de :  display_script=Traditionelle Chinesische Schrift
 -----------------
 locale='zh-Hans'
 disp_locale=en :  display_script=Simplified Han
-disp_locale=fr :  display_script=idéogrammes han (variante simplifiée)
+disp_locale=fr :  display_script=idéogrammes han (\(variante simplifiée\)|simplifiés)
 disp_locale=de :  display_script=Vereinfachte Chinesische Schrift
 -----------------
 locale='sr-Cyrl'
@@ -154,7 +154,7 @@ disp_locale=de :  display_script=Lateinisch
 -----------------
 locale='zh-Hans-CN'
 disp_locale=en :  display_script=Simplified Han
-disp_locale=fr :  display_script=idéogrammes han (variante simplifiée)
+disp_locale=fr :  display_script=idéogrammes han (\(variante simplifiée\)|simplifiés)
 disp_locale=de :  display_script=Vereinfachte Chinesische Schrift
 -----------------
 locale='sr-Latn-CS'
diff --git a/ext/intl/tests/locale_get_display_variant.phpt b/ext/intl/tests/locale_get_display_variant.phpt
index 7a58ba3..25bfef1 100755
--- a/ext/intl/tests/locale_get_display_variant.phpt
+++ b/ext/intl/tests/locale_get_display_variant.phpt
@@ -175,7 +175,7 @@ disp_locale=de :  display_variant=
 locale='de-CH-1901'
 disp_locale=en :  display_variant=Traditional German orthography
 disp_locale=fr :  display_variant=orthographe allemande traditionnelle
-disp_locale=de :  display_variant=(1901|alte deutsche Rechtschreibung)
+disp_locale=de :  display_variant=(1901|[Aa]lte deutsche Rechtschreibung)
 -----------------
 locale='sl-IT-nedis'
 disp_locale=en :  display_variant=Natisone dialect
@@ -208,9 +208,9 @@ disp_locale=fr :  display_variant=X_PHONEBK
 disp_locale=de :  display_variant=X_PHONEBK
 -----------------
 locale='az-Arab-x-AZE-derbend'
-disp_locale=en :  display_variant=AZE_DERBEND
-disp_locale=fr :  display_variant=AZE_DERBEND
-disp_locale=de :  display_variant=AZE_DERBEND
+disp_locale=en :  display_variant=(AZE_DERBEND)?
+disp_locale=fr :  display_variant=(AZE_DERBEND)?
+disp_locale=de :  display_variant=(AZE_DERBEND)?
 -----------------
 locale='zh-min'
 disp_locale=en :  display_variant=
@@ -253,9 +253,9 @@ disp_locale=fr :  display_variant=A_MYEXT_X_PRIVATE
 disp_locale=de :  display_variant=A_MYEXT_X_PRIVATE
 -----------------
 locale='en-a-myExt-b-another'
-disp_locale=en :  display_variant=MYEXT_B_ANOTHER
-disp_locale=fr :  display_variant=MYEXT_B_ANOTHER
-disp_locale=de :  display_variant=MYEXT_B_ANOTHER
+disp_locale=en :  display_variant=(MYEXT_B_ANOTHER)?
+disp_locale=fr :  display_variant=(MYEXT_B_ANOTHER)?
+disp_locale=de :  display_variant=(MYEXT_B_ANOTHER)?
 -----------------
 locale='de-419-DE'
 disp_locale=en :  display_variant=DE
@@ -268,7 +268,7 @@ disp_locale=fr :  display_variant=
 disp_locale=de :  display_variant=
 -----------------
 locale='ar-a-aaa-b-bbb-a-ccc'
-disp_locale=en :  display_variant=AAA_B_BBB_A_CCC
-disp_locale=fr :  display_variant=AAA_B_BBB_A_CCC
-disp_locale=de :  display_variant=AAA_B_BBB_A_CCC
+disp_locale=en :  display_variant=(AAA_B_BBB_A_CCC)?
+disp_locale=fr :  display_variant=(AAA_B_BBB_A_CCC)?
+disp_locale=de :  display_variant=(AAA_B_BBB_A_CCC)?
 -----------------
diff --git a/ext/intl/tests/locale_get_region.phpt b/ext/intl/tests/locale_get_region.phpt
index e62855e..0bebb33 100755
--- a/ext/intl/tests/locale_get_region.phpt
+++ b/ext/intl/tests/locale_get_region.phpt
@@ -99,8 +99,8 @@ sr-Cyrl:  region=''
 sr-Latn:  region=''
 zh-Hans-CN:  region='CN'
 sr-Latn-CS:  region='CS'
-sl-rozaj:  region='ROZAJ'
-sl-nedis:  region='NEDIS'
+sl-rozaj:  region=''
+sl-nedis:  region=''
 de-CH-1901:  region='CH'
 sl-IT-nedis:  region='IT'
 sl-Latn-IT-nedis:  region='IT'
@@ -108,7 +108,7 @@ de-DE:  region='DE'
 en-US:  region='US'
 es-419:  region='419'
 de-CH-x-phonebk:  region='CH'
-az-Arab-x-AZE-derbend:  region='X'
+az-Arab-x-AZE-derbend:  region=''
 zh-min:  region=''
 zh-min-nan-Hant-CN:  region='MIN'
 x-whatever:  region=''
@@ -117,7 +117,7 @@ sr-Latn-QM:  region='QM'
 sr-Qaaa-CS:  region='CS'
 en-US-u-islamCal:  region='US'
 zh-CN-a-myExt-x-private:  region='CN'
-en-a-myExt-b-another:  region='A'
+en-a-myExt-b-another:  region=''
 de-419-DE:  region='419'
 a-DE:  region='DE'
-ar-a-aaa-b-bbb-a-ccc:  region='A'
+ar-a-aaa-b-bbb-a-ccc:  region=''
diff --git a/ext/intl/tests/locale_parse_locale.phpt b/ext/intl/tests/locale_parse_locale.phpt
index e670b31..e47f718 100755
--- a/ext/intl/tests/locale_parse_locale.phpt
+++ b/ext/intl/tests/locale_parse_locale.phpt
@@ -138,10 +138,10 @@ sr-Latn-CS:
 language : 'sr' , script : 'Latn' , region : 'CS' , 
 ---------------------
 sl-rozaj: 
-language : 'sl' , region : 'ROZAJ' , 
+language : 'sl' , 
 ---------------------
 sl-nedis: 
-language : 'sl' , region : 'NEDIS' , 
+language : 'sl' , 
 ---------------------
 de-CH-1901: 
 language : 'de' , region : 'CH' , variant0 : '1901' , 
diff --git a/ext/intl/tests/msgfmt_clone.phpt b/ext/intl/tests/msgfmt_clone.phpt
new file mode 100755
index 0000000..9d8ea64
--- /dev/null
+++ b/ext/intl/tests/msgfmt_clone.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Cloning msgfmt
+--SKIPIF--
+<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
+--FILE--
+<?php
+include_once( 'ut_common.inc' );
+$GLOBALS['oo-mode'] = true;
+$res_str = '';
+/*
+ * Clone
+ */
+$fmt = ut_msgfmt_create( "en_US", "{0,number} monkeys on {1,number} trees" );
+
+// Get default patten.
+$res_str .= "Formatting result: " . ut_msgfmt_format( $fmt, array(123, 456) ) . "\n";
+$fmt_clone = clone $fmt;
+// Set a new pattern.
+$pattern = "{0,number} trees hosting {1,number} monkeys";
+$res = ut_msgfmt_set_pattern( $fmt, $pattern );
+$res_str .= "Formatting result: " . ut_msgfmt_format( $fmt, array(123, 456) ) . "\n";
+$res_str .= "Formatting clone result: " . ut_msgfmt_format( $fmt_clone, array(123, 456) ) . "\n";
+
+echo $res_str;
+
+?>
+--EXPECTF--
+Formatting result: 123 monkeys on 456 trees
+Formatting result: 123 trees hosting 456 monkeys
+Formatting clone result: 123 monkeys on 456 trees
diff --git a/ext/intl/tests/msgfmt_get_set_pattern.phpt b/ext/intl/tests/msgfmt_get_set_pattern.phpt
index dd6fb5f..67b1aca 100755
--- a/ext/intl/tests/msgfmt_get_set_pattern.phpt
+++ b/ext/intl/tests/msgfmt_get_set_pattern.phpt
@@ -30,11 +30,11 @@ function ut_main()
     if( $res === false )
         $res_str .= ut_msgfmt_get_error_message( $fmt ) . " (" . ut_msgfmt_get_error_code( $fmt ) . ")\n";
     $res_str .= "New pattern: '" . ut_msgfmt_get_pattern( $fmt ) . "'\n";
-    $res_str .= "Formatted number: " . ut_msgfmt_format( $fmt, array(123, 456) ) . "\n";
+    $res_str .= "Formatted message: " . ut_msgfmt_format( $fmt, array(123, 456) ) . "\n";
 
     ut_msgfmt_set_pattern($fmt, str_repeat($pattern, 10));
     $res_str .= "New pattern: '" . ut_msgfmt_get_pattern( $fmt ) . "'\n";
-    $res_str .= "Formatted number: " . ut_msgfmt_format( $fmt, array(123, 456) ) . "\n";
+    $res_str .= "Formatted message: " . ut_msgfmt_format( $fmt, array(123, 456) ) . "\n";
  
 
     return $res_str;
@@ -48,6 +48,6 @@ ut_run();
 Default pattern: '{0,number} monkeys on {1,number} trees'
 Formatting result: 123 monkeys on 456 trees
 New pattern: '{0,number} trees hosting {1,number} monkeys'
-Formatted number: 123 trees hosting 456 monkeys
+Formatted message: 123 trees hosting 456 monkeys
 New pattern: '{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys'
-Formatted number: 123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys
+Formatted message: 123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys
diff --git a/ext/json/JSON_parser.c b/ext/json/JSON_parser.c
index 259b77b..ec07a48 100644
--- a/ext/json/JSON_parser.c
+++ b/ext/json/JSON_parser.c
@@ -656,6 +656,7 @@ parse_JSON(JSON_parser jp, zval *z, unsigned short utf16_json[], int length, int
 					/* fall through if not IS_STRING */
                 default:
                     FREE_BUFFERS();
+                    jp->error_code = PHP_JSON_ERROR_SYNTAX;
                     return false;
                 }
                 break;
@@ -695,6 +696,7 @@ parse_JSON(JSON_parser jp, zval *z, unsigned short utf16_json[], int length, int
                         break;
                     default:
                         FREE_BUFFERS();
+                        jp->error_code = PHP_JSON_ERROR_SYNTAX;
                         return false;
                 }
                 buf.len = 0;
diff --git a/ext/json/json.c b/ext/json/json.c
index a5a981f..8fa67ed 100644
--- a/ext/json/json.c
+++ b/ext/json/json.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: json.c 303350 2010-09-14 03:46:28Z aharvey $ */
+/* $Id: json.c 308529 2011-02-21 08:09:02Z scottmac $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -431,7 +431,6 @@ static void json_escape_string(smart_str *buf, char *s, int len, int options TSR
 
 PHP_JSON_API void php_json_encode(smart_str *buf, zval *val, int options TSRMLS_DC) /* {{{ */
 {
-	JSON_G(error_code) = PHP_JSON_ERROR_NONE;
 	switch (Z_TYPE_P(val))
 	{
 		case IS_NULL:
@@ -567,6 +566,8 @@ static PHP_FUNCTION(json_encode)
 		return;
 	}
 
+	JSON_G(error_code) = PHP_JSON_ERROR_NONE;
+
 	php_json_encode(&buf, parameter, options TSRMLS_CC);
 
 	ZVAL_STRINGL(return_value, buf.c, buf.len, 1);
diff --git a/ext/json/php_json.h b/ext/json/php_json.h
index 37efd9c..beb6423 100644
--- a/ext/json/php_json.h
+++ b/ext/json/php_json.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_json.h 299535 2010-05-20 19:37:52Z iliaa $ */
+/* $Id: php_json.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_JSON_H
 #define PHP_JSON_H
diff --git a/ext/json/tests/bug54058.phpt b/ext/json/tests/bug54058.phpt
new file mode 100644
index 0000000..3b1136b
--- /dev/null
+++ b/ext/json/tests/bug54058.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Bug #54058 (json_last_error() invalid UTF-8 produces wrong error)
+--SKIPIF--
+<?php if (!extension_loaded("json")) print "skip"; ?>
+--FILE--
+<?php
+
+$bad_utf8 = quoted_printable_decode('=B0');
+
+json_encode($bad_utf8);
+var_dump(json_last_error());
+
+$a = new stdclass;
+$a->foo = quoted_printable_decode('=B0');
+json_encode($a);
+var_dump(json_last_error());
+
+$b = new stdclass;
+$b->foo = $bad_utf8;
+$b->bar = 1;
+json_encode($b);
+var_dump(json_last_error());
+
+$c = array(
+    'foo' => $bad_utf8,
+    'bar' => 1
+);
+json_encode($c);
+var_dump(json_last_error());
+?>
+--EXPECTF--
+int(5)
+int(5)
+int(5)
+int(5)
diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c
index c436bb4..4b609a3 100644
--- a/ext/ldap/ldap.c
+++ b/ext/ldap/ldap.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -23,7 +23,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: ldap.c 299434 2010-05-17 20:09:42Z pajoye $ */
+/* $Id: ldap.c 306939 2011-01-01 02:19:59Z felipe $ */
 #define IS_EXT_MODULE
 
 #ifdef HAVE_CONFIG_H
@@ -226,7 +226,7 @@ PHP_MINFO_FUNCTION(ldap)
 
 	php_info_print_table_start();
 	php_info_print_table_row(2, "LDAP Support", "enabled");
-	php_info_print_table_row(2, "RCS Version", "$Id: ldap.c 299434 2010-05-17 20:09:42Z pajoye $");
+	php_info_print_table_row(2, "RCS Version", "$Id: ldap.c 306939 2011-01-01 02:19:59Z felipe $");
 
 	if (LDAPG(max_links) == -1) {
 		snprintf(tmp, 31, "%ld/unlimited", LDAPG(num_links));
diff --git a/ext/ldap/php_ldap.h b/ext/ldap/php_ldap.h
index c6cab4e..4a2669f 100644
--- a/ext/ldap/php_ldap.h
+++ b/ext/ldap/php_ldap.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_ldap.h 299434 2010-05-17 20:09:42Z pajoye $ */
+/* $Id: php_ldap.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_LDAP_H
 #define PHP_LDAP_H
diff --git a/ext/libxml/config.w32 b/ext/libxml/config.w32
index 221f963..13f9347 100644
--- a/ext/libxml/config.w32
+++ b/ext/libxml/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 265497 2008-08-25 21:04:30Z rrichards $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_WITH("libxml", "LibXML support", "yes");
@@ -15,6 +15,7 @@ if (PHP_LIBXML == "yes") {
 		if (!PHP_LIBXML_SHARED) {
 			ADD_DEF_FILE("ext\\libxml\\php_libxml2.def");
 		}
+		PHP_INSTALL_HEADERS("ext/libxml/", "php_libxml.h");
 	} else {
 		WARNING("libxml support can't be enabled, iconv or libxml are missing")
 		PHP_LIBXML = "no"
diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c
index 560c466..7fcfafd 100644
--- a/ext/libxml/libxml.c
+++ b/ext/libxml/libxml.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: libxml.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: libxml.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define IS_EXT_MODULE
 
diff --git a/ext/libxml/php_libxml.h b/ext/libxml/php_libxml.h
index 246882e..d91a7ed 100644
--- a/ext/libxml/php_libxml.h
+++ b/ext/libxml/php_libxml.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_libxml.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_libxml.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_LIBXML_H
 #define PHP_LIBXML_H
diff --git a/ext/mbstring/config.w32 b/ext/mbstring/config.w32
index 4e6e415..0310106 100644
--- a/ext/mbstring/config.w32
+++ b/ext/mbstring/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 296250 2010-03-15 16:20:19Z rrichards $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_ENABLE("mbstring", "multibyte string functions", "no");
@@ -54,6 +54,8 @@ if (PHP_MBSTRING != "no") {
 	AC_DEFINE('HAVE_MBSTR_RU', 1, 'RU');
 	AC_DEFINE('HAVE_MBSTR_TW', 1, 'TW');
 
+	PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h oniguruma/oniguruma.h php_mbregex.h php_onig_compat.h libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_allocators.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h");
+
 	if (PHP_MBREGEX != "no") {
 		AC_DEFINE('HAVE_STDARG_PROTOTYPES', 1, 'have stdarg.h');
 		AC_DEFINE('HAVE_MBREGEX', 1);
@@ -72,5 +74,6 @@ if (PHP_MBSTRING != "no") {
 			koi8.c koi8_r.c sjis.c utf8.c unicode.c utf16_be.c utf16_le.c \
 			utf32_be.c utf32_le.c gb18030.c", "mbstring");
 		ADD_SOURCES("ext/mbstring", "php_mbregex.c", "mbstring");
+		PHP_INSTALL_HEADERS("ext/mbstring", "php_mbregex.h");
 	}
 }
diff --git a/ext/mbstring/mb_gpc.c b/ext/mbstring/mb_gpc.c
index 688a55d..b6a681a 100644
--- a/ext/mbstring/mb_gpc.c
+++ b/ext/mbstring/mb_gpc.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mb_gpc.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mb_gpc.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* {{{ includes */
 #ifdef HAVE_CONFIG_H
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index 75cb090..00baa57 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mbstring.c 303805 2010-09-27 23:09:00Z felipe $ */
+/* $Id: mbstring.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
  * PHP 4 Multibyte String module "mbstring"
diff --git a/ext/mbstring/mbstring.h b/ext/mbstring/mbstring.h
index 52d0b40..ac5b35a 100644
--- a/ext/mbstring/mbstring.h
+++ b/ext/mbstring/mbstring.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mbstring.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mbstring.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
  * PHP 4 Multibyte String module "mbstring" (currently only for Japanese)
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c
index d9bac43..66dda4b 100644
--- a/ext/mbstring/php_mbregex.c
+++ b/ext/mbstring/php_mbregex.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_mbregex.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_mbregex.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 #ifdef HAVE_CONFIG_H
diff --git a/ext/mbstring/php_mbregex.h b/ext/mbstring/php_mbregex.h
index dcc840f..9819b7c 100644
--- a/ext/mbstring/php_mbregex.h
+++ b/ext/mbstring/php_mbregex.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_mbregex.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_mbregex.h 306939 2011-01-01 02:19:59Z felipe $ */
  
 #ifndef _PHP_MBREGEX_H
 #define _PHP_MBREGEX_H
diff --git a/ext/mbstring/php_unicode.c b/ext/mbstring/php_unicode.c
index 55d7d51..cb04e55 100644
--- a/ext/mbstring/php_unicode.c
+++ b/ext/mbstring/php_unicode.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mbstring/php_unicode.h b/ext/mbstring/php_unicode.h
index 1afd3f9..2b64f97 100644
--- a/ext/mbstring/php_unicode.h
+++ b/ext/mbstring/php_unicode.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mcrypt/config.w32 b/ext/mcrypt/config.w32
index ad2f313..bacdd27 100644
--- a/ext/mcrypt/config.w32
+++ b/ext/mcrypt/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 300087 2010-06-02 10:00:58Z pajoye $
+// $Id: config.w32 307599 2011-01-19 21:19:45Z pajoye $
 // vim:ft=javascript
 
 ARG_WITH("mcrypt", "mcrypt support", "no");
@@ -9,7 +9,8 @@ if (PHP_MCRYPT != "no") {
 			CHECK_LIB('libmcrypt_a.lib;libmcrypt.lib', 'mcrypt') &&
 			CHECK_LIB('Advapi32.lib', 'mcrypt')
 			) {
-		EXTENSION('mcrypt', 'mcrypt.c mcrypt_filter.c', PHP_MCRYPT_SHARED);
+
+		EXTENSION('mcrypt', 'mcrypt.c mcrypt_filter.c', false);
 		AC_DEFINE('HAVE_LIBMCRYPT', 1);
 		AC_DEFINE('HAVE_LIBMCRYPT24', 1);
 	} else {
diff --git a/ext/mcrypt/mcrypt.c b/ext/mcrypt/mcrypt.c
index 44b7b9e..b0e27a8 100644
--- a/ext/mcrypt/mcrypt.c
+++ b/ext/mcrypt/mcrypt.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    |          Derick Rethans <derick at derickrethans.nl>                    |
    +----------------------------------------------------------------------+
  */
-/* $Id: mcrypt.c 300289 2010-06-08 18:27:23Z pajoye $ */
+/* $Id: mcrypt.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/mcrypt/mcrypt_filter.c b/ext/mcrypt/mcrypt_filter.c
index 97366bb..3a4ea15 100644
--- a/ext/mcrypt/mcrypt_filter.c
+++ b/ext/mcrypt/mcrypt_filter.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
   | Author: Sara Golemon <pollita at php.net>                               |
   +----------------------------------------------------------------------+
 
-  $Id: mcrypt_filter.c 293594 2010-01-15 21:02:20Z stas $ 
+  $Id: mcrypt_filter.c 306939 2011-01-01 02:19:59Z felipe $ 
 */
 
 #include "php.h"
diff --git a/ext/mcrypt/php_mcrypt.h b/ext/mcrypt/php_mcrypt.h
index f90c359..30466af 100644
--- a/ext/mcrypt/php_mcrypt.h
+++ b/ext/mcrypt/php_mcrypt.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    |          Derick Rethans <derick at derickrethans.nl>                    |
    +----------------------------------------------------------------------+
  */
-/* $Id: php_mcrypt.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_mcrypt.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_MCRYPT_H
 #define PHP_MCRYPT_H
diff --git a/ext/mcrypt/php_mcrypt_filter.h b/ext/mcrypt/php_mcrypt_filter.h
index cee1218..38cefeb 100644
--- a/ext/mcrypt/php_mcrypt_filter.h
+++ b/ext/mcrypt/php_mcrypt_filter.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
   | Author: Sara Golemon <pollita at php.net>                               |
   +----------------------------------------------------------------------+
 
-  $Id: php_mcrypt_filter.h 293594 2010-01-15 21:02:20Z stas $ 
+  $Id: php_mcrypt_filter.h 306939 2011-01-01 02:19:59Z felipe $ 
 */
 
 #ifndef PHP_MCRYPT_FILTER_H
diff --git a/ext/mssql/php_mssql.c b/ext/mssql/php_mssql.c
index 5fb2699..d454dc9 100644
--- a/ext/mssql/php_mssql.c
+++ b/ext/mssql/php_mssql.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_mssql.c 303375 2010-09-15 02:12:46Z felipe $ */
+/* $Id: php_mssql.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef COMPILE_DL_MSSQL
 #define HAVE_MSSQL 1
diff --git a/ext/mssql/php_mssql.h b/ext/mssql/php_mssql.h
index a41a5e0..9c49fa5 100644
--- a/ext/mssql/php_mssql.h
+++ b/ext/mssql/php_mssql.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
  */
 
 
-/* $Id: php_mssql.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_mssql.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_MSSQL_H
 #define PHP_MSSQL_H
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c
index d63cd15..0ecbcf7 100644
--- a/ext/mysql/php_mysql.c
+++ b/ext/mysql/php_mysql.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_mysql.c 304071 2010-10-05 09:48:07Z kalle $ */
+/* $Id: php_mysql.c 308323 2011-02-14 14:05:46Z iliaa $ */
 
 /* TODO:
  *
@@ -371,11 +371,11 @@ void timeout(int sig);
 	if (mysql->active_result_id) { \
 		do {					\
 			int type;			\
-			MYSQL_RES *mysql_result;	\
+			MYSQL_RES *_mysql_result;	\
 							\
-			mysql_result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type);	\
-			if (mysql_result && type==le_result) {						\
-				if (mysql_result_is_unbuffered(mysql_result) && !mysql_eof(mysql_result)) { \
+			_mysql_result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type);	\
+			if (_mysql_result && type==le_result) {						\
+				if (mysql_result_is_unbuffered(_mysql_result) && !mysql_eof(_mysql_result)) { \
 					php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Function called without first fetching all rows from a previous unbuffered query");	\
 				}						\
 				zend_list_delete(mysql->active_result_id);	\
@@ -762,6 +762,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
 		}
 		if (!passwd) {
 			passwd = MySG(default_password);
+			passwd_len = passwd? strlen(passwd):0;
 		}
 
 		/* disable local infile option for open_basedir */
@@ -848,7 +849,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
 #ifndef MYSQL_USE_MYSQLND
 			if (mysql_real_connect(mysql->conn, host, user, passwd, NULL, port, socket, client_flags)==NULL)
 #else
-			if (mysqlnd_connect(mysql->conn, host, user, passwd, 0, NULL, 0, port, socket, client_flags TSRMLS_CC) == NULL)
+			if (mysqlnd_connect(mysql->conn, host, user, passwd, passwd_len, NULL, 0, port, socket, client_flags TSRMLS_CC) == NULL)
 #endif
 			{
 				/* Populate connect error globals so that the error functions can read them */
@@ -896,7 +897,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
 #ifndef MYSQL_USE_MYSQLND
 					if (mysql_real_connect(mysql->conn, host, user, passwd, NULL, port, socket, client_flags)==NULL)
 #else
-					if (mysqlnd_connect(mysql->conn, host, user, passwd, 0, NULL, 0, port, socket, client_flags TSRMLS_CC) == NULL)
+					if (mysqlnd_connect(mysql->conn, host, user, passwd, passwd_len, NULL, 0, port, socket, client_flags TSRMLS_CC) == NULL)
 #endif
 					{
 						php_error_docref(NULL TSRMLS_CC, E_WARNING, "Link to server lost, unable to reconnect");
@@ -975,7 +976,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
 #ifndef MYSQL_USE_MYSQLND
 		if (mysql_real_connect(mysql->conn, host, user, passwd, NULL, port, socket, client_flags)==NULL)
 #else
-		if (mysqlnd_connect(mysql->conn, host, user, passwd, 0, NULL, 0, port, socket, client_flags TSRMLS_CC) == NULL)
+		if (mysqlnd_connect(mysql->conn, host, user, passwd, passwd_len, NULL, 0, port, socket, client_flags TSRMLS_CC) == NULL)
 #endif
 		{
 			/* Populate connect error globals so that the error functions can read them */
@@ -2125,12 +2126,12 @@ static void php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, long result_type,
 			fci.retval_ptr_ptr = &retval_ptr;
 			if (ctor_params && Z_TYPE_P(ctor_params) != IS_NULL) {
 				if (Z_TYPE_P(ctor_params) == IS_ARRAY) {
-					HashTable *ht = Z_ARRVAL_P(ctor_params);
+					HashTable *htl = Z_ARRVAL_P(ctor_params);
 					Bucket *p;
 
 					fci.param_count = 0;
-					fci.params = safe_emalloc(sizeof(zval*), ht->nNumOfElements, 0);
-					p = ht->pListHead;
+					fci.params = safe_emalloc(sizeof(zval*), htl->nNumOfElements, 0);
+					p = htl->pListHead;
 					while (p != NULL) {
 						fci.params[fci.param_count++] = (zval**)p->pData;
 						p = p->pListNext;
diff --git a/ext/mysql/php_mysql.h b/ext/mysql/php_mysql.h
index cef76ac..0dbdc53 100644
--- a/ext/mysql/php_mysql.h
+++ b/ext/mysql/php_mysql.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
 */
 
 
-/* $Id: php_mysql.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_mysql.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_MYSQL_H
 #define PHP_MYSQL_H
diff --git a/ext/mysql/php_mysql_structs.h b/ext/mysql/php_mysql_structs.h
index 0247dc8..89819fb 100644
--- a/ext/mysql/php_mysql_structs.h
+++ b/ext/mysql/php_mysql_structs.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
 */
 
 
-/* $Id: php_mysql_structs.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_mysql_structs.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_MYSQL_STRUCTS_H
 #define PHP_MYSQL_STRUCTS_H
diff --git a/ext/mysql/tests/bug53649.phpt b/ext/mysql/tests/bug53649.phpt
new file mode 100644
index 0000000..126f34b
--- /dev/null
+++ b/ext/mysql/tests/bug53649.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Bug #53649 (mysql_query with "load data" unable to save result set)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+	require_once("connect.inc");
+
+	if (!$link = my_mysql_connect($host, $user, $passwd, $db, $port, $socket)) {
+		printf("[001] Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
+	}
+
+	if (!mysql_query("DROP TABLE IF EXISTS tlocaldata", $link)) {
+		printf("[002] [%d] %s\n", $link->errno, $link->error);
+	}
+
+	if (!mysql_query("CREATE TABLE tlocaldata (dump1 INT UNSIGNED NOT NULL PRIMARY KEY) ENGINE=" . $engine, $link)) {
+		printf("[003] [%d] %s\n", $link->errno, $link->error);
+	}
+
+	file_put_contents('bug53649.data', "1\n2\n3\n");
+
+	mysql_query("SELECT 1 FROM DUAL", $link);
+
+	if (!mysql_query("LOAD DATA LOCAL INFILE 'bug53649.data' INTO TABLE tlocaldata", $link)) {
+		echo "bug";
+	} else {
+		echo "done";
+	}
+	mysql_close($link);
+?>
+--CLEAN--
+<?php
+require_once('connect.inc');
+
+if (!$link = my_mysql_connect($host, $user, $passwd, $db, $port, $socket)) {
+	printf("[clean] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
+		$host, $user, $db, $port, $socket);
+}
+
+if (!mysql_query($link, 'DROP TABLE IF EXISTS tlocaldata', $link)) {
+	printf("[clean] Failed to drop old test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+}
+
+mysql_close($link);
+
+unlink('bug53649.data');
+?>
+--EXPECT--
+done
\ No newline at end of file
diff --git a/ext/mysql/tests/mysql_db_name.phpt b/ext/mysql/tests/mysql_db_name.phpt
index be4f604..b7f9042 100644
--- a/ext/mysql/tests/mysql_db_name.phpt
+++ b/ext/mysql/tests/mysql_db_name.phpt
@@ -20,7 +20,7 @@ if (NULL !== ($tmp = @mysql_db_name($link, $link)))
 
 require('table.inc');
 
-if (!$res = mysql_list_dbs($link))
+if (!$res = @mysql_list_dbs($link))
 	printf("[003] [%d] %s\n", mysql_errno($link), mysql_error($link));
 
 if (!$num = mysql_num_rows($res))
diff --git a/ext/mysql/tests/mysql_deprecated_api.phpt b/ext/mysql/tests/mysql_deprecated_api.phpt
new file mode 100644
index 0000000..d54307c
--- /dev/null
+++ b/ext/mysql/tests/mysql_deprecated_api.phpt
@@ -0,0 +1,78 @@
+--TEST--
+Check if deprecated API calls bail out
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--INI--
+mysql.trace_mode=1
+error_reporting=E_ALL | E_NOTICE | E_STRICT
+--FILE--
+<?php
+/*
+  We use an extra test to cover deprecation warning.
+  Due to this extra test we can silence deprecation warnings
+  in have other test using @ operator without loosing the information
+  which function is deprecated and, without reducing test portability.
+*/
+include "table.inc";
+
+if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
+	$error = NULL;
+	ob_start();
+	if (!$res = mysql_db_query($db, "SELECT * FROM test", $link))
+		$error .= sprintf("[001] [%d] %s\n", mysql_errno($link), mysql_error($link));
+	else
+	  mysql_free_result($res);
+	$output = ob_get_contents();
+	ob_end_clean();
+
+	if (!stristr($output, 'deprecated')) {
+		printf("[002] mysql_db_query has been deprecated in 5.3.0\n");
+	}
+
+	/*
+		Deprecated since 2002 or the like but documented to be deprecated since 5.3.
+		In 5.3 and before the deprecation message was bound to mysql.trace_mode=1.
+		In 5.3.99 the warning will always be thrown, independent of the mysql.trace_mode
+		setting.
+	*/
+	$error = NULL;
+	ob_start();
+	if (!$query = mysql_escape_string("charsets will be ignored"))
+		$error .= sprintf("[005] [%d] %s\n", mysql_errno($link), mysql_error($link));
+	$output = ob_get_contents();
+	ob_end_clean();
+
+	if (!stristr($output, 'deprecated')) {
+		printf("[006] mysql_escape_string has been deprecated in 5.3.0\n");
+	}
+
+}
+
+if (version_compare(PHP_VERSION, '5.3.99') >= 0) {
+	$error = NULL;
+	ob_start();
+	if (!$res = mysql_list_dbs($link))
+		$error .= sprintf("[003] [%d] %s\n", mysql_errno($link), mysql_error($link));
+	else
+	  mysql_free_result($res);
+	$output = ob_get_contents();
+	ob_end_clean();
+
+  if (!stristr($output, 'deprecated')) {
+	printf("[004] mysql_db_query has been deprecated in 5.3.0\n");
+  }
+}
+
+
+
+print "done!";
+?>
+--CLEAN--
+<?php
+require_once("clean_table.inc");
+?>
+--EXPECTF--
+done!
\ No newline at end of file
diff --git a/ext/mysql/tests/mysql_escape_string.phpt b/ext/mysql/tests/mysql_escape_string.phpt
index 45bf269..8e70da6 100644
--- a/ext/mysql/tests/mysql_escape_string.phpt
+++ b/ext/mysql/tests/mysql_escape_string.phpt
@@ -12,13 +12,13 @@ $link   = NULL;
 if (NULL !== ($tmp = @mysql_escape_string()))
 	printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
 
-var_dump(mysql_escape_string("Am I a unicode string in PHP 6?"));
-var_dump(mysql_escape_string('\\'));
-var_dump(mysql_escape_string('"'));
-var_dump(mysql_escape_string("'"));
-var_dump(mysql_escape_string("\n"));
-var_dump(mysql_escape_string("\r"));
-var_dump(mysql_escape_string("foo" . chr(0) . "bar"));
+var_dump(@mysql_escape_string("Am I a unicode string in PHP 6?"));
+var_dump(@mysql_escape_string('\\'));
+var_dump(@mysql_escape_string('"'));
+var_dump(@mysql_escape_string("'"));
+var_dump(@mysql_escape_string("\n"));
+var_dump(@mysql_escape_string("\r"));
+var_dump(@mysql_escape_string("foo" . chr(0) . "bar"));
 
 print "done!";
 ?>
diff --git a/ext/mysql/tests/mysql_list_dbs.phpt b/ext/mysql/tests/mysql_list_dbs.phpt
index 3e12ce5..054e02e 100644
--- a/ext/mysql/tests/mysql_list_dbs.phpt
+++ b/ext/mysql/tests/mysql_list_dbs.phpt
@@ -20,7 +20,7 @@ if (NULL !== ($tmp = @mysql_list_dbs($link, $link)))
 
 require('table.inc');
 
-if (!$res = mysql_list_dbs($link))
+if (!$res = @mysql_list_dbs($link))
 	printf("[003] [%d] %s\n", mysql_errno($link), mysql_error($link));
 
 if (!$num = mysql_num_rows($res))
@@ -34,7 +34,7 @@ if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1) && !is_unicode($row[0])) {
 
 mysql_free_result($res);
 
-if (!$res2 = mysql_list_dbs())
+if (!$res2 = @mysql_list_dbs())
 	printf("[006] [%d] %s\n", mysql_errno(), mysql_error());
 
 $row2 = mysql_fetch_array($res2, MYSQL_NUM);
@@ -51,4 +51,4 @@ print "done!\n";
 require_once("clean_table.inc");
 ?>
 --EXPECTF--
-done!
+done!
\ No newline at end of file
diff --git a/ext/mysql/tests/mysql_trace_mode.phpt b/ext/mysql/tests/mysql_trace_mode.phpt
index 6d163d4..2b6c61d 100644
--- a/ext/mysql/tests/mysql_trace_mode.phpt
+++ b/ext/mysql/tests/mysql_trace_mode.phpt
@@ -14,10 +14,10 @@ require_once('table.inc');
 
 $res1 = mysql_query('SELECT id FROM test', $link);
 
-if (!$res2 = mysql_db_query($db, 'SELECT id FROM test', $link))
+if (!$res2 = @mysql_db_query($db, 'SELECT id FROM test', $link))
 	printf("[001] [%d] %s\n", mysql_errno($link), mysql_error($link));
 mysql_free_result($res2);
-print mysql_escape_string("I don't mind character sets, do I?\n");
+print @mysql_escape_string("I don't mind character sets, do I?\n");
 
 $res3 = mysql_query('BOGUS_SQL', $link);
 mysql_close($link);
@@ -29,11 +29,6 @@ print "done!\n";
 require_once("clean_table.inc");
 ?>
 --EXPECTF--
-Deprecated: Function mysql_db_query() is deprecated in %s on line %d
-
-Deprecated: mysql_db_query(): %s
-
-Deprecated: mysql_escape_string(): %s
 I don\'t mind character sets, do I?\n
 Warning: mysql_query(): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BOGUS_SQL' at line 1 in %s on line %d
 done!
diff --git a/ext/mysqli/config.w32 b/ext/mysqli/config.w32
index 1545d38..3f9544a 100644
--- a/ext/mysqli/config.w32
+++ b/ext/mysqli/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 261548 2008-06-23 18:40:29Z pajoye $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 // Note: The extension name is "mysqli", you enable it with "--with-mysqli".
@@ -27,6 +27,7 @@ if (PHP_MYSQLI != "no") {
 		AC_DEFINE('HAVE_MYSQLILIB', 1, 'Have MySQLi library');
 		ADD_EXTENSION_DEP('mysqli', 'mysqlnd', true);
 		MESSAGE("\tmysqlnd build");
+		PHP_INSTALL_HEADERS("ext/mysqli", "php_mysqli_structs.h");
 	} else {
 		if (CHECK_LIB("libmysql.lib", "mysqli", PHP_MYSQLI) &&
 			CHECK_HEADER_ADD_INCLUDE("mysql.h", "CFLAGS_MYSQLI", PHP_MYSQLI + 
@@ -35,6 +36,7 @@ if (PHP_MYSQLI != "no") {
 			EXTENSION("mysqli", mysqli_source);
 			AC_DEFINE('HAVE_MYSQLILIB', 1, 'Have MySQLi library');
 			MESSAGE("\tlibmysql build");
+			PHP_INSTALL_HEADERS("ext/mysqli", "php_mysqli_structs.h");
 		} else {
 			WARNING("mysqli not enabled; libraries and headers not found");
 			PHP_MYSQLI = "no"
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c
index de1d540..74d224c 100644
--- a/ext/mysqli/mysqli.c
+++ b/ext/mysqli/mysqli.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Ulf Wendel <uw at php.net>                                     |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli.c 305907 2010-12-02 14:21:23Z andrey $
+  $Id: mysqli.c 306939 2011-01-01 02:19:59Z felipe $
 */
 
 #ifdef HAVE_CONFIG_H
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c
index 2f2ed2f..339469f 100644
--- a/ext/mysqli/mysqli_api.c
+++ b/ext/mysqli/mysqli_api.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Ulf Wendel <uw at php.net>                                     |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli_api.c 305244 2010-11-10 13:57:09Z andrey $
+  $Id: mysqli_api.c 307533 2011-01-17 11:20:54Z kalle $
 */
 
 #ifdef HAVE_CONFIG_H
@@ -1052,6 +1052,8 @@ static void php_add_field_properties(zval *value, const MYSQL_FIELD *field TSRML
 	add_property_string(value, "table", (char *) (field->table ? field->table : ""), 1);
 	add_property_string(value, "orgtable", (char *) (field->org_table ? field->org_table : ""), 1);
 	add_property_string(value, "def", (field->def ? field->def : ""), 1);
+	add_property_string(value, "db", (field->db ? field->db : ""), 1);
+	add_property_string(value, "catalog", (field->catalog ? field->catalog : ""), 1);
 
 	add_property_long(value, "max_length", field->max_length);
 	add_property_long(value, "length", field->length);
diff --git a/ext/mysqli/mysqli_driver.c b/ext/mysqli/mysqli_driver.c
index 780489b..fd4698f 100644
--- a/ext/mysqli/mysqli_driver.c
+++ b/ext/mysqli/mysqli_driver.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqli/mysqli_embedded.c b/ext/mysqli/mysqli_embedded.c
index 761ffc7..f5360ae 100644
--- a/ext/mysqli/mysqli_embedded.c
+++ b/ext/mysqli/mysqli_embedded.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqli/mysqli_exception.c b/ext/mysqli/mysqli_exception.c
index 6372fb8..35d66cf 100644
--- a/ext/mysqli/mysqli_exception.c
+++ b/ext/mysqli/mysqli_exception.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c
index 0c482b2..6bab6ad 100644
--- a/ext/mysqli/mysqli_fe.c
+++ b/ext/mysqli/mysqli_fe.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Ulf Wendel <uw at php.net>                                     |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli_fe.c 303978 2010-10-04 10:43:21Z uw $
+  $Id: mysqli_fe.c 306939 2011-01-01 02:19:59Z felipe $
 */
 
 #ifdef HAVE_CONFIG_H
diff --git a/ext/mysqli/mysqli_fe.h b/ext/mysqli/mysqli_fe.h
index 41345fd..14b8dcb 100644
--- a/ext/mysqli/mysqli_fe.h
+++ b/ext/mysqli/mysqli_fe.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
index 3e0d3e3..2abf5e9 100644
--- a/ext/mysqli/mysqli_nonapi.c
+++ b/ext/mysqli/mysqli_nonapi.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Ulf Wendel <uw at php.net>                                     |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli_nonapi.c 305244 2010-11-10 13:57:09Z andrey $
+  $Id: mysqli_nonapi.c 307223 2011-01-07 14:22:30Z andrey $
 */
 
 #ifdef HAVE_CONFIG_H
@@ -231,7 +231,10 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
 #endif
 
 #if !defined(MYSQLI_USE_MYSQLND)
-	if (mysql_real_connect(mysql->mysql, hostname, username, passwd, dbname, port, socket, CLIENT_MULTI_RESULTS) == NULL)
+	/* BC for prior to bug fix #53425 */
+	flags |= CLIENT_MULTI_RESULTS;
+
+	if (mysql_real_connect(mysql->mysql, hostname, username, passwd, dbname, port, socket, flags) == NULL)
 #else
 	if (mysqlnd_connect(mysql->mysql, hostname, username, passwd, passwd_len, dbname, dbname_len,
 						port, socket, flags TSRMLS_CC) == NULL)
diff --git a/ext/mysqli/mysqli_priv.h b/ext/mysqli/mysqli_priv.h
index c7e9e91..c5f209e 100644
--- a/ext/mysqli/mysqli_priv.h
+++ b/ext/mysqli/mysqli_priv.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqli/mysqli_prop.c b/ext/mysqli/mysqli_prop.c
index 6cf6c18..fcff2c6 100644
--- a/ext/mysqli/mysqli_prop.c
+++ b/ext/mysqli/mysqli_prop.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
   | Author: Georg Richter <georg at php.net>                                |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli_prop.c 304070 2010-10-05 09:40:36Z kalle $
+  $Id: mysqli_prop.c 306939 2011-01-01 02:19:59Z felipe $
 */
 
 #ifdef HAVE_CONFIG_H
diff --git a/ext/mysqli/mysqli_report.c b/ext/mysqli/mysqli_report.c
index 1f1c8d2..c44245c 100644
--- a/ext/mysqli/mysqli_report.c
+++ b/ext/mysqli/mysqli_report.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
   | Author: Georg Richter <georg at php.net>                                |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli_report.c 305244 2010-11-10 13:57:09Z andrey $
+  $Id: mysqli_report.c 306939 2011-01-01 02:19:59Z felipe $
 */
 
 #ifdef HAVE_CONFIG_H
diff --git a/ext/mysqli/mysqli_report.h b/ext/mysqli/mysqli_report.h
index ad741b2..8e7484a 100644
--- a/ext/mysqli/mysqli_report.h
+++ b/ext/mysqli/mysqli_report.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
   | Author: Georg Richter <georg at php.net>                                |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli_report.h 303973 2010-10-04 10:02:58Z uw $
+  $Id: mysqli_report.h 306939 2011-01-01 02:19:59Z felipe $
 */
 
 #ifndef __HAVE_MYSQLI_PROFILER_H__
diff --git a/ext/mysqli/mysqli_warning.c b/ext/mysqli/mysqli_warning.c
index b2d5a55..09fa5b3 100644
--- a/ext/mysqli/mysqli_warning.c
+++ b/ext/mysqli/mysqli_warning.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h
index f843f65..fedc349 100644
--- a/ext/mysqli/php_mysqli.h
+++ b/ext/mysqli/php_mysqli.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Ulf Wendel <uw at php.net>                                     |
   +----------------------------------------------------------------------+
 
-  $Id: php_mysqli.h 303973 2010-10-04 10:02:58Z uw $
+  $Id: php_mysqli.h 306939 2011-01-01 02:19:59Z felipe $
 */
 
 #ifndef PHP_MYSQLI_H
diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h
index 504c346..61f9184 100644
--- a/ext/mysqli/php_mysqli_structs.h
+++ b/ext/mysqli/php_mysqli_structs.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
   | Author: Georg Richter <georg at php.net>                                |
   +----------------------------------------------------------------------+
 
-  $Id: php_mysqli_structs.h 303973 2010-10-04 10:02:58Z uw $
+  $Id: php_mysqli_structs.h 306939 2011-01-01 02:19:59Z felipe $
 */
 
 #ifndef PHP_MYSQLI_STRUCTS_H
diff --git a/ext/mysqli/tests/047.phpt b/ext/mysqli/tests/047.phpt
index 65c951c..178a1ae 100644
--- a/ext/mysqli/tests/047.phpt
+++ b/ext/mysqli/tests/047.phpt
@@ -60,7 +60,7 @@ mysqli_close($link);
 === fetch_fields ===
 array(2) {
   [0]=>
-  object(stdClass)#5 (11) {
+  object(stdClass)#5 (13) {
     [%u|b%"name"]=>
     %unicode|string%(3) "foo"
     [%u|b%"orgname"]=>
@@ -71,6 +71,10 @@ array(2) {
     %unicode|string%(13) "test_affected"
     [%u|b%"def"]=>
     %unicode|string%(0) ""
+    [%u|b%"db"]=>
+    %unicode|string%(%d) "%s"
+    [%u|b%"catalog"]=>
+    %unicode|string%(%d) "%s"
     [%u|b%"max_length"]=>
     int(0)
     [%u|b%"length"]=>
@@ -85,7 +89,7 @@ array(2) {
     int(0)
   }
   [1]=>
-  object(stdClass)#6 (11) {
+  object(stdClass)#6 (13) {
     [%u|b%"name"]=>
     %unicode|string%(3) "bar"
     [%u|b%"orgname"]=>
@@ -96,6 +100,10 @@ array(2) {
     %unicode|string%(13) "test_affected"
     [%u|b%"def"]=>
     %unicode|string%(0) ""
+    [%u|b%"db"]=>
+    %unicode|string%(%d) "%s"
+    [%u|b%"catalog"]=>
+    %unicode|string%(%d) "%s"
     [%u|b%"max_length"]=>
     int(0)
     [%u|b%"length"]=>
@@ -112,7 +120,7 @@ array(2) {
 }
 
 === fetch_field_direct ===
-object(stdClass)#6 (11) {
+object(stdClass)#6 (13) {
   [%u|b%"name"]=>
   %unicode|string%(3) "foo"
   [%u|b%"orgname"]=>
@@ -123,6 +131,10 @@ object(stdClass)#6 (11) {
   %unicode|string%(13) "test_affected"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
@@ -136,7 +148,7 @@ object(stdClass)#6 (11) {
   [%u|b%"decimals"]=>
   int(0)
 }
-object(stdClass)#6 (11) {
+object(stdClass)#6 (13) {
   [%u|b%"name"]=>
   %unicode|string%(3) "bar"
   [%u|b%"orgname"]=>
@@ -147,6 +159,10 @@ object(stdClass)#6 (11) {
   %unicode|string%(13) "test_affected"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
@@ -162,7 +178,7 @@ object(stdClass)#6 (11) {
 }
 
 === fetch_field ===
-object(stdClass)#6 (11) {
+object(stdClass)#6 (13) {
   [%u|b%"name"]=>
   %unicode|string%(3) "foo"
   [%u|b%"orgname"]=>
@@ -173,6 +189,10 @@ object(stdClass)#6 (11) {
   %unicode|string%(13) "test_affected"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
@@ -186,7 +206,7 @@ object(stdClass)#6 (11) {
   [%u|b%"decimals"]=>
   int(0)
 }
-object(stdClass)#5 (11) {
+object(stdClass)#5 (13) {
   [%u|b%"name"]=>
   %unicode|string%(3) "bar"
   [%u|b%"orgname"]=>
@@ -197,6 +217,10 @@ object(stdClass)#5 (11) {
   %unicode|string%(13) "test_affected"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
diff --git a/ext/mysqli/tests/bug53503.phpt b/ext/mysqli/tests/bug53503.phpt
new file mode 100644
index 0000000..6b70552
--- /dev/null
+++ b/ext/mysqli/tests/bug53503.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Bug #53503 (mysqli::query returns false after successful LOAD DATA query)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+	require_once("connect.inc");
+
+	if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
+		printf("[001] Connect failed, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
+	}
+
+	if (!$link->query("DROP TABLE IF EXISTS tlocaldata")) {
+		printf("[002] [%d] %s\n", $link->errno, $link->error);
+	}
+
+	if (!$link->query("CREATE TABLE tlocaldata (dump1 INT UNSIGNED NOT NULL PRIMARY KEY) ENGINE=" . $engine)) {
+		printf("[003] [%d] %s\n", $link->errno, $link->error);
+	}
+
+	file_put_contents('bug53503.data', "1\n2\n3\n");
+
+	$link->query("SELECT 1 FROM DUAL");
+
+	if (!$link->query("LOAD DATA LOCAL INFILE 'bug53503.data' INTO TABLE tlocaldata")) {
+		echo "bug";
+	} else {
+		echo "done";
+	}
+	$link->close();
+?>
+--CLEAN--
+<?php
+require_once('connect.inc');
+
+if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
+	printf("[clean] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
+		$host, $user, $db, $port, $socket);
+}
+
+if (!$link->query($link, 'DROP TABLE IF EXISTS tlocaldata')) {
+	printf("[clean] Failed to drop old test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+}
+
+$link->close();
+
+unlink('bug53503.data');
+?>
+--EXPECT--
+done
\ No newline at end of file
diff --git a/ext/mysqli/tests/mysqli_debug_mysqlnd_control_string.phpt b/ext/mysqli/tests/mysqli_debug_mysqlnd_control_string.phpt
index 9b43e15..5b66ee2 100644
--- a/ext/mysqli/tests/mysqli_debug_mysqlnd_control_string.phpt
+++ b/ext/mysqli/tests/mysqli_debug_mysqlnd_control_string.phpt
@@ -223,5 +223,5 @@ if (defined('MYSQLI_DEBUG_TRACE_ENABLED') && !MYSQLI_DEBUG_TRACE_ENABLED)
 	require_once("clean_table.inc");
 ?>
 --EXPECTF--
-[083][control string 'n:O,/tmp/mysqli_debug_phpt.trace'] Trace file has not been written.
+[083][control string 'n:O,%smysqli_debug_phpt.trace'] Trace file has not been written.
 done%s
diff --git a/ext/mysqli/tests/mysqli_fetch_field.phpt b/ext/mysqli/tests/mysqli_fetch_field.phpt
index 4dde6c9..d1d358b 100644
--- a/ext/mysqli/tests/mysqli_fetch_field.phpt
+++ b/ext/mysqli/tests/mysqli_fetch_field.phpt
@@ -44,6 +44,10 @@ require_once('skipifconnectfailure.inc');
 			$charsets['results']['maxlen'],
 			$tmp->max_length);
 	}
+	if ($tmp->db != $db) {
+		printf("011] Expecting database '%s' got '%s'\n",
+		  $db, $tmp->db);
+	}
 
 	var_dump(mysqli_fetch_field($res));
 
@@ -79,7 +83,7 @@ require_once('skipifconnectfailure.inc');
 	require_once("clean_table.inc");
 ?>
 --EXPECTF--
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(2) "ID"
   [%u|b%"orgname"]=>
@@ -87,9 +91,13 @@ object(stdClass)#%d (11) {
   [%u|b%"table"]=>
   %unicode|string%(4) "TEST"
   [%u|b%"orgtable"]=>
-  %unicode|string%(4) "test"
+  %unicode|string%(%d) "%s"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(1)
   [%u|b%"length"]=>
@@ -103,7 +111,7 @@ object(stdClass)#%d (11) {
   [%u|b%"decimals"]=>
   int(0)
 }
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(5) "label"
   [%u|b%"orgname"]=>
@@ -111,9 +119,13 @@ object(stdClass)#%d (11) {
   [%u|b%"table"]=>
   %unicode|string%(4) "TEST"
   [%u|b%"orgtable"]=>
-  %unicode|string%(4) "test"
+  %unicode|string%(%d) "%s"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(%d)
   [%u|b%"length"]=>
@@ -134,17 +146,21 @@ array(1) {
   [%u|b%"_default_test"]=>
   %unicode|string%(1) "2"
 }
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(13) "_default_test"
   [%u|b%"orgname"]=>
   %unicode|string%(2) "id"
   [%u|b%"table"]=>
-  %unicode|string%(4) "test"
+  %unicode|string%(%d) "%s"
   [%u|b%"orgtable"]=>
-  %unicode|string%(4) "test"
+  %unicode|string%(%d) "%s"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(1)
   [%u|b%"length"]=>
diff --git a/ext/mysqli/tests/mysqli_fetch_field_direct.phpt b/ext/mysqli/tests/mysqli_fetch_field_direct.phpt
index 33c5a0c..fb34e44 100644
--- a/ext/mysqli/tests/mysqli_fetch_field_direct.phpt
+++ b/ext/mysqli/tests/mysqli_fetch_field_direct.phpt
@@ -47,7 +47,7 @@ require_once('skipifconnectfailure.inc');
 --EXPECTF--
 Warning: mysqli_fetch_field_direct(): Field offset is invalid for resultset in %s on line %d
 bool(false)
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(2) "ID"
   [%u|b%"orgname"]=>
@@ -58,6 +58,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(4) "test"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(%d)
   [%u|b%"length"]=>
diff --git a/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt b/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt
index 23d46f3..9d511aa 100644
--- a/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt
+++ b/ext/mysqli/tests/mysqli_fetch_field_direct_oo.phpt
@@ -56,7 +56,7 @@ require_once('skipifconnectfailure.inc');
 --EXPECTF--
 Warning: mysqli_result::fetch_field_direct(): Field offset is invalid for resultset in %s on line %d
 bool(false)
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(2) "ID"
   [%u|b%"orgname"]=>
@@ -64,9 +64,13 @@ object(stdClass)#%d (11) {
   [%u|b%"table"]=>
   %unicode|string%(4) "TEST"
   [%u|b%"orgtable"]=>
-  %unicode|string%(4) "test"
+  %unicode|string%(%d) "%s"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(%d)
   [%u|b%"length"]=>
diff --git a/ext/mysqli/tests/mysqli_fetch_field_oo.phpt b/ext/mysqli/tests/mysqli_fetch_field_oo.phpt
index 0130f0e..2d5ad26 100644
--- a/ext/mysqli/tests/mysqli_fetch_field_oo.phpt
+++ b/ext/mysqli/tests/mysqli_fetch_field_oo.phpt
@@ -47,6 +47,10 @@ require_once('skipifconnectfailure.inc');
 			$charsets['results']['maxlen'],
 			$tmp->max_length);
 	}
+	if ($tmp->db != $db) {
+		printf("008] Expecting database '%s' got '%s'\n",
+		  $db, $tmp->db);
+	}
 
 	var_dump($res->fetch_field());
 
@@ -63,7 +67,7 @@ require_once('skipifconnectfailure.inc');
 	require_once("clean_table.inc");
 ?>
 --EXPECTF--
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(2) "ID"
   [%u|b%"orgname"]=>
@@ -74,6 +78,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(4) "test"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(1)
   [%u|b%"length"]=>
@@ -87,7 +95,7 @@ object(stdClass)#%d (11) {
   [%u|b%"decimals"]=>
   int(0)
 }
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(5) "label"
   [%u|b%"orgname"]=>
@@ -98,6 +106,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(4) "test"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(%d)
   [%u|b%"length"]=>
diff --git a/ext/mysqli/tests/mysqli_fetch_fields.phpt b/ext/mysqli/tests/mysqli_fetch_fields.phpt
index 885c733..479c71c 100644
--- a/ext/mysqli/tests/mysqli_fetch_fields.phpt
+++ b/ext/mysqli/tests/mysqli_fetch_fields.phpt
@@ -60,7 +60,7 @@ require_once('skipifconnectfailure.inc');
 	require_once("clean_table.inc");
 ?>
 --EXPECTF--
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(2) "ID"
   [%u|b%"orgname"]=>
@@ -68,9 +68,13 @@ object(stdClass)#%d (11) {
   [%u|b%"table"]=>
   %unicode|string%(4) "TEST"
   [%u|b%"orgtable"]=>
-  %unicode|string%(4) "test"
+  %unicode|string%(%d) "%s"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(1)
   [%u|b%"length"]=>
@@ -84,7 +88,7 @@ object(stdClass)#%d (11) {
   [%u|b%"decimals"]=>
   int(0)
 }
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(5) "label"
   [%u|b%"orgname"]=>
@@ -92,9 +96,13 @@ object(stdClass)#%d (11) {
   [%u|b%"table"]=>
   %unicode|string%(4) "TEST"
   [%u|b%"orgtable"]=>
-  %unicode|string%(4) "test"
+  %unicode|string%(%d) "%s"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(1)
   [%u|b%"length"]=>
diff --git a/ext/mysqli/tests/mysqli_field_seek.phpt b/ext/mysqli/tests/mysqli_field_seek.phpt
index 1da42c2..a747bdf 100644
--- a/ext/mysqli/tests/mysqli_field_seek.phpt
+++ b/ext/mysqli/tests/mysqli_field_seek.phpt
@@ -122,7 +122,7 @@ require_once('skipifconnectfailure.inc');
 --EXPECTF--
 Warning: mysqli_field_seek(): Invalid field offset in %s on line %d
 bool(false)
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(2) "id"
   [%u|b%"orgname"]=>
@@ -133,6 +133,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(4) "test"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
@@ -147,7 +151,7 @@ object(stdClass)#%d (11) {
   int(0)
 }
 bool(true)
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(2) "id"
   [%u|b%"orgname"]=>
@@ -158,6 +162,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(4) "test"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
@@ -172,7 +180,7 @@ object(stdClass)#%d (11) {
   int(0)
 }
 bool(true)
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(5) "label"
   [%u|b%"orgname"]=>
@@ -183,6 +191,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(4) "test"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(%d)
   [%u|b%"length"]=>
@@ -205,7 +217,7 @@ bool(false)
 Warning: mysqli_field_seek(): Invalid field offset in %s on line %d
 bool(false)
 bool(true)
-object(stdClass)#3 (11) {
+object(stdClass)#3 (13) {
   [%u|b%"name"]=>
   %unicode|string%(5) "_null"
   [%u|b%"orgname"]=>
@@ -216,6 +228,10 @@ object(stdClass)#3 (11) {
   %unicode|string%(0) ""
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(0) ""
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
diff --git a/ext/mysqli/tests/mysqli_field_tell.phpt b/ext/mysqli/tests/mysqli_field_tell.phpt
index f1e43c4..cac2001 100644
--- a/ext/mysqli/tests/mysqli_field_tell.phpt
+++ b/ext/mysqli/tests/mysqli_field_tell.phpt
@@ -64,7 +64,7 @@ int(0)
 Warning: mysqli_field_seek() expects exactly 2 parameters, 1 given in %s on line %d
 NULL
 int(0)
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(2) "id"
   [%u|b%"orgname"]=>
@@ -75,6 +75,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(4) "test"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
diff --git a/ext/mysqli/tests/mysqli_no_reconnect.phpt b/ext/mysqli/tests/mysqli_no_reconnect.phpt
index 0fbc1ff..653c672 100644
--- a/ext/mysqli/tests/mysqli_no_reconnect.phpt
+++ b/ext/mysqli/tests/mysqli_no_reconnect.phpt
@@ -78,18 +78,23 @@ mysqli.reconnect=0
 			mysqli_connect_errno(), mysqli_connect_error());
 
 	$thread_id_timeout = mysqli_thread_id($link);
+	/*
+	  Don't test for the mysqli_query() return value here.
+	  It is undefined if the server replies to the query and how.
+	  For example, it seems that on Linux when connecting to MySQL 5.1,
+	  the server always manages to send a full a reply. Whereas MySQl 5.5
+	  may not. The behaviour is undefined. Any return value is fine.
+	*/
 	if ($IS_MYSQLND) {
-		/* 
+		/*
 		mysqlnd is a bit more verbose than libmysql. mysqlnd should print:
 		Warning: mysqli_query(): MySQL server has gone away in %s on line %d
 
 		Warning: mysqli_query(): Error reading result set's header in %d on line %d
 		*/
-		if (!@mysqli_query($link, sprintf('KILL %d', $thread_id_timeout)))
-			printf("[013] Cannot KILL timeout connection, [%d] %s\n", mysqli_errno($link2), mysqli_error($link2));
+		@mysqli_query($link, sprintf('KILL %d', $thread_id_timeout));
 	} else {
-		if (!mysqli_query($link, sprintf('KILL %d', $thread_id_timeout)))
-			printf("[013] Cannot KILL timeout connection, [%d] %s\n", mysqli_errno($link2), mysqli_error($link2));
+		mysqli_query($link, sprintf('KILL %d', $thread_id_timeout));
 	}
 	// Give the server a second to really kill the other thread...
 	sleep(1);
diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt
index 23d045a..afaccaf 100644
--- a/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt
+++ b/ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt
@@ -61,7 +61,7 @@ if (!function_exists('mysqli_stmt_get_result'))
 	require_once("clean_table.inc");
 ?>
 --EXPECTF--
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(2) "id"
   [%u|b%"orgname"]=>
@@ -72,6 +72,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(4) "test"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
@@ -85,7 +89,7 @@ object(stdClass)#%d (11) {
   [%u|b%"decimals"]=>
   int(0)
 }
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(5) "label"
   [%u|b%"orgname"]=>
@@ -96,6 +100,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(4) "test"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(%d)
   [%u|b%"length"]=>
@@ -109,7 +117,7 @@ object(stdClass)#%d (11) {
   [%u|b%"decimals"]=>
   int(0)
 }
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(3) "_id"
   [%u|b%"orgname"]=>
@@ -120,6 +128,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(0) ""
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(0) ""
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
@@ -133,7 +145,7 @@ object(stdClass)#%d (11) {
   [%u|b%"decimals"]=>
   int(0)
 }
-object(stdClass)#%d (11) {
+object(stdClass)#%d (13) {
   [%u|b%"name"]=>
   %unicode|string%(8) "___label"
   [%u|b%"orgname"]=>
@@ -144,6 +156,10 @@ object(stdClass)#%d (11) {
   %unicode|string%(0) ""
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(0) ""
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(%d)
   [%u|b%"length"]=>
diff --git a/ext/mysqli/tests/mysqli_stmt_num_rows.phpt b/ext/mysqli/tests/mysqli_stmt_num_rows.phpt
index 0a21bb5..af81ca4 100644
--- a/ext/mysqli/tests/mysqli_stmt_num_rows.phpt
+++ b/ext/mysqli/tests/mysqli_stmt_num_rows.phpt
@@ -82,8 +82,8 @@ require_once('skipifconnectfailure.inc');
 			$i++;
 		} while (mysqli_stmt_fetch($stmt));
 
-		if (0 !== ($tmp = mysqli_stmt_num_rows($stmt)))
-			printf("[54] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
+		if (7 !== ($tmp = mysqli_stmt_num_rows($stmt)))
+			printf("[54] Expecting int/7, got %s/%s\n", gettype($tmp), $tmp);
 
 	} else {
 		printf("[055] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
diff --git a/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt b/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt
index f9fd3cf..a38706f 100644
--- a/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt
+++ b/ext/mysqli/tests/mysqli_stmt_result_metadata.phpt
@@ -101,7 +101,7 @@ require_once('skipifconnectfailure.inc');
 
 Warning: mysqli_stmt_result_metadata(): invalid object or resource mysqli_stmt
  in %s on line %d
-object(stdClass)#5 (%d) {
+object(stdClass)#5 (13) {
   [%u|b%"name"]=>
   %unicode|string%(2) "id"
   [%u|b%"orgname"]=>
@@ -112,6 +112,10 @@ object(stdClass)#5 (%d) {
   %unicode|string%(4) "test"
   [%u|b%"def"]=>
   %unicode|string%(0) ""
+  [%u|b%"db"]=>
+  %unicode|string%(%d) "%s"
+  [%u|b%"catalog"]=>
+  %unicode|string%(%d) "%s"
   [%u|b%"max_length"]=>
   int(0)
   [%u|b%"length"]=>
diff --git a/ext/mysqlnd/config.w32 b/ext/mysqlnd/config.w32
index 1bc8572..a4e2a5f 100644
--- a/ext/mysqlnd/config.w32
+++ b/ext/mysqlnd/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 292204 2009-12-16 12:59:38Z andrey $
+// $Id: config.w32 307880 2011-01-31 12:47:28Z kalle $
 // vim:ft=javascript
 
 ARG_WITH("mysqlnd", "Mysql Native Client Driver", "yes");
@@ -24,6 +24,8 @@ if (PHP_MYSQLND != "no") {
 			(PHP_ZLIB_SHARED && CHECK_LIB("zlib.lib", "mysqlnd", PHP_MYSQLND)) || (PHP_ZLIB == "yes" && (!PHP_ZLIB_SHARED)))
 		{
 			AC_DEFINE("MYSQLND_COMPRESSION_ENABLED", 1, "Compression support");
+			AC_DEFINE("MYSQLND_SSL_SUPPORTED", 1, "SSL support");
 		}
+		PHP_INSTALL_HEADERS("", "ext/mysqlnd");
 	}
 }
diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c
index 430db40..373224d 100644
--- a/ext/mysqlnd/mysqlnd.c
+++ b/ext/mysqlnd/mysqlnd.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd.c 306008 2010-12-06 13:50:51Z andrey $ */
+/* $Id: mysqlnd.c 308671 2011-02-25 12:52:21Z andrey $ */
 #include "php.h"
 #include "mysqlnd.h"
 #include "mysqlnd_wireprotocol.h"
@@ -1812,6 +1812,9 @@ MYSQLND_METHOD(mysqlnd_conn, next_result)(MYSQLND * const conn TSRMLS_DC)
 			DBG_INF_FMT("Error from the server : (%u) %s", conn->error_info.error_no, conn->error_info.error);
 		}
 	}
+	if (ret == PASS && conn->last_query_type == QUERY_UPSERT && conn->upsert_status.affected_rows) {
+		MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn->stats, STAT_ROWS_AFFECTED_NORMAL, conn->upsert_status.affected_rows);
+	}
 
 	DBG_RETURN(ret);
 }
@@ -2222,6 +2225,43 @@ MYSQLND_METHOD(mysqlnd_conn, get_connection_stats)(const MYSQLND * const conn,
 /* }}} */
 
 
+/* {{{ mysqlnd_conn::set_autocommit */
+static enum_func_status
+MYSQLND_METHOD(mysqlnd_conn, set_autocommit)(MYSQLND * conn, unsigned int mode TSRMLS_DC)
+{
+	enum_func_status ret;
+	DBG_ENTER("mysqlnd_conn::set_autocommit");
+	ret = conn->m->query(conn, (mode) ? "SET AUTOCOMMIT=1":"SET AUTOCOMMIT=0", sizeof("SET AUTOCOMMIT=1") - 1 TSRMLS_CC);
+	DBG_RETURN(ret);
+}
+/* }}} */
+
+
+/* {{{ mysqlnd_conn::tx_commit */
+static enum_func_status
+MYSQLND_METHOD(mysqlnd_conn, tx_commit)(MYSQLND * conn TSRMLS_DC)
+{
+	enum_func_status ret;
+	DBG_ENTER("mysqlnd_conn::tx_commit");
+	ret = conn->m->query(conn, "COMMIT", sizeof("COMMIT") - 1 TSRMLS_CC);
+	DBG_RETURN(ret);
+}
+/* }}} */
+
+
+/* {{{ mysqlnd_conn::tx_rollback */
+static enum_func_status
+MYSQLND_METHOD(mysqlnd_conn, tx_rollback)(MYSQLND * conn TSRMLS_DC)
+{
+	enum_func_status ret;
+	DBG_ENTER("mysqlnd_conn::tx_rollback");
+	ret = conn->m->query(conn, "ROLLBACK", sizeof("ROLLBACK") - 1 TSRMLS_CC);
+	DBG_RETURN(ret);
+}
+/* }}} */
+
+
+
 MYSQLND_STMT * _mysqlnd_stmt_init(MYSQLND * const conn TSRMLS_DC);
 static enum_func_status MYSQLND_METHOD(mysqlnd_conn, init)(MYSQLND * conn TSRMLS_DC);
 
@@ -2296,6 +2336,11 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_conn)
 
 	MYSQLND_METHOD(mysqlnd_conn, ssl_set),
 	mysqlnd_result_init
+#ifdef AUTOCOMMIT_TX_COMMIT_ROLLBACK
+	,MYSQLND_METHOD(mysqlnd_conn, set_autocommit),
+	MYSQLND_METHOD(mysqlnd_conn, tx_commit),
+	MYSQLND_METHOD(mysqlnd_conn, tx_rollback)
+#endif
 MYSQLND_CLASS_METHODS_END;
 
 
diff --git a/ext/mysqlnd/mysqlnd.h b/ext/mysqlnd/mysqlnd.h
index 032057f..d85e620 100644
--- a/ext/mysqlnd/mysqlnd.h
+++ b/ext/mysqlnd/mysqlnd.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,13 +17,13 @@
   |          Ulf Wendel <uwendel at mysql.com>                              |
   +----------------------------------------------------------------------+
 */
-/* $Id: mysqlnd.h 304625 2010-10-22 14:34:33Z andrey $ */
+/* $Id: mysqlnd.h 308673 2011-02-25 13:11:49Z andrey $ */
 
 #ifndef MYSQLND_H
 #define MYSQLND_H
 
-#define MYSQLND_VERSION "mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $"
-#define MYSQLND_VERSION_ID 50007
+#define MYSQLND_VERSION "mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $"
+#define MYSQLND_VERSION_ID 50008
 
 /* This forces inlining of some accessor functions */
 #define MYSQLND_USE_OPTIMISATIONS 0
@@ -198,9 +198,15 @@ PHPAPI void mysqlnd_local_infile_default(MYSQLND *conn);
 PHPAPI void mysqlnd_set_local_infile_handler(MYSQLND * const conn, const char * const funcname);
 
 /* Simple commands */
+#ifdef AUTOCOMMIT_TX_COMMIT_ROLLBACK
+#define mysqlnd_autocommit(conn, mode)		(conn)->m->set_autocommit((conn), (mode) TSRMLS_CC)
+#define mysqlnd_commit(conn)				(conn)->m->tx_commit((conn) TSRMLS_CC)
+#define mysqlnd_rollback(conn)				(conn)->m->tx_rollback((conn) TSRMLS_CC)
+#else
 #define mysqlnd_autocommit(conn, mode)		(conn)->m->query((conn),(mode) ? "SET AUTOCOMMIT=1":"SET AUTOCOMMIT=0", 16 TSRMLS_CC)
 #define mysqlnd_commit(conn)				(conn)->m->query((conn), "COMMIT", sizeof("COMMIT")-1 TSRMLS_CC)
 #define mysqlnd_rollback(conn)				(conn)->m->query((conn), "ROLLBACK", sizeof("ROLLBACK")-1 TSRMLS_CC)
+#endif
 #define mysqlnd_list_dbs(conn, wild)		(conn)->m->list_method((conn), wild? "SHOW DATABASES LIKE %s":"SHOW DATABASES", (wild), NULL TSRMLS_CC)
 #define mysqlnd_list_fields(conn, tab,wild)	(conn)->m->list_fields((conn), (tab), (wild) TSRMLS_CC)
 #define mysqlnd_list_processes(conn)		(conn)->m->list_method((conn), "SHOW PROCESSLIST", NULL, NULL TSRMLS_CC)
diff --git a/ext/mysqlnd/mysqlnd_block_alloc.c b/ext/mysqlnd/mysqlnd_block_alloc.c
index c89b377..fd957a9 100644
--- a/ext/mysqlnd/mysqlnd_block_alloc.c
+++ b/ext/mysqlnd/mysqlnd_block_alloc.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_block_alloc.c 303734 2010-09-23 16:03:22Z andrey $ */
+/* $Id: mysqlnd_block_alloc.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "mysqlnd.h"
diff --git a/ext/mysqlnd/mysqlnd_block_alloc.h b/ext/mysqlnd/mysqlnd_block_alloc.h
index 1b7ccfe..12ee340 100644
--- a/ext/mysqlnd/mysqlnd_block_alloc.h
+++ b/ext/mysqlnd/mysqlnd_block_alloc.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_block_alloc.h 298217 2010-04-20 13:50:34Z felipe $ */
+/* $Id: mysqlnd_block_alloc.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MYSQLND_BLOCK_ALLOC_H
 #define MYSQLND_BLOCK_ALLOC_H
diff --git a/ext/mysqlnd/mysqlnd_charset.c b/ext/mysqlnd/mysqlnd_charset.c
index 1e058fa..0e1b387 100644
--- a/ext/mysqlnd/mysqlnd_charset.c
+++ b/ext/mysqlnd/mysqlnd_charset.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqlnd/mysqlnd_charset.h b/ext/mysqlnd/mysqlnd_charset.h
index c5f0d7c..69194be 100644
--- a/ext/mysqlnd/mysqlnd_charset.h
+++ b/ext/mysqlnd/mysqlnd_charset.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqlnd/mysqlnd_debug.c b/ext/mysqlnd/mysqlnd_debug.c
index 692c81e..a7a13df 100644
--- a/ext/mysqlnd/mysqlnd_debug.c
+++ b/ext/mysqlnd/mysqlnd_debug.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_debug.c 305389 2010-11-15 23:46:21Z pajoye $ */
+/* $Id: mysqlnd_debug.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "mysqlnd.h"
diff --git a/ext/mysqlnd/mysqlnd_debug.h b/ext/mysqlnd/mysqlnd_debug.h
index 4c6197d..e412cc7 100644
--- a/ext/mysqlnd/mysqlnd_debug.h
+++ b/ext/mysqlnd/mysqlnd_debug.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_debug.h 305878 2010-12-01 10:16:51Z andrey $ */
+/* $Id: mysqlnd_debug.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MYSQLND_DEBUG_H
 #define MYSQLND_DEBUG_H
diff --git a/ext/mysqlnd/mysqlnd_enum_n_def.h b/ext/mysqlnd/mysqlnd_enum_n_def.h
index 209caf2..279827a 100644
--- a/ext/mysqlnd/mysqlnd_enum_n_def.h
+++ b/ext/mysqlnd/mysqlnd_enum_n_def.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_enum_n_def.h 305904 2010-12-02 13:59:56Z andrey $ */
+/* $Id: mysqlnd_enum_n_def.h 307883 2011-01-31 13:52:21Z andrey $ */
 #ifndef MYSQLND_ENUM_N_DEF_H
 #define MYSQLND_ENUM_N_DEF_H
 
@@ -92,6 +92,7 @@
 #define CLIENT_MULTI_STATEMENTS		(1UL << 16) /* Enable/disable multi-stmt support */
 #define CLIENT_MULTI_RESULTS		(1UL << 17) /* Enable/disable multi-results */
 #define CLIENT_PS_MULTI_RESULTS		(1UL << 18) /* Multi-results in PS-protocol */
+#define CLIENT_PLUGIN_AUTH			(1UL << 19) /* Client supports plugin authentication */
 
 #define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30)
 
@@ -156,6 +157,8 @@ typedef enum mysqlnd_option
 	MYSQL_REPORT_DATA_TRUNCATION,
 	MYSQL_OPT_RECONNECT,
 	MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
+	MYSQL_PLUGIN_DIR,
+	MYSQL_DEFAULT_AUTH,
 #if MYSQLND_UNICODE
 	MYSQLND_OPT_NUMERIC_AND_DATETIME_AS_UNICODE = 200,
 #endif
diff --git a/ext/mysqlnd/mysqlnd_libmysql_compat.h b/ext/mysqlnd/mysqlnd_libmysql_compat.h
index 12c61b0..0498f05 100644
--- a/ext/mysqlnd/mysqlnd_libmysql_compat.h
+++ b/ext/mysqlnd/mysqlnd_libmysql_compat.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqlnd/mysqlnd_loaddata.c b/ext/mysqlnd/mysqlnd_loaddata.c
index 4623898..11413e2 100644
--- a/ext/mysqlnd/mysqlnd_loaddata.c
+++ b/ext/mysqlnd/mysqlnd_loaddata.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -212,7 +212,7 @@ mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename, zend_bool *is_w
 
 	/* read data */
 	while ((bufsize = infile.local_infile_read (info, buf + MYSQLND_HEADER_SIZE, buflen - MYSQLND_HEADER_SIZE TSRMLS_CC)) > 0) {
-		if ((ret = conn->net->m.send(conn, buf, bufsize TSRMLS_CC)) < 0) {
+		if ((ret = conn->net->m.send(conn, buf, bufsize TSRMLS_CC)) == 0) {
 			DBG_ERR_FMT("Error during read : %d %s %s", CR_SERVER_LOST, UNKNOWN_SQLSTATE, lost_conn);
 			SET_CLIENT_ERROR(conn->error_info, CR_SERVER_LOST, UNKNOWN_SQLSTATE, lost_conn);
 			goto infile_error;
@@ -220,7 +220,7 @@ mysqlnd_handle_local_infile(MYSQLND *conn, const char *filename, zend_bool *is_w
 	}
 
 	/* send empty packet for eof */
-	if ((ret = conn->net->m.send(conn, empty_packet, 0 TSRMLS_CC)) < 0) {
+	if ((ret = conn->net->m.send(conn, empty_packet, 0 TSRMLS_CC)) == 0) {
 		SET_CLIENT_ERROR(conn->error_info, CR_SERVER_LOST, UNKNOWN_SQLSTATE, lost_conn);
 		goto infile_error;
 	}
diff --git a/ext/mysqlnd/mysqlnd_net.c b/ext/mysqlnd/mysqlnd_net.c
index b6ee73d..f2bd424 100644
--- a/ext/mysqlnd/mysqlnd_net.c
+++ b/ext/mysqlnd/mysqlnd_net.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -64,6 +64,7 @@ mysqlnd_set_sock_no_delay(php_stream * stream TSRMLS_DC)
 static enum_func_status
 MYSQLND_METHOD(mysqlnd_net, network_read)(MYSQLND * conn, zend_uchar * buffer, size_t count TSRMLS_DC)
 {
+	enum_func_status return_value = PASS;
 	size_t to_read = count, ret;
 	size_t old_chunk_size = conn->net->stream->chunk_size;
 	DBG_ENTER("mysqlnd_net::network_read");
@@ -72,14 +73,15 @@ MYSQLND_METHOD(mysqlnd_net, network_read)(MYSQLND * conn, zend_uchar * buffer, s
 	while (to_read) {
 		if (!(ret = php_stream_read(conn->net->stream, (char *) buffer, to_read))) {
 			DBG_ERR_FMT("Error while reading header from socket");
-			DBG_RETURN(FAIL);
+			return_value = FAIL;
+			break;
 		}
 		buffer += ret;
 		to_read -= ret;
 	}
-	MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn->stats, STAT_BYTES_RECEIVED, count);
+	MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn->stats, STAT_BYTES_RECEIVED, count - to_read);
 	conn->net->stream->chunk_size = old_chunk_size;
-	DBG_RETURN(PASS);
+	DBG_RETURN(return_value);
 }
 /* }}} */
 
diff --git a/ext/mysqlnd/mysqlnd_net.h b/ext/mysqlnd/mysqlnd_net.h
index d52fca5..8a0e399 100644
--- a/ext/mysqlnd/mysqlnd_net.h
+++ b/ext/mysqlnd/mysqlnd_net.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqlnd/mysqlnd_priv.h b/ext/mysqlnd/mysqlnd_priv.h
index eab65b7..7ee3d84 100644
--- a/ext/mysqlnd/mysqlnd_priv.h
+++ b/ext/mysqlnd/mysqlnd_priv.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_priv.h 304984 2010-10-29 15:02:39Z andrey $ */
+/* $Id: mysqlnd_priv.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MYSQLND_PRIV_H
 #define MYSQLND_PRIV_H
diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c
index b332d3d..61c3089 100644
--- a/ext/mysqlnd/mysqlnd_ps.c
+++ b/ext/mysqlnd/mysqlnd_ps.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_ps.c 306051 2010-12-07 11:13:55Z andrey $ */
+/* $Id: mysqlnd_ps.c 307921 2011-02-01 16:55:20Z andrey $ */
 #include "php.h"
 #include "mysqlnd.h"
 #include "mysqlnd_wireprotocol.h"
@@ -561,8 +561,7 @@ mysqlnd_stmt_execute_parse_response(MYSQLND_STMT * const s TSRMLS_DC)
 			}
 		}
 	}
-/* #ifndef MYSQLND_DONT_SKIP_OUT_PARAMS_RESULTSET */
-#if A0
+#ifndef MYSQLND_DONT_SKIP_OUT_PARAMS_RESULTSET
 	if (stmt->upsert_status.server_status & SERVER_PS_OUT_PARAMS) {
 		s->m->free_stmt_content(s TSRMLS_CC);
 		DBG_INF("PS OUT Variable RSet, skipping");
@@ -736,7 +735,7 @@ mysqlnd_fetch_stmt_row_buffered(MYSQLND_RES *result, void *param, unsigned int f
 
 	DBG_ENTER("mysqlnd_fetch_stmt_row_buffered");
 	*fetched_anything = FALSE;
-	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);
+	DBG_INF_FMT("stmt=%lu", stmt != NULL ? stmt->stmt_id : 0L);
 
 	/* If we haven't read everything */
 	if (set->data_cursor &&
@@ -1478,7 +1477,7 @@ MYSQLND_METHOD(mysqlnd_stmt, bind_one_parameter)(MYSQLND_STMT * const s, unsigne
 		DBG_RETURN(FAIL);
 	}
 
-	if (param_no < 0 || param_no >= stmt->param_count) {
+	if (param_no >= stmt->param_count) {
 		SET_STMT_ERROR(stmt, CR_INVALID_PARAMETER_NO, UNKNOWN_SQLSTATE, "Invalid parameter number");
 		DBG_ERR("invalid param_no");
 		DBG_RETURN(FAIL);
@@ -1618,7 +1617,7 @@ MYSQLND_METHOD(mysqlnd_stmt, bind_one_result)(MYSQLND_STMT * const s, unsigned i
 		DBG_RETURN(FAIL);
 	}
 
-	if (param_no < 0 || param_no >= stmt->field_count) {
+	if (param_no >= stmt->field_count) {
 		SET_STMT_ERROR(stmt, CR_INVALID_PARAMETER_NO, UNKNOWN_SQLSTATE, "Invalid parameter number");
 		DBG_ERR("invalid param_no");
 		DBG_RETURN(FAIL);
@@ -2224,9 +2223,9 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_stmt, net_close)(MYSQLND_STMT * const s, zend_boo
 static enum_func_status
 MYSQLND_METHOD(mysqlnd_stmt, dtor)(MYSQLND_STMT * const s, zend_bool implicit TSRMLS_DC)
 {
-	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
+	MYSQLND_STMT_DATA * stmt = (s != NULL) ? s->data:NULL;
 	enum_func_status ret = FAIL;
-	zend_bool persistent = s->persistent;
+	zend_bool persistent = (s != NULL) ? s->persistent : 0;
 
 	DBG_ENTER("mysqlnd_stmt::dtor");
 	if (stmt) {
diff --git a/ext/mysqlnd/mysqlnd_ps_codec.c b/ext/mysqlnd/mysqlnd_ps_codec.c
index 7e15f2e..d0e84e8 100644
--- a/ext/mysqlnd/mysqlnd_ps_codec.c
+++ b/ext/mysqlnd/mysqlnd_ps_codec.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_ps_codec.c 304131 2010-10-06 06:08:55Z andrey $ */
+/* $Id: mysqlnd_ps_codec.c 306939 2011-01-01 02:19:59Z felipe $ */
 #include "php.h"
 #include "mysqlnd.h"
 #include "mysqlnd_wireprotocol.h"
diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c
index 1d0106e..ed4b471 100644
--- a/ext/mysqlnd/mysqlnd_result.c
+++ b/ext/mysqlnd/mysqlnd_result.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_result.c 304183 2010-10-07 13:49:00Z andrey $ */
+/* $Id: mysqlnd_result.c 308540 2011-02-21 16:24:37Z andrey $ */
 #include "php.h"
 #include "mysqlnd.h"
 #include "mysqlnd_wireprotocol.h"
@@ -431,6 +431,7 @@ mysqlnd_query_read_result_set_header(MYSQLND *conn, MYSQLND_STMT * s TSRMLS_DC)
 				zend_bool is_warning;
 				DBG_INF("LOAD DATA");
 				conn->last_query_type = QUERY_LOAD_LOCAL;
+				conn->field_count = 0; /* overwrite previous value, or the last value could be used and lead to bug#53503 */
 				CONN_SET_STATE(conn, CONN_SENDING_LOAD_DATA);
 				ret = mysqlnd_handle_local_infile(conn, rset_header->info_or_local_file, &is_warning TSRMLS_CC);
 				CONN_SET_STATE(conn,  (ret == PASS || is_warning == TRUE)? CONN_READY:CONN_QUIT_SENT);
@@ -1270,8 +1271,8 @@ MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND * const conn, MYSQL
 		/* libmysql's documentation says it should be so for SELECT statements */
 		conn->upsert_status.affected_rows = set->row_count;
 	}
-	DBG_INF_FMT("ret=%s row_count=%u warnings=%u server_status=%u", ret == PASS? "PASS":"FAIL",
-				set->row_count, conn->upsert_status.warning_count, conn->upsert_status.server_status);
+	DBG_INF_FMT("ret=%s row_count=%u warnings=%u server_status=%u",
+				ret == PASS? "PASS":"FAIL", (uint) set->row_count, conn->upsert_status.warning_count, conn->upsert_status.server_status);
 end:
 	PACKET_FREE(row_packet);
 
@@ -1400,7 +1401,7 @@ static uint64_t
 MYSQLND_METHOD(mysqlnd_res, num_rows)(const MYSQLND_RES * const result TSRMLS_DC)
 {
 	/* Be compatible with libmysql. We count row_count, but will return 0 */
-	return result->stored_data? result->stored_data->row_count:0;
+	return result->stored_data? result->stored_data->row_count:(result->unbuf && result->unbuf->eof_reached? result->unbuf->row_count:0);
 }
 /* }}} */
 
diff --git a/ext/mysqlnd/mysqlnd_result.h b/ext/mysqlnd/mysqlnd_result.h
index 7c4ab99..3b20a84 100644
--- a/ext/mysqlnd/mysqlnd_result.h
+++ b/ext/mysqlnd/mysqlnd_result.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_result.h 299348 2010-05-13 15:29:08Z andrey $ */
+/* $Id: mysqlnd_result.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MYSQLND_RESULT_H
 #define MYSQLND_RESULT_H
diff --git a/ext/mysqlnd/mysqlnd_result_meta.c b/ext/mysqlnd/mysqlnd_result_meta.c
index b15fb10..83a1ae1 100644
--- a/ext/mysqlnd/mysqlnd_result_meta.c
+++ b/ext/mysqlnd/mysqlnd_result_meta.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_result_meta.c 304066 2010-10-05 08:29:54Z uw $ */
+/* $Id: mysqlnd_result_meta.c 306939 2011-01-01 02:19:59Z felipe $ */
 #include "php.h"
 #include "mysqlnd.h"
 #include "mysqlnd_priv.h"
diff --git a/ext/mysqlnd/mysqlnd_result_meta.h b/ext/mysqlnd/mysqlnd_result_meta.h
index 90554da..e7d52ce 100644
--- a/ext/mysqlnd/mysqlnd_result_meta.h
+++ b/ext/mysqlnd/mysqlnd_result_meta.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_result_meta.h 299389 2010-05-14 16:42:17Z andrey $ */
+/* $Id: mysqlnd_result_meta.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MYSQLND_RESULT_META_H
 #define MYSQLND_RESULT_META_H
diff --git a/ext/mysqlnd/mysqlnd_statistics.c b/ext/mysqlnd/mysqlnd_statistics.c
index d918132..8095b7e 100644
--- a/ext/mysqlnd/mysqlnd_statistics.c
+++ b/ext/mysqlnd/mysqlnd_statistics.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_statistics.c 305109 2010-11-05 20:07:34Z andrey $ */
+/* $Id: mysqlnd_statistics.c 307593 2011-01-19 18:09:17Z andrey $ */
 #include "php.h"
 #include "mysqlnd.h"
 #include "mysqlnd_priv.h"
@@ -247,6 +247,9 @@ PHPAPI void
 mysqlnd_stats_init(MYSQLND_STATS ** stats, size_t statistic_count)
 {
 	*stats = calloc(1, sizeof(MYSQLND_STATS));
+	if (*stats == NULL) {
+		return;
+	}
 	(*stats)->values = calloc(statistic_count, sizeof(uint64_t));
 	(*stats)->triggers = calloc(statistic_count, sizeof(mysqlnd_stat_trigger));
 	(*stats)->in_trigger = FALSE;
diff --git a/ext/mysqlnd/mysqlnd_statistics.h b/ext/mysqlnd/mysqlnd_statistics.h
index b54db35..f02e08a 100644
--- a/ext/mysqlnd/mysqlnd_statistics.h
+++ b/ext/mysqlnd/mysqlnd_statistics.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_statistics.h 303734 2010-09-23 16:03:22Z andrey $ */
+/* $Id: mysqlnd_statistics.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MYSQLND_STATISTICS_H
 #define MYSQLND_STATISTICS_H
diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h
index 5aa486f..a83d537 100644
--- a/ext/mysqlnd/mysqlnd_structs.h
+++ b/ext/mysqlnd/mysqlnd_structs.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_structs.h 304112 2010-10-05 16:27:49Z andrey $ */
+/* $Id: mysqlnd_structs.h 308673 2011-02-25 13:11:49Z andrey $ */
 
 #ifndef MYSQLND_STRUCTS_H
 #define MYSQLND_STRUCTS_H
@@ -406,6 +406,11 @@ typedef enum_func_status    (*func_mysqlnd_conn__ssl_set)(MYSQLND * const conn,
 
 typedef MYSQLND_RES * 		(*func_mysqlnd_conn__result_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC);
 
+typedef enum_func_status	(*func_mysqlnd_conn__set_autocommit)(MYSQLND * conn, unsigned int mode TSRMLS_DC);
+typedef enum_func_status	(*func_mysqlnd_conn__tx_commit)(MYSQLND * conn TSRMLS_DC);
+typedef enum_func_status	(*func_mysqlnd_conn__tx_rollback)(MYSQLND * conn TSRMLS_DC);
+
+
 struct st_mysqlnd_conn_methods
 {
 	func_mysqlnd_conn__init init;
@@ -477,6 +482,11 @@ struct st_mysqlnd_conn_methods
 	func_mysqlnd_conn__ssl_set ssl_set;
 
 	func_mysqlnd_conn__result_init result_init;
+#ifdef AUTOCOMMIT_TX_COMMIT_ROLLBACK
+	func_mysqlnd_conn__set_autocommit set_autocommit;
+	func_mysqlnd_conn__tx_commit tx_commit;
+	func_mysqlnd_conn__tx_rollback tx_rollback;
+#endif
 };
 
 
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c
index 810a793..06ea7df 100644
--- a/ext/mysqlnd/mysqlnd_wireprotocol.c
+++ b/ext/mysqlnd/mysqlnd_wireprotocol.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.h b/ext/mysqlnd/mysqlnd_wireprotocol.h
index 7fee850..77a2ec7 100644
--- a/ext/mysqlnd/mysqlnd_wireprotocol.h
+++ b/ext/mysqlnd/mysqlnd_wireprotocol.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_wireprotocol.h 304116 2010-10-05 17:20:00Z andrey $ */
+/* $Id: mysqlnd_wireprotocol.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MYSQLND_WIREPROTOCOL_H
 #define MYSQLND_WIREPROTOCOL_H
diff --git a/ext/mysqlnd/php_mysqlnd.c b/ext/mysqlnd/php_mysqlnd.c
index e1ddcba..3b25a72 100644
--- a/ext/mysqlnd/php_mysqlnd.c
+++ b/ext/mysqlnd/php_mysqlnd.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_mysqlnd.c 304974 2010-10-28 14:07:36Z andrey $ */
+/* $Id: php_mysqlnd.c 306939 2011-01-01 02:19:59Z felipe $ */
 #include "php.h"
 #include "php_ini.h"
 #include "mysqlnd.h"
diff --git a/ext/mysqlnd/php_mysqlnd.h b/ext/mysqlnd/php_mysqlnd.h
index 765f71c..db47bdb 100644
--- a/ext/mysqlnd/php_mysqlnd.h
+++ b/ext/mysqlnd/php_mysqlnd.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2010 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Ulf Wendel <uw at php.net>                                     |
   +----------------------------------------------------------------------+
 
-  $Id: php_mysqlnd.h 298217 2010-04-20 13:50:34Z felipe $ 
+  $Id: php_mysqlnd.h 306939 2011-01-01 02:19:59Z felipe $ 
 */
 
 #ifndef PHP_MYSQLND_H
diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c
index 41ced89..e0497bf 100644
--- a/ext/oci8/oci8.c
+++ b/ext/oci8/oci8.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -26,7 +26,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: oci8.c 305257 2010-11-10 18:59:56Z sixd $ */
+/* $Id: oci8.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1299,7 +1299,7 @@ PHP_MINFO_FUNCTION(oci)
 	php_info_print_table_start();
 	php_info_print_table_row(2, "OCI8 Support", "enabled");
 	php_info_print_table_row(2, "Version", PHP_OCI8_VERSION);
-	php_info_print_table_row(2, "Revision", "$Revision: 305257 $");
+	php_info_print_table_row(2, "Revision", "$Revision: 306939 $");
 
 	snprintf(buf, sizeof(buf), "%ld", OCI_G(num_persistent));
 	php_info_print_table_row(2, "Active Persistent Connections", buf);
diff --git a/ext/oci8/oci8_collection.c b/ext/oci8/oci8_collection.c
index a06b61b..3ee5dc8 100644
--- a/ext/oci8/oci8_collection.c
+++ b/ext/oci8/oci8_collection.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -25,7 +25,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: oci8_collection.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: oci8_collection.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 
diff --git a/ext/oci8/oci8_interface.c b/ext/oci8/oci8_interface.c
index 793490c..63b359d 100644
--- a/ext/oci8/oci8_interface.c
+++ b/ext/oci8/oci8_interface.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -25,7 +25,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: oci8_interface.c 305578 2010-11-20 01:29:03Z sixd $ */
+/* $Id: oci8_interface.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/oci8/oci8_lob.c b/ext/oci8/oci8_lob.c
index 315f599..f24294e 100644
--- a/ext/oci8/oci8_lob.c
+++ b/ext/oci8/oci8_lob.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -25,7 +25,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: oci8_lob.c 293180 2010-01-06 18:58:16Z sixd $ */
+/* $Id: oci8_lob.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 
diff --git a/ext/oci8/oci8_statement.c b/ext/oci8/oci8_statement.c
index c4de777..e1f3ba4 100644
--- a/ext/oci8/oci8_statement.c
+++ b/ext/oci8/oci8_statement.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -25,7 +25,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: oci8_statement.c 298755 2010-04-29 05:07:16Z sixd $ */
+/* $Id: oci8_statement.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 #ifdef HAVE_CONFIG_H
diff --git a/ext/oci8/package.xml b/ext/oci8/package.xml
index 7f87705..5c15108 100644
--- a/ext/oci8/package.xml
+++ b/ext/oci8/package.xml
@@ -33,15 +33,15 @@ http://pear.php.net/dtd/package-2.0.xsd">
   <active>no</active>
  </lead>
 
- <date>2010-11-16</date>
- <time>15:00:00</time>
+ <date>2010-12-09</date>
+ <time>20:00:00</time>
 
  <version>
   <release>1.4.5</release>
   <api>1.4.5</api>
  </version>
  <stability>
-  <release>devel</release>
+  <release>stable</release>
   <api>stable</api>
  </stability>
  <license uri="http://www.php.net/license">PHP</license>
diff --git a/ext/oci8/php_oci8.h b/ext/oci8/php_oci8.h
index 1598850..309b162 100644
--- a/ext/oci8/php_oci8.h
+++ b/ext/oci8/php_oci8.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -25,7 +25,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_oci8.h 305896 2010-12-01 23:30:28Z sixd $ */
+/* $Id: php_oci8.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #if HAVE_OCI8
 # ifndef PHP_OCI8_H
diff --git a/ext/oci8/php_oci8_int.h b/ext/oci8/php_oci8_int.h
index c7de932..0f3cf0f 100644
--- a/ext/oci8/php_oci8_int.h
+++ b/ext/oci8/php_oci8_int.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -25,7 +25,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_oci8_int.h 293180 2010-01-06 18:58:16Z sixd $ */
+/* $Id: php_oci8_int.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #if HAVE_OCI8
 # ifndef PHP_OCI8_INT_H
diff --git a/ext/odbc/birdstep.c b/ext/odbc/birdstep.c
index 3f04d21..65d22fc 100644
--- a/ext/odbc/birdstep.c
+++ b/ext/odbc/birdstep.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: birdstep.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: birdstep.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
  * TODO:
diff --git a/ext/odbc/php_birdstep.h b/ext/odbc/php_birdstep.h
index 778e399..7748d8a 100644
--- a/ext/odbc/php_birdstep.h
+++ b/ext/odbc/php_birdstep.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_birdstep.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_birdstep.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_BIRDSTEP_H
 #define PHP_BIRDSTEP_H
diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c
index 756c3b3..94ed51f 100644
--- a/ext/odbc/php_odbc.c
+++ b/ext/odbc/php_odbc.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_odbc.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: php_odbc.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/odbc/php_odbc.h b/ext/odbc/php_odbc.h
index 9045d75..fb426eb 100644
--- a/ext/odbc/php_odbc.h
+++ b/ext/odbc/php_odbc.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_odbc.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_odbc.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_ODBC_H
 #define PHP_ODBC_H
diff --git a/ext/odbc/php_odbc_includes.h b/ext/odbc/php_odbc_includes.h
index fd87efe..c305286 100644
--- a/ext/odbc/php_odbc_includes.h
+++ b/ext/odbc/php_odbc_includes.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_odbc_includes.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_odbc_includes.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_ODBC_INCLUDES_H
 #define PHP_ODBC_INCLUDES_H
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index ce36bd2..a17eb0e 100644
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: openssl.c 305902 2010-12-02 11:37:43Z pajoye $ */
+/* $Id: openssl.c 308534 2011-02-21 12:47:38Z pajoye $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -3543,14 +3543,13 @@ PHP_FUNCTION(openssl_pkcs7_sign)
 	char * outfilename;	int outfilename_len;
 	char * extracertsfilename = NULL; int extracertsfilename_len;
 
-	RETVAL_FALSE;
-
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssZZa!|ls",
 				&infilename, &infilename_len, &outfilename, &outfilename_len,
 				&zcert, &zprivkey, &zheaders, &flags, &extracertsfilename,
 				&extracertsfilename_len) == FAILURE) {
 		return;
 	}
+	RETVAL_FALSE;
 
 	if (strlen(infilename) != infilename_len) {
 		return;
@@ -4731,6 +4730,7 @@ PHP_FUNCTION(openssl_encrypt)
 	if (free_iv) {
 		efree(iv);
 	}
+	EVP_CIPHER_CTX_cleanup(&cipher_ctx);
 }
 /* }}} */
 
@@ -4804,6 +4804,7 @@ PHP_FUNCTION(openssl_decrypt)
 	if (base64_str) {
 		efree(base64_str);
 	}
+ 	EVP_CIPHER_CTX_cleanup(&cipher_ctx);
 }
 /* }}} */
 
diff --git a/ext/openssl/php_openssl.h b/ext/openssl/php_openssl.h
index bddd8e7..0d15f41 100644
--- a/ext/openssl/php_openssl.h
+++ b/ext/openssl/php_openssl.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_openssl.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_openssl.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_OPENSSL_H
 #define PHP_OPENSSL_H
diff --git a/ext/openssl/tests/bug54060.phpt b/ext/openssl/tests/bug54060.phpt
new file mode 100644
index 0000000..fe8ca94
--- /dev/null
+++ b/ext/openssl/tests/bug54060.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #54060 (Memory leak in openssl_encrypt)
+--SKIPIF--
+<?php if (!extension_loaded("openssl")) die("skip"); ?>
+--FILE--
+<?php
+
+$data = "jfdslkjvflsdkjvlkfjvlkjfvlkdm,4w 043920r 9234r 32904r 09243
+r7-89437 r892374 r894372 r894 7289r7 f  frwerfh i iurf iuryw uyrfouiwy ruy
+972439 8478942 yrhfjkdhls";
+$pass = "r23498rui324hjbnkj";
+
+openssl_encrypt($data, 'des3', $pass, false, '1qazxsw2');
+echo "Done";
+?>
+--EXPECT--
+Done
diff --git a/ext/openssl/tests/bug54061.phpt b/ext/openssl/tests/bug54061.phpt
new file mode 100644
index 0000000..cef3944
--- /dev/null
+++ b/ext/openssl/tests/bug54061.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #54061 (Memory leak in openssl_decrypt)
+--SKIPIF--
+<?php if (!extension_loaded("openssl")) die("skip"); ?>
+--FILE--
+<?php
+$data = "jfdslkjvflsdkjvlkfjvlkjfvlkdm,4w 043920r 9234r 32904r 09243
+r7-89437 r892374 r894372 r894 7289r7 f  frwerfh i iurf iuryw uyrfouiwy ruy
+972439 8478942 yrhfjkdhls";
+$pass = "r23498rui324hjbnkj";
+
+$cr = openssl_encrypt($data, 'des3', $pass, false, '1qazxsw2');
+$dcr = openssl_decrypt($cr, 'des3', $pass, false, '1qazxsw2');
+echo "Done";
+?>
+--EXPECT--
+Done
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index 135a9b0..1cfdf10 100644
--- a/ext/openssl/xp_ssl.c
+++ b/ext/openssl/xp_ssl.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: xp_ssl.c 303839 2010-09-29 01:25:35Z felipe $ */
+/* $Id: xp_ssl.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "ext/standard/file.h"
@@ -369,6 +369,18 @@ static inline int php_openssl_setup_crypto(php_stream *stream,
 
 	SSL_CTX_set_options(sslsock->ctx, SSL_OP_ALL);
 
+#if OPENSSL_VERSION_NUMBER >= 0x0090806fL
+	{
+		zval **val;
+
+		if (stream->context && SUCCESS == php_stream_context_get_option(
+					stream->context, "ssl", "no_ticket", &val) && 
+				zval_is_true(*val)) {
+			SSL_CTX_set_options(sslsock->ctx, SSL_OP_NO_TICKET);
+		}
+	}
+#endif
+
 	sslsock->ssl_handle = php_SSL_new_from_context(sslsock->ctx, stream TSRMLS_CC);
 	if (sslsock->ssl_handle == NULL) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create an SSL handle");
@@ -399,8 +411,10 @@ static inline int php_openssl_enable_crypto(php_stream *stream,
 	int n, retry = 1;
 
 	if (cparam->inputs.activate && !sslsock->ssl_active) {
-		float timeout = sslsock->connect_timeout.tv_sec + sslsock->connect_timeout.tv_usec / 1000000;
-		int blocked = sslsock->s.is_blocked;
+		struct timeval	start_time,
+						*timeout;
+		int				blocked		= sslsock->s.is_blocked,
+						has_timeout = 0;
 
 #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT)
 		if (sslsock->is_client && sslsock->sni) {
@@ -417,36 +431,70 @@ static inline int php_openssl_enable_crypto(php_stream *stream,
 			sslsock->state_set = 1;
 		}
 	
-		if (sslsock->is_client && SUCCESS == php_set_sock_blocking(sslsock->s.socket, 0 TSRMLS_CC)) {
-                	sslsock->s.is_blocked = 0;
+		if (SUCCESS == php_set_sock_blocking(sslsock->s.socket, 0 TSRMLS_CC)) {
+			sslsock->s.is_blocked = 0;
 		}
+		
+		timeout = sslsock->is_client ? &sslsock->connect_timeout : &sslsock->s.timeout;
+		has_timeout = !sslsock->s.is_blocked && (timeout->tv_sec || timeout->tv_usec);
+		/* gettimeofday is not monotonic; using it here is not strictly correct */
+		if (has_timeout) {
+			gettimeofday(&start_time, NULL);
+		}
+		
 		do {
+			struct timeval	cur_time,
+							elapsed_time;
+			
 			if (sslsock->is_client) {
-				struct timeval tvs, tve;
-				struct timezone tz;
-
-				gettimeofday(&tvs, &tz);
 				n = SSL_connect(sslsock->ssl_handle);
-				gettimeofday(&tve, &tz);
+			} else {
+				n = SSL_accept(sslsock->ssl_handle);
+			}
 
-				timeout -= (tve.tv_sec + (float) tve.tv_usec / 1000000) - (tvs.tv_sec + (float) tvs.tv_usec / 1000000);
-				if (timeout < 0) {
-					php_error_docref(NULL TSRMLS_CC, E_WARNING, "SSL: connection timeout");
+			if (has_timeout) {
+				gettimeofday(&cur_time, NULL);
+				elapsed_time.tv_sec  = cur_time.tv_sec  - start_time.tv_sec;
+				elapsed_time.tv_usec = cur_time.tv_usec - start_time.tv_usec;
+				if (cur_time.tv_usec < start_time.tv_usec) {
+					elapsed_time.tv_sec  -= 1L;
+					elapsed_time.tv_usec += 1000000L;
+				}
+			
+				if (elapsed_time.tv_sec > timeout->tv_sec ||
+						(elapsed_time.tv_sec == timeout->tv_sec &&
+						elapsed_time.tv_usec > timeout->tv_usec)) {
+					php_error_docref(NULL TSRMLS_CC, E_WARNING, "SSL: crypto enabling timeout");
 					return -1;
 				}
-			} else {
-				n = SSL_accept(sslsock->ssl_handle);
 			}
 
 			if (n <= 0) {
-				retry = handle_ssl_error(stream, n, sslsock->is_client || sslsock->s.is_blocked TSRMLS_CC);
-
+				/* in case of SSL_ERROR_WANT_READ/WRITE, do not retry in non-blocking mode */
+				retry = handle_ssl_error(stream, n, blocked TSRMLS_CC);
+				if (retry) {
+					/* wait until something interesting happens in the socket. It may be a
+					 * timeout. Also consider the unlikely of possibility of a write block  */
+					int err = SSL_get_error(sslsock->ssl_handle, n);
+					struct timeval left_time;
+					
+					if (has_timeout) {
+						left_time.tv_sec  = timeout->tv_sec  - elapsed_time.tv_sec;
+						left_time.tv_usec =	timeout->tv_usec - elapsed_time.tv_usec;
+						if (timeout->tv_usec < elapsed_time.tv_usec) {
+							left_time.tv_sec  -= 1L;
+							left_time.tv_usec += 1000000L;
+						}
+					}
+					php_pollfd_for(sslsock->s.socket, (err == SSL_ERROR_WANT_READ) ?
+						(POLLIN|POLLPRI) : POLLOUT, has_timeout ? &left_time : NULL);
+				}
 			} else {
-				break;
+				retry = 0;
 			}
 		} while (retry);
 
-		if (sslsock->is_client && sslsock->s.is_blocked != blocked && SUCCESS == php_set_sock_blocking(sslsock->s.socket, blocked TSRMLS_CC)) {
+		if (sslsock->s.is_blocked != blocked && SUCCESS == php_set_sock_blocking(sslsock->s.socket, blocked TSRMLS_CC)) {
 			sslsock->s.is_blocked = blocked;
 		}
 
diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c
index 09ccd77..b2e4118 100755
--- a/ext/pcntl/pcntl.c
+++ b/ext/pcntl/pcntl.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: pcntl.c 305020 2010-11-01 22:43:59Z lbarnaud $ */
+/* $Id: pcntl.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define PCNTL_DEBUG 0
 
diff --git a/ext/pcntl/php_pcntl.h b/ext/pcntl/php_pcntl.h
index 8d48f9c..de63aa6 100644
--- a/ext/pcntl/php_pcntl.h
+++ b/ext/pcntl/php_pcntl.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_pcntl.h 305016 2010-11-01 20:22:23Z lbarnaud $ */
+/* $Id: php_pcntl.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PCNTL_H
 #define PHP_PCNTL_H
diff --git a/ext/pcntl/php_signal.c b/ext/pcntl/php_signal.c
index 95eb08d..9ba68a7 100644
--- a/ext/pcntl/php_signal.c
+++ b/ext/pcntl/php_signal.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_signal.c 305020 2010-11-01 22:43:59Z lbarnaud $ */
+/* $Id: php_signal.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_signal.h"
 
diff --git a/ext/pcntl/php_signal.h b/ext/pcntl/php_signal.h
index 1fbe6ed..2f89f84 100644
--- a/ext/pcntl/php_signal.h
+++ b/ext/pcntl/php_signal.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_signal.h 305020 2010-11-01 22:43:59Z lbarnaud $ */
+/* $Id: php_signal.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <signal.h>
 #ifndef PHP_SIGNAL_H
diff --git a/ext/pcre/config.w32 b/ext/pcre/config.w32
index 4e3917f..1d4a29b 100644
--- a/ext/pcre/config.w32
+++ b/ext/pcre/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 272550 2009-01-02 04:59:41Z andi $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 EXTENSION("pcre", "php_pcre.c", false /* never shared */,
@@ -9,3 +9,4 @@ ADD_DEF_FILE("ext\\pcre\\php_pcre.def");
 AC_DEFINE('HAVE_BUNDLED_PCRE', 1, 'Using bundled PCRE library');
 AC_DEFINE('HAVE_PCRE', 1, 'Have PCRE library');
 PHP_PCRE="yes";
+PHP_INSTALL_HEADERS("ext/pcre", "php_pcre.h pcrelib/");
diff --git a/ext/pcre/pcrelib/ChangeLog b/ext/pcre/pcrelib/ChangeLog
index b2fef0d..32cd002 100644
--- a/ext/pcre/pcrelib/ChangeLog
+++ b/ext/pcre/pcrelib/ChangeLog
@@ -1,6 +1,136 @@
 ChangeLog for PCRE
 ------------------
 
+Version 8.11 10-Dec-2010
+------------------------
+
+1.  (*THEN) was not working properly if there were untried alternatives prior
+    to it in the current branch. For example, in ((a|b)(*THEN)(*F)|c..) it
+    backtracked to try for "b" instead of moving to the next alternative branch
+    at the same level (in this case, to look for "c"). The Perl documentation
+    is clear that when (*THEN) is backtracked onto, it goes to the "next
+    alternative in the innermost enclosing group".
+
+2.  (*COMMIT) was not overriding (*THEN), as it does in Perl. In a pattern
+    such as   (A(*COMMIT)B(*THEN)C|D)  any failure after matching A should
+    result in overall failure. Similarly, (*COMMIT) now overrides (*PRUNE) and
+    (*SKIP), (*SKIP) overrides (*PRUNE) and (*THEN), and (*PRUNE) overrides
+    (*THEN).
+
+3.  If \s appeared in a character class, it removed the VT character from
+    the class, even if it had been included by some previous item, for example
+    in [\x00-\xff\s]. (This was a bug related to the fact that VT is not part
+    of \s, but is part of the POSIX "space" class.)
+
+4.  A partial match never returns an empty string (because you can always
+    match an empty string at the end of the subject); however the checking for
+    an empty string was starting at the "start of match" point. This has been
+    changed to the "earliest inspected character" point, because the returned
+    data for a partial match starts at this character. This means that, for
+    example, /(?<=abc)def/ gives a partial match for the subject "abc"
+    (previously it gave "no match").
+
+5.  Changes have been made to the way PCRE_PARTIAL_HARD affects the matching
+    of $, \z, \Z, \b, and \B. If the match point is at the end of the string,
+    previously a full match would be given. However, setting PCRE_PARTIAL_HARD
+    has an implication that the given string is incomplete (because a partial
+    match is preferred over a full match). For this reason, these items now
+    give a partial match in this situation. [Aside: previously, the one case
+    /t\b/ matched against "cat" with PCRE_PARTIAL_HARD set did return a partial
+    match rather than a full match, which was wrong by the old rules, but is
+    now correct.]
+
+6.  There was a bug in the handling of #-introduced comments, recognized when
+    PCRE_EXTENDED is set, when PCRE_NEWLINE_ANY and PCRE_UTF8 were also set.
+    If a UTF-8 multi-byte character included the byte 0x85 (e.g. +U0445, whose
+    UTF-8 encoding is 0xd1,0x85), this was misinterpreted as a newline when
+    scanning for the end of the comment. (*Character* 0x85 is an "any" newline,
+    but *byte* 0x85 is not, in UTF-8 mode). This bug was present in several
+    places in pcre_compile().
+
+7.  Related to (6) above, when pcre_compile() was skipping #-introduced
+    comments when looking ahead for named forward references to subpatterns,
+    the only newline sequence it recognized was NL. It now handles newlines
+    according to the set newline convention.
+
+8.  SunOS4 doesn't have strerror() or strtoul(); pcregrep dealt with the
+    former, but used strtoul(), whereas pcretest avoided strtoul() but did not
+    cater for a lack of strerror(). These oversights have been fixed.
+
+9.  Added --match-limit and --recursion-limit to pcregrep.
+
+10. Added two casts needed to build with Visual Studio when NO_RECURSE is set.
+
+11. When the -o option was used, pcregrep was setting a return code of 1, even
+    when matches were found, and --line-buffered was not being honoured.
+
+12. Added an optional parentheses number to the -o and --only-matching options
+    of pcregrep.
+
+13. Imitating Perl's /g action for multiple matches is tricky when the pattern
+    can match an empty string. The code to do it in pcretest and pcredemo
+    needed fixing:
+
+    (a) When the newline convention was "crlf", pcretest got it wrong, skipping
+        only one byte after an empty string match just before CRLF (this case
+        just got forgotten; "any" and "anycrlf" were OK).
+
+    (b) The pcretest code also had a bug, causing it to loop forever in UTF-8
+        mode when an empty string match preceded an ASCII character followed by
+        a non-ASCII character. (The code for advancing by one character rather
+        than one byte was nonsense.)
+
+    (c) The pcredemo.c sample program did not have any code at all to handle
+        the cases when CRLF is a valid newline sequence.
+
+14. Neither pcre_exec() nor pcre_dfa_exec() was checking that the value given
+    as a starting offset was within the subject string. There is now a new
+    error, PCRE_ERROR_BADOFFSET, which is returned if the starting offset is
+    negative or greater than the length of the string. In order to test this,
+    pcretest is extended to allow the setting of negative starting offsets.
+
+15. In both pcre_exec() and pcre_dfa_exec() the code for checking that the
+    starting offset points to the beginning of a UTF-8 character was
+    unnecessarily clumsy. I tidied it up.
+
+16. Added PCRE_ERROR_SHORTUTF8 to make it possible to distinguish between a
+    bad UTF-8 sequence and one that is incomplete when using PCRE_PARTIAL_HARD.
+
+17. Nobody had reported that the --include_dir option, which was added in
+    release 7.7 should have been called --include-dir (hyphen, not underscore)
+    for compatibility with GNU grep. I have changed it to --include-dir, but
+    left --include_dir as an undocumented synonym, and the same for
+    --exclude-dir, though that is not available in GNU grep, at least as of
+    release 2.5.4.
+
+18. At a user's suggestion, the macros GETCHAR and friends (which pick up UTF-8
+    characters from a string of bytes) have been redefined so as not to use
+    loops, in order to improve performance in some environments. At the same
+    time, I abstracted some of the common code into auxiliary macros to save
+    repetition (this should not affect the compiled code).
+
+19. If \c was followed by a multibyte UTF-8 character, bad things happened. A
+    compile-time error is now given if \c is not followed by an ASCII
+    character, that is, a byte less than 128. (In EBCDIC mode, the code is
+    different, and any byte value is allowed.)
+
+20. Recognize (*NO_START_OPT) at the start of a pattern to set the PCRE_NO_
+    START_OPTIMIZE option, which is now allowed at compile time - but just
+    passed through to pcre_exec() or pcre_dfa_exec(). This makes it available
+    to pcregrep and other applications that have no direct access to PCRE
+    options. The new /Y option in pcretest sets this option when calling
+    pcre_compile().
+
+21. Change 18 of release 8.01 broke the use of named subpatterns for recursive
+    back references. Groups containing recursive back references were forced to
+    be atomic by that change, but in the case of named groups, the amount of
+    memory required was incorrectly computed, leading to "Failed: internal
+    error: code overflow". This has been fixed.
+
+22. Some patches to pcre_stringpiece.h, pcre_stringpiece_unittest.cc, and
+    pcretest.c, to avoid build problems in some Borland environments.
+
+
 Version 8.10 25-Jun-2010
 ------------------------
 
diff --git a/ext/pcre/pcrelib/HACKING b/ext/pcre/pcrelib/HACKING
index 8c6a42d..ee09132 100644
--- a/ext/pcre/pcrelib/HACKING
+++ b/ext/pcre/pcrelib/HACKING
@@ -4,6 +4,7 @@ Technical Notes about PCRE
 These are very rough technical notes that record potentially useful information 
 about PCRE internals.
 
+
 Historical note 1
 -----------------
 
@@ -22,6 +23,7 @@ the one matching the longest subset of the subject string was chosen. This did
 not necessarily maximize the individual wild portions of the pattern, as is
 expected in Unix and Perl-style regular expressions.
 
+
 Historical note 2
 -----------------
 
@@ -34,6 +36,7 @@ maximizing (or, optionally, minimizing in Perl) the amount of the subject that
 matches individual wild portions of the pattern. This is an "NFA algorithm" in
 Friedl's terminology.
 
+
 OK, here's the real stuff
 -------------------------
 
@@ -44,6 +47,7 @@ in the pattern, to save on compiling time. However, because of the greater
 complexity in Perl regular expressions, I couldn't do this. In any case, a
 first pass through the pattern is helpful for other reasons. 
 
+
 Computing the memory requirement: how it was
 --------------------------------------------
 
@@ -54,6 +58,7 @@ idea was that this would turn out faster than the Henry Spencer code because
 the first pass is degenerate and the second pass can just store stuff straight
 into the vector, which it knows is big enough.
 
+
 Computing the memory requirement: how it is
 -------------------------------------------
 
@@ -75,6 +80,7 @@ runs more slowly than before (30% or more, depending on the pattern) because it
 is doing a full analysis of the pattern. My hope was that this would not be a
 big issue, and in the event, nobody has commented on it.
 
+
 Traditional matching function
 -----------------------------
 
@@ -84,6 +90,7 @@ and the way that Perl works. This is not surprising, since it is intended to be
 as compatible with Perl as possible. This is the function most users of PCRE
 will use most of the time.
 
+
 Supplementary matching function
 -------------------------------
 
@@ -119,7 +126,6 @@ quantifiers) are always just two bytes long.
 
 A list of the opcodes follows:
 
-
 Opcodes with no following data
 ------------------------------
 
@@ -151,12 +157,24 @@ These items are all just one byte long
   OP_EXTUNI              match an extended Unicode character 
   OP_ANYNL               match any Unicode newline sequence 
   
-  OP_ACCEPT              ) These are Perl 5.10's "backtracking    
-  OP_COMMIT              ) control verbs". If OP_ACCEPT is inside
-  OP_FAIL                ) capturing parentheses, it may be preceded 
-  OP_PRUNE               ) by one or more OP_CLOSE, followed by a 2-byte 
-  OP_SKIP                ) number, indicating which parentheses must be
-  OP_THEN                ) closed.
+  OP_ACCEPT              ) These are Perl 5.10's "backtracking control   
+  OP_COMMIT              ) verbs". If OP_ACCEPT is inside capturing
+  OP_FAIL                ) parentheses, it may be preceded by one or more
+  OP_PRUNE               ) OP_CLOSE, followed by a 2-byte number,
+  OP_SKIP                ) indicating which parentheses must be closed.
+  
+
+Backtracking control verbs with data
+------------------------------------
+ 
+OP_THEN is followed by a LINK_SIZE offset, which is the distance back to the
+start of the current branch.
+
+OP_MARK is followed by the mark name, preceded by a one-byte length, and 
+followed by a binary zero. For (*PRUNE), (*SKIP), and (*THEN) with arguments, 
+the opcodes OP_PRUNE_ARG, OP_SKIP_ARG, and OP_THEN_ARG are used. For the first 
+two, the name follows immediately; for OP_THEN_ARG, it follows the LINK_SIZE 
+offset value.
   
 
 Repeating single characters
@@ -419,4 +437,4 @@ at compile time, and so does not cause anything to be put into the compiled
 data.
 
 Philip Hazel
-October 2009
+October 2010
diff --git a/ext/pcre/pcrelib/NEWS b/ext/pcre/pcrelib/NEWS
index 4f21e0b..fdc4ba1 100644
--- a/ext/pcre/pcrelib/NEWS
+++ b/ext/pcre/pcrelib/NEWS
@@ -1,6 +1,27 @@
 News about PCRE releases
 ------------------------
 
+Release 8.11 10-Dec-2010
+------------------------
+
+A number of bugs in the library and in pcregrep have been fixed. As always, see
+ChangeLog for details. The following are the non-bug-fix changes:
+
+. Added --match-limit and --recursion-limit to pcregrep.
+
+. Added an optional parentheses number to the -o and --only-matching options
+  of pcregrep.
+
+. Changed the way PCRE_PARTIAL_HARD affects the matching of $, \z, \Z, \b, and
+  \B.
+
+. Added PCRE_ERROR_SHORTUTF8 to make it possible to distinguish between a
+  bad UTF-8 sequence and one that is incomplete when using PCRE_PARTIAL_HARD.
+
+. Recognize (*NO_START_OPT) at the start of a pattern to set the PCRE_NO_
+  START_OPTIMIZE option, which is now allowed at compile time
+
+
 Release 8.10 25-Jun-2010
 ------------------------
 
diff --git a/ext/pcre/pcrelib/config.h b/ext/pcre/pcrelib/config.h
index 43bfa44..b7e02b3 100644
--- a/ext/pcre/pcrelib/config.h
+++ b/ext/pcre/pcrelib/config.h
@@ -23,6 +23,7 @@
 # define PCRE_EXP_DATA_DEFN	__attribute__ ((visibility("default")))
 #endif
 
+
 /* Exclude these below definitions when building within PHP */
 #ifndef ZEND_API
 
@@ -281,7 +282,7 @@ them both to 0; an emulation function will be used. */
 #define PACKAGE_NAME "PCRE"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "PCRE 8.10"
+#define PACKAGE_STRING "PCRE 8.11"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "pcre"
@@ -290,7 +291,7 @@ them both to 0; an emulation function will be used. */
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "8.10"
+#define PACKAGE_VERSION "8.11"
 
 
 /* If you are compiling for a system other than a Unix-like system or
@@ -346,7 +347,7 @@ them both to 0; an emulation function will be used. */
 
 /* Version number of package */
 #ifndef VERSION
-#define VERSION "8.10"
+#define VERSION "8.11"
 #endif
 
 /* Define to empty if `const' does not conform to ANSI C. */
diff --git a/ext/pcre/pcrelib/doc/pcre.txt b/ext/pcre/pcrelib/doc/pcre.txt
index 5f65871..5d769df 100644
--- a/ext/pcre/pcrelib/doc/pcre.txt
+++ b/ext/pcre/pcrelib/doc/pcre.txt
@@ -26,8 +26,8 @@ INTRODUCTION
        give better JavaScript compatibility.
 
        The  current implementation of PCRE corresponds approximately with Perl
-       5.10/5.11, including support for UTF-8 encoded strings and Unicode gen-
-       eral  category properties. However, UTF-8 and Unicode support has to be
+       5.12, including support for UTF-8 encoded strings and  Unicode  general
+       category  properties.  However,  UTF-8  and  Unicode  support has to be
        explicitly enabled; it is not the default. The  Unicode  tables  corre-
        spond to Unicode release 5.2.0.
 
@@ -226,32 +226,31 @@ UTF-8 AND UNICODE PROPERTY SUPPORT
        PCRE  recognizes  as digits, spaces, or word characters remain the same
        set as before, all with values less than 256. This  remains  true  even
        when  PCRE  is built to include Unicode property support, because to do
-       otherwise would slow down PCRE in many common  cases.  Note  that  this
-       also applies to \b, because it is defined in terms of \w and \W. If you
-       really want to test for a wider sense of, say,  "digit",  you  can  use
-       explicit  Unicode property tests such as \p{Nd}.  Alternatively, if you
-       set the PCRE_UCP option, the way that the  character  escapes  work  is
-       changed  so that Unicode properties are used to determine which charac-
-       ters match. There are more details in the section on generic  character
-       types in the pcrepattern documentation.
+       otherwise would slow down PCRE in many common cases. Note in particular
+       that this applies to \b and \B, because they are defined in terms of \w
+       and \W. If you really want to test for a wider sense of, say,  "digit",
+       you  can  use  explicit Unicode property tests such as \p{Nd}. Alterna-
+       tively, if you set the PCRE_UCP option,  the  way  that  the  character
+       escapes  work  is changed so that Unicode properties are used to deter-
+       mine which characters match. There are more details in the  section  on
+       generic character types in the pcrepattern documentation.
 
        7.  Similarly,  characters that match the POSIX named character classes
        are all low-valued characters, unless the PCRE_UCP option is set.
 
-       8. However, the Perl 5.10 horizontal and vertical  whitespace  matching
-       escapes (\h, \H, \v, and \V) do match all the appropriate Unicode char-
-       acters, whether or not PCRE_UCP is set.
+       8. However, the horizontal and  vertical  whitespace  matching  escapes
+       (\h,  \H,  \v, and \V) do match all the appropriate Unicode characters,
+       whether or not PCRE_UCP is set.
 
        9. Case-insensitive matching applies only to  characters  whose  values
        are  less than 128, unless PCRE is built with Unicode property support.
        Even when Unicode property support is available, PCRE  still  uses  its
        own  character  tables when checking the case of low-valued characters,
        so as not to degrade performance.  The Unicode property information  is
-       used only for characters with higher values. Even when Unicode property
-       support is available, PCRE supports case-insensitive matching only when
-       there  is  a  one-to-one  mapping between a letter's cases. There are a
-       small number of many-to-one mappings in Unicode;  these  are  not  sup-
-       ported by PCRE.
+       used only for characters with higher values. Furthermore, PCRE supports
+       case-insensitive matching only  when  there  is  a  one-to-one  mapping
+       between  a letter's cases. There are a small number of many-to-one map-
+       pings in Unicode; these are not supported by PCRE.
 
 
 AUTHOR
@@ -260,14 +259,14 @@ AUTHOR
        University Computing Service
        Cambridge CB2 3QH, England.
 
-       Putting  an actual email address here seems to have been a spam magnet,
-       so I've taken it away. If you want to email me, use  my  two  initials,
+       Putting an actual email address here seems to have been a spam  magnet,
+       so  I've  taken  it away. If you want to email me, use my two initials,
        followed by the two digits 10, at the domain cam.ac.uk.
 
 
 REVISION
 
-       Last updated: 12 May 2010
+       Last updated: 13 November 2010
        Copyright (c) 1997-2010 University of Cambridge.
 ------------------------------------------------------------------------------
 
@@ -697,82 +696,86 @@ THE ALTERNATIVE MATCHING ALGORITHM
        represent the different matching possibilities (if there are none,  the
        match  has  failed).   Thus,  if there is more than one possible match,
        this algorithm finds all of them, and in particular, it finds the long-
-       est.  There  is  an  option to stop the algorithm after the first match
-       (which is necessarily the shortest) is found.
+       est.  The  matches are returned in decreasing order of length. There is
+       an option to stop the algorithm after the first match (which is  neces-
+       sarily the shortest) is found.
 
        Note that all the matches that are found start at the same point in the
        subject. If the pattern
 
-         cat(er(pillar)?)
+         cat(er(pillar)?)?
 
-       is  matched  against the string "the caterpillar catchment", the result
-       will be the three strings "cat", "cater", and "caterpillar" that  start
-       at the fourth character of the subject. The algorithm does not automat-
-       ically move on to find matches that start at later positions.
+       is matched against the string "the caterpillar catchment",  the  result
+       will  be the three strings "caterpillar", "cater", and "cat" that start
+       at the fifth character of the subject. The algorithm does not automati-
+       cally move on to find matches that start at later positions.
 
        There are a number of features of PCRE regular expressions that are not
        supported by the alternative matching algorithm. They are as follows:
 
-       1.  Because  the  algorithm  finds  all possible matches, the greedy or
-       ungreedy nature of repetition quantifiers is not relevant.  Greedy  and
+       1. Because the algorithm finds all  possible  matches,  the  greedy  or
+       ungreedy  nature  of repetition quantifiers is not relevant. Greedy and
        ungreedy quantifiers are treated in exactly the same way. However, pos-
-       sessive quantifiers can make a difference when what follows could  also
+       sessive  quantifiers can make a difference when what follows could also
        match what is quantified, for example in a pattern like this:
 
          ^a++\w!
 
-       This  pattern matches "aaab!" but not "aaa!", which would be matched by
-       a non-possessive quantifier. Similarly, if an atomic group is  present,
-       it  is matched as if it were a standalone pattern at the current point,
-       and the longest match is then "locked in" for the rest of  the  overall
+       This pattern matches "aaab!" but not "aaa!", which would be matched  by
+       a  non-possessive quantifier. Similarly, if an atomic group is present,
+       it is matched as if it were a standalone pattern at the current  point,
+       and  the  longest match is then "locked in" for the rest of the overall
        pattern.
 
        2. When dealing with multiple paths through the tree simultaneously, it
-       is not straightforward to keep track of  captured  substrings  for  the
-       different  matching  possibilities,  and  PCRE's implementation of this
+       is  not  straightforward  to  keep track of captured substrings for the
+       different matching possibilities, and  PCRE's  implementation  of  this
        algorithm does not attempt to do this. This means that no captured sub-
        strings are available.
 
-       3.  Because no substrings are captured, back references within the pat-
+       3. Because no substrings are captured, back references within the  pat-
        tern are not supported, and cause errors if encountered.
 
-       4. For the same reason, conditional expressions that use  a  backrefer-
-       ence  as  the  condition or test for a specific group recursion are not
+       4.  For  the same reason, conditional expressions that use a backrefer-
+       ence as the condition or test for a specific group  recursion  are  not
        supported.
 
-       5. Because many paths through the tree may be  active,  the  \K  escape
+       5.  Because  many  paths  through the tree may be active, the \K escape
        sequence, which resets the start of the match when encountered (but may
-       be on some paths and not on others), is not  supported.  It  causes  an
+       be  on  some  paths  and not on others), is not supported. It causes an
        error if encountered.
 
-       6.  Callouts  are  supported, but the value of the capture_top field is
+       6. Callouts are supported, but the value of the  capture_top  field  is
        always 1, and the value of the capture_last field is always -1.
 
-       7. The \C escape sequence, which (in the standard algorithm) matches  a
-       single  byte, even in UTF-8 mode, is not supported because the alterna-
-       tive algorithm moves through the subject  string  one  character  at  a
+       7.  The \C escape sequence, which (in the standard algorithm) matches a
+       single byte, even in UTF-8 mode, is not supported because the  alterna-
+       tive  algorithm  moves  through  the  subject string one character at a
        time, for all active paths through the tree.
 
-       8.  Except for (*FAIL), the backtracking control verbs such as (*PRUNE)
-       are not supported. (*FAIL) is supported, and  behaves  like  a  failing
+       8. Except for (*FAIL), the backtracking control verbs such as  (*PRUNE)
+       are  not  supported.  (*FAIL)  is supported, and behaves like a failing
        negative assertion.
 
 
 ADVANTAGES OF THE ALTERNATIVE ALGORITHM
 
-       Using  the alternative matching algorithm provides the following advan-
+       Using the alternative matching algorithm provides the following  advan-
        tages:
 
        1. All possible matches (at a single point in the subject) are automat-
-       ically  found,  and  in particular, the longest match is found. To find
+       ically found, and in particular, the longest match is  found.  To  find
        more than one match using the standard algorithm, you have to do kludgy
        things with callouts.
 
-       2.  Because  the  alternative  algorithm  scans the subject string just
-       once, and never needs to backtrack, it is possible to  pass  very  long
-       subject  strings  to  the matching function in several pieces, checking
-       for partial matching each time.  The  pcrepartial  documentation  gives
-       details of partial matching.
+       2. Because the alternative algorithm  scans  the  subject  string  just
+       once,  and  never  needs to backtrack, it is possible to pass very long
+       subject strings to the matching function in  several  pieces,  checking
+       for  partial  matching  each time. Although it is possible to do multi-
+       segment matching using the standard algorithm (pcre_exec()), by retain-
+       ing  partially matched substrings, it is more complicated. The pcrepar-
+       tial documentation gives details  of  partial  matching  and  discusses
+       multi-segment matching.
 
 
 DISADVANTAGES OF THE ALTERNATIVE ALGORITHM
@@ -798,8 +801,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 29 September 2009
-       Copyright (c) 1997-2009 University of Cambridge.
+       Last updated: 17 November 2010
+       Copyright (c) 1997-2010 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -1162,34 +1165,39 @@ COMPILING A PATTERN
        pcrepattern documentation). For those options that can be different  in
        different  parts  of  the pattern, the contents of the options argument
        specifies their settings at the start of compilation and execution. The
-       PCRE_ANCHORED, PCRE_BSR_xxx, and PCRE_NEWLINE_xxx options can be set at
-       the time of matching as well as at compile time.
+       PCRE_ANCHORED,  PCRE_BSR_xxx, PCRE_NEWLINE_xxx, PCRE_NO_UTF8_CHECK, and
+       PCRE_NO_START_OPT options can be set at the time of matching as well as
+       at compile time.
 
        If errptr is NULL, pcre_compile() returns NULL immediately.  Otherwise,
-       if  compilation  of  a  pattern fails, pcre_compile() returns NULL, and
+       if compilation of a pattern fails,  pcre_compile()  returns  NULL,  and
        sets the variable pointed to by errptr to point to a textual error mes-
        sage. This is a static string that is part of the library. You must not
-       try to free it. The byte offset from the start of the  pattern  to  the
-       character  that  was  being  processed when the error was discovered is
-       placed in the variable pointed to by erroffset, which must not be NULL.
-       If  it  is,  an  immediate error is given. Some errors are not detected
-       until checks are carried out when the whole pattern has  been  scanned;
-       in this case the offset is set to the end of the pattern.
-
-       If  pcre_compile2()  is  used instead of pcre_compile(), and the error-
-       codeptr argument is not NULL, a non-zero error code number is  returned
-       via  this argument in the event of an error. This is in addition to the
+       try  to  free  it. The offset from the start of the pattern to the byte
+       that was being processed when the error was discovered is placed in the
+       variable  pointed to by erroffset, which must not be NULL. If it is, an
+       immediate error is given. Some errors are not detected until checks are
+       carried  out  when the whole pattern has been scanned; in this case the
+       offset is set to the end of the pattern.
+
+       Note that the offset is in bytes, not characters, even in  UTF-8  mode.
+       It  may  point  into the middle of a UTF-8 character (for example, when
+       PCRE_ERROR_BADUTF8 is returned for an invalid UTF-8 string).
+
+       If pcre_compile2() is used instead of pcre_compile(),  and  the  error-
+       codeptr  argument is not NULL, a non-zero error code number is returned
+       via this argument in the event of an error. This is in addition to  the
        textual error message. Error codes and messages are listed below.
 
-       If the final argument, tableptr, is NULL, PCRE uses a  default  set  of
-       character  tables  that  are  built  when  PCRE  is compiled, using the
-       default C locale. Otherwise, tableptr must be an address  that  is  the
-       result  of  a  call to pcre_maketables(). This value is stored with the
-       compiled pattern, and used again by pcre_exec(), unless  another  table
+       If  the  final  argument, tableptr, is NULL, PCRE uses a default set of
+       character tables that are  built  when  PCRE  is  compiled,  using  the
+       default  C  locale.  Otherwise, tableptr must be an address that is the
+       result of a call to pcre_maketables(). This value is  stored  with  the
+       compiled  pattern,  and used again by pcre_exec(), unless another table
        pointer is passed to it. For more discussion, see the section on locale
        support below.
 
-       This code fragment shows a typical straightforward  call  to  pcre_com-
+       This  code  fragment  shows a typical straightforward call to pcre_com-
        pile():
 
          pcre *re;
@@ -1202,86 +1210,95 @@ COMPILING A PATTERN
            &erroffset,       /* for error offset */
            NULL);            /* use default character tables */
 
-       The  following  names  for option bits are defined in the pcre.h header
+       The following names for option bits are defined in  the  pcre.h  header
        file:
 
          PCRE_ANCHORED
 
        If this bit is set, the pattern is forced to be "anchored", that is, it
-       is  constrained to match only at the first matching point in the string
-       that is being searched (the "subject string"). This effect can also  be
-       achieved  by appropriate constructs in the pattern itself, which is the
+       is constrained to match only at the first matching point in the  string
+       that  is being searched (the "subject string"). This effect can also be
+       achieved by appropriate constructs in the pattern itself, which is  the
        only way to do it in Perl.
 
          PCRE_AUTO_CALLOUT
 
        If this bit is set, pcre_compile() automatically inserts callout items,
-       all  with  number  255, before each pattern item. For discussion of the
+       all with number 255, before each pattern item. For  discussion  of  the
        callout facility, see the pcrecallout documentation.
 
          PCRE_BSR_ANYCRLF
          PCRE_BSR_UNICODE
 
        These options (which are mutually exclusive) control what the \R escape
-       sequence  matches.  The choice is either to match only CR, LF, or CRLF,
+       sequence matches. The choice is either to match only CR, LF,  or  CRLF,
        or to match any Unicode newline sequence. The default is specified when
        PCRE is built. It can be overridden from within the pattern, or by set-
        ting an option when a compiled pattern is matched.
 
          PCRE_CASELESS
 
-       If this bit is set, letters in the pattern match both upper  and  lower
-       case  letters.  It  is  equivalent  to  Perl's /i option, and it can be
-       changed within a pattern by a (?i) option setting. In UTF-8 mode,  PCRE
-       always  understands the concept of case for characters whose values are
-       less than 128, so caseless matching is always possible. For  characters
-       with  higher  values,  the concept of case is supported if PCRE is com-
-       piled with Unicode property support, but not otherwise. If you want  to
-       use  caseless  matching  for  characters 128 and above, you must ensure
-       that PCRE is compiled with Unicode property support  as  well  as  with
+       If  this  bit is set, letters in the pattern match both upper and lower
+       case letters. It is equivalent to Perl's  /i  option,  and  it  can  be
+       changed  within a pattern by a (?i) option setting. In UTF-8 mode, PCRE
+       always understands the concept of case for characters whose values  are
+       less  than 128, so caseless matching is always possible. For characters
+       with higher values, the concept of case is supported if  PCRE  is  com-
+       piled  with Unicode property support, but not otherwise. If you want to
+       use caseless matching for characters 128 and  above,  you  must  ensure
+       that  PCRE  is  compiled  with Unicode property support as well as with
        UTF-8 support.
 
          PCRE_DOLLAR_ENDONLY
 
-       If  this bit is set, a dollar metacharacter in the pattern matches only
-       at the end of the subject string. Without this option,  a  dollar  also
-       matches  immediately before a newline at the end of the string (but not
-       before any other newlines). The PCRE_DOLLAR_ENDONLY option  is  ignored
-       if  PCRE_MULTILINE  is  set.   There is no equivalent to this option in
+       If this bit is set, a dollar metacharacter in the pattern matches  only
+       at  the  end  of the subject string. Without this option, a dollar also
+       matches immediately before a newline at the end of the string (but  not
+       before  any  other newlines). The PCRE_DOLLAR_ENDONLY option is ignored
+       if PCRE_MULTILINE is set.  There is no equivalent  to  this  option  in
        Perl, and no way to set it within a pattern.
 
          PCRE_DOTALL
 
-       If this bit is set, a dot metacharater in the pattern matches all char-
-       acters,  including  those that indicate newline. Without it, a dot does
-       not match when the current position is at a  newline.  This  option  is
-       equivalent  to Perl's /s option, and it can be changed within a pattern
-       by a (?s) option setting. A negative class such as [^a] always  matches
-       newline characters, independent of the setting of this option.
+       If  this bit is set, a dot metacharacter in the pattern matches a char-
+       acter of any value, including one that indicates a newline. However, it
+       only  ever  matches  one character, even if newlines are coded as CRLF.
+       Without this option, a dot does not match when the current position  is
+       at a newline. This option is equivalent to Perl's /s option, and it can
+       be changed within a pattern by a (?s) option setting. A negative  class
+       such as [^a] always matches newline characters, independent of the set-
+       ting of this option.
 
          PCRE_DUPNAMES
 
-       If  this  bit is set, names used to identify capturing subpatterns need
+       If this bit is set, names used to identify capturing  subpatterns  need
        not be unique. This can be helpful for certain types of pattern when it
-       is  known  that  only  one instance of the named subpattern can ever be
-       matched. There are more details of named subpatterns  below;  see  also
+       is known that only one instance of the named  subpattern  can  ever  be
+       matched.  There  are  more details of named subpatterns below; see also
        the pcrepattern documentation.
 
          PCRE_EXTENDED
 
-       If  this  bit  is  set,  whitespace  data characters in the pattern are
+       If this bit is set, whitespace  data  characters  in  the  pattern  are
        totally ignored except when escaped or inside a character class. White-
        space does not include the VT character (code 11). In addition, charac-
        ters between an unescaped # outside a character class and the next new-
-       line,  inclusive,  are  also  ignored.  This is equivalent to Perl's /x
-       option, and it can be changed within a pattern by a  (?x)  option  set-
+       line, inclusive, are also ignored. This  is  equivalent  to  Perl's  /x
+       option,  and  it  can be changed within a pattern by a (?x) option set-
        ting.
 
+       Which characters are interpreted  as  newlines  is  controlled  by  the
+       options  passed to pcre_compile() or by a special sequence at the start
+       of the pattern, as described in the section entitled  "Newline  conven-
+       tions" in the pcrepattern documentation. Note that the end of this type
+       of comment is  a  literal  newline  sequence  in  the  pattern;  escape
+       sequences that happen to represent a newline do not count.
+
        This  option  makes  it possible to include comments inside complicated
        patterns.  Note, however, that this applies only  to  data  characters.
        Whitespace   characters  may  never  appear  within  special  character
-       sequences in a pattern, for  example  within  the  sequence  (?(  which
-       introduces a conditional subpattern.
+       sequences in a pattern, for example within the sequence (?( that intro-
+       duces a conditional subpattern.
 
          PCRE_EXTRA
 
@@ -1363,13 +1380,12 @@ COMPILING A PATTERN
        PCRE_NEWLINE_CRLF, but other combinations may yield unused numbers  and
        cause an error.
 
-       The  only time that a line break is specially recognized when compiling
-       a pattern is if PCRE_EXTENDED is set, and  an  unescaped  #  outside  a
-       character  class  is  encountered.  This indicates a comment that lasts
-       until after the next line break sequence. In other circumstances,  line
-       break   sequences   are   treated  as  literal  data,  except  that  in
-       PCRE_EXTENDED mode, both CR and LF are treated as whitespace characters
-       and are therefore ignored.
+       The  only  time  that a line break in a pattern is specially recognized
+       when compiling is when PCRE_EXTENDED is set. CR and LF  are  whitespace
+       characters,  and so are ignored in this mode. Also, an unescaped # out-
+       side a character class indicates a comment that lasts until  after  the
+       next  line break sequence. In other circumstances, line break sequences
+       in patterns are treated as literal data.
 
        The newline option that is set at compile time becomes the default that
        is used for pcre_exec() and pcre_dfa_exec(), but it can be overridden.
@@ -1377,20 +1393,29 @@ COMPILING A PATTERN
          PCRE_NO_AUTO_CAPTURE
 
        If this option is set, it disables the use of numbered capturing paren-
-       theses  in the pattern. Any opening parenthesis that is not followed by
-       ? behaves as if it were followed by ?: but named parentheses can  still
-       be  used  for  capturing  (and  they acquire numbers in the usual way).
+       theses in the pattern. Any opening parenthesis that is not followed  by
+       ?  behaves as if it were followed by ?: but named parentheses can still
+       be used for capturing (and they acquire  numbers  in  the  usual  way).
        There is no equivalent of this option in Perl.
 
+         NO_START_OPTIMIZE
+
+       This  is an option that acts at matching time; that is, it is really an
+       option for pcre_exec() or pcre_dfa_exec(). If  it  is  set  at  compile
+       time,  it is remembered with the compiled pattern and assumed at match-
+       ing time. For details  see  the  discussion  of  PCRE_NO_START_OPTIMIZE
+       below.
+
          PCRE_UCP
 
-       This option changes the way PCRE processes \b, \d, \s, \w, and some  of
-       the POSIX character classes. By default, only ASCII characters are rec-
-       ognized, but if PCRE_UCP is set, Unicode properties are used instead to
-       classify  characters.  More details are given in the section on generic
-       character types in the pcrepattern page. If you set PCRE_UCP,  matching
-       one  of the items it affects takes much longer. The option is available
-       only if PCRE has been compiled with Unicode property support.
+       This  option changes the way PCRE processes \B, \b, \D, \d, \S, \s, \W,
+       \w, and some of the POSIX character classes.  By  default,  only  ASCII
+       characters  are  recognized, but if PCRE_UCP is set, Unicode properties
+       are used instead to classify characters. More details are given in  the
+       section  on generic character types in the pcrepattern page. If you set
+       PCRE_UCP, matching one of the items it affects takes much  longer.  The
+       option  is  available only if PCRE has been compiled with Unicode prop-
+       erty support.
 
          PCRE_UNGREEDY
 
@@ -1562,9 +1587,9 @@ STUDYING A PATTERN
        The two optimizations just described can be  disabled  by  setting  the
        PCRE_NO_START_OPTIMIZE    option    when    calling    pcre_exec()   or
        pcre_dfa_exec(). You might want to do this  if  your  pattern  contains
-       callouts,  or  make  use of (*MARK), and you make use of these in cases
-       where matching fails.  See  the  discussion  of  PCRE_NO_START_OPTIMIZE
-       below.
+       callouts  or  (*MARK),  and you want to make use of these facilities in
+       cases where matching fails. See the discussion  of  PCRE_NO_START_OPTI-
+       MIZE below.
 
 
 LOCALE SUPPORT
@@ -2123,28 +2148,34 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
        set  with  PCRE_NOTEMPTY_ATSTART  and  PCRE_ANCHORED,  and then if that
        fails, by advancing the starting offset (see below) and trying an ordi-
        nary  match  again. There is some code that demonstrates how to do this
-       in the pcredemo sample program.
+       in the pcredemo sample program. In the most general case, you  have  to
+       check  to  see  if the newline convention recognizes CRLF as a newline,
+       and if so, and the current character is CR followed by LF, advance  the
+       starting offset by two characters instead of one.
 
          PCRE_NO_START_OPTIMIZE
 
-       There are a number of optimizations that pcre_exec() uses at the  start
-       of  a  match,  in  order to speed up the process. For example, if it is
+       There  are a number of optimizations that pcre_exec() uses at the start
+       of a match, in order to speed up the process. For  example,  if  it  is
        known that an unanchored match must start with a specific character, it
-       searches  the  subject  for that character, and fails immediately if it
-       cannot find it, without actually running the  main  matching  function.
+       searches the subject for that character, and fails  immediately  if  it
+       cannot  find  it,  without actually running the main matching function.
        This means that a special item such as (*COMMIT) at the start of a pat-
-       tern is not considered until after a suitable starting  point  for  the
-       match  has been found. When callouts or (*MARK) items are in use, these
+       tern  is  not  considered until after a suitable starting point for the
+       match has been found. When callouts or (*MARK) items are in use,  these
        "start-up" optimizations can cause them to be skipped if the pattern is
-       never  actually  used.  The start-up optimizations are in effect a pre-
+       never actually used. The start-up optimizations are in  effect  a  pre-
        scan of the subject that takes place before the pattern is run.
 
-       The PCRE_NO_START_OPTIMIZE option disables the start-up  optimizations,
-       possibly  causing  performance  to  suffer,  but ensuring that in cases
-       where the result is "no match", the callouts do occur, and  that  items
+       The  PCRE_NO_START_OPTIMIZE option disables the start-up optimizations,
+       possibly causing performance to suffer,  but  ensuring  that  in  cases
+       where  the  result is "no match", the callouts do occur, and that items
        such as (*COMMIT) and (*MARK) are considered at every possible starting
-       position in the subject  string.   Setting  PCRE_NO_START_OPTIMIZE  can
-       change the outcome of a matching operation.  Consider the pattern
+       position  in  the  subject  string. If PCRE_NO_START_OPTIMIZE is set at
+       compile time, it cannot be unset at matching time.
+
+       Setting PCRE_NO_START_OPTIMIZE can change the  outcome  of  a  matching
+       operation.  Consider the pattern
 
          (*COMMIT)ABC
 
@@ -2179,64 +2210,90 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
        points  to  the start of a UTF-8 character. There is a discussion about
        the validity of UTF-8 strings in the section on UTF-8  support  in  the
        main  pcre  page.  If  an  invalid  UTF-8  sequence  of bytes is found,
-       pcre_exec() returns the error PCRE_ERROR_BADUTF8. If  startoffset  con-
-       tains an invalid value, PCRE_ERROR_BADUTF8_OFFSET is returned.
-
-       If  you  already  know that your subject is valid, and you want to skip
-       these   checks   for   performance   reasons,   you   can    set    the
-       PCRE_NO_UTF8_CHECK  option  when calling pcre_exec(). You might want to
-       do this for the second and subsequent calls to pcre_exec() if  you  are
-       making  repeated  calls  to  find  all  the matches in a single subject
-       string. However, you should be  sure  that  the  value  of  startoffset
-       points  to  the  start of a UTF-8 character. When PCRE_NO_UTF8_CHECK is
-       set, the effect of passing an invalid UTF-8 string as a subject,  or  a
-       value  of startoffset that does not point to the start of a UTF-8 char-
-       acter, is undefined. Your program may crash.
+       pcre_exec() returns  the  error  PCRE_ERROR_BADUTF8  or,  if  PCRE_PAR-
+       TIAL_HARD  is set and the problem is a truncated UTF-8 character at the
+       end of the subject, PCRE_ERROR_SHORTUTF8.  If  startoffset  contains  a
+       value  that does not point to the start of a UTF-8 character (or to the
+       end of the subject), PCRE_ERROR_BADUTF8_OFFSET is returned.
+
+       If you already know that your subject is valid, and you  want  to  skip
+       these    checks    for   performance   reasons,   you   can   set   the
+       PCRE_NO_UTF8_CHECK option when calling pcre_exec(). You might  want  to
+       do  this  for the second and subsequent calls to pcre_exec() if you are
+       making repeated calls to find all  the  matches  in  a  single  subject
+       string.  However,  you  should  be  sure  that the value of startoffset
+       points to the start of a UTF-8 character (or the end of  the  subject).
+       When  PCRE_NO_UTF8_CHECK is set, the effect of passing an invalid UTF-8
+       string as a subject or an invalid value of  startoffset  is  undefined.
+       Your program may crash.
 
          PCRE_PARTIAL_HARD
          PCRE_PARTIAL_SOFT
 
-       These options turn on the partial matching feature. For backwards  com-
-       patibility,  PCRE_PARTIAL is a synonym for PCRE_PARTIAL_SOFT. A partial
-       match occurs if the end of the subject string is reached  successfully,
-       but  there  are not enough subject characters to complete the match. If
-       this happens when PCRE_PARTIAL_HARD  is  set,  pcre_exec()  immediately
-       returns  PCRE_ERROR_PARTIAL.  Otherwise,  if  PCRE_PARTIAL_SOFT is set,
-       matching continues by testing any other alternatives. Only if they  all
-       fail  is  PCRE_ERROR_PARTIAL  returned (instead of PCRE_ERROR_NOMATCH).
-       The portion of the string that was inspected when the partial match was
-       found  is  set  as  the first matching string. There is a more detailed
-       discussion in the pcrepartial documentation.
+       These  options turn on the partial matching feature. For backwards com-
+       patibility, PCRE_PARTIAL is a synonym for PCRE_PARTIAL_SOFT. A  partial
+       match  occurs if the end of the subject string is reached successfully,
+       but there are not enough subject characters to complete the  match.  If
+       this happens when PCRE_PARTIAL_SOFT (but not PCRE_PARTIAL_HARD) is set,
+       matching continues by testing any remaining alternatives.  Only  if  no
+       complete  match  can be found is PCRE_ERROR_PARTIAL returned instead of
+       PCRE_ERROR_NOMATCH. In other words,  PCRE_PARTIAL_SOFT  says  that  the
+       caller  is  prepared to handle a partial match, but only if no complete
+       match can be found.
+
+       If PCRE_PARTIAL_HARD is set, it overrides  PCRE_PARTIAL_SOFT.  In  this
+       case,  if  a  partial  match  is found, pcre_exec() immediately returns
+       PCRE_ERROR_PARTIAL, without  considering  any  other  alternatives.  In
+       other  words, when PCRE_PARTIAL_HARD is set, a partial match is consid-
+       ered to be more important that an alternative complete match.
+
+       In both cases, the portion of the string that was  inspected  when  the
+       partial match was found is set as the first matching string. There is a
+       more detailed discussion of partial and  multi-segment  matching,  with
+       examples, in the pcrepartial documentation.
 
    The string to be matched by pcre_exec()
 
-       The subject string is passed to pcre_exec() as a pointer in subject,  a
+       The  subject string is passed to pcre_exec() as a pointer in subject, a
        length (in bytes) in length, and a starting byte offset in startoffset.
-       In UTF-8 mode, the byte offset must point to the start of a UTF-8 char-
-       acter.  Unlike  the pattern string, the subject may contain binary zero
-       bytes. When the starting offset is zero, the search for a match  starts
-       at  the  beginning  of  the subject, and this is by far the most common
-       case.
-
-       A non-zero starting offset is useful when searching for  another  match
-       in  the same subject by calling pcre_exec() again after a previous suc-
-       cess.  Setting startoffset differs from just passing over  a  shortened
-       string  and  setting  PCRE_NOTBOL  in the case of a pattern that begins
+       If  this  is  negative  or  greater  than  the  length  of the subject,
+       pcre_exec() returns PCRE_ERROR_BADOFFSET. When the starting  offset  is
+       zero,  the  search  for a match starts at the beginning of the subject,
+       and this is by far the most common case. In UTF-8 mode, the byte offset
+       must  point  to  the start of a UTF-8 character (or the end of the sub-
+       ject). Unlike the pattern string, the subject may contain  binary  zero
+       bytes.
+
+       A  non-zero  starting offset is useful when searching for another match
+       in the same subject by calling pcre_exec() again after a previous  suc-
+       cess.   Setting  startoffset differs from just passing over a shortened
+       string and setting PCRE_NOTBOL in the case of  a  pattern  that  begins
        with any kind of lookbehind. For example, consider the pattern
 
          \Biss\B
 
-       which finds occurrences of "iss" in the middle of  words.  (\B  matches
-       only  if  the  current position in the subject is not a word boundary.)
-       When applied to the string "Mississipi" the first call  to  pcre_exec()
-       finds  the  first  occurrence. If pcre_exec() is called again with just
-       the remainder of the subject,  namely  "issipi",  it  does  not  match,
+       which  finds  occurrences  of "iss" in the middle of words. (\B matches
+       only if the current position in the subject is not  a  word  boundary.)
+       When  applied  to the string "Mississipi" the first call to pcre_exec()
+       finds the first occurrence. If pcre_exec() is called  again  with  just
+       the  remainder  of  the  subject,  namely  "issipi", it does not match,
        because \B is always false at the start of the subject, which is deemed
-       to be a word boundary. However, if pcre_exec()  is  passed  the  entire
+       to  be  a  word  boundary. However, if pcre_exec() is passed the entire
        string again, but with startoffset set to 4, it finds the second occur-
-       rence of "iss" because it is able to look behind the starting point  to
+       rence  of "iss" because it is able to look behind the starting point to
        discover that it is preceded by a letter.
 
+       Finding all the matches in a subject is tricky  when  the  pattern  can
+       match an empty string. It is possible to emulate Perl's /g behaviour by
+       first  trying  the  match  again  at  the   same   offset,   with   the
+       PCRE_NOTEMPTY_ATSTART  and  PCRE_ANCHORED  options,  and  then  if that
+       fails, advancing the starting  offset  and  trying  an  ordinary  match
+       again. There is some code that demonstrates how to do this in the pcre-
+       demo sample program. In the most general case, you have to check to see
+       if  the newline convention recognizes CRLF as a newline, and if so, and
+       the current character is CR followed by LF, advance the starting offset
+       by two characters instead of one.
+
        If  a  non-zero starting offset is passed when the pattern is anchored,
        one attempt to match at the given offset is made. This can only succeed
        if  the  pattern  does  not require the match to be at the start of the
@@ -2309,9 +2366,15 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
        expression are also set to -1. For example,  if  the  string  "abc"  is
        matched  against the pattern (abc)(x(yz)?)? subpatterns 2 and 3 are not
        matched. The return from the function is 2, because  the  highest  used
-       capturing subpattern number is 1. However, you can refer to the offsets
-       for the second and third capturing subpatterns if  you  wish  (assuming
-       the vector is large enough, of course).
+       capturing  subpattern  number  is 1, and the offsets for for the second
+       and third capturing subpatterns (assuming the vector is  large  enough,
+       of course) are set to -1.
+
+       Note: Elements of ovector that do not correspond to capturing parenthe-
+       ses in the pattern are never changed. That is, if a pattern contains  n
+       capturing parentheses, no more than ovector[0] to ovector[2n+1] are set
+       by pcre_exec(). The other elements retain whatever values  they  previ-
+       ously had.
 
        Some  convenience  functions  are  provided for extracting the captured
        substrings as separate strings. These are described below.
@@ -2381,13 +2444,15 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
          PCRE_ERROR_BADUTF8        (-10)
 
        A string that contains an invalid UTF-8 byte sequence was passed  as  a
-       subject.
+       subject.   However,  if  PCRE_PARTIAL_HARD  is set and the problem is a
+       truncated UTF-8 character at the end of the subject,  PCRE_ERROR_SHORT-
+       UTF8 is used instead.
 
          PCRE_ERROR_BADUTF8_OFFSET (-11)
 
        The UTF-8 byte sequence that was passed as a subject was valid, but the
        value of startoffset did not point to the beginning of a UTF-8  charac-
-       ter.
+       ter or the end of the subject.
 
          PCRE_ERROR_PARTIAL        (-12)
 
@@ -2420,6 +2485,17 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
 
        An invalid combination of PCRE_NEWLINE_xxx options was given.
 
+         PCRE_ERROR_BADOFFSET      (-24)
+
+       The value of startoffset was negative or greater than the length of the
+       subject, that is, the value in length.
+
+         PCRE_ERROR_SHORTUTF8      (-25)
+
+       The  subject  string ended with an incomplete (truncated) UTF-8 charac-
+       ter, and the PCRE_PARTIAL_HARD option was  set.  Without  this  option,
+       PCRE_ERROR_BADUTF8 is returned in this situation.
+
        Error numbers -16 to -20 and -22 are not used by pcre_exec().
 
 
@@ -2436,78 +2512,78 @@ EXTRACTING CAPTURED SUBSTRINGS BY NUMBER
        int pcre_get_substring_list(const char *subject,
             int *ovector, int stringcount, const char ***listptr);
 
-       Captured substrings can be  accessed  directly  by  using  the  offsets
-       returned  by  pcre_exec()  in  ovector.  For convenience, the functions
+       Captured  substrings  can  be  accessed  directly  by using the offsets
+       returned by pcre_exec() in  ovector.  For  convenience,  the  functions
        pcre_copy_substring(),    pcre_get_substring(),    and    pcre_get_sub-
-       string_list()  are  provided for extracting captured substrings as new,
-       separate, zero-terminated strings. These functions identify  substrings
-       by  number.  The  next section describes functions for extracting named
+       string_list() are provided for extracting captured substrings  as  new,
+       separate,  zero-terminated strings. These functions identify substrings
+       by number. The next section describes functions  for  extracting  named
        substrings.
 
-       A substring that contains a binary zero is correctly extracted and  has
-       a  further zero added on the end, but the result is not, of course, a C
-       string.  However, you can process such a string  by  referring  to  the
-       length  that  is  returned  by  pcre_copy_substring() and pcre_get_sub-
+       A  substring that contains a binary zero is correctly extracted and has
+       a further zero added on the end, but the result is not, of course, a  C
+       string.   However,  you  can  process such a string by referring to the
+       length that is  returned  by  pcre_copy_substring()  and  pcre_get_sub-
        string().  Unfortunately, the interface to pcre_get_substring_list() is
-       not  adequate for handling strings containing binary zeros, because the
+       not adequate for handling strings containing binary zeros, because  the
        end of the final string is not independently indicated.
 
-       The first three arguments are the same for all  three  of  these  func-
-       tions:  subject  is  the subject string that has just been successfully
+       The  first  three  arguments  are the same for all three of these func-
+       tions: subject is the subject string that has  just  been  successfully
        matched, ovector is a pointer to the vector of integer offsets that was
        passed to pcre_exec(), and stringcount is the number of substrings that
-       were captured by the match, including the substring  that  matched  the
+       were  captured  by  the match, including the substring that matched the
        entire regular expression. This is the value returned by pcre_exec() if
-       it is greater than zero. If pcre_exec() returned zero, indicating  that
-       it  ran out of space in ovector, the value passed as stringcount should
+       it  is greater than zero. If pcre_exec() returned zero, indicating that
+       it ran out of space in ovector, the value passed as stringcount  should
        be the number of elements in the vector divided by three.
 
-       The functions pcre_copy_substring() and pcre_get_substring() extract  a
-       single  substring,  whose  number  is given as stringnumber. A value of
-       zero extracts the substring that matched the  entire  pattern,  whereas
-       higher  values  extract  the  captured  substrings.  For pcre_copy_sub-
-       string(), the string is placed in buffer,  whose  length  is  given  by
-       buffersize,  while  for  pcre_get_substring()  a new block of memory is
-       obtained via pcre_malloc, and its address is  returned  via  stringptr.
-       The  yield  of  the function is the length of the string, not including
+       The  functions pcre_copy_substring() and pcre_get_substring() extract a
+       single substring, whose number is given as  stringnumber.  A  value  of
+       zero  extracts  the  substring that matched the entire pattern, whereas
+       higher values  extract  the  captured  substrings.  For  pcre_copy_sub-
+       string(),  the  string  is  placed  in buffer, whose length is given by
+       buffersize, while for pcre_get_substring() a new  block  of  memory  is
+       obtained  via  pcre_malloc,  and its address is returned via stringptr.
+       The yield of the function is the length of the  string,  not  including
        the terminating zero, or one of these error codes:
 
          PCRE_ERROR_NOMEMORY       (-6)
 
-       The buffer was too small for pcre_copy_substring(), or the  attempt  to
+       The  buffer  was too small for pcre_copy_substring(), or the attempt to
        get memory failed for pcre_get_substring().
 
          PCRE_ERROR_NOSUBSTRING    (-7)
 
        There is no substring whose number is stringnumber.
 
-       The  pcre_get_substring_list()  function  extracts  all  available sub-
-       strings and builds a list of pointers to them. All this is  done  in  a
+       The pcre_get_substring_list()  function  extracts  all  available  sub-
+       strings  and  builds  a list of pointers to them. All this is done in a
        single block of memory that is obtained via pcre_malloc. The address of
-       the memory block is returned via listptr, which is also  the  start  of
-       the  list  of  string pointers. The end of the list is marked by a NULL
-       pointer. The yield of the function is zero if all  went  well,  or  the
+       the  memory  block  is returned via listptr, which is also the start of
+       the list of string pointers. The end of the list is marked  by  a  NULL
+       pointer.  The  yield  of  the function is zero if all went well, or the
        error code
 
          PCRE_ERROR_NOMEMORY       (-6)
 
        if the attempt to get the memory block failed.
 
-       When  any of these functions encounter a substring that is unset, which
-       can happen when capturing subpattern number n+1 matches  some  part  of
-       the  subject, but subpattern n has not been used at all, they return an
+       When any of these functions encounter a substring that is unset,  which
+       can  happen  when  capturing subpattern number n+1 matches some part of
+       the subject, but subpattern n has not been used at all, they return  an
        empty string. This can be distinguished from a genuine zero-length sub-
-       string  by inspecting the appropriate offset in ovector, which is nega-
+       string by inspecting the appropriate offset in ovector, which is  nega-
        tive for unset substrings.
 
-       The two convenience functions pcre_free_substring() and  pcre_free_sub-
-       string_list()  can  be  used  to free the memory returned by a previous
+       The  two convenience functions pcre_free_substring() and pcre_free_sub-
+       string_list() can be used to free the memory  returned  by  a  previous
        call  of  pcre_get_substring()  or  pcre_get_substring_list(),  respec-
-       tively.  They  do  nothing  more  than  call the function pointed to by
-       pcre_free, which of course could be called directly from a  C  program.
-       However,  PCRE is used in some situations where it is linked via a spe-
-       cial  interface  to  another  programming  language  that  cannot   use
-       pcre_free  directly;  it is for these cases that the functions are pro-
+       tively. They do nothing more than  call  the  function  pointed  to  by
+       pcre_free,  which  of course could be called directly from a C program.
+       However, PCRE is used in some situations where it is linked via a  spe-
+       cial   interface  to  another  programming  language  that  cannot  use
+       pcre_free directly; it is for these cases that the functions  are  pro-
        vided.
 
 
@@ -2526,7 +2602,7 @@ EXTRACTING CAPTURED SUBSTRINGS BY NAME
             int stringcount, const char *stringname,
             const char **stringptr);
 
-       To extract a substring by name, you first have to find associated  num-
+       To  extract a substring by name, you first have to find associated num-
        ber.  For example, for this pattern
 
          (a+)b(?<xxx>\d+)...
@@ -2535,35 +2611,35 @@ EXTRACTING CAPTURED SUBSTRINGS BY NAME
        be unique (PCRE_DUPNAMES was not set), you can find the number from the
        name by calling pcre_get_stringnumber(). The first argument is the com-
        piled pattern, and the second is the name. The yield of the function is
-       the  subpattern  number,  or PCRE_ERROR_NOSUBSTRING (-7) if there is no
+       the subpattern number, or PCRE_ERROR_NOSUBSTRING (-7) if  there  is  no
        subpattern of that name.
 
        Given the number, you can extract the substring directly, or use one of
        the functions described in the previous section. For convenience, there
        are also two functions that do the whole job.
 
-       Most   of   the   arguments    of    pcre_copy_named_substring()    and
-       pcre_get_named_substring()  are  the  same  as  those for the similarly
-       named functions that extract by number. As these are described  in  the
-       previous  section,  they  are not re-described here. There are just two
+       Most    of    the    arguments   of   pcre_copy_named_substring()   and
+       pcre_get_named_substring() are the same  as  those  for  the  similarly
+       named  functions  that extract by number. As these are described in the
+       previous section, they are not re-described here. There  are  just  two
        differences:
 
-       First, instead of a substring number, a substring name is  given.  Sec-
+       First,  instead  of a substring number, a substring name is given. Sec-
        ond, there is an extra argument, given at the start, which is a pointer
-       to the compiled pattern. This is needed in order to gain access to  the
+       to  the compiled pattern. This is needed in order to gain access to the
        name-to-number translation table.
 
-       These  functions call pcre_get_stringnumber(), and if it succeeds, they
-       then call pcre_copy_substring() or pcre_get_substring(),  as  appropri-
-       ate.  NOTE:  If PCRE_DUPNAMES is set and there are duplicate names, the
+       These functions call pcre_get_stringnumber(), and if it succeeds,  they
+       then  call  pcre_copy_substring() or pcre_get_substring(), as appropri-
+       ate. NOTE: If PCRE_DUPNAMES is set and there are duplicate  names,  the
        behaviour may not be what you want (see the next section).
 
        Warning: If the pattern uses the (?| feature to set up multiple subpat-
-       terns  with  the  same number, as described in the section on duplicate
-       subpattern numbers in the pcrepattern page, you  cannot  use  names  to
-       distinguish  the  different subpatterns, because names are not included
-       in the compiled code. The matching process uses only numbers. For  this
-       reason,  the  use of different names for subpatterns of the same number
+       terns with the same number, as described in the  section  on  duplicate
+       subpattern  numbers  in  the  pcrepattern page, you cannot use names to
+       distinguish the different subpatterns, because names are  not  included
+       in  the compiled code. The matching process uses only numbers. For this
+       reason, the use of different names for subpatterns of the  same  number
        causes an error at compile time.
 
 
@@ -2572,51 +2648,51 @@ DUPLICATE SUBPATTERN NAMES
        int pcre_get_stringtable_entries(const pcre *code,
             const char *name, char **first, char **last);
 
-       When a pattern is compiled with the  PCRE_DUPNAMES  option,  names  for
-       subpatterns  are not required to be unique. (Duplicate names are always
-       allowed for subpatterns with the same number, created by using the  (?|
-       feature.  Indeed,  if  such subpatterns are named, they are required to
+       When  a  pattern  is  compiled with the PCRE_DUPNAMES option, names for
+       subpatterns are not required to be unique. (Duplicate names are  always
+       allowed  for subpatterns with the same number, created by using the (?|
+       feature. Indeed, if such subpatterns are named, they  are  required  to
        use the same names.)
 
        Normally, patterns with duplicate names are such that in any one match,
-       only  one of the named subpatterns participates. An example is shown in
+       only one of the named subpatterns participates. An example is shown  in
        the pcrepattern documentation.
 
-       When   duplicates   are   present,   pcre_copy_named_substring()    and
-       pcre_get_named_substring()  return the first substring corresponding to
-       the given name that is set. If  none  are  set,  PCRE_ERROR_NOSUBSTRING
-       (-7)  is  returned;  no  data  is returned. The pcre_get_stringnumber()
-       function returns one of the numbers that are associated with the  name,
+       When    duplicates   are   present,   pcre_copy_named_substring()   and
+       pcre_get_named_substring() return the first substring corresponding  to
+       the  given  name  that  is set. If none are set, PCRE_ERROR_NOSUBSTRING
+       (-7) is returned; no  data  is  returned.  The  pcre_get_stringnumber()
+       function  returns one of the numbers that are associated with the name,
        but it is not defined which it is.
 
-       If  you want to get full details of all captured substrings for a given
-       name, you must use  the  pcre_get_stringtable_entries()  function.  The
+       If you want to get full details of all captured substrings for a  given
+       name,  you  must  use  the pcre_get_stringtable_entries() function. The
        first argument is the compiled pattern, and the second is the name. The
-       third and fourth are pointers to variables which  are  updated  by  the
+       third  and  fourth  are  pointers to variables which are updated by the
        function. After it has run, they point to the first and last entries in
-       the name-to-number table  for  the  given  name.  The  function  itself
-       returns  the  length  of  each entry, or PCRE_ERROR_NOSUBSTRING (-7) if
-       there are none. The format of the table is described above in the  sec-
-       tion  entitled  Information  about  a  pattern.  Given all the relevant
-       entries for the name, you can extract each of their numbers, and  hence
+       the  name-to-number  table  for  the  given  name.  The function itself
+       returns the length of each entry,  or  PCRE_ERROR_NOSUBSTRING  (-7)  if
+       there  are none. The format of the table is described above in the sec-
+       tion entitled Information about a  pattern.   Given  all  the  relevant
+       entries  for the name, you can extract each of their numbers, and hence
        the captured data, if any.
 
 
 FINDING ALL POSSIBLE MATCHES
 
-       The  traditional  matching  function  uses a similar algorithm to Perl,
+       The traditional matching function uses a  similar  algorithm  to  Perl,
        which stops when it finds the first match, starting at a given point in
-       the  subject.  If you want to find all possible matches, or the longest
-       possible match, consider using the alternative matching  function  (see
-       below)  instead.  If you cannot use the alternative function, but still
-       need to find all possible matches, you can kludge it up by  making  use
+       the subject. If you want to find all possible matches, or  the  longest
+       possible  match,  consider using the alternative matching function (see
+       below) instead. If you cannot use the alternative function,  but  still
+       need  to  find all possible matches, you can kludge it up by making use
        of the callout facility, which is described in the pcrecallout documen-
        tation.
 
        What you have to do is to insert a callout right at the end of the pat-
-       tern.   When your callout function is called, extract and save the cur-
-       rent matched substring. Then return  1,  which  forces  pcre_exec()  to
-       backtrack  and  try other alternatives. Ultimately, when it runs out of
+       tern.  When your callout function is called, extract and save the  cur-
+       rent  matched  substring.  Then  return  1, which forces pcre_exec() to
+       backtrack and try other alternatives. Ultimately, when it runs  out  of
        matches, pcre_exec() will yield PCRE_ERROR_NOMATCH.
 
 
@@ -2627,26 +2703,26 @@ MATCHING A PATTERN: THE ALTERNATIVE FUNCTION
             int options, int *ovector, int ovecsize,
             int *workspace, int wscount);
 
-       The function pcre_dfa_exec()  is  called  to  match  a  subject  string
-       against  a  compiled pattern, using a matching algorithm that scans the
-       subject string just once, and does not backtrack.  This  has  different
-       characteristics  to  the  normal  algorithm, and is not compatible with
-       Perl. Some of the features of PCRE patterns are not  supported.  Never-
-       theless,  there are times when this kind of matching can be useful. For
-       a discussion of the two matching algorithms, and  a  list  of  features
-       that  pcre_dfa_exec() does not support, see the pcrematching documenta-
+       The  function  pcre_dfa_exec()  is  called  to  match  a subject string
+       against a compiled pattern, using a matching algorithm that  scans  the
+       subject  string  just  once, and does not backtrack. This has different
+       characteristics to the normal algorithm, and  is  not  compatible  with
+       Perl.  Some  of the features of PCRE patterns are not supported. Never-
+       theless, there are times when this kind of matching can be useful.  For
+       a  discussion  of  the  two matching algorithms, and a list of features
+       that pcre_dfa_exec() does not support, see the pcrematching  documenta-
        tion.
 
-       The arguments for the pcre_dfa_exec() function  are  the  same  as  for
+       The  arguments  for  the  pcre_dfa_exec()  function are the same as for
        pcre_exec(), plus two extras. The ovector argument is used in a differ-
-       ent way, and this is described below. The other  common  arguments  are
-       used  in  the  same way as for pcre_exec(), so their description is not
+       ent  way,  and  this is described below. The other common arguments are
+       used in the same way as for pcre_exec(), so their  description  is  not
        repeated here.
 
-       The two additional arguments provide workspace for  the  function.  The
-       workspace  vector  should  contain at least 20 elements. It is used for
+       The  two  additional  arguments provide workspace for the function. The
+       workspace vector should contain at least 20 elements. It  is  used  for
        keeping  track  of  multiple  paths  through  the  pattern  tree.  More
-       workspace  will  be  needed for patterns and subjects where there are a
+       workspace will be needed for patterns and subjects where  there  are  a
        lot of potential matches.
 
        Here is an example of a simple call to pcre_dfa_exec():
@@ -2668,53 +2744,55 @@ MATCHING A PATTERN: THE ALTERNATIVE FUNCTION
 
    Option bits for pcre_dfa_exec()
 
-       The unused bits of the options argument  for  pcre_dfa_exec()  must  be
-       zero.  The  only  bits  that  may  be  set are PCRE_ANCHORED, PCRE_NEW-
+       The  unused  bits  of  the options argument for pcre_dfa_exec() must be
+       zero. The only bits  that  may  be  set  are  PCRE_ANCHORED,  PCRE_NEW-
        LINE_xxx,        PCRE_NOTBOL,        PCRE_NOTEOL,        PCRE_NOTEMPTY,
-       PCRE_NOTEMPTY_ATSTART,       PCRE_NO_UTF8_CHECK,      PCRE_BSR_ANYCRLF,
-       PCRE_BSR_UNICODE, PCRE_NO_START_OPTIMIZE, PCRE_PARTIAL_HARD,  PCRE_PAR-
-       TIAL_SOFT,  PCRE_DFA_SHORTEST,  and PCRE_DFA_RESTART.  All but the last
-       four of these are  exactly  the  same  as  for  pcre_exec(),  so  their
+       PCRE_NOTEMPTY_ATSTART,      PCRE_NO_UTF8_CHECK,       PCRE_BSR_ANYCRLF,
+       PCRE_BSR_UNICODE,  PCRE_NO_START_OPTIMIZE, PCRE_PARTIAL_HARD, PCRE_PAR-
+       TIAL_SOFT, PCRE_DFA_SHORTEST, and PCRE_DFA_RESTART.  All but  the  last
+       four  of  these  are  exactly  the  same  as  for pcre_exec(), so their
        description is not repeated here.
 
          PCRE_PARTIAL_HARD
          PCRE_PARTIAL_SOFT
 
-       These  have the same general effect as they do for pcre_exec(), but the
-       details are slightly  different.  When  PCRE_PARTIAL_HARD  is  set  for
-       pcre_dfa_exec(),  it  returns PCRE_ERROR_PARTIAL if the end of the sub-
-       ject is reached and there is still at least  one  matching  possibility
+       These have the same general effect as they do for pcre_exec(), but  the
+       details  are  slightly  different.  When  PCRE_PARTIAL_HARD  is set for
+       pcre_dfa_exec(), it returns PCRE_ERROR_PARTIAL if the end of  the  sub-
+       ject  is  reached  and there is still at least one matching possibility
        that requires additional characters. This happens even if some complete
        matches have also been found. When PCRE_PARTIAL_SOFT is set, the return
        code PCRE_ERROR_NOMATCH is converted into PCRE_ERROR_PARTIAL if the end
-       of the subject is reached, there have been  no  complete  matches,  but
-       there  is  still  at least one matching possibility. The portion of the
-       string that was inspected when the longest partial match was  found  is
-       set as the first matching string in both cases.
+       of  the  subject  is  reached, there have been no complete matches, but
+       there is still at least one matching possibility. The  portion  of  the
+       string  that  was inspected when the longest partial match was found is
+       set as the first matching string  in  both  cases.   There  is  a  more
+       detailed  discussion  of partial and multi-segment matching, with exam-
+       ples, in the pcrepartial documentation.
 
          PCRE_DFA_SHORTEST
 
-       Setting  the  PCRE_DFA_SHORTEST option causes the matching algorithm to
+       Setting the PCRE_DFA_SHORTEST option causes the matching  algorithm  to
        stop as soon as it has found one match. Because of the way the alterna-
-       tive  algorithm  works, this is necessarily the shortest possible match
+       tive algorithm works, this is necessarily the shortest  possible  match
        at the first possible matching point in the subject string.
 
          PCRE_DFA_RESTART
 
        When pcre_dfa_exec() returns a partial match, it is possible to call it
-       again,  with  additional  subject characters, and have it continue with
-       the same match. The PCRE_DFA_RESTART option requests this action;  when
-       it  is  set,  the workspace and wscount options must reference the same
-       vector as before because data about the match so far is  left  in  them
+       again, with additional subject characters, and have  it  continue  with
+       the  same match. The PCRE_DFA_RESTART option requests this action; when
+       it is set, the workspace and wscount options must  reference  the  same
+       vector  as  before  because data about the match so far is left in them
        after a partial match. There is more discussion of this facility in the
        pcrepartial documentation.
 
    Successful returns from pcre_dfa_exec()
 
-       When pcre_dfa_exec() succeeds, it may have matched more than  one  sub-
+       When  pcre_dfa_exec()  succeeds, it may have matched more than one sub-
        string in the subject. Note, however, that all the matches from one run
-       of the function start at the same point in  the  subject.  The  shorter
-       matches  are all initial substrings of the longer matches. For example,
+       of  the  function  start  at the same point in the subject. The shorter
+       matches are all initial substrings of the longer matches. For  example,
        if the pattern
 
          <.*>
@@ -2729,61 +2807,61 @@ MATCHING A PATTERN: THE ALTERNATIVE FUNCTION
          <something> <something else>
          <something> <something else> <something further>
 
-       On success, the yield of the function is a number  greater  than  zero,
-       which  is  the  number of matched substrings. The substrings themselves
-       are returned in ovector. Each string uses two elements;  the  first  is
-       the  offset  to  the start, and the second is the offset to the end. In
-       fact, all the strings have the same start  offset.  (Space  could  have
-       been  saved by giving this only once, but it was decided to retain some
-       compatibility with the way pcre_exec() returns data,  even  though  the
+       On  success,  the  yield of the function is a number greater than zero,
+       which is the number of matched substrings.  The  substrings  themselves
+       are  returned  in  ovector. Each string uses two elements; the first is
+       the offset to the start, and the second is the offset to  the  end.  In
+       fact,  all  the  strings  have the same start offset. (Space could have
+       been saved by giving this only once, but it was decided to retain  some
+       compatibility  with  the  way pcre_exec() returns data, even though the
        meaning of the strings is different.)
 
        The strings are returned in reverse order of length; that is, the long-
-       est matching string is given first. If there were too many  matches  to
-       fit  into ovector, the yield of the function is zero, and the vector is
+       est  matching  string is given first. If there were too many matches to
+       fit into ovector, the yield of the function is zero, and the vector  is
        filled with the longest matches.
 
    Error returns from pcre_dfa_exec()
 
-       The pcre_dfa_exec() function returns a negative number when  it  fails.
-       Many  of  the  errors  are  the  same as for pcre_exec(), and these are
-       described above.  There are in addition the following errors  that  are
+       The  pcre_dfa_exec()  function returns a negative number when it fails.
+       Many of the errors are the same  as  for  pcre_exec(),  and  these  are
+       described  above.   There are in addition the following errors that are
        specific to pcre_dfa_exec():
 
          PCRE_ERROR_DFA_UITEM      (-16)
 
-       This  return is given if pcre_dfa_exec() encounters an item in the pat-
-       tern that it does not support, for instance, the use of \C  or  a  back
+       This return is given if pcre_dfa_exec() encounters an item in the  pat-
+       tern  that  it  does not support, for instance, the use of \C or a back
        reference.
 
          PCRE_ERROR_DFA_UCOND      (-17)
 
-       This  return  is  given  if pcre_dfa_exec() encounters a condition item
-       that uses a back reference for the condition, or a test  for  recursion
+       This return is given if pcre_dfa_exec()  encounters  a  condition  item
+       that  uses  a back reference for the condition, or a test for recursion
        in a specific group. These are not supported.
 
          PCRE_ERROR_DFA_UMLIMIT    (-18)
 
-       This  return  is given if pcre_dfa_exec() is called with an extra block
+       This return is given if pcre_dfa_exec() is called with an  extra  block
        that contains a setting of the match_limit field. This is not supported
        (it is meaningless).
 
          PCRE_ERROR_DFA_WSSIZE     (-19)
 
-       This  return  is  given  if  pcre_dfa_exec()  runs  out of space in the
+       This return is given if  pcre_dfa_exec()  runs  out  of  space  in  the
        workspace vector.
 
          PCRE_ERROR_DFA_RECURSE    (-20)
 
-       When a recursive subpattern is processed, the matching  function  calls
-       itself  recursively,  using  private vectors for ovector and workspace.
-       This error is given if the output vector  is  not  large  enough.  This
+       When  a  recursive subpattern is processed, the matching function calls
+       itself recursively, using private vectors for  ovector  and  workspace.
+       This  error  is  given  if  the output vector is not large enough. This
        should be extremely rare, as a vector of size 1000 is used.
 
 
 SEE ALSO
 
-       pcrebuild(3),  pcrecallout(3), pcrecpp(3)(3), pcrematching(3), pcrepar-
+       pcrebuild(3), pcrecallout(3), pcrecpp(3)(3), pcrematching(3),  pcrepar-
        tial(3), pcreposix(3), pcreprecompile(3), pcresample(3), pcrestack(3).
 
 
@@ -2796,7 +2874,7 @@ AUTHOR
 
 REVISION
 
-       Last updated: 21 June 2010
+       Last updated: 21 November 2010
        Copyright (c) 1997-2010 University of Cambridge.
 ------------------------------------------------------------------------------
 
@@ -2864,17 +2942,18 @@ MISSING CALLOUTS
        patterns, if it has been scanned far enough.
 
        You  can disable these optimizations by passing the PCRE_NO_START_OPTI-
-       MIZE option to pcre_exec() or  pcre_dfa_exec().  This  slows  down  the
-       matching  process,  but  does  ensure that callouts such as the example
-       above are obeyed.
+       MIZE option to pcre_compile(), pcre_exec(), or pcre_dfa_exec(),  or  by
+       starting the pattern with (*NO_START_OPT). This slows down the matching
+       process, but does ensure that callouts such as the  example  above  are
+       obeyed.
 
 
 THE CALLOUT INTERFACE
 
-       During matching, when PCRE reaches a callout point, the external  func-
-       tion  defined by pcre_callout is called (if it is set). This applies to
-       both the pcre_exec() and the pcre_dfa_exec()  matching  functions.  The
-       only  argument  to  the callout function is a pointer to a pcre_callout
+       During  matching, when PCRE reaches a callout point, the external func-
+       tion defined by pcre_callout is called (if it is set). This applies  to
+       both  the  pcre_exec()  and the pcre_dfa_exec() matching functions. The
+       only argument to the callout function is a pointer  to  a  pcre_callout
        block. This structure contains the following fields:
 
          int          version;
@@ -2890,81 +2969,81 @@ THE CALLOUT INTERFACE
          int          pattern_position;
          int          next_item_length;
 
-       The version field is an integer containing the version  number  of  the
-       block  format. The initial version was 0; the current version is 1. The
-       version number will change again in future  if  additional  fields  are
+       The  version  field  is an integer containing the version number of the
+       block format. The initial version was 0; the current version is 1.  The
+       version  number  will  change  again in future if additional fields are
        added, but the intention is never to remove any of the existing fields.
 
-       The  callout_number  field  contains the number of the callout, as com-
-       piled into the pattern (that is, the number after ?C for  manual  call-
+       The callout_number field contains the number of the  callout,  as  com-
+       piled  into  the pattern (that is, the number after ?C for manual call-
        outs, and 255 for automatically generated callouts).
 
-       The  offset_vector field is a pointer to the vector of offsets that was
-       passed  by  the  caller  to  pcre_exec()   or   pcre_dfa_exec().   When
-       pcre_exec()  is used, the contents can be inspected in order to extract
-       substrings that have been matched so  far,  in  the  same  way  as  for
-       extracting  substrings after a match has completed. For pcre_dfa_exec()
+       The offset_vector field is a pointer to the vector of offsets that  was
+       passed   by   the   caller  to  pcre_exec()  or  pcre_dfa_exec().  When
+       pcre_exec() is used, the contents can be inspected in order to  extract
+       substrings  that  have  been  matched  so  far,  in the same way as for
+       extracting substrings after a match has completed. For  pcre_dfa_exec()
        this field is not useful.
 
        The subject and subject_length fields contain copies of the values that
        were passed to pcre_exec().
 
-       The  start_match  field normally contains the offset within the subject
-       at which the current match attempt  started.  However,  if  the  escape
-       sequence  \K has been encountered, this value is changed to reflect the
-       modified starting point. If the pattern is not  anchored,  the  callout
+       The start_match field normally contains the offset within  the  subject
+       at  which  the  current  match  attempt started. However, if the escape
+       sequence \K has been encountered, this value is changed to reflect  the
+       modified  starting  point.  If the pattern is not anchored, the callout
        function may be called several times from the same point in the pattern
        for different starting points in the subject.
 
-       The current_position field contains the offset within  the  subject  of
+       The  current_position  field  contains the offset within the subject of
        the current match pointer.
 
-       When  the  pcre_exec() function is used, the capture_top field contains
-       one more than the number of the highest numbered captured substring  so
-       far.  If  no substrings have been captured, the value of capture_top is
-       one. This is always the case when pcre_dfa_exec() is used,  because  it
+       When the pcre_exec() function is used, the capture_top  field  contains
+       one  more than the number of the highest numbered captured substring so
+       far. If no substrings have been captured, the value of  capture_top  is
+       one.  This  is always the case when pcre_dfa_exec() is used, because it
        does not support captured substrings.
 
-       The  capture_last  field  contains the number of the most recently cap-
-       tured substring. If no substrings have been captured, its value is  -1.
+       The capture_last field contains the number of the  most  recently  cap-
+       tured  substring. If no substrings have been captured, its value is -1.
        This is always the case when pcre_dfa_exec() is used.
 
-       The  callout_data  field contains a value that is passed to pcre_exec()
-       or pcre_dfa_exec() specifically so that it can be passed back in  call-
-       outs.  It  is  passed  in the pcre_callout field of the pcre_extra data
-       structure. If no such data was passed, the value of callout_data  in  a
-       pcre_callout  block  is  NULL. There is a description of the pcre_extra
+       The callout_data field contains a value that is passed  to  pcre_exec()
+       or  pcre_dfa_exec() specifically so that it can be passed back in call-
+       outs. It is passed in the pcre_callout field  of  the  pcre_extra  data
+       structure.  If  no such data was passed, the value of callout_data in a
+       pcre_callout block is NULL. There is a description  of  the  pcre_extra
        structure in the pcreapi documentation.
 
-       The pattern_position field is present from version 1 of the  pcre_call-
+       The  pattern_position field is present from version 1 of the pcre_call-
        out structure. It contains the offset to the next item to be matched in
        the pattern string.
 
-       The next_item_length field is present from version 1 of the  pcre_call-
+       The  next_item_length field is present from version 1 of the pcre_call-
        out structure. It contains the length of the next item to be matched in
-       the pattern string. When the callout immediately precedes  an  alterna-
-       tion  bar, a closing parenthesis, or the end of the pattern, the length
-       is zero. When the callout precedes an opening parenthesis,  the  length
+       the  pattern  string. When the callout immediately precedes an alterna-
+       tion bar, a closing parenthesis, or the end of the pattern, the  length
+       is  zero.  When the callout precedes an opening parenthesis, the length
        is that of the entire subpattern.
 
-       The  pattern_position  and next_item_length fields are intended to help
-       in distinguishing between different automatic callouts, which all  have
+       The pattern_position and next_item_length fields are intended  to  help
+       in  distinguishing between different automatic callouts, which all have
        the same callout number. However, they are set for all callouts.
 
 
 RETURN VALUES
 
-       The  external callout function returns an integer to PCRE. If the value
-       is zero, matching proceeds as normal. If  the  value  is  greater  than
-       zero,  matching  fails  at  the current point, but the testing of other
+       The external callout function returns an integer to PCRE. If the  value
+       is  zero,  matching  proceeds  as  normal. If the value is greater than
+       zero, matching fails at the current point, but  the  testing  of  other
        matching possibilities goes ahead, just as if a lookahead assertion had
-       failed.  If  the  value  is less than zero, the match is abandoned, and
+       failed. If the value is less than zero, the  match  is  abandoned,  and
        pcre_exec() or pcre_dfa_exec() returns the negative value.
 
-       Negative  values  should  normally  be   chosen   from   the   set   of
+       Negative   values   should   normally   be   chosen  from  the  set  of
        PCRE_ERROR_xxx values. In particular, PCRE_ERROR_NOMATCH forces a stan-
-       dard "no  match"  failure.   The  error  number  PCRE_ERROR_CALLOUT  is
-       reserved  for  use  by callout functions; it will never be used by PCRE
+       dard  "no  match"  failure.   The  error  number  PCRE_ERROR_CALLOUT is
+       reserved for use by callout functions; it will never be  used  by  PCRE
        itself.
 
 
@@ -2977,8 +3056,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 29 September 2009
-       Copyright (c) 1997-2009 University of Cambridge.
+       Last updated: 21 November 2010
+       Copyright (c) 1997-2010 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -2993,7 +3072,7 @@ DIFFERENCES BETWEEN PCRE AND PERL
 
        This  document describes the differences in the ways that PCRE and Perl
        handle regular expressions. The differences  described  here  are  with
-       respect to Perl 5.10/5.11.
+       respect to Perl versions 5.10 and above.
 
        1.  PCRE has only a subset of Perl's UTF-8 and Unicode support. Details
        of what it does have are given in the section on UTF-8 support  in  the
@@ -3075,24 +3154,27 @@ DIFFERENCES BETWEEN PCRE AND PERL
        turing subpattern number 1. To avoid this confusing situation, an error
        is given at compile time.
 
-       12. PCRE provides some extensions to the Perl regular expression facil-
-       ities.   Perl  5.10  includes new features that are not in earlier ver-
-       sions of Perl, some of which (such as named parentheses) have  been  in
+       12. Perl recognizes comments in some  places  that  PCRE  doesn't,  for
+       example, between the ( and ? at the start of a subpattern.
+
+       13. PCRE provides some extensions to the Perl regular expression facil-
+       ities.  Perl 5.10 includes new features that are not  in  earlier  ver-
+       sions  of  Perl, some of which (such as named parentheses) have been in
        PCRE for some time. This list is with respect to Perl 5.10:
 
-       (a)  Although  lookbehind  assertions  in  PCRE must match fixed length
-       strings, each alternative branch of a lookbehind assertion can match  a
-       different  length  of  string.  Perl requires them all to have the same
+       (a) Although lookbehind assertions in  PCRE  must  match  fixed  length
+       strings,  each alternative branch of a lookbehind assertion can match a
+       different length of string. Perl requires them all  to  have  the  same
        length.
 
-       (b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the  $
+       (b)  If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $
        meta-character matches only at the very end of the string.
 
        (c) If PCRE_EXTRA is set, a backslash followed by a letter with no spe-
        cial meaning is faulted. Otherwise, like Perl, the backslash is quietly
        ignored.  (Perl can be made to issue a warning.)
 
-       (d)  If  PCRE_UNGREEDY is set, the greediness of the repetition quanti-
+       (d) If PCRE_UNGREEDY is set, the greediness of the  repetition  quanti-
        fiers is inverted, that is, by default they are not greedy, but if fol-
        lowed by a question mark they are.
 
@@ -3100,10 +3182,10 @@ DIFFERENCES BETWEEN PCRE AND PERL
        tried only at the first matching position in the subject string.
 
        (f) The PCRE_NOTBOL, PCRE_NOTEOL, PCRE_NOTEMPTY, PCRE_NOTEMPTY_ATSTART,
-       and  PCRE_NO_AUTO_CAPTURE  options for pcre_exec() have no Perl equiva-
+       and PCRE_NO_AUTO_CAPTURE options for pcre_exec() have no  Perl  equiva-
        lents.
 
-       (g) The \R escape sequence can be restricted to match only CR,  LF,  or
+       (g)  The  \R escape sequence can be restricted to match only CR, LF, or
        CRLF by the PCRE_BSR_ANYCRLF option.
 
        (h) The callout facility is PCRE-specific.
@@ -3113,10 +3195,10 @@ DIFFERENCES BETWEEN PCRE AND PERL
        (j) Patterns compiled by PCRE can be saved and re-used at a later time,
        even on different hosts that have the other endianness.
 
-       (k) The alternative matching function (pcre_dfa_exec())  matches  in  a
+       (k)  The  alternative  matching function (pcre_dfa_exec()) matches in a
        different way and is not Perl-compatible.
 
-       (l)  PCRE  recognizes some special sequences such as (*CR) at the start
+       (l) PCRE recognizes some special sequences such as (*CR) at  the  start
        of a pattern that set overall options that cannot be changed within the
        pattern.
 
@@ -3130,7 +3212,7 @@ AUTHOR
 
 REVISION
 
-       Last updated: 12 May 2010
+       Last updated: 31 October 2010
        Copyright (c) 1997-2010 University of Cambridge.
 ------------------------------------------------------------------------------
 
@@ -3183,26 +3265,31 @@ PCRE REGULAR EXPRESSION DETAILS
        character types, instead of recognizing only characters with codes less
        than 128 via a lookup table.
 
-       The remainder of this document discusses the  patterns  that  are  sup-
-       ported  by  PCRE when its main matching function, pcre_exec(), is used.
-       From  release  6.0,   PCRE   offers   a   second   matching   function,
-       pcre_dfa_exec(),  which matches using a different algorithm that is not
+       If a pattern starts with (*NO_START_OPT), it has  the  same  effect  as
+       setting the PCRE_NO_START_OPTIMIZE option either at compile or matching
+       time. There are also some more of these special sequences that are con-
+       cerned with the handling of newlines; they are described below.
+
+       The  remainder  of  this  document discusses the patterns that are sup-
+       ported by PCRE when its main matching function, pcre_exec(),  is  used.
+       From   release   6.0,   PCRE   offers   a   second  matching  function,
+       pcre_dfa_exec(), which matches using a different algorithm that is  not
        Perl-compatible. Some of the features discussed below are not available
-       when  pcre_dfa_exec()  is used. The advantages and disadvantages of the
-       alternative function, and how it differs from the normal function,  are
+       when pcre_dfa_exec() is used. The advantages and disadvantages  of  the
+       alternative  function, and how it differs from the normal function, are
        discussed in the pcrematching page.
 
 
 NEWLINE CONVENTIONS
 
-       PCRE  supports five different conventions for indicating line breaks in
-       strings: a single CR (carriage return) character, a  single  LF  (line-
+       PCRE supports five different conventions for indicating line breaks  in
+       strings:  a  single  CR (carriage return) character, a single LF (line-
        feed) character, the two-character sequence CRLF, any of the three pre-
-       ceding, or any Unicode newline sequence. The pcreapi page  has  further
-       discussion  about newlines, and shows how to set the newline convention
+       ceding,  or  any Unicode newline sequence. The pcreapi page has further
+       discussion about newlines, and shows how to set the newline  convention
        in the options arguments for the compiling and matching functions.
 
-       It is also possible to specify a newline convention by starting a  pat-
+       It  is also possible to specify a newline convention by starting a pat-
        tern string with one of the following five sequences:
 
          (*CR)        carriage return
@@ -3211,54 +3298,54 @@ NEWLINE CONVENTIONS
          (*ANYCRLF)   any of the three above
          (*ANY)       all Unicode newline sequences
 
-       These  override  the default and the options given to pcre_compile() or
-       pcre_compile2(). For example, on a Unix system where LF is the  default
+       These override the default and the options given to  pcre_compile()  or
+       pcre_compile2().  For example, on a Unix system where LF is the default
        newline sequence, the pattern
 
          (*CR)a.b
 
        changes the convention to CR. That pattern matches "a\nb" because LF is
-       no longer a newline. Note that these special settings,  which  are  not
-       Perl-compatible,  are  recognized  only at the very start of a pattern,
-       and that they must be in upper case.  If  more  than  one  of  them  is
+       no  longer  a  newline. Note that these special settings, which are not
+       Perl-compatible, are recognized only at the very start  of  a  pattern,
+       and  that  they  must  be  in  upper  case. If more than one of them is
        present, the last one is used.
 
-       The  newline convention affects the interpretation of the dot metachar-
-       acter when PCRE_DOTALL is not set, and also the behaviour of  \N.  How-
-       ever,  it  does  not  affect  what  the  \R escape sequence matches. By
-       default, this is any Unicode newline sequence, for Perl  compatibility.
-       However,  this can be changed; see the description of \R in the section
-       entitled "Newline sequences" below. A change of \R setting can be  com-
+       The newline convention affects the interpretation of the dot  metachar-
+       acter  when  PCRE_DOTALL is not set, and also the behaviour of \N. How-
+       ever, it does not affect  what  the  \R  escape  sequence  matches.  By
+       default,  this is any Unicode newline sequence, for Perl compatibility.
+       However, this can be changed; see the description of \R in the  section
+       entitled  "Newline sequences" below. A change of \R setting can be com-
        bined with a change of newline convention.
 
 
 CHARACTERS AND METACHARACTERS
 
-       A  regular  expression  is  a pattern that is matched against a subject
-       string from left to right. Most characters stand for  themselves  in  a
-       pattern,  and  match  the corresponding characters in the subject. As a
+       A regular expression is a pattern that is  matched  against  a  subject
+       string  from  left  to right. Most characters stand for themselves in a
+       pattern, and match the corresponding characters in the  subject.  As  a
        trivial example, the pattern
 
          The quick brown fox
 
        matches a portion of a subject string that is identical to itself. When
-       caseless  matching is specified (the PCRE_CASELESS option), letters are
-       matched independently of case. In UTF-8 mode, PCRE  always  understands
-       the  concept  of case for characters whose values are less than 128, so
-       caseless matching is always possible. For characters with  higher  val-
-       ues,  the concept of case is supported if PCRE is compiled with Unicode
-       property support, but not otherwise.   If  you  want  to  use  caseless
-       matching  for  characters  128  and above, you must ensure that PCRE is
+       caseless matching is specified (the PCRE_CASELESS option), letters  are
+       matched  independently  of case. In UTF-8 mode, PCRE always understands
+       the concept of case for characters whose values are less than  128,  so
+       caseless  matching  is always possible. For characters with higher val-
+       ues, the concept of case is supported if PCRE is compiled with  Unicode
+       property  support,  but  not  otherwise.   If  you want to use caseless
+       matching for characters 128 and above, you must  ensure  that  PCRE  is
        compiled with Unicode property support as well as with UTF-8 support.
 
-       The power of regular expressions comes  from  the  ability  to  include
-       alternatives  and  repetitions in the pattern. These are encoded in the
+       The  power  of  regular  expressions  comes from the ability to include
+       alternatives and repetitions in the pattern. These are encoded  in  the
        pattern by the use of metacharacters, which do not stand for themselves
        but instead are interpreted in some special way.
 
-       There  are  two different sets of metacharacters: those that are recog-
-       nized anywhere in the pattern except within square brackets, and  those
-       that  are  recognized  within square brackets. Outside square brackets,
+       There are two different sets of metacharacters: those that  are  recog-
+       nized  anywhere in the pattern except within square brackets, and those
+       that are recognized within square brackets.  Outside  square  brackets,
        the metacharacters are as follows:
 
          \      general escape character with several uses
@@ -3277,7 +3364,7 @@ CHARACTERS AND METACHARACTERS
                 also "possessive quantifier"
          {      start min/max quantifier
 
-       Part of a pattern that is in square brackets  is  called  a  "character
+       Part  of  a  pattern  that is in square brackets is called a "character
        class". In a character class the only metacharacters are:
 
          \      general escape character
@@ -3293,27 +3380,31 @@ CHARACTERS AND METACHARACTERS
 BACKSLASH
 
        The backslash character has several uses. Firstly, if it is followed by
-       a non-alphanumeric character, it takes away any  special  meaning  that
-       character  may  have.  This  use  of  backslash  as an escape character
-       applies both inside and outside character classes.
-
-       For example, if you want to match a * character, you write  \*  in  the
-       pattern.   This  escaping  action  applies whether or not the following
-       character would otherwise be interpreted as a metacharacter, so  it  is
-       always  safe  to  precede  a non-alphanumeric with backslash to specify
-       that it stands for itself. In particular, if you want to match a  back-
+       a character that is not a number or a letter, it takes away any special
+       meaning that character may have. This use of  backslash  as  an  escape
+       character applies both inside and outside character classes.
+
+       For  example,  if  you want to match a * character, you write \* in the
+       pattern.  This escaping action applies whether  or  not  the  following
+       character  would  otherwise be interpreted as a metacharacter, so it is
+       always safe to precede a non-alphanumeric  with  backslash  to  specify
+       that  it stands for itself. In particular, if you want to match a back-
        slash, you write \\.
 
-       If  a  pattern is compiled with the PCRE_EXTENDED option, whitespace in
-       the pattern (other than in a character class) and characters between  a
+       In UTF-8 mode, only ASCII numbers and letters have any special  meaning
+       after  a  backslash.  All  other characters (in particular, those whose
+       codepoints are greater than 127) are treated as literals.
+
+       If a pattern is compiled with the PCRE_EXTENDED option,  whitespace  in
+       the  pattern (other than in a character class) and characters between a
        # outside a character class and the next newline are ignored. An escap-
-       ing backslash can be used to include a whitespace  or  #  character  as
+       ing  backslash  can  be  used to include a whitespace or # character as
        part of the pattern.
 
-       If  you  want  to remove the special meaning from a sequence of charac-
-       ters, you can do so by putting them between \Q and \E. This is  differ-
-       ent  from  Perl  in  that  $  and  @ are handled as literals in \Q...\E
-       sequences in PCRE, whereas in Perl, $ and @ cause  variable  interpola-
+       If you want to remove the special meaning from a  sequence  of  charac-
+       ters,  you can do so by putting them between \Q and \E. This is differ-
+       ent from Perl in that $ and  @  are  handled  as  literals  in  \Q...\E
+       sequences  in  PCRE, whereas in Perl, $ and @ cause variable interpola-
        tion. Note the following examples:
 
          Pattern            PCRE matches   Perl matches
@@ -3323,20 +3414,20 @@ BACKSLASH
          \Qabc\$xyz\E       abc\$xyz       abc\$xyz
          \Qabc\E\$\Qxyz\E   abc$xyz        abc$xyz
 
-       The  \Q...\E  sequence  is recognized both inside and outside character
-       classes.
+       The \Q...\E sequence is recognized both inside  and  outside  character
+       classes.  An isolated \E that is not preceded by \Q is ignored.
 
    Non-printing characters
 
        A second use of backslash provides a way of encoding non-printing char-
-       acters  in patterns in a visible manner. There is no restriction on the
-       appearance of non-printing characters, apart from the binary zero  that
-       terminates  a  pattern,  but  when  a pattern is being prepared by text
-       editing, it is  often  easier  to  use  one  of  the  following  escape
+       acters in patterns in a visible manner. There is no restriction on  the
+       appearance  of non-printing characters, apart from the binary zero that
+       terminates a pattern, but when a pattern  is  being  prepared  by  text
+       editing,  it  is  often  easier  to  use  one  of  the following escape
        sequences than the binary character it represents:
 
          \a        alarm, that is, the BEL character (hex 07)
-         \cx       "control-x", where x is any character
+         \cx       "control-x", where x is any ASCII character
          \e        escape (hex 1B)
          \f        formfeed (hex 0C)
          \n        linefeed (hex 0A)
@@ -3346,48 +3437,52 @@ BACKSLASH
          \xhh      character with hex code hh
          \x{hhh..} character with hex code hhh..
 
-       The  precise  effect of \cx is as follows: if x is a lower case letter,
-       it is converted to upper case. Then bit 6 of the character (hex 40)  is
-       inverted.   Thus  \cz becomes hex 1A, but \c{ becomes hex 3B, while \c;
-       becomes hex 7B.
-
-       After \x, from zero to two hexadecimal digits are read (letters can  be
-       in  upper  or  lower case). Any number of hexadecimal digits may appear
-       between \x{ and }, but the value of the character  code  must  be  less
+       The precise effect of \cx is as follows: if x is a lower  case  letter,
+       it  is converted to upper case. Then bit 6 of the character (hex 40) is
+       inverted.  Thus \cz becomes hex 1A (z is 7A), but \c{ becomes hex 3B ({
+       is  7B),  while  \c; becomes hex 7B (; is 3B). If the byte following \c
+       has a value greater than 127, a compile-time error occurs.  This  locks
+       out  non-ASCII  characters in both byte mode and UTF-8 mode. (When PCRE
+       is compiled in EBCDIC mode, all byte values are  valid.  A  lower  case
+       letter is converted to upper case, and then the 0xc0 bits are flipped.)
+
+       After  \x, from zero to two hexadecimal digits are read (letters can be
+       in upper or lower case). Any number of hexadecimal  digits  may  appear
+       between  \x{  and  },  but the value of the character code must be less
        than 256 in non-UTF-8 mode, and less than 2**31 in UTF-8 mode. That is,
-       the maximum value in hexadecimal is 7FFFFFFF. Note that this is  bigger
+       the  maximum value in hexadecimal is 7FFFFFFF. Note that this is bigger
        than the largest Unicode code point, which is 10FFFF.
 
-       If  characters  other than hexadecimal digits appear between \x{ and },
+       If characters other than hexadecimal digits appear between \x{  and  },
        or if there is no terminating }, this form of escape is not recognized.
-       Instead,  the  initial  \x  will  be interpreted as a basic hexadecimal
-       escape, with no following digits, giving a  character  whose  value  is
+       Instead, the initial \x will be  interpreted  as  a  basic  hexadecimal
+       escape,  with  no  following  digits, giving a character whose value is
        zero.
 
        Characters whose value is less than 256 can be defined by either of the
-       two syntaxes for \x. There is no difference in the way  they  are  han-
+       two  syntaxes  for  \x. There is no difference in the way they are han-
        dled. For example, \xdc is exactly the same as \x{dc}.
 
-       After  \0  up  to two further octal digits are read. If there are fewer
-       than two digits, just  those  that  are  present  are  used.  Thus  the
+       After \0 up to two further octal digits are read. If  there  are  fewer
+       than  two  digits,  just  those  that  are  present  are used. Thus the
        sequence \0\x\07 specifies two binary zeros followed by a BEL character
-       (code value 7). Make sure you supply two digits after the initial  zero
+       (code  value 7). Make sure you supply two digits after the initial zero
        if the pattern character that follows is itself an octal digit.
 
        The handling of a backslash followed by a digit other than 0 is compli-
        cated.  Outside a character class, PCRE reads it and any following dig-
-       its  as  a  decimal  number. If the number is less than 10, or if there
+       its as a decimal number. If the number is less than  10,  or  if  there
        have been at least that many previous capturing left parentheses in the
-       expression,  the  entire  sequence  is  taken  as  a  back reference. A
-       description of how this works is given later, following the  discussion
+       expression, the entire  sequence  is  taken  as  a  back  reference.  A
+       description  of how this works is given later, following the discussion
        of parenthesized subpatterns.
 
-       Inside  a  character  class, or if the decimal number is greater than 9
-       and there have not been that many capturing subpatterns, PCRE  re-reads
+       Inside a character class, or if the decimal number is  greater  than  9
+       and  there have not been that many capturing subpatterns, PCRE re-reads
        up to three octal digits following the backslash, and uses them to gen-
-       erate a data character. Any subsequent digits stand for themselves.  In
-       non-UTF-8  mode,  the  value  of a character specified in octal must be
-       less than \400. In UTF-8 mode, values up to  \777  are  permitted.  For
+       erate  a data character. Any subsequent digits stand for themselves. In
+       non-UTF-8 mode, the value of a character specified  in  octal  must  be
+       less  than  \400.  In  UTF-8 mode, values up to \777 are permitted. For
        example:
 
          \040   is another way of writing a space
@@ -3405,32 +3500,32 @@ BACKSLASH
          \81    is either a back reference, or a binary zero
                    followed by the two characters "8" and "1"
 
-       Note  that  octal  values of 100 or greater must not be introduced by a
+       Note that octal values of 100 or greater must not be  introduced  by  a
        leading zero, because no more than three octal digits are ever read.
 
        All the sequences that define a single character value can be used both
-       inside  and  outside character classes. In addition, inside a character
-       class, the sequence \b is interpreted as the backspace  character  (hex
-       08).  The sequences \B, \N, \R, and \X are not special inside a charac-
-       ter class. Like any  other  unrecognized  escape  sequences,  they  are
-       treated  as  the  literal characters "B", "N", "R", and "X" by default,
+       inside and outside character classes. In addition, inside  a  character
+       class,  the  sequence \b is interpreted as the backspace character (hex
+       08). The sequences \B, \N, \R, and \X are not special inside a  charac-
+       ter  class.  Like  any  other  unrecognized  escape sequences, they are
+       treated as the literal characters "B", "N", "R", and  "X"  by  default,
        but cause an error if the PCRE_EXTRA option is set. Outside a character
        class, these sequences have different meanings.
 
    Absolute and relative back references
 
-       The  sequence  \g followed by an unsigned or a negative number, option-
-       ally enclosed in braces, is an absolute or relative back  reference.  A
+       The sequence \g followed by an unsigned or a negative  number,  option-
+       ally  enclosed  in braces, is an absolute or relative back reference. A
        named back reference can be coded as \g{name}. Back references are dis-
        cussed later, following the discussion of parenthesized subpatterns.
 
    Absolute and relative subroutine calls
 
-       For compatibility with Oniguruma, the non-Perl syntax \g followed by  a
+       For  compatibility with Oniguruma, the non-Perl syntax \g followed by a
        name or a number enclosed either in angle brackets or single quotes, is
-       an alternative syntax for referencing a subpattern as  a  "subroutine".
-       Details  are  discussed  later.   Note  that  \g{...} (Perl syntax) and
-       \g<...> (Oniguruma syntax) are not synonymous. The  former  is  a  back
+       an  alternative  syntax for referencing a subpattern as a "subroutine".
+       Details are discussed later.   Note  that  \g{...}  (Perl  syntax)  and
+       \g<...>  (Oniguruma  syntax)  are  not synonymous. The former is a back
        reference; the latter is a subroutine call.
 
    Generic character types
@@ -3449,54 +3544,55 @@ BACKSLASH
          \W     any "non-word" character
 
        There is also the single sequence \N, which matches a non-newline char-
-       acter.  This is the same as the "." metacharacter when  PCRE_DOTALL  is
+       acter.   This  is the same as the "." metacharacter when PCRE_DOTALL is
        not set.
 
-       Each  pair of lower and upper case escape sequences partitions the com-
-       plete set of characters into two disjoint  sets.  Any  given  character
-       matches  one, and only one, of each pair. The sequences can appear both
-       inside and outside character classes. They each match one character  of
-       the  appropriate  type.  If the current matching point is at the end of
-       the subject string, all of them fail, because there is no character  to
+       Each pair of lower and upper case escape sequences partitions the  com-
+       plete  set  of  characters  into two disjoint sets. Any given character
+       matches one, and only one, of each pair. The sequences can appear  both
+       inside  and outside character classes. They each match one character of
+       the appropriate type. If the current matching point is at  the  end  of
+       the  subject string, all of them fail, because there is no character to
        match.
 
-       For  compatibility  with Perl, \s does not match the VT character (code
-       11).  This makes it different from the the POSIX "space" class. The  \s
-       characters  are  HT  (9), LF (10), FF (12), CR (13), and space (32). If
+       For compatibility with Perl, \s does not match the VT  character  (code
+       11).   This makes it different from the the POSIX "space" class. The \s
+       characters are HT (9), LF (10), FF (12), CR (13), and  space  (32).  If
        "use locale;" is included in a Perl script, \s may match the VT charac-
        ter. In PCRE, it never does.
 
-       A  "word"  character is an underscore or any character that is a letter
-       or digit.  By default, the definition of letters  and  digits  is  con-
-       trolled  by PCRE's low-valued character tables, and may vary if locale-
-       specific matching is taking place (see "Locale support" in the  pcreapi
-       page).  For  example,  in  a French locale such as "fr_FR" in Unix-like
-       systems, or "french" in Windows, some character codes greater than  128
-       are  used  for  accented letters, and these are then matched by \w. The
+       A "word" character is an underscore or any character that is  a  letter
+       or  digit.   By  default,  the definition of letters and digits is con-
+       trolled by PCRE's low-valued character tables, and may vary if  locale-
+       specific  matching is taking place (see "Locale support" in the pcreapi
+       page). For example, in a French locale such  as  "fr_FR"  in  Unix-like
+       systems,  or "french" in Windows, some character codes greater than 128
+       are used for accented letters, and these are then matched  by  \w.  The
        use of locales with Unicode is discouraged.
 
-       By default, in UTF-8 mode, characters  with  values  greater  than  128
-       never  match  \d,  \s,  or  \w,  and always match \D, \S, and \W. These
-       sequences retain their original meanings from before UTF-8 support  was
-       available,  mainly for efficiency reasons. However, if PCRE is compiled
-       with Unicode property support, and the PCRE_UCP option is set, the  be-
-       haviour  is  changed  so  that Unicode properties are used to determine
+       By  default,  in  UTF-8  mode,  characters with values greater than 128
+       never match \d, \s, or \w, and always  match  \D,  \S,  and  \W.  These
+       sequences  retain their original meanings from before UTF-8 support was
+       available, mainly for efficiency reasons. However, if PCRE is  compiled
+       with  Unicode property support, and the PCRE_UCP option is set, the be-
+       haviour is changed so that Unicode properties  are  used  to  determine
        character types, as follows:
 
          \d  any character that \p{Nd} matches (decimal digit)
          \s  any character that \p{Z} matches, plus HT, LF, FF, CR
          \w  any character that \p{L} or \p{N} matches, plus underscore
 
-       The upper case escapes match the inverse sets of characters. Note  that
-       \d  matches  only decimal digits, whereas \w matches any Unicode digit,
-       as well as any Unicode letter, and underscore. Note also that  PCRE_UCP
-       affects  \b,  and  \B  because  they are defined in terms of \w and \W.
+       The  upper case escapes match the inverse sets of characters. Note that
+       \d matches only decimal digits, whereas \w matches any  Unicode  digit,
+       as  well as any Unicode letter, and underscore. Note also that PCRE_UCP
+       affects \b, and \B because they are defined in  terms  of  \w  and  \W.
        Matching these sequences is noticeably slower when PCRE_UCP is set.
 
-       The sequences \h, \H, \v, and \V are Perl 5.10 features. In contrast to
-       the  other  sequences,  which  match  only ASCII characters by default,
-       these always  match  certain  high-valued  codepoints  in  UTF-8  mode,
-       whether or not PCRE_UCP is set. The horizontal space characters are:
+       The  sequences  \h, \H, \v, and \V are features that were added to Perl
+       at release 5.10. In contrast to the other sequences, which  match  only
+       ASCII  characters  by  default,  these always match certain high-valued
+       codepoints in UTF-8 mode, whether or not PCRE_UCP is set. The  horizon-
+       tal space characters are:
 
          U+0009     Horizontal tab
          U+0020     Space
@@ -3531,8 +3627,8 @@ BACKSLASH
    Newline sequences
 
        Outside  a  character class, by default, the escape sequence \R matches
-       any Unicode newline sequence. This is a Perl 5.10 feature. In non-UTF-8
-       mode \R is equivalent to the following:
+       any Unicode newline sequence. In non-UTF-8 mode \R is equivalent to the
+       following:
 
          (?>\r\n|\n|\x0b|\f|\r|\x85)
 
@@ -3740,33 +3836,32 @@ BACKSLASH
 
    Resetting the match start
 
-       The escape sequence \K, which is a Perl 5.10 feature, causes any previ-
-       ously matched characters not  to  be  included  in  the  final  matched
-       sequence. For example, the pattern:
+       The  escape sequence \K causes any previously matched characters not to
+       be included in the final matched sequence. For example, the pattern:
 
          foo\Kbar
 
-       matches  "foobar",  but reports that it has matched "bar". This feature
-       is similar to a lookbehind assertion (described  below).   However,  in
-       this  case, the part of the subject before the real match does not have
-       to be of fixed length, as lookbehind assertions do. The use of \K  does
-       not  interfere  with  the setting of captured substrings.  For example,
+       matches "foobar", but reports that it has matched "bar".  This  feature
+       is  similar  to  a lookbehind assertion (described below).  However, in
+       this case, the part of the subject before the real match does not  have
+       to  be of fixed length, as lookbehind assertions do. The use of \K does
+       not interfere with the setting of captured  substrings.   For  example,
        when the pattern
 
          (foo)\Kbar
 
        matches "foobar", the first substring is still set to "foo".
 
-       Perl documents that the use  of  \K  within  assertions  is  "not  well
-       defined".  In  PCRE,  \K  is  acted upon when it occurs inside positive
+       Perl  documents  that  the  use  of  \K  within assertions is "not well
+       defined". In PCRE, \K is acted upon  when  it  occurs  inside  positive
        assertions, but is ignored in negative assertions.
 
    Simple assertions
 
-       The final use of backslash is for certain simple assertions. An  asser-
-       tion  specifies a condition that has to be met at a particular point in
-       a match, without consuming any characters from the subject string.  The
-       use  of subpatterns for more complicated assertions is described below.
+       The  final use of backslash is for certain simple assertions. An asser-
+       tion specifies a condition that has to be met at a particular point  in
+       a  match, without consuming any characters from the subject string. The
+       use of subpatterns for more complicated assertions is described  below.
        The backslashed assertions are:
 
          \b     matches at a word boundary
@@ -3777,49 +3872,49 @@ BACKSLASH
          \z     matches only at the end of the subject
          \G     matches at the first matching position in the subject
 
-       Inside a character class, \b has a different meaning;  it  matches  the
-       backspace  character.  If  any  other  of these assertions appears in a
-       character class, by default it matches the corresponding literal  char-
+       Inside  a  character  class, \b has a different meaning; it matches the
+       backspace character. If any other of  these  assertions  appears  in  a
+       character  class, by default it matches the corresponding literal char-
        acter  (for  example,  \B  matches  the  letter  B).  However,  if  the
-       PCRE_EXTRA option is set, an "invalid escape sequence" error is  gener-
+       PCRE_EXTRA  option is set, an "invalid escape sequence" error is gener-
        ated instead.
 
-       A  word  boundary is a position in the subject string where the current
-       character and the previous character do not both match \w or  \W  (i.e.
-       one  matches  \w  and the other matches \W), or the start or end of the
-       string if the first or last  character  matches  \w,  respectively.  In
-       UTF-8  mode,  the  meanings  of \w and \W can be changed by setting the
-       PCRE_UCP option. When this is done, it also affects \b and \B.  Neither
-       PCRE  nor  Perl has a separate "start of word" or "end of word" metase-
-       quence. However, whatever follows \b normally determines which  it  is.
+       A word boundary is a position in the subject string where  the  current
+       character  and  the previous character do not both match \w or \W (i.e.
+       one matches \w and the other matches \W), or the start or  end  of  the
+       string  if  the  first  or  last character matches \w, respectively. In
+       UTF-8 mode, the meanings of \w and \W can be  changed  by  setting  the
+       PCRE_UCP  option. When this is done, it also affects \b and \B. Neither
+       PCRE nor Perl has a separate "start of word" or "end of  word"  metase-
+       quence.  However,  whatever follows \b normally determines which it is.
        For example, the fragment \ba matches "a" at the start of a word.
 
-       The  \A,  \Z,  and \z assertions differ from the traditional circumflex
+       The \A, \Z, and \z assertions differ from  the  traditional  circumflex
        and dollar (described in the next section) in that they only ever match
-       at  the  very start and end of the subject string, whatever options are
-       set. Thus, they are independent of multiline mode. These  three  asser-
+       at the very start and end of the subject string, whatever  options  are
+       set.  Thus,  they are independent of multiline mode. These three asser-
        tions are not affected by the PCRE_NOTBOL or PCRE_NOTEOL options, which
-       affect only the behaviour of the circumflex and dollar  metacharacters.
-       However,  if the startoffset argument of pcre_exec() is non-zero, indi-
+       affect  only the behaviour of the circumflex and dollar metacharacters.
+       However, if the startoffset argument of pcre_exec() is non-zero,  indi-
        cating that matching is to start at a point other than the beginning of
-       the  subject,  \A  can never match. The difference between \Z and \z is
+       the subject, \A can never match. The difference between \Z  and  \z  is
        that \Z matches before a newline at the end of the string as well as at
        the very end, whereas \z matches only at the end.
 
-       The  \G assertion is true only when the current matching position is at
-       the start point of the match, as specified by the startoffset  argument
-       of  pcre_exec().  It  differs  from \A when the value of startoffset is
-       non-zero. By calling pcre_exec() multiple times with appropriate  argu-
+       The \G assertion is true only when the current matching position is  at
+       the  start point of the match, as specified by the startoffset argument
+       of pcre_exec(). It differs from \A when the  value  of  startoffset  is
+       non-zero.  By calling pcre_exec() multiple times with appropriate argu-
        ments, you can mimic Perl's /g option, and it is in this kind of imple-
        mentation where \G can be useful.
 
-       Note, however, that PCRE's interpretation of \G, as the  start  of  the
+       Note,  however,  that  PCRE's interpretation of \G, as the start of the
        current match, is subtly different from Perl's, which defines it as the
-       end of the previous match. In Perl, these can  be  different  when  the
-       previously  matched  string was empty. Because PCRE does just one match
+       end  of  the  previous  match. In Perl, these can be different when the
+       previously matched string was empty. Because PCRE does just  one  match
        at a time, it cannot reproduce this behaviour.
 
-       If all the alternatives of a pattern begin with \G, the  expression  is
+       If  all  the alternatives of a pattern begin with \G, the expression is
        anchored to the starting match position, and the "anchored" flag is set
        in the compiled regular expression.
 
@@ -3827,94 +3922,94 @@ BACKSLASH
 CIRCUMFLEX AND DOLLAR
 
        Outside a character class, in the default matching mode, the circumflex
-       character  is  an  assertion  that is true only if the current matching
-       point is at the start of the subject string. If the  startoffset  argu-
-       ment  of  pcre_exec()  is  non-zero,  circumflex can never match if the
-       PCRE_MULTILINE option is unset. Inside a  character  class,  circumflex
+       character is an assertion that is true only  if  the  current  matching
+       point  is  at the start of the subject string. If the startoffset argu-
+       ment of pcre_exec() is non-zero, circumflex  can  never  match  if  the
+       PCRE_MULTILINE  option  is  unset. Inside a character class, circumflex
        has an entirely different meaning (see below).
 
-       Circumflex  need  not be the first character of the pattern if a number
-       of alternatives are involved, but it should be the first thing in  each
-       alternative  in  which  it appears if the pattern is ever to match that
-       branch. If all possible alternatives start with a circumflex, that  is,
-       if  the  pattern  is constrained to match only at the start of the sub-
-       ject, it is said to be an "anchored" pattern.  (There  are  also  other
+       Circumflex need not be the first character of the pattern if  a  number
+       of  alternatives are involved, but it should be the first thing in each
+       alternative in which it appears if the pattern is ever  to  match  that
+       branch.  If all possible alternatives start with a circumflex, that is,
+       if the pattern is constrained to match only at the start  of  the  sub-
+       ject,  it  is  said  to be an "anchored" pattern. (There are also other
        constructs that can cause a pattern to be anchored.)
 
-       A  dollar  character  is  an assertion that is true only if the current
-       matching point is at the end of  the  subject  string,  or  immediately
+       A dollar character is an assertion that is true  only  if  the  current
+       matching  point  is  at  the  end of the subject string, or immediately
        before a newline at the end of the string (by default). Dollar need not
-       be the last character of the pattern if a number  of  alternatives  are
-       involved,  but  it  should  be  the last item in any branch in which it
+       be  the  last  character of the pattern if a number of alternatives are
+       involved, but it should be the last item in  any  branch  in  which  it
        appears. Dollar has no special meaning in a character class.
 
-       The meaning of dollar can be changed so that it  matches  only  at  the
-       very  end  of  the string, by setting the PCRE_DOLLAR_ENDONLY option at
+       The  meaning  of  dollar  can be changed so that it matches only at the
+       very end of the string, by setting the  PCRE_DOLLAR_ENDONLY  option  at
        compile time. This does not affect the \Z assertion.
 
        The meanings of the circumflex and dollar characters are changed if the
-       PCRE_MULTILINE  option  is  set.  When  this  is the case, a circumflex
-       matches immediately after internal newlines as well as at the start  of
-       the  subject  string.  It  does not match after a newline that ends the
-       string. A dollar matches before any newlines in the string, as well  as
-       at  the very end, when PCRE_MULTILINE is set. When newline is specified
-       as the two-character sequence CRLF, isolated CR and  LF  characters  do
+       PCRE_MULTILINE option is set. When  this  is  the  case,  a  circumflex
+       matches  immediately after internal newlines as well as at the start of
+       the subject string. It does not match after a  newline  that  ends  the
+       string.  A dollar matches before any newlines in the string, as well as
+       at the very end, when PCRE_MULTILINE is set. When newline is  specified
+       as  the  two-character  sequence CRLF, isolated CR and LF characters do
        not indicate newlines.
 
-       For  example, the pattern /^abc$/ matches the subject string "def\nabc"
-       (where \n represents a newline) in multiline mode, but  not  otherwise.
-       Consequently,  patterns  that  are anchored in single line mode because
-       all branches start with ^ are not anchored in  multiline  mode,  and  a
-       match  for  circumflex  is  possible  when  the startoffset argument of
-       pcre_exec() is non-zero. The PCRE_DOLLAR_ENDONLY option is  ignored  if
+       For example, the pattern /^abc$/ matches the subject string  "def\nabc"
+       (where  \n  represents a newline) in multiline mode, but not otherwise.
+       Consequently, patterns that are anchored in single  line  mode  because
+       all  branches  start  with  ^ are not anchored in multiline mode, and a
+       match for circumflex is  possible  when  the  startoffset  argument  of
+       pcre_exec()  is  non-zero. The PCRE_DOLLAR_ENDONLY option is ignored if
        PCRE_MULTILINE is set.
 
-       Note  that  the sequences \A, \Z, and \z can be used to match the start
-       and end of the subject in both modes, and if all branches of a  pattern
-       start  with  \A it is always anchored, whether or not PCRE_MULTILINE is
+       Note that the sequences \A, \Z, and \z can be used to match  the  start
+       and  end of the subject in both modes, and if all branches of a pattern
+       start with \A it is always anchored, whether or not  PCRE_MULTILINE  is
        set.
 
 
 FULL STOP (PERIOD, DOT) AND \N
 
        Outside a character class, a dot in the pattern matches any one charac-
-       ter  in  the subject string except (by default) a character that signi-
-       fies the end of a line. In UTF-8 mode, the  matched  character  may  be
+       ter in the subject string except (by default) a character  that  signi-
+       fies  the  end  of  a line. In UTF-8 mode, the matched character may be
        more than one byte long.
 
-       When  a line ending is defined as a single character, dot never matches
-       that character; when the two-character sequence CRLF is used, dot  does
-       not  match  CR  if  it  is immediately followed by LF, but otherwise it
-       matches all characters (including isolated CRs and LFs). When any  Uni-
-       code  line endings are being recognized, dot does not match CR or LF or
+       When a line ending is defined as a single character, dot never  matches
+       that  character; when the two-character sequence CRLF is used, dot does
+       not match CR if it is immediately followed  by  LF,  but  otherwise  it
+       matches  all characters (including isolated CRs and LFs). When any Uni-
+       code line endings are being recognized, dot does not match CR or LF  or
        any of the other line ending characters.
 
-       The behaviour of dot with regard to newlines can  be  changed.  If  the
-       PCRE_DOTALL  option  is  set,  a dot matches any one character, without
+       The  behaviour  of  dot  with regard to newlines can be changed. If the
+       PCRE_DOTALL option is set, a dot matches  any  one  character,  without
        exception. If the two-character sequence CRLF is present in the subject
        string, it takes two dots to match it.
 
-       The  handling of dot is entirely independent of the handling of circum-
-       flex and dollar, the only relationship being  that  they  both  involve
+       The handling of dot is entirely independent of the handling of  circum-
+       flex  and  dollar,  the  only relationship being that they both involve
        newlines. Dot has no special meaning in a character class.
 
-       The escape sequence \N always behaves as a dot does when PCRE_DOTALL is
-       not set. In other words, it matches any one character except  one  that
-       signifies the end of a line.
+       The escape sequence \N behaves like  a  dot,  except  that  it  is  not
+       affected  by  the  PCRE_DOTALL  option.  In other words, it matches any
+       character except one that signifies the end of a line.
 
 
 MATCHING A SINGLE BYTE
 
        Outside a character class, the escape sequence \C matches any one byte,
-       both in and out of UTF-8 mode. Unlike a  dot,  it  always  matches  any
-       line-ending  characters.  The  feature  is provided in Perl in order to
-       match individual bytes in UTF-8 mode. Because it breaks up UTF-8  char-
-       acters  into individual bytes, what remains in the string may be a mal-
-       formed UTF-8 string. For this reason, the \C escape  sequence  is  best
-       avoided.
-
-       PCRE  does  not  allow \C to appear in lookbehind assertions (described
-       below), because in UTF-8 mode this would make it impossible  to  calcu-
+       both  in  and  out  of  UTF-8 mode. Unlike a dot, it always matches any
+       line-ending characters. The feature is provided in  Perl  in  order  to
+       match  individual bytes in UTF-8 mode. Because it breaks up UTF-8 char-
+       acters into individual bytes, the rest of the string may start  with  a
+       malformed  UTF-8  character. For this reason, the \C escape sequence is
+       best avoided.
+
+       PCRE does not allow \C to appear in  lookbehind  assertions  (described
+       below),  because  in UTF-8 mode this would make it impossible to calcu-
        late the length of the lookbehind.
 
 
@@ -3924,97 +4019,109 @@ SQUARE BRACKETS AND CHARACTER CLASSES
        closing square bracket. A closing square bracket on its own is not spe-
        cial by default.  However, if the PCRE_JAVASCRIPT_COMPAT option is set,
        a lone closing square bracket causes a compile-time error. If a closing
-       square  bracket  is required as a member of the class, it should be the
-       first data character in the class  (after  an  initial  circumflex,  if
+       square bracket is required as a member of the class, it should  be  the
+       first  data  character  in  the  class (after an initial circumflex, if
        present) or escaped with a backslash.
 
-       A  character  class matches a single character in the subject. In UTF-8
+       A character class matches a single character in the subject.  In  UTF-8
        mode, the character may be more than one byte long. A matched character
        must be in the set of characters defined by the class, unless the first
-       character in the class definition is a circumflex, in  which  case  the
-       subject  character  must  not  be in the set defined by the class. If a
-       circumflex is actually required as a member of the class, ensure it  is
+       character  in  the  class definition is a circumflex, in which case the
+       subject character must not be in the set defined by  the  class.  If  a
+       circumflex  is actually required as a member of the class, ensure it is
        not the first character, or escape it with a backslash.
 
-       For  example, the character class [aeiou] matches any lower case vowel,
-       while [^aeiou] matches any character that is not a  lower  case  vowel.
+       For example, the character class [aeiou] matches any lower case  vowel,
+       while  [^aeiou]  matches  any character that is not a lower case vowel.
        Note that a circumflex is just a convenient notation for specifying the
-       characters that are in the class by enumerating those that are  not.  A
-       class  that starts with a circumflex is not an assertion; it still con-
-       sumes a character from the subject string, and therefore  it  fails  if
+       characters  that  are in the class by enumerating those that are not. A
+       class that starts with a circumflex is not an assertion; it still  con-
+       sumes  a  character  from the subject string, and therefore it fails if
        the current pointer is at the end of the string.
 
-       In  UTF-8 mode, characters with values greater than 255 can be included
-       in a class as a literal string of bytes, or by using the  \x{  escaping
+       In UTF-8 mode, characters with values greater than 255 can be  included
+       in  a  class as a literal string of bytes, or by using the \x{ escaping
        mechanism.
 
-       When  caseless  matching  is set, any letters in a class represent both
-       their upper case and lower case versions, so for  example,  a  caseless
-       [aeiou]  matches  "A"  as well as "a", and a caseless [^aeiou] does not
-       match "A", whereas a caseful version would. In UTF-8 mode, PCRE  always
-       understands  the  concept  of case for characters whose values are less
-       than 128, so caseless matching is always possible. For characters  with
-       higher  values,  the  concept  of case is supported if PCRE is compiled
-       with Unicode property support, but not otherwise.  If you want  to  use
-       caseless  matching  in UTF8-mode for characters 128 and above, you must
-       ensure that PCRE is compiled with Unicode property support as  well  as
+       When caseless matching is set, any letters in a  class  represent  both
+       their  upper  case  and lower case versions, so for example, a caseless
+       [aeiou] matches "A" as well as "a", and a caseless  [^aeiou]  does  not
+       match  "A", whereas a caseful version would. In UTF-8 mode, PCRE always
+       understands the concept of case for characters whose  values  are  less
+       than  128, so caseless matching is always possible. For characters with
+       higher values, the concept of case is supported  if  PCRE  is  compiled
+       with  Unicode  property support, but not otherwise.  If you want to use
+       caseless matching in UTF8-mode for characters 128 and above,  you  must
+       ensure  that  PCRE is compiled with Unicode property support as well as
        with UTF-8 support.
 
-       Characters  that  might  indicate  line breaks are never treated in any
-       special way  when  matching  character  classes,  whatever  line-ending
-       sequence  is  in  use,  and  whatever  setting  of  the PCRE_DOTALL and
+       Characters that might indicate line breaks are  never  treated  in  any
+       special  way  when  matching  character  classes,  whatever line-ending
+       sequence is in  use,  and  whatever  setting  of  the  PCRE_DOTALL  and
        PCRE_MULTILINE options is used. A class such as [^a] always matches one
        of these characters.
 
-       The  minus (hyphen) character can be used to specify a range of charac-
-       ters in a character  class.  For  example,  [d-m]  matches  any  letter
-       between  d  and  m,  inclusive.  If  a minus character is required in a
-       class, it must be escaped with a backslash  or  appear  in  a  position
-       where  it cannot be interpreted as indicating a range, typically as the
+       The minus (hyphen) character can be used to specify a range of  charac-
+       ters  in  a  character  class.  For  example,  [d-m] matches any letter
+       between d and m, inclusive. If a  minus  character  is  required  in  a
+       class,  it  must  be  escaped  with a backslash or appear in a position
+       where it cannot be interpreted as indicating a range, typically as  the
        first or last character in the class.
 
        It is not possible to have the literal character "]" as the end charac-
-       ter  of a range. A pattern such as [W-]46] is interpreted as a class of
-       two characters ("W" and "-") followed by a literal string "46]", so  it
-       would  match  "W46]"  or  "-46]". However, if the "]" is escaped with a
-       backslash it is interpreted as the end of range, so [W-\]46] is  inter-
-       preted  as a class containing a range followed by two other characters.
-       The octal or hexadecimal representation of "]" can also be used to  end
+       ter of a range. A pattern such as [W-]46] is interpreted as a class  of
+       two  characters ("W" and "-") followed by a literal string "46]", so it
+       would match "W46]" or "-46]". However, if the "]"  is  escaped  with  a
+       backslash  it is interpreted as the end of range, so [W-\]46] is inter-
+       preted as a class containing a range followed by two other  characters.
+       The  octal or hexadecimal representation of "]" can also be used to end
        a range.
 
-       Ranges  operate in the collating sequence of character values. They can
-       also  be  used  for  characters  specified  numerically,  for   example
-       [\000-\037].  In UTF-8 mode, ranges can include characters whose values
+       Ranges operate in the collating sequence of character values. They  can
+       also   be  used  for  characters  specified  numerically,  for  example
+       [\000-\037]. In UTF-8 mode, ranges can include characters whose  values
        are greater than 255, for example [\x{100}-\x{2ff}].
 
        If a range that includes letters is used when caseless matching is set,
        it matches the letters in either case. For example, [W-c] is equivalent
-       to [][\\^_`wxyzabc], matched caselessly,  and  in  non-UTF-8  mode,  if
-       character  tables  for  a French locale are in use, [\xc8-\xcb] matches
-       accented E characters in both cases. In UTF-8 mode, PCRE  supports  the
-       concept  of  case for characters with values greater than 128 only when
+       to  [][\\^_`wxyzabc],  matched  caselessly,  and  in non-UTF-8 mode, if
+       character tables for a French locale are in  use,  [\xc8-\xcb]  matches
+       accented  E  characters in both cases. In UTF-8 mode, PCRE supports the
+       concept of case for characters with values greater than 128  only  when
        it is compiled with Unicode property support.
 
-       The character types \d, \D, \h, \H, \p, \P, \s, \S, \v, \V, \w, and  \W
-       may  also appear in a character class, and add the characters that they
-       match to the class. For example,  [\dABCDEF]  matches  any  hexadecimal
-       digit.  A circumflex can conveniently be used with the upper case char-
-       acter types to specify a more restricted set  of  characters  than  the
-       matching  lower  case  type.  For example, the class [^\W_] matches any
-       letter or digit, but not underscore.
-
-       The only metacharacters that are recognized in  character  classes  are
-       backslash,  hyphen  (only  where  it can be interpreted as specifying a
-       range), circumflex (only at the start), opening  square  bracket  (only
-       when  it can be interpreted as introducing a POSIX class name - see the
-       next section), and the terminating  closing  square  bracket.  However,
+       The  character escape sequences \d, \D, \h, \H, \p, \P, \s, \S, \v, \V,
+       \w, and \W may appear in a character class, and add the characters that
+       they  match to the class. For example, [\dABCDEF] matches any hexadeci-
+       mal digit. In UTF-8 mode, the PCRE_UCP option affects the  meanings  of
+       \d,  \s,  \w  and  their upper case partners, just as it does when they
+       appear outside a character class, as described in the section  entitled
+       "Generic character types" above. The escape sequence \b has a different
+       meaning inside a character class; it matches the  backspace  character.
+       The  sequences  \B,  \N,  \R, and \X are not special inside a character
+       class. Like any other unrecognized escape sequences, they  are  treated
+       as  the literal characters "B", "N", "R", and "X" by default, but cause
+       an error if the PCRE_EXTRA option is set.
+
+       A circumflex can conveniently be used with  the  upper  case  character
+       types  to specify a more restricted set of characters than the matching
+       lower case type.  For example, the class [^\W_] matches any  letter  or
+       digit, but not underscore, whereas [\w] includes underscore. A positive
+       character class should be read as "something OR something OR ..." and a
+       negative class as "NOT something AND NOT something AND NOT ...".
+
+       The  only  metacharacters  that are recognized in character classes are
+       backslash, hyphen (only where it can be  interpreted  as  specifying  a
+       range),  circumflex  (only  at the start), opening square bracket (only
+       when it can be interpreted as introducing a POSIX class name - see  the
+       next  section),  and  the  terminating closing square bracket. However,
        escaping other non-alphanumeric characters does no harm.
 
 
 POSIX CHARACTER CLASSES
 
        Perl supports the POSIX notation for character classes. This uses names
-       enclosed by [: and :] within the enclosing square brackets.  PCRE  also
+       enclosed  by  [: and :] within the enclosing square brackets. PCRE also
        supports this notation. For example,
 
          [01[:alpha:]%]
@@ -4037,24 +4144,24 @@ POSIX CHARACTER CLASSES
          word     "word" characters (same as \w)
          xdigit   hexadecimal digits
 
-       The "space" characters are HT (9), LF (10), VT (11), FF (12), CR  (13),
-       and  space  (32). Notice that this list includes the VT character (code
+       The  "space" characters are HT (9), LF (10), VT (11), FF (12), CR (13),
+       and space (32). Notice that this list includes the VT  character  (code
        11). This makes "space" different to \s, which does not include VT (for
        Perl compatibility).
 
-       The  name  "word"  is  a Perl extension, and "blank" is a GNU extension
-       from Perl 5.8. Another Perl extension is negation, which  is  indicated
+       The name "word" is a Perl extension, and "blank"  is  a  GNU  extension
+       from  Perl  5.8. Another Perl extension is negation, which is indicated
        by a ^ character after the colon. For example,
 
          [12[:^digit:]]
 
-       matches  "1", "2", or any non-digit. PCRE (and Perl) also recognize the
+       matches "1", "2", or any non-digit. PCRE (and Perl) also recognize  the
        POSIX syntax [.ch.] and [=ch=] where "ch" is a "collating element", but
        these are not supported, and an error is given if they are encountered.
 
-       By  default,  in UTF-8 mode, characters with values greater than 128 do
-       not match any of the POSIX character classes. However, if the  PCRE_UCP
-       option  is passed to pcre_compile(), some of the classes are changed so
+       By default, in UTF-8 mode, characters with values greater than  128  do
+       not  match any of the POSIX character classes. However, if the PCRE_UCP
+       option is passed to pcre_compile(), some of the classes are changed  so
        that Unicode character properties are used. This is achieved by replac-
        ing the POSIX classes by other sequences, as follows:
 
@@ -4067,31 +4174,31 @@ POSIX CHARACTER CLASSES
          [:upper:]  becomes  \p{Lu}
          [:word:]   becomes  \p{Xwd}
 
-       Negated  versions,  such  as [:^alpha:] use \P instead of \p. The other
+       Negated versions, such as [:^alpha:] use \P instead of  \p.  The  other
        POSIX classes are unchanged, and match only characters with code points
        less than 128.
 
 
 VERTICAL BAR
 
-       Vertical  bar characters are used to separate alternative patterns. For
+       Vertical bar characters are used to separate alternative patterns.  For
        example, the pattern
 
          gilbert|sullivan
 
-       matches either "gilbert" or "sullivan". Any number of alternatives  may
-       appear,  and  an  empty  alternative  is  permitted (matching the empty
+       matches  either "gilbert" or "sullivan". Any number of alternatives may
+       appear, and an empty  alternative  is  permitted  (matching  the  empty
        string). The matching process tries each alternative in turn, from left
-       to  right, and the first one that succeeds is used. If the alternatives
-       are within a subpattern (defined below), "succeeds" means matching  the
+       to right, and the first one that succeeds is used. If the  alternatives
+       are  within a subpattern (defined below), "succeeds" means matching the
        rest of the main pattern as well as the alternative in the subpattern.
 
 
 INTERNAL OPTION SETTING
 
-       The  settings  of  the  PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and
-       PCRE_EXTENDED options (which are Perl-compatible) can be  changed  from
-       within  the  pattern  by  a  sequence  of  Perl option letters enclosed
+       The settings of the  PCRE_CASELESS,  PCRE_MULTILINE,  PCRE_DOTALL,  and
+       PCRE_EXTENDED  options  (which are Perl-compatible) can be changed from
+       within the pattern by  a  sequence  of  Perl  option  letters  enclosed
        between "(?" and ")".  The option letters are
 
          i  for PCRE_CASELESS
@@ -4101,47 +4208,47 @@ INTERNAL OPTION SETTING
 
        For example, (?im) sets caseless, multiline matching. It is also possi-
        ble to unset these options by preceding the letter with a hyphen, and a
-       combined setting and unsetting such as (?im-sx), which sets  PCRE_CASE-
-       LESS  and PCRE_MULTILINE while unsetting PCRE_DOTALL and PCRE_EXTENDED,
-       is also permitted. If a  letter  appears  both  before  and  after  the
+       combined  setting and unsetting such as (?im-sx), which sets PCRE_CASE-
+       LESS and PCRE_MULTILINE while unsetting PCRE_DOTALL and  PCRE_EXTENDED,
+       is  also  permitted.  If  a  letter  appears  both before and after the
        hyphen, the option is unset.
 
-       The  PCRE-specific options PCRE_DUPNAMES, PCRE_UNGREEDY, and PCRE_EXTRA
-       can be changed in the same way as the Perl-compatible options by  using
+       The PCRE-specific options PCRE_DUPNAMES, PCRE_UNGREEDY, and  PCRE_EXTRA
+       can  be changed in the same way as the Perl-compatible options by using
        the characters J, U and X respectively.
 
-       When  one  of  these  option  changes occurs at top level (that is, not
-       inside subpattern parentheses), the change applies to the remainder  of
+       When one of these option changes occurs at  top  level  (that  is,  not
+       inside  subpattern parentheses), the change applies to the remainder of
        the pattern that follows. If the change is placed right at the start of
        a pattern, PCRE extracts it into the global options (and it will there-
        fore show up in data extracted by the pcre_fullinfo() function).
 
-       An  option  change  within a subpattern (see below for a description of
-       subpatterns) affects only that part of the current pattern that follows
-       it, so
+       An option change within a subpattern (see below for  a  description  of
+       subpatterns)  affects only that part of the subpattern that follows it,
+       so
 
          (a(?i)b)c
 
        matches abc and aBc and no other strings (assuming PCRE_CASELESS is not
-       used).  By this means, options can be made to have  different  settings
-       in  different parts of the pattern. Any changes made in one alternative
-       do carry on into subsequent branches within the  same  subpattern.  For
+       used).   By  this means, options can be made to have different settings
+       in different parts of the pattern. Any changes made in one  alternative
+       do  carry  on  into subsequent branches within the same subpattern. For
        example,
 
          (a(?i)b|c)
 
-       matches  "ab",  "aB",  "c",  and "C", even though when matching "C" the
-       first branch is abandoned before the option setting.  This  is  because
-       the  effects  of option settings happen at compile time. There would be
+       matches "ab", "aB", "c", and "C", even though  when  matching  "C"  the
+       first  branch  is  abandoned before the option setting. This is because
+       the effects of option settings happen at compile time. There  would  be
        some very weird behaviour otherwise.
 
-       Note: There are other PCRE-specific options that  can  be  set  by  the
-       application  when  the  compile  or match functions are called. In some
+       Note:  There  are  other  PCRE-specific  options that can be set by the
+       application when the compile or match functions  are  called.  In  some
        cases the pattern can contain special leading sequences such as (*CRLF)
-       to  override  what  the application has set or what has been defaulted.
-       Details are given in the section entitled  "Newline  sequences"  above.
-       There  are  also  the  (*UTF8) and (*UCP) leading sequences that can be
-       used to set UTF-8 and Unicode property modes; they  are  equivalent  to
+       to override what the application has set or what  has  been  defaulted.
+       Details  are  given  in the section entitled "Newline sequences" above.
+       There are also the (*UTF8) and (*UCP) leading  sequences  that  can  be
+       used  to  set  UTF-8 and Unicode property modes; they are equivalent to
        setting the PCRE_UTF8 and the PCRE_UCP options, respectively.
 
 
@@ -4154,19 +4261,16 @@ SUBPATTERNS
 
          cat(aract|erpillar|)
 
-       matches one of the words "cat", "cataract", or  "caterpillar".  Without
-       the  parentheses,  it  would  match  "cataract", "erpillar" or an empty
-       string.
+       matches  "cataract",  "caterpillar", or "cat". Without the parentheses,
+       it would match "cataract", "erpillar" or an empty string.
 
        2. It sets up the subpattern as  a  capturing  subpattern.  This  means
        that,  when  the  whole  pattern  matches,  that portion of the subject
        string that matched the subpattern is passed back to the caller via the
        ovector  argument  of pcre_exec(). Opening parentheses are counted from
        left to right (starting from 1) to obtain  numbers  for  the  capturing
-       subpatterns.
-
-       For  example,  if the string "the red king" is matched against the pat-
-       tern
+       subpatterns.  For  example,  if  the  string  "the red king" is matched
+       against the pattern
 
          the ((red|white) (king|queen))
 
@@ -4215,9 +4319,9 @@ DUPLICATE SUBPATTERN NUMBERS
        matched. This construct is useful when you want to  capture  part,  but
        not all, of one of a number of alternatives. Inside a (?| group, paren-
        theses are numbered as usual, but the number is reset at the  start  of
-       each  branch. The numbers of any capturing buffers that follow the sub-
-       pattern start after the highest number used in any branch. The  follow-
-       ing  example  is taken from the Perl documentation.  The numbers under-
+       each  branch.  The numbers of any capturing parentheses that follow the
+       subpattern start after the highest number used in any branch. The  fol-
+       lowing example is taken from the Perl documentation. The numbers under-
        neath show in which buffer the captured content will be stored.
 
          # before  ---------------branch-reset----------- after
@@ -4324,7 +4428,7 @@ REPETITION
          the \C escape sequence
          the \X escape sequence (in UTF-8 mode with Unicode properties)
          the \R escape sequence
-         an escape such as \d that matches a single character
+         an escape such as \d or \pL that matches a single character
          a character class
          a back reference (see next section)
          a parenthesized subpattern (unless it is an assertion)
@@ -4364,34 +4468,35 @@ REPETITION
        The quantifier {0} is permitted, causing the expression to behave as if
        the previous item and the quantifier were not present. This may be use-
        ful for subpatterns that are referenced as subroutines  from  elsewhere
-       in the pattern. Items other than subpatterns that have a {0} quantifier
-       are omitted from the compiled pattern.
+       in the pattern (but see also the section entitled "Defining subpatterns
+       for use by reference only" below). Items other  than  subpatterns  that
+       have a {0} quantifier are omitted from the compiled pattern.
 
-       For convenience, the three most common quantifiers have  single-charac-
+       For  convenience, the three most common quantifiers have single-charac-
        ter abbreviations:
 
          *    is equivalent to {0,}
          +    is equivalent to {1,}
          ?    is equivalent to {0,1}
 
-       It  is  possible  to construct infinite loops by following a subpattern
+       It is possible to construct infinite loops by  following  a  subpattern
        that can match no characters with a quantifier that has no upper limit,
        for example:
 
          (a?)*
 
        Earlier versions of Perl and PCRE used to give an error at compile time
-       for such patterns. However, because there are cases where this  can  be
-       useful,  such  patterns  are now accepted, but if any repetition of the
-       subpattern does in fact match no characters, the loop is forcibly  bro-
+       for  such  patterns. However, because there are cases where this can be
+       useful, such patterns are now accepted, but if any  repetition  of  the
+       subpattern  does in fact match no characters, the loop is forcibly bro-
        ken.
 
-       By  default,  the quantifiers are "greedy", that is, they match as much
-       as possible (up to the maximum  number  of  permitted  times),  without
-       causing  the  rest of the pattern to fail. The classic example of where
+       By default, the quantifiers are "greedy", that is, they match  as  much
+       as  possible  (up  to  the  maximum number of permitted times), without
+       causing the rest of the pattern to fail. The classic example  of  where
        this gives problems is in trying to match comments in C programs. These
-       appear  between  /*  and  */ and within the comment, individual * and /
-       characters may appear. An attempt to match C comments by  applying  the
+       appear between /* and */ and within the comment,  individual  *  and  /
+       characters  may  appear. An attempt to match C comments by applying the
        pattern
 
          /\*.*\*/
@@ -4400,19 +4505,19 @@ REPETITION
 
          /* first comment */  not comment  /* second comment */
 
-       fails,  because it matches the entire string owing to the greediness of
+       fails, because it matches the entire string owing to the greediness  of
        the .*  item.
 
-       However, if a quantifier is followed by a question mark, it  ceases  to
+       However,  if  a quantifier is followed by a question mark, it ceases to
        be greedy, and instead matches the minimum number of times possible, so
        the pattern
 
          /\*.*?\*/
 
-       does the right thing with the C comments. The meaning  of  the  various
-       quantifiers  is  not  otherwise  changed,  just the preferred number of
-       matches.  Do not confuse this use of question mark with its  use  as  a
-       quantifier  in its own right. Because it has two uses, it can sometimes
+       does  the  right  thing with the C comments. The meaning of the various
+       quantifiers is not otherwise changed,  just  the  preferred  number  of
+       matches.   Do  not  confuse this use of question mark with its use as a
+       quantifier in its own right. Because it has two uses, it can  sometimes
        appear doubled, as in
 
          \d??\d
@@ -4420,36 +4525,36 @@ REPETITION
        which matches one digit by preference, but can match two if that is the
        only way the rest of the pattern matches.
 
-       If  the PCRE_UNGREEDY option is set (an option that is not available in
-       Perl), the quantifiers are not greedy by default, but  individual  ones
-       can  be  made  greedy  by following them with a question mark. In other
+       If the PCRE_UNGREEDY option is set (an option that is not available  in
+       Perl),  the  quantifiers are not greedy by default, but individual ones
+       can be made greedy by following them with a  question  mark.  In  other
        words, it inverts the default behaviour.
 
-       When a parenthesized subpattern is quantified  with  a  minimum  repeat
-       count  that is greater than 1 or with a limited maximum, more memory is
-       required for the compiled pattern, in proportion to  the  size  of  the
+       When  a  parenthesized  subpattern  is quantified with a minimum repeat
+       count that is greater than 1 or with a limited maximum, more memory  is
+       required  for  the  compiled  pattern, in proportion to the size of the
        minimum or maximum.
 
        If a pattern starts with .* or .{0,} and the PCRE_DOTALL option (equiv-
-       alent to Perl's /s) is set, thus allowing the dot  to  match  newlines,
-       the  pattern  is  implicitly anchored, because whatever follows will be
-       tried against every character position in the subject string, so  there
-       is  no  point  in  retrying the overall match at any position after the
-       first. PCRE normally treats such a pattern as though it  were  preceded
+       alent  to  Perl's  /s) is set, thus allowing the dot to match newlines,
+       the pattern is implicitly anchored, because whatever  follows  will  be
+       tried  against every character position in the subject string, so there
+       is no point in retrying the overall match at  any  position  after  the
+       first.  PCRE  normally treats such a pattern as though it were preceded
        by \A.
 
-       In  cases  where  it  is known that the subject string contains no new-
-       lines, it is worth setting PCRE_DOTALL in order to  obtain  this  opti-
+       In cases where it is known that the subject  string  contains  no  new-
+       lines,  it  is  worth setting PCRE_DOTALL in order to obtain this opti-
        mization, or alternatively using ^ to indicate anchoring explicitly.
 
-       However,  there is one situation where the optimization cannot be used.
+       However, there is one situation where the optimization cannot be  used.
        When .*  is inside capturing parentheses that are the subject of a back
        reference elsewhere in the pattern, a match at the start may fail where
        a later one succeeds. Consider, for example:
 
          (.*)abc\1
 
-       If the subject is "xyz123abc123" the match point is the fourth  charac-
+       If  the subject is "xyz123abc123" the match point is the fourth charac-
        ter. For this reason, such a pattern is not implicitly anchored.
 
        When a capturing subpattern is repeated, the value captured is the sub-
@@ -4458,8 +4563,8 @@ REPETITION
          (tweedle[dume]{3}\s*)+
 
        has matched "tweedledum tweedledee" the value of the captured substring
-       is  "tweedledee".  However,  if there are nested capturing subpatterns,
-       the corresponding captured values may have been set in previous  itera-
+       is "tweedledee". However, if there are  nested  capturing  subpatterns,
+       the  corresponding captured values may have been set in previous itera-
        tions. For example, after
 
          /(a|(b))+/
@@ -4469,53 +4574,53 @@ REPETITION
 
 ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS
 
-       With  both  maximizing ("greedy") and minimizing ("ungreedy" or "lazy")
-       repetition, failure of what follows normally causes the  repeated  item
-       to  be  re-evaluated to see if a different number of repeats allows the
-       rest of the pattern to match. Sometimes it is useful to  prevent  this,
-       either  to  change the nature of the match, or to cause it fail earlier
-       than it otherwise might, when the author of the pattern knows there  is
+       With both maximizing ("greedy") and minimizing ("ungreedy"  or  "lazy")
+       repetition,  failure  of what follows normally causes the repeated item
+       to be re-evaluated to see if a different number of repeats  allows  the
+       rest  of  the pattern to match. Sometimes it is useful to prevent this,
+       either to change the nature of the match, or to cause it  fail  earlier
+       than  it otherwise might, when the author of the pattern knows there is
        no point in carrying on.
 
-       Consider,  for  example, the pattern \d+foo when applied to the subject
+       Consider, for example, the pattern \d+foo when applied to  the  subject
        line
 
          123456bar
 
        After matching all 6 digits and then failing to match "foo", the normal
-       action  of  the matcher is to try again with only 5 digits matching the
-       \d+ item, and then with  4,  and  so  on,  before  ultimately  failing.
-       "Atomic  grouping"  (a  term taken from Jeffrey Friedl's book) provides
-       the means for specifying that once a subpattern has matched, it is  not
+       action of the matcher is to try again with only 5 digits  matching  the
+       \d+  item,  and  then  with  4,  and  so on, before ultimately failing.
+       "Atomic grouping" (a term taken from Jeffrey  Friedl's  book)  provides
+       the  means for specifying that once a subpattern has matched, it is not
        to be re-evaluated in this way.
 
-       If  we  use atomic grouping for the previous example, the matcher gives
-       up immediately on failing to match "foo" the first time.  The  notation
+       If we use atomic grouping for the previous example, the  matcher  gives
+       up  immediately  on failing to match "foo" the first time. The notation
        is a kind of special parenthesis, starting with (?> as in this example:
 
          (?>\d+)foo
 
-       This  kind  of  parenthesis "locks up" the  part of the pattern it con-
-       tains once it has matched, and a failure further into  the  pattern  is
-       prevented  from  backtracking into it. Backtracking past it to previous
+       This kind of parenthesis "locks up" the  part of the  pattern  it  con-
+       tains  once  it  has matched, and a failure further into the pattern is
+       prevented from backtracking into it. Backtracking past it  to  previous
        items, however, works as normal.
 
-       An alternative description is that a subpattern of  this  type  matches
-       the  string  of  characters  that an identical standalone pattern would
+       An  alternative  description  is that a subpattern of this type matches
+       the string of characters that an  identical  standalone  pattern  would
        match, if anchored at the current point in the subject string.
 
        Atomic grouping subpatterns are not capturing subpatterns. Simple cases
        such as the above example can be thought of as a maximizing repeat that
-       must swallow everything it can. So, while both \d+ and  \d+?  are  pre-
-       pared  to  adjust  the number of digits they match in order to make the
+       must  swallow  everything  it can. So, while both \d+ and \d+? are pre-
+       pared to adjust the number of digits they match in order  to  make  the
        rest of the pattern match, (?>\d+) can only match an entire sequence of
        digits.
 
-       Atomic  groups in general can of course contain arbitrarily complicated
-       subpatterns, and can be nested. However, when  the  subpattern  for  an
+       Atomic groups in general can of course contain arbitrarily  complicated
+       subpatterns,  and  can  be  nested. However, when the subpattern for an
        atomic group is just a single repeated item, as in the example above, a
-       simpler notation, called a "possessive quantifier" can  be  used.  This
-       consists  of  an  additional  + character following a quantifier. Using
+       simpler  notation,  called  a "possessive quantifier" can be used. This
+       consists of an additional + character  following  a  quantifier.  Using
        this notation, the previous example can be rewritten as
 
          \d++foo
@@ -4525,45 +4630,45 @@ ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS
 
          (abc|xyz){2,3}+
 
-       Possessive   quantifiers   are   always  greedy;  the  setting  of  the
+       Possessive  quantifiers  are  always  greedy;  the   setting   of   the
        PCRE_UNGREEDY option is ignored. They are a convenient notation for the
-       simpler  forms  of atomic group. However, there is no difference in the
-       meaning of a possessive quantifier and  the  equivalent  atomic  group,
-       though  there  may  be a performance difference; possessive quantifiers
+       simpler forms of atomic group. However, there is no difference  in  the
+       meaning  of  a  possessive  quantifier and the equivalent atomic group,
+       though there may be a performance  difference;  possessive  quantifiers
        should be slightly faster.
 
-       The possessive quantifier syntax is an extension to the Perl  5.8  syn-
-       tax.   Jeffrey  Friedl  originated the idea (and the name) in the first
+       The  possessive  quantifier syntax is an extension to the Perl 5.8 syn-
+       tax.  Jeffrey Friedl originated the idea (and the name)  in  the  first
        edition of his book. Mike McCloskey liked it, so implemented it when he
-       built  Sun's Java package, and PCRE copied it from there. It ultimately
+       built Sun's Java package, and PCRE copied it from there. It  ultimately
        found its way into Perl at release 5.10.
 
        PCRE has an optimization that automatically "possessifies" certain sim-
-       ple  pattern  constructs.  For  example, the sequence A+B is treated as
-       A++B because there is no point in backtracking into a sequence  of  A's
+       ple pattern constructs. For example, the sequence  A+B  is  treated  as
+       A++B  because  there is no point in backtracking into a sequence of A's
        when B must follow.
 
-       When  a  pattern  contains an unlimited repeat inside a subpattern that
-       can itself be repeated an unlimited number of  times,  the  use  of  an
-       atomic  group  is  the  only way to avoid some failing matches taking a
+       When a pattern contains an unlimited repeat inside  a  subpattern  that
+       can  itself  be  repeated  an  unlimited number of times, the use of an
+       atomic group is the only way to avoid some  failing  matches  taking  a
        very long time indeed. The pattern
 
          (\D+|<\d+>)*[!?]
 
-       matches an unlimited number of substrings that either consist  of  non-
-       digits,  or  digits  enclosed in <>, followed by either ! or ?. When it
+       matches  an  unlimited number of substrings that either consist of non-
+       digits, or digits enclosed in <>, followed by either ! or  ?.  When  it
        matches, it runs quickly. However, if it is applied to
 
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
-       it takes a long time before reporting  failure.  This  is  because  the
-       string  can be divided between the internal \D+ repeat and the external
-       * repeat in a large number of ways, and all  have  to  be  tried.  (The
-       example  uses  [!?]  rather than a single character at the end, because
-       both PCRE and Perl have an optimization that allows  for  fast  failure
-       when  a single character is used. They remember the last single charac-
-       ter that is required for a match, and fail early if it is  not  present
-       in  the  string.)  If  the pattern is changed so that it uses an atomic
+       it  takes  a  long  time  before reporting failure. This is because the
+       string can be divided between the internal \D+ repeat and the  external
+       *  repeat  in  a  large  number of ways, and all have to be tried. (The
+       example uses [!?] rather than a single character at  the  end,  because
+       both  PCRE  and  Perl have an optimization that allows for fast failure
+       when a single character is used. They remember the last single  charac-
+       ter  that  is required for a match, and fail early if it is not present
+       in the string.) If the pattern is changed so that  it  uses  an  atomic
        group, like this:
 
          ((?>\D+)|<\d+>)*[!?]
@@ -4575,31 +4680,30 @@ BACK REFERENCES
 
        Outside a character class, a backslash followed by a digit greater than
        0 (and possibly further digits) is a back reference to a capturing sub-
-       pattern earlier (that is, to its left) in the pattern,  provided  there
+       pattern  earlier  (that is, to its left) in the pattern, provided there
        have been that many previous capturing left parentheses.
 
        However, if the decimal number following the backslash is less than 10,
-       it is always taken as a back reference, and causes  an  error  only  if
-       there  are  not that many capturing left parentheses in the entire pat-
-       tern. In other words, the parentheses that are referenced need  not  be
-       to  the left of the reference for numbers less than 10. A "forward back
-       reference" of this type can make sense when a  repetition  is  involved
-       and  the  subpattern to the right has participated in an earlier itera-
+       it  is  always  taken  as a back reference, and causes an error only if
+       there are not that many capturing left parentheses in the  entire  pat-
+       tern.  In  other words, the parentheses that are referenced need not be
+       to the left of the reference for numbers less than 10. A "forward  back
+       reference"  of  this  type can make sense when a repetition is involved
+       and the subpattern to the right has participated in an  earlier  itera-
        tion.
 
-       It is not possible to have a numerical "forward back  reference"  to  a
-       subpattern  whose  number  is  10  or  more using this syntax because a
-       sequence such as \50 is interpreted as a character  defined  in  octal.
+       It  is  not  possible to have a numerical "forward back reference" to a
+       subpattern whose number is 10 or  more  using  this  syntax  because  a
+       sequence  such  as  \50 is interpreted as a character defined in octal.
        See the subsection entitled "Non-printing characters" above for further
-       details of the handling of digits following a backslash.  There  is  no
-       such  problem  when named parentheses are used. A back reference to any
+       details  of  the  handling of digits following a backslash. There is no
+       such problem when named parentheses are used. A back reference  to  any
        subpattern is possible using named parentheses (see below).
 
-       Another way of avoiding the ambiguity inherent in  the  use  of  digits
-       following a backslash is to use the \g escape sequence, which is a fea-
-       ture introduced in Perl 5.10.  This  escape  must  be  followed  by  an
-       unsigned  number  or  a negative number, optionally enclosed in braces.
-       These examples are all identical:
+       Another  way  of  avoiding  the ambiguity inherent in the use of digits
+       following a backslash is to use the \g  escape  sequence.  This  escape
+       must be followed by an unsigned number or a negative number, optionally
+       enclosed in braces. These examples are all identical:
 
          (ring), \1
          (ring), \g1
@@ -4613,33 +4717,34 @@ BACK REFERENCES
          (abc(def)ghi)\g{-1}
 
        The sequence \g{-1} is a reference to the most recently started captur-
-       ing subpattern before \g, that is, is it equivalent to  \2.  Similarly,
-       \g{-2} would be equivalent to \1. The use of relative references can be
-       helpful in long patterns, and also in  patterns  that  are  created  by
-       joining together fragments that contain references within themselves.
-
-       A  back  reference matches whatever actually matched the capturing sub-
-       pattern in the current subject string, rather  than  anything  matching
+       ing subpattern before \g, that is, is it equivalent to \2 in this exam-
+       ple.   Similarly, \g{-2} would be equivalent to \1. The use of relative
+       references can be helpful in long patterns, and also in  patterns  that
+       are  created  by  joining  together  fragments  that contain references
+       within themselves.
+
+       A back reference matches whatever actually matched the  capturing  sub-
+       pattern  in  the  current subject string, rather than anything matching
        the subpattern itself (see "Subpatterns as subroutines" below for a way
        of doing that). So the pattern
 
          (sens|respons)e and \1ibility
 
-       matches "sense and sensibility" and "response and responsibility",  but
-       not  "sense and responsibility". If caseful matching is in force at the
-       time of the back reference, the case of letters is relevant. For  exam-
+       matches  "sense and sensibility" and "response and responsibility", but
+       not "sense and responsibility". If caseful matching is in force at  the
+       time  of the back reference, the case of letters is relevant. For exam-
        ple,
 
          ((?i)rah)\s+\1
 
-       matches  "rah  rah"  and  "RAH RAH", but not "RAH rah", even though the
+       matches "rah rah" and "RAH RAH", but not "RAH  rah",  even  though  the
        original capturing subpattern is matched caselessly.
 
-       There are several different ways of writing back  references  to  named
-       subpatterns.  The  .NET syntax \k{name} and the Perl syntax \k<name> or
-       \k'name' are supported, as is the Python syntax (?P=name). Perl  5.10's
+       There  are  several  different ways of writing back references to named
+       subpatterns. The .NET syntax \k{name} and the Perl syntax  \k<name>  or
+       \k'name'  are supported, as is the Python syntax (?P=name). Perl 5.10's
        unified back reference syntax, in which \g can be used for both numeric
-       and named references, is also supported. We  could  rewrite  the  above
+       and  named  references,  is  also supported. We could rewrite the above
        example in any of the following ways:
 
          (?<p1>(?i)rah)\s+\k<p1>
@@ -4647,67 +4752,67 @@ BACK REFERENCES
          (?P<p1>(?i)rah)\s+(?P=p1)
          (?<p1>(?i)rah)\s+\g{p1}
 
-       A  subpattern  that  is  referenced  by  name may appear in the pattern
+       A subpattern that is referenced by  name  may  appear  in  the  pattern
        before or after the reference.
 
-       There may be more than one back reference to the same subpattern. If  a
-       subpattern  has  not actually been used in a particular match, any back
+       There  may be more than one back reference to the same subpattern. If a
+       subpattern has not actually been used in a particular match,  any  back
        references to it always fail by default. For example, the pattern
 
          (a|(bc))\2
 
-       always fails if it starts to match "a" rather than  "bc".  However,  if
+       always  fails  if  it starts to match "a" rather than "bc". However, if
        the PCRE_JAVASCRIPT_COMPAT option is set at compile time, a back refer-
        ence to an unset value matches an empty string.
 
-       Because there may be many capturing parentheses in a pattern, all  dig-
-       its  following a backslash are taken as part of a potential back refer-
-       ence number.  If the pattern continues with  a  digit  character,  some
-       delimiter  must  be  used  to  terminate  the  back  reference.  If the
+       Because  there may be many capturing parentheses in a pattern, all dig-
+       its following a backslash are taken as part of a potential back  refer-
+       ence  number.   If  the  pattern continues with a digit character, some
+       delimiter must  be  used  to  terminate  the  back  reference.  If  the
        PCRE_EXTENDED option is set, this can be whitespace. Otherwise, the \g{
        syntax or an empty comment (see "Comments" below) can be used.
 
    Recursive back references
 
-       A  back reference that occurs inside the parentheses to which it refers
-       fails when the subpattern is first used, so, for example,  (a\1)  never
-       matches.   However,  such references can be useful inside repeated sub-
+       A back reference that occurs inside the parentheses to which it  refers
+       fails  when  the subpattern is first used, so, for example, (a\1) never
+       matches.  However, such references can be useful inside  repeated  sub-
        patterns. For example, the pattern
 
          (a|b\1)+
 
        matches any number of "a"s and also "aba", "ababbaa" etc. At each iter-
-       ation  of  the  subpattern,  the  back  reference matches the character
-       string corresponding to the previous iteration. In order  for  this  to
-       work,  the  pattern must be such that the first iteration does not need
-       to match the back reference. This can be done using alternation, as  in
+       ation of the subpattern,  the  back  reference  matches  the  character
+       string  corresponding  to  the previous iteration. In order for this to
+       work, the pattern must be such that the first iteration does  not  need
+       to  match the back reference. This can be done using alternation, as in
        the example above, or by a quantifier with a minimum of zero.
 
-       Back  references of this type cause the group that they reference to be
-       treated as an atomic group.  Once the whole group has been  matched,  a
-       subsequent  matching  failure cannot cause backtracking into the middle
+       Back references of this type cause the group that they reference to  be
+       treated  as  an atomic group.  Once the whole group has been matched, a
+       subsequent matching failure cannot cause backtracking into  the  middle
        of the group.
 
 
 ASSERTIONS
 
-       An assertion is a test on the characters  following  or  preceding  the
-       current  matching  point that does not actually consume any characters.
-       The simple assertions coded as \b, \B, \A, \G, \Z,  \z,  ^  and  $  are
+       An  assertion  is  a  test on the characters following or preceding the
+       current matching point that does not actually consume  any  characters.
+       The  simple  assertions  coded  as  \b, \B, \A, \G, \Z, \z, ^ and $ are
        described above.
 
-       More  complicated  assertions  are  coded as subpatterns. There are two
-       kinds: those that look ahead of the current  position  in  the  subject
-       string,  and  those  that  look  behind  it. An assertion subpattern is
-       matched in the normal way, except that it does not  cause  the  current
+       More complicated assertions are coded as  subpatterns.  There  are  two
+       kinds:  those  that  look  ahead of the current position in the subject
+       string, and those that look  behind  it.  An  assertion  subpattern  is
+       matched  in  the  normal way, except that it does not cause the current
        matching position to be changed.
 
-       Assertion  subpatterns  are  not  capturing subpatterns, and may not be
-       repeated, because it makes no sense to assert the  same  thing  several
-       times.  If  any kind of assertion contains capturing subpatterns within
-       it, these are counted for the purposes of numbering the capturing  sub-
+       Assertion subpatterns are not capturing subpatterns,  and  may  not  be
+       repeated,  because  it  makes no sense to assert the same thing several
+       times. If any kind of assertion contains capturing  subpatterns  within
+       it,  these are counted for the purposes of numbering the capturing sub-
        patterns in the whole pattern.  However, substring capturing is carried
-       out only for positive assertions, because it does not  make  sense  for
+       out  only  for  positive assertions, because it does not make sense for
        negative assertions.
 
    Lookahead assertions
@@ -4717,38 +4822,38 @@ ASSERTIONS
 
          \w+(?=;)
 
-       matches a word followed by a semicolon, but does not include the  semi-
+       matches  a word followed by a semicolon, but does not include the semi-
        colon in the match, and
 
          foo(?!bar)
 
-       matches  any  occurrence  of  "foo" that is not followed by "bar". Note
+       matches any occurrence of "foo" that is not  followed  by  "bar".  Note
        that the apparently similar pattern
 
          (?!foo)bar
 
-       does not find an occurrence of "bar"  that  is  preceded  by  something
-       other  than "foo"; it finds any occurrence of "bar" whatsoever, because
+       does  not  find  an  occurrence  of "bar" that is preceded by something
+       other than "foo"; it finds any occurrence of "bar" whatsoever,  because
        the assertion (?!foo) is always true when the next three characters are
        "bar". A lookbehind assertion is needed to achieve the other effect.
 
        If you want to force a matching failure at some point in a pattern, the
-       most convenient way to do it is  with  (?!)  because  an  empty  string
-       always  matches, so an assertion that requires there not to be an empty
-       string must always fail.   The  Perl  5.10  backtracking  control  verb
-       (*FAIL) or (*F) is essentially a synonym for (?!).
+       most  convenient  way  to  do  it  is with (?!) because an empty string
+       always matches, so an assertion that requires there not to be an  empty
+       string must always fail.  The backtracking control verb (*FAIL) or (*F)
+       is a synonym for (?!).
 
    Lookbehind assertions
 
-       Lookbehind  assertions start with (?<= for positive assertions and (?<!
+       Lookbehind assertions start with (?<= for positive assertions and  (?<!
        for negative assertions. For example,
 
          (?<!foo)bar
 
-       does find an occurrence of "bar" that is not  preceded  by  "foo".  The
-       contents  of  a  lookbehind  assertion are restricted such that all the
+       does  find  an  occurrence  of "bar" that is not preceded by "foo". The
+       contents of a lookbehind assertion are restricted  such  that  all  the
        strings it matches must have a fixed length. However, if there are sev-
-       eral  top-level  alternatives,  they  do  not all have to have the same
+       eral top-level alternatives, they do not all  have  to  have  the  same
        fixed length. Thus
 
          (?<=bullock|donkey)
@@ -4757,22 +4862,21 @@ ASSERTIONS
 
          (?<!dogs?|cats?)
 
-       causes an error at compile time. Branches that match  different  length
-       strings  are permitted only at the top level of a lookbehind assertion.
-       This is an extension compared with Perl (5.8 and 5.10), which  requires
-       all branches to match the same length of string. An assertion such as
+       causes  an  error at compile time. Branches that match different length
+       strings are permitted only at the top level of a lookbehind  assertion.
+       This is an extension compared with Perl, which requires all branches to
+       match the same length of string. An assertion such as
 
          (?<=ab(c|de))
 
-       is  not  permitted,  because  its single top-level branch can match two
+       is not permitted, because its single top-level  branch  can  match  two
        different lengths, but it is acceptable to PCRE if rewritten to use two
        top-level branches:
 
          (?<=abc|abde)
 
-       In some cases, the Perl 5.10 escape sequence \K (see above) can be used
-       instead of  a  lookbehind  assertion  to  get  round  the  fixed-length
-       restriction.
+       In some cases, the escape sequence \K (see above) can be  used  instead
+       of a lookbehind assertion to get round the fixed-length restriction.
 
        The  implementation  of lookbehind assertions is, for each alternative,
        to temporarily move the current position back by the fixed  length  and
@@ -4862,7 +4966,14 @@ CONDITIONAL SUBPATTERNS
 
        If  the  condition is satisfied, the yes-pattern is used; otherwise the
        no-pattern (if present) is used. If there are more  than  two  alterna-
-       tives in the subpattern, a compile-time error occurs.
+       tives  in  the subpattern, a compile-time error occurs. Each of the two
+       alternatives may itself contain nested subpatterns of any form, includ-
+       ing  conditional  subpatterns;  the  restriction  to  two  alternatives
+       applies only at the level of the condition. This pattern fragment is an
+       example where the alternatives are complex:
+
+         (?(1) (A|B|C) | (D | (?(2)E|F) | E) )
+
 
        There  are  four  kinds of condition: references to subpatterns, refer-
        ences to recursion, a pseudo-condition called DEFINE, and assertions.
@@ -4873,63 +4984,64 @@ CONDITIONAL SUBPATTERNS
        the condition is true if a capturing subpattern of that number has pre-
        viously matched. If there is more than one  capturing  subpattern  with
        the  same  number  (see  the earlier section about duplicate subpattern
-       numbers), the condition is true if any of them have been set. An alter-
+       numbers), the condition is true if any of them have matched. An  alter-
        native  notation is to precede the digits with a plus or minus sign. In
        this case, the subpattern number is relative rather than absolute.  The
        most  recently opened parentheses can be referenced by (?(-1), the next
-       most recent by (?(-2), and so on. In looping  constructs  it  can  also
-       make  sense  to  refer  to  subsequent  groups  with constructs such as
-       (?(+2).
+       most recent by (?(-2), and so on. Inside loops it can also  make  sense
+       to refer to subsequent groups. The next parentheses to be opened can be
+       referenced as (?(+1), and so on. (The value zero in any of these  forms
+       is not used; it provokes a compile-time error.)
 
-       Consider the following pattern, which  contains  non-significant  white
+       Consider  the  following  pattern, which contains non-significant white
        space to make it more readable (assume the PCRE_EXTENDED option) and to
        divide it into three parts for ease of discussion:
 
          ( \( )?    [^()]+    (?(1) \) )
 
-       The first part matches an optional opening  parenthesis,  and  if  that
+       The  first  part  matches  an optional opening parenthesis, and if that
        character is present, sets it as the first captured substring. The sec-
-       ond part matches one or more characters that are not  parentheses.  The
-       third part is a conditional subpattern that tests whether the first set
-       of parentheses matched or not. If they did, that is, if subject started
-       with an opening parenthesis, the condition is true, and so the yes-pat-
-       tern is executed and a  closing  parenthesis  is  required.  Otherwise,
-       since  no-pattern  is  not  present, the subpattern matches nothing. In
-       other words,  this  pattern  matches  a  sequence  of  non-parentheses,
+       ond  part  matches one or more characters that are not parentheses. The
+       third part is a conditional subpattern that tests whether  or  not  the
+       first  set  of  parentheses  matched.  If they did, that is, if subject
+       started with an opening parenthesis, the condition is true, and so  the
+       yes-pattern  is  executed and a closing parenthesis is required. Other-
+       wise, since no-pattern is not present, the subpattern matches  nothing.
+       In  other  words,  this  pattern matches a sequence of non-parentheses,
        optionally enclosed in parentheses.
 
-       If  you  were  embedding  this pattern in a larger one, you could use a
+       If you were embedding this pattern in a larger one,  you  could  use  a
        relative reference:
 
          ...other stuff... ( \( )?    [^()]+    (?(-1) \) ) ...
 
-       This makes the fragment independent of the parentheses  in  the  larger
+       This  makes  the  fragment independent of the parentheses in the larger
        pattern.
 
    Checking for a used subpattern by name
 
-       Perl  uses  the  syntax  (?(<name>)...) or (?('name')...) to test for a
-       used subpattern by name. For compatibility  with  earlier  versions  of
-       PCRE,  which  had this facility before Perl, the syntax (?(name)...) is
-       also recognized. However, there is a possible ambiguity with this  syn-
-       tax,  because  subpattern  names  may  consist entirely of digits. PCRE
-       looks first for a named subpattern; if it cannot find one and the  name
-       consists  entirely  of digits, PCRE looks for a subpattern of that num-
-       ber, which must be greater than zero. Using subpattern names that  con-
+       Perl uses the syntax (?(<name>)...) or (?('name')...)  to  test  for  a
+       used  subpattern  by  name.  For compatibility with earlier versions of
+       PCRE, which had this facility before Perl, the syntax  (?(name)...)  is
+       also  recognized. However, there is a possible ambiguity with this syn-
+       tax, because subpattern names may  consist  entirely  of  digits.  PCRE
+       looks  first for a named subpattern; if it cannot find one and the name
+       consists entirely of digits, PCRE looks for a subpattern of  that  num-
+       ber,  which must be greater than zero. Using subpattern names that con-
        sist entirely of digits is not recommended.
 
        Rewriting the above example to use a named subpattern gives this:
 
          (?<OPEN> \( )?    [^()]+    (?(<OPEN>) \) )
 
-       If  the  name used in a condition of this kind is a duplicate, the test
-       is applied to all subpatterns of the same name, and is true if any  one
+       If the name used in a condition of this kind is a duplicate,  the  test
+       is  applied to all subpatterns of the same name, and is true if any one
        of them has matched.
 
    Checking for pattern recursion
 
        If the condition is the string (R), and there is no subpattern with the
-       name R, the condition is true if a recursive call to the whole  pattern
+       name  R, the condition is true if a recursive call to the whole pattern
        or any subpattern has been made. If digits or a name preceded by amper-
        sand follow the letter R, for example:
 
@@ -4937,23 +5049,24 @@ CONDITIONAL SUBPATTERNS
 
        the condition is true if the most recent recursion is into a subpattern
        whose number or name is given. This condition does not check the entire
-       recursion stack. If the name used in a condition  of  this  kind  is  a
+       recursion  stack.  If  the  name  used in a condition of this kind is a
        duplicate, the test is applied to all subpatterns of the same name, and
        is true if any one of them is the most recent recursion.
 
-       At "top level", all these recursion test  conditions  are  false.   The
+       At  "top  level",  all  these recursion test conditions are false.  The
        syntax for recursive patterns is described below.
 
    Defining subpatterns for use by reference only
 
-       If  the  condition  is  the string (DEFINE), and there is no subpattern
-       with the name DEFINE, the condition is  always  false.  In  this  case,
-       there  may  be  only  one  alternative  in the subpattern. It is always
-       skipped if control reaches this point  in  the  pattern;  the  idea  of
-       DEFINE  is that it can be used to define "subroutines" that can be ref-
-       erenced from elsewhere. (The use of "subroutines" is described  below.)
-       For  example,  a pattern to match an IPv4 address could be written like
-       this (ignore whitespace and line breaks):
+       If the condition is the string (DEFINE), and  there  is  no  subpattern
+       with  the  name  DEFINE,  the  condition is always false. In this case,
+       there may be only one alternative  in  the  subpattern.  It  is  always
+       skipped  if  control  reaches  this  point  in the pattern; the idea of
+       DEFINE is that it can be used to define "subroutines" that can be  ref-
+       erenced  from elsewhere. (The use of "subroutines" is described below.)
+       For  example,  a  pattern  to   match   an   IPv4   address   such   as
+       "192.168.23.245" could be written like this (ignore whitespace and line
+       breaks):
 
          (?(DEFINE) (?<byte> 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) )
          \b (?&byte) (\.(?&byte)){3} \b
@@ -4987,27 +5100,44 @@ CONDITIONAL SUBPATTERNS
 
 COMMENTS
 
-       The  sequence (?# marks the start of a comment that continues up to the
-       next closing parenthesis. Nested parentheses  are  not  permitted.  The
-       characters  that make up a comment play no part in the pattern matching
-       at all.
+       There are two ways of including comments in patterns that are processed
+       by PCRE. In both cases, the start of the comment must not be in a char-
+       acter class, nor in the middle of any other sequence of related charac-
+       ters such as (?: or a subpattern name or number.  The  characters  that
+       make up a comment play no part in the pattern matching.
 
-       If the PCRE_EXTENDED option is set, an unescaped # character outside  a
-       character  class  introduces  a  comment  that continues to immediately
-       after the next newline in the pattern.
+       The  sequence (?# marks the start of a comment that continues up to the
+       next closing parenthesis. Nested parentheses are not permitted. If  the
+       PCRE_EXTENDED option is set, an unescaped # character also introduces a
+       comment, which in this case continues to  immediately  after  the  next
+       newline  character  or character sequence in the pattern. Which charac-
+       ters are interpreted as newlines is controlled by the options passed to
+       pcre_compile() or by a special sequence at the start of the pattern, as
+       described in the section entitled  "Newline  conventions"  above.  Note
+       that  the  end of this type of comment is a literal newline sequence in
+       the pattern; escape sequences that happen to represent a newline do not
+       count.  For  example,  consider this pattern when PCRE_EXTENDED is set,
+       and the default newline convention is in force:
+
+         abc #comment \n still comment
+
+       On encountering the # character, pcre_compile()  skips  along,  looking
+       for  a newline in the pattern. The sequence \n is still literal at this
+       stage, so it does not terminate the comment. Only an  actual  character
+       with the code value 0x0a (the default newline) does so.
 
 
 RECURSIVE PATTERNS
 
-       Consider the problem of matching a string in parentheses, allowing  for
-       unlimited  nested  parentheses.  Without the use of recursion, the best
-       that can be done is to use a pattern that  matches  up  to  some  fixed
-       depth  of  nesting.  It  is not possible to handle an arbitrary nesting
+       Consider  the problem of matching a string in parentheses, allowing for
+       unlimited nested parentheses. Without the use of  recursion,  the  best
+       that  can  be  done  is  to use a pattern that matches up to some fixed
+       depth of nesting. It is not possible to  handle  an  arbitrary  nesting
        depth.
 
        For some time, Perl has provided a facility that allows regular expres-
-       sions  to recurse (amongst other things). It does this by interpolating
-       Perl code in the expression at run time, and the code can refer to  the
+       sions to recurse (amongst other things). It does this by  interpolating
+       Perl  code in the expression at run time, and the code can refer to the
        expression itself. A Perl pattern using code interpolation to solve the
        parentheses problem can be created like this:
 
@@ -5017,182 +5147,182 @@ RECURSIVE PATTERNS
        refers recursively to the pattern in which it appears.
 
        Obviously, PCRE cannot support the interpolation of Perl code. Instead,
-       it supports special syntax for recursion of  the  entire  pattern,  and
-       also  for  individual  subpattern  recursion. After its introduction in
-       PCRE and Python, this kind of  recursion  was  subsequently  introduced
+       it  supports  special  syntax  for recursion of the entire pattern, and
+       also for individual subpattern recursion.  After  its  introduction  in
+       PCRE  and  Python,  this  kind of recursion was subsequently introduced
        into Perl at release 5.10.
 
-       A  special  item  that consists of (? followed by a number greater than
+       A special item that consists of (? followed by a  number  greater  than
        zero and a closing parenthesis is a recursive call of the subpattern of
-       the  given  number, provided that it occurs inside that subpattern. (If
-       not, it is a "subroutine" call, which is described  in  the  next  sec-
-       tion.)  The special item (?R) or (?0) is a recursive call of the entire
+       the given number, provided that it occurs inside that  subpattern.  (If
+       not,  it  is  a  "subroutine" call, which is described in the next sec-
+       tion.) The special item (?R) or (?0) is a recursive call of the  entire
        regular expression.
 
-       This PCRE pattern solves the nested  parentheses  problem  (assume  the
+       This  PCRE  pattern  solves  the nested parentheses problem (assume the
        PCRE_EXTENDED option is set so that white space is ignored):
 
          \( ( [^()]++ | (?R) )* \)
 
-       First  it matches an opening parenthesis. Then it matches any number of
-       substrings which can either be a  sequence  of  non-parentheses,  or  a
-       recursive  match  of the pattern itself (that is, a correctly parenthe-
+       First it matches an opening parenthesis. Then it matches any number  of
+       substrings  which  can  either  be  a sequence of non-parentheses, or a
+       recursive match of the pattern itself (that is, a  correctly  parenthe-
        sized substring).  Finally there is a closing parenthesis. Note the use
        of a possessive quantifier to avoid backtracking into sequences of non-
        parentheses.
 
-       If this were part of a larger pattern, you would not  want  to  recurse
+       If  this  were  part of a larger pattern, you would not want to recurse
        the entire pattern, so instead you could use this:
 
          ( \( ( [^()]++ | (?1) )* \) )
 
-       We  have  put the pattern into parentheses, and caused the recursion to
+       We have put the pattern into parentheses, and caused the  recursion  to
        refer to them instead of the whole pattern.
 
-       In a larger pattern,  keeping  track  of  parenthesis  numbers  can  be
-       tricky.  This  is made easier by the use of relative references (a Perl
-       5.10 feature).  Instead of (?1) in the  pattern  above  you  can  write
-       (?-2) to refer to the second most recently opened parentheses preceding
-       the recursion. In other  words,  a  negative  number  counts  capturing
-       parentheses leftwards from the point at which it is encountered.
-
-       It  is  also  possible  to refer to subsequently opened parentheses, by
-       writing references such as (?+2). However, these  cannot  be  recursive
-       because  the  reference  is  not inside the parentheses that are refer-
-       enced. They are always "subroutine" calls, as  described  in  the  next
+       In  a  larger  pattern,  keeping  track  of  parenthesis numbers can be
+       tricky. This is made easier by the use of relative references.  Instead
+       of (?1) in the pattern above you can write (?-2) to refer to the second
+       most recently opened parentheses  preceding  the  recursion.  In  other
+       words,  a  negative  number counts capturing parentheses leftwards from
+       the point at which it is encountered.
+
+       It is also possible to refer to  subsequently  opened  parentheses,  by
+       writing  references  such  as (?+2). However, these cannot be recursive
+       because the reference is not inside the  parentheses  that  are  refer-
+       enced.  They  are  always  "subroutine" calls, as described in the next
        section.
 
-       An  alternative  approach is to use named parentheses instead. The Perl
-       syntax for this is (?&name); PCRE's earlier syntax  (?P>name)  is  also
+       An alternative approach is to use named parentheses instead.  The  Perl
+       syntax  for  this  is (?&name); PCRE's earlier syntax (?P>name) is also
        supported. We could rewrite the above example as follows:
 
          (?<pn> \( ( [^()]++ | (?&pn) )* \) )
 
-       If  there  is more than one subpattern with the same name, the earliest
+       If there is more than one subpattern with the same name,  the  earliest
        one is used.
 
-       This particular example pattern that we have been looking  at  contains
+       This  particular  example pattern that we have been looking at contains
        nested unlimited repeats, and so the use of a possessive quantifier for
        matching strings of non-parentheses is important when applying the pat-
-       tern  to  strings  that do not match. For example, when this pattern is
+       tern to strings that do not match. For example, when  this  pattern  is
        applied to
 
          (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
 
-       it yields "no match" quickly. However, if a  possessive  quantifier  is
-       not  used, the match runs for a very long time indeed because there are
-       so many different ways the + and * repeats can carve  up  the  subject,
+       it  yields  "no  match" quickly. However, if a possessive quantifier is
+       not used, the match runs for a very long time indeed because there  are
+       so  many  different  ways the + and * repeats can carve up the subject,
        and all have to be tested before failure can be reported.
 
-       At  the  end  of a match, the values of capturing parentheses are those
-       from the outermost level. If you want to obtain intermediate values,  a
-       callout  function can be used (see below and the pcrecallout documenta-
+       At the end of a match, the values of capturing  parentheses  are  those
+       from  the outermost level. If you want to obtain intermediate values, a
+       callout function can be used (see below and the pcrecallout  documenta-
        tion). If the pattern above is matched against
 
          (ab(cd)ef)
 
-       the value for the inner capturing parentheses  (numbered  2)  is  "ef",
-       which  is the last value taken on at the top level. If a capturing sub-
+       the  value  for  the  inner capturing parentheses (numbered 2) is "ef",
+       which is the last value taken on at the top level. If a capturing  sub-
        pattern is not matched at the top level, its final value is unset, even
        if it is (temporarily) set at a deeper level.
 
-       If  there are more than 15 capturing parentheses in a pattern, PCRE has
-       to obtain extra memory to store data during a recursion, which it  does
+       If there are more than 15 capturing parentheses in a pattern, PCRE  has
+       to  obtain extra memory to store data during a recursion, which it does
        by using pcre_malloc, freeing it via pcre_free afterwards. If no memory
        can be obtained, the match fails with the PCRE_ERROR_NOMEMORY error.
 
-       Do not confuse the (?R) item with the condition (R),  which  tests  for
-       recursion.   Consider  this pattern, which matches text in angle brack-
-       ets, allowing for arbitrary nesting. Only digits are allowed in  nested
-       brackets  (that is, when recursing), whereas any characters are permit-
+       Do  not  confuse  the (?R) item with the condition (R), which tests for
+       recursion.  Consider this pattern, which matches text in  angle  brack-
+       ets,  allowing for arbitrary nesting. Only digits are allowed in nested
+       brackets (that is, when recursing), whereas any characters are  permit-
        ted at the outer level.
 
          < (?: (?(R) \d++  | [^<>]*+) | (?R)) * >
 
-       In this pattern, (?(R) is the start of a conditional  subpattern,  with
-       two  different  alternatives for the recursive and non-recursive cases.
+       In  this  pattern, (?(R) is the start of a conditional subpattern, with
+       two different alternatives for the recursive and  non-recursive  cases.
        The (?R) item is the actual recursive call.
 
    Recursion difference from Perl
 
-       In PCRE (like Python, but unlike Perl), a recursive subpattern call  is
+       In  PCRE (like Python, but unlike Perl), a recursive subpattern call is
        always treated as an atomic group. That is, once it has matched some of
        the subject string, it is never re-entered, even if it contains untried
-       alternatives  and  there  is a subsequent matching failure. This can be
-       illustrated by the following pattern, which purports to match a  palin-
-       dromic  string  that contains an odd number of characters (for example,
+       alternatives and there is a subsequent matching failure.  This  can  be
+       illustrated  by the following pattern, which purports to match a palin-
+       dromic string that contains an odd number of characters  (for  example,
        "a", "aba", "abcba", "abcdcba"):
 
          ^(.|(.)(?1)\2)$
 
        The idea is that it either matches a single character, or two identical
-       characters  surrounding  a sub-palindrome. In Perl, this pattern works;
-       in PCRE it does not if the pattern is  longer  than  three  characters.
+       characters surrounding a sub-palindrome. In Perl, this  pattern  works;
+       in  PCRE  it  does  not if the pattern is longer than three characters.
        Consider the subject string "abcba":
 
-       At  the  top level, the first character is matched, but as it is not at
+       At the top level, the first character is matched, but as it is  not  at
        the end of the string, the first alternative fails; the second alterna-
        tive is taken and the recursion kicks in. The recursive call to subpat-
-       tern 1 successfully matches the next character ("b").  (Note  that  the
+       tern  1  successfully  matches the next character ("b"). (Note that the
        beginning and end of line tests are not part of the recursion).
 
-       Back  at  the top level, the next character ("c") is compared with what
-       subpattern 2 matched, which was "a". This fails. Because the  recursion
-       is  treated  as  an atomic group, there are now no backtracking points,
-       and so the entire match fails. (Perl is able, at  this  point,  to  re-
-       enter  the  recursion  and try the second alternative.) However, if the
+       Back at the top level, the next character ("c") is compared  with  what
+       subpattern  2 matched, which was "a". This fails. Because the recursion
+       is treated as an atomic group, there are now  no  backtracking  points,
+       and  so  the  entire  match fails. (Perl is able, at this point, to re-
+       enter the recursion and try the second alternative.)  However,  if  the
        pattern is written with the alternatives in the other order, things are
        different:
 
          ^((.)(?1)\2|.)$
 
-       This  time,  the recursing alternative is tried first, and continues to
-       recurse until it runs out of characters, at which point  the  recursion
-       fails.  But  this  time  we  do  have another alternative to try at the
-       higher level. That is the big difference:  in  the  previous  case  the
+       This time, the recursing alternative is tried first, and  continues  to
+       recurse  until  it runs out of characters, at which point the recursion
+       fails. But this time we do have  another  alternative  to  try  at  the
+       higher  level.  That  is  the  big difference: in the previous case the
        remaining alternative is at a deeper recursion level, which PCRE cannot
        use.
 
-       To change the pattern so that matches all palindromic strings, not just
-       those  with  an  odd number of characters, it is tempting to change the
-       pattern to this:
+       To  change  the pattern so that it matches all palindromic strings, not
+       just those with an odd number of characters, it is tempting  to  change
+       the pattern to this:
 
          ^((.)(?1)\2|.?)$
 
-       Again, this works in Perl, but not in PCRE, and for  the  same  reason.
-       When  a  deeper  recursion has matched a single character, it cannot be
-       entered again in order to match an empty string.  The  solution  is  to
-       separate  the two cases, and write out the odd and even cases as alter-
+       Again,  this  works  in Perl, but not in PCRE, and for the same reason.
+       When a deeper recursion has matched a single character,  it  cannot  be
+       entered  again  in  order  to match an empty string. The solution is to
+       separate the two cases, and write out the odd and even cases as  alter-
        natives at the higher level:
 
          ^(?:((.)(?1)\2|)|((.)(?3)\4|.))
 
-       If you want to match typical palindromic phrases, the  pattern  has  to
+       If  you  want  to match typical palindromic phrases, the pattern has to
        ignore all non-word characters, which can be done like this:
 
          ^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$
 
        If run with the PCRE_CASELESS option, this pattern matches phrases such
        as "A man, a plan, a canal: Panama!" and it works well in both PCRE and
-       Perl.  Note the use of the possessive quantifier *+ to avoid backtrack-
-       ing into sequences of non-word characters. Without this, PCRE  takes  a
-       great  deal  longer  (ten  times or more) to match typical phrases, and
+       Perl. Note the use of the possessive quantifier *+ to avoid  backtrack-
+       ing  into  sequences of non-word characters. Without this, PCRE takes a
+       great deal longer (ten times or more) to  match  typical  phrases,  and
        Perl takes so long that you think it has gone into a loop.
 
-       WARNING: The palindrome-matching patterns above work only if  the  sub-
-       ject  string  does not start with a palindrome that is shorter than the
-       entire string.  For example, although "abcba" is correctly matched,  if
-       the  subject  is "ababa", PCRE finds the palindrome "aba" at the start,
-       then fails at top level because the end of the string does not  follow.
-       Once  again, it cannot jump back into the recursion to try other alter-
+       WARNING:  The  palindrome-matching patterns above work only if the sub-
+       ject string does not start with a palindrome that is shorter  than  the
+       entire  string.  For example, although "abcba" is correctly matched, if
+       the subject is "ababa", PCRE finds the palindrome "aba" at  the  start,
+       then  fails at top level because the end of the string does not follow.
+       Once again, it cannot jump back into the recursion to try other  alter-
        natives, so the entire match fails.
 
 
 SUBPATTERNS AS SUBROUTINES
 
        If the syntax for a recursive subpattern reference (either by number or
-       by  name)  is used outside the parentheses to which it refers, it oper-
-       ates like a subroutine in a programming language. The "called"  subpat-
+       by name) is used outside the parentheses to which it refers,  it  oper-
+       ates  like a subroutine in a programming language. The "called" subpat-
        tern may be defined before or after the reference. A numbered reference
        can be absolute or relative, as in these examples:
 
@@ -5204,125 +5334,126 @@ SUBPATTERNS AS SUBROUTINES
 
          (sens|respons)e and \1ibility
 
-       matches "sense and sensibility" and "response and responsibility",  but
+       matches  "sense and sensibility" and "response and responsibility", but
        not "sense and responsibility". If instead the pattern
 
          (sens|respons)e and (?1)ibility
 
-       is  used, it does match "sense and responsibility" as well as the other
-       two strings. Another example is  given  in  the  discussion  of  DEFINE
+       is used, it does match "sense and responsibility" as well as the  other
+       two  strings.  Another  example  is  given  in the discussion of DEFINE
        above.
 
-       Like  recursive  subpatterns, a subroutine call is always treated as an
-       atomic group. That is, once it has matched some of the subject  string,
-       it  is  never  re-entered, even if it contains untried alternatives and
-       there is a subsequent matching failure. Any capturing parentheses  that
-       are  set  during  the  subroutine  call revert to their previous values
+       Like recursive subpatterns, a subroutine call is always treated  as  an
+       atomic  group. That is, once it has matched some of the subject string,
+       it is never re-entered, even if it contains  untried  alternatives  and
+       there  is a subsequent matching failure. Any capturing parentheses that
+       are set during the subroutine call  revert  to  their  previous  values
        afterwards.
 
-       When a subpattern is used as a subroutine, processing options  such  as
+       When  a  subpattern is used as a subroutine, processing options such as
        case-independence are fixed when the subpattern is defined. They cannot
        be changed for different calls. For example, consider this pattern:
 
          (abc)(?i:(?-1))
 
-       It matches "abcabc". It does not match "abcABC" because the  change  of
+       It  matches  "abcabc". It does not match "abcABC" because the change of
        processing option does not affect the called subpattern.
 
 
 ONIGURUMA SUBROUTINE SYNTAX
 
-       For  compatibility with Oniguruma, the non-Perl syntax \g followed by a
+       For compatibility with Oniguruma, the non-Perl syntax \g followed by  a
        name or a number enclosed either in angle brackets or single quotes, is
-       an  alternative  syntax  for  referencing a subpattern as a subroutine,
-       possibly recursively. Here are two of the examples used above,  rewrit-
+       an alternative syntax for referencing a  subpattern  as  a  subroutine,
+       possibly  recursively. Here are two of the examples used above, rewrit-
        ten using this syntax:
 
          (?<pn> \( ( (?>[^()]+) | \g<pn> )* \) )
          (sens|respons)e and \g'1'ibility
 
-       PCRE  supports  an extension to Oniguruma: if a number is preceded by a
+       PCRE supports an extension to Oniguruma: if a number is preceded  by  a
        plus or a minus sign it is taken as a relative reference. For example:
 
          (abc)(?i:\g<-1>)
 
-       Note that \g{...} (Perl syntax) and \g<...> (Oniguruma syntax) are  not
-       synonymous.  The former is a back reference; the latter is a subroutine
+       Note  that \g{...} (Perl syntax) and \g<...> (Oniguruma syntax) are not
+       synonymous. The former is a back reference; the latter is a  subroutine
        call.
 
 
 CALLOUTS
 
        Perl has a feature whereby using the sequence (?{...}) causes arbitrary
-       Perl  code to be obeyed in the middle of matching a regular expression.
+       Perl code to be obeyed in the middle of matching a regular  expression.
        This makes it possible, amongst other things, to extract different sub-
        strings that match the same pair of parentheses when there is a repeti-
        tion.
 
        PCRE provides a similar feature, but of course it cannot obey arbitrary
        Perl code. The feature is called "callout". The caller of PCRE provides
-       an external function by putting its entry point in the global  variable
-       pcre_callout.   By default, this variable contains NULL, which disables
+       an  external function by putting its entry point in the global variable
+       pcre_callout.  By default, this variable contains NULL, which  disables
        all calling out.
 
-       Within a regular expression, (?C) indicates the  points  at  which  the
-       external  function  is  to be called. If you want to identify different
-       callout points, you can put a number less than 256 after the letter  C.
-       The  default  value is zero.  For example, this pattern has two callout
+       Within  a  regular  expression,  (?C) indicates the points at which the
+       external function is to be called. If you want  to  identify  different
+       callout  points, you can put a number less than 256 after the letter C.
+       The default value is zero.  For example, this pattern has  two  callout
        points:
 
          (?C1)abc(?C2)def
 
        If the PCRE_AUTO_CALLOUT flag is passed to pcre_compile(), callouts are
-       automatically  installed  before each item in the pattern. They are all
+       automatically installed before each item in the pattern. They  are  all
        numbered 255.
 
        During matching, when PCRE reaches a callout point (and pcre_callout is
-       set),  the  external function is called. It is provided with the number
-       of the callout, the position in the pattern, and, optionally, one  item
-       of  data  originally supplied by the caller of pcre_exec(). The callout
-       function may cause matching to proceed, to backtrack, or to fail  alto-
+       set), the external function is called. It is provided with  the  number
+       of  the callout, the position in the pattern, and, optionally, one item
+       of data originally supplied by the caller of pcre_exec().  The  callout
+       function  may cause matching to proceed, to backtrack, or to fail alto-
        gether. A complete description of the interface to the callout function
        is given in the pcrecallout documentation.
 
 
 BACKTRACKING CONTROL
 
-       Perl 5.10 introduced a number of "Special Backtracking Control  Verbs",
+       Perl  5.10 introduced a number of "Special Backtracking Control Verbs",
        which are described in the Perl documentation as "experimental and sub-
-       ject to change or removal in a future version of Perl". It goes  on  to
-       say:  "Their usage in production code should be noted to avoid problems
+       ject  to  change or removal in a future version of Perl". It goes on to
+       say: "Their usage in production code should be noted to avoid  problems
        during upgrades." The same remarks apply to the PCRE features described
        in this section.
 
-       Since  these  verbs  are  specifically related to backtracking, most of
-       them can be  used  only  when  the  pattern  is  to  be  matched  using
+       Since these verbs are specifically related  to  backtracking,  most  of
+       them  can  be  used  only  when  the  pattern  is  to  be matched using
        pcre_exec(), which uses a backtracking algorithm. With the exception of
        (*FAIL), which behaves like a failing negative assertion, they cause an
        error if encountered by pcre_dfa_exec().
 
        If any of these verbs are used in an assertion or subroutine subpattern
-       (including recursive subpatterns), their effect  is  confined  to  that
-       subpattern;  it  does  not extend to the surrounding pattern. Note that
-       such subpatterns are processed as anchored at the point where they  are
+       (including  recursive  subpatterns),  their  effect is confined to that
+       subpattern; it does not extend to the surrounding  pattern.  Note  that
+       such  subpatterns are processed as anchored at the point where they are
        tested.
 
-       The  new verbs make use of what was previously invalid syntax: an open-
+       The new verbs make use of what was previously invalid syntax: an  open-
        ing parenthesis followed by an asterisk. They are generally of the form
-       (*VERB)  or (*VERB:NAME). Some may take either form, with differing be-
+       (*VERB) or (*VERB:NAME). Some may take either form, with differing  be-
        haviour, depending on whether or not an argument is present. An name is
-       a  sequence  of letters, digits, and underscores. If the name is empty,
-       that is, if the closing parenthesis immediately follows the colon,  the
+       a sequence of letters, digits, and underscores. If the name  is  empty,
+       that  is, if the closing parenthesis immediately follows the colon, the
        effect is as if the colon were not there. Any number of these verbs may
        occur in a pattern.
 
-       PCRE contains some optimizations that are used to speed up matching  by
+       PCRE  contains some optimizations that are used to speed up matching by
        running some checks at the start of each match attempt. For example, it
-       may know the minimum length of matching subject, or that  a  particular
-       character  must  be present. When one of these optimizations suppresses
-       the running of a match, any included backtracking verbs  will  not,  of
+       may  know  the minimum length of matching subject, or that a particular
+       character must be present. When one of these  optimizations  suppresses
+       the  running  of  a match, any included backtracking verbs will not, of
        course, be processed. You can suppress the start-of-match optimizations
-       by setting the PCRE_NO_START_OPTIMIZE option when calling pcre_exec().
+       by  setting  the  PCRE_NO_START_OPTIMIZE  option when calling pcre_com-
+       pile() or pcre_exec(), or by starting the pattern with (*NO_START_OPT).
 
    Verbs that act immediately
 
@@ -5511,20 +5642,40 @@ BACKTRACKING CONTROL
 
          (*THEN) or (*THEN:NAME)
 
-       This verb causes a skip to the next alternation if the rest of the pat-
-       tern does not match. That is, it cancels pending backtracking, but only
-       within  the  current  alternation.  Its name comes from the observation
-       that it can be used for a pattern-based if-then-else block:
+       This  verb  causes  a  skip  to  the  next alternation in the innermost
+       enclosing group if the rest of the pattern does not match. That is,  it
+       cancels  pending backtracking, but only within the current alternation.
+       Its name comes from the observation that it can be used for a  pattern-
+       based if-then-else block:
 
          ( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...
 
-       If the COND1 pattern matches, FOO is tried (and possibly further  items
-       after  the  end  of  the group if FOO succeeds); on failure the matcher
-       skips to the second alternative and tries COND2,  without  backtracking
-       into  COND1.  The  behaviour  of  (*THEN:NAME)  is  exactly the same as
-       (*MARK:NAME)(*THEN) if the overall  match  fails.  If  (*THEN)  is  not
+       If  the COND1 pattern matches, FOO is tried (and possibly further items
+       after the end of the group if FOO succeeds);  on  failure  the  matcher
+       skips  to  the second alternative and tries COND2, without backtracking
+       into COND1. The behaviour  of  (*THEN:NAME)  is  exactly  the  same  as
+       (*MARK:NAME)(*THEN)  if  the  overall  match  fails.  If (*THEN) is not
        directly inside an alternation, it acts like (*PRUNE).
 
+       The above verbs provide four different "strengths" of control when sub-
+       sequent  matching  fails. (*THEN) is the weakest, carrying on the match
+       at the next alternation. (*PRUNE) comes next, failing the match at  the
+       current  starting position, but allowing an advance to the next charac-
+       ter (for an unanchored pattern). (*SKIP) is similar,  except  that  the
+       advance  may  be  more  than one character. (*COMMIT) is the strongest,
+       causing the entire match to fail.
+
+       If more than one is present in a pattern, the "stongest" one wins.  For
+       example,  consider  this  pattern, where A, B, etc. are complex pattern
+       fragments:
+
+         (A(*COMMIT)B(*THEN)C|D)
+
+       Once A has matched, PCRE is committed to this  match,  at  the  current
+       starting  position. If subsequently B matches, but C does not, the nor-
+       mal (*THEN) action of trying the next alternation (that is, D) does not
+       happen because (*COMMIT) overrides.
+
 
 SEE ALSO
 
@@ -5540,7 +5691,7 @@ AUTHOR
 
 REVISION
 
-       Last updated: 18 May 2010
+       Last updated: 21 November 2010
        Copyright (c) 1997-2010 University of Cambridge.
 ------------------------------------------------------------------------------
 
@@ -5568,7 +5719,7 @@ QUOTING
 CHARACTERS
 
          \a         alarm, that is, the BEL character (hex 07)
-         \cx        "control-x", where x is any character
+         \cx        "control-x", where x is any ASCII character
          \e         escape (hex 1B)
          \f         formfeed (hex 0C)
          \n         newline (hex 0A)
@@ -5787,6 +5938,7 @@ OPTION SETTING
        The following are recognized only at the start of a  pattern  or  after
        one of the newline-setting options with similar syntax:
 
+         (*NO_START_OPT) no start-match optimization (PCRE_NO_START_OPTIMIZE)
          (*UTF8)         set UTF-8 mode (PCRE_UTF8)
          (*UCP)          set PCRE_UCP (use Unicode properties for \d etc)
 
@@ -5909,7 +6061,7 @@ AUTHOR
 
 REVISION
 
-       Last updated: 12 May 2010
+       Last updated: 21 November 2010
        Copyright (c) 1997-2010 University of Cambridge.
 ------------------------------------------------------------------------------
 
@@ -5941,8 +6093,8 @@ PARTIAL MATCHING IN PCRE
        reflecting the character that has been typed, for example. This immedi-
        ate  feedback is likely to be a better user interface than a check that
        is delayed until the entire string has been entered.  Partial  matching
-       can  also  sometimes be useful when the subject string is very long and
-       is not all available at once.
+       can  also be useful when the subject string is very long and is not all
+       available at once.
 
        PCRE supports partial matching by means of  the  PCRE_PARTIAL_SOFT  and
        PCRE_PARTIAL_HARD options, which can be set when calling pcre_exec() or
@@ -5964,20 +6116,22 @@ PARTIAL MATCHING IN PCRE
 
 PARTIAL MATCHING USING pcre_exec()
 
-       A partial match occurs during a call to pcre_exec() whenever the end of
-       the subject string is reached successfully, but  matching  cannot  con-
-       tinue because more characters are needed. However, at least one charac-
-       ter must have been matched. (In other words, a partial match can  never
-       be an empty string.)
-
-       If  PCRE_PARTIAL_SOFT  is  set,  the  partial  match is remembered, but
-       matching continues as normal, and other alternatives in the pattern are
-       tried.   If  no  complete  match  can  be  found,  pcre_exec()  returns
-       PCRE_ERROR_PARTIAL instead of PCRE_ERROR_NOMATCH. If there are at least
-       two slots in the offsets vector, the first of them is set to the offset
-       of the earliest character that was inspected when the partial match was
-       found.  For  convenience,  the  second  offset points to the end of the
-       string so that a substring can easily be identified.
+       A partial match occurs during a call to pcre_exec() when the end of the
+       subject string is reached successfully, but  matching  cannot  continue
+       because  more characters are needed. However, at least one character in
+       the subject must have been inspected. This character need not form part
+       of  the  final  matched string; lookbehind assertions and the \K escape
+       sequence provide ways of inspecting characters before the  start  of  a
+       matched  substring. The requirement for inspecting at least one charac-
+       ter exists because an empty string can always be matched; without  such
+       a  restriction there would always be a partial match of an empty string
+       at the end of the subject.
+
+       If there are at least two slots in the offsets vector when  pcre_exec()
+       returns  with  a  partial match, the first slot is set to the offset of
+       the earliest character that was inspected when the  partial  match  was
+       found. For convenience, the second offset points to the end of the sub-
+       ject so that a substring can easily be identified.
 
        For the majority of patterns, the first offset identifies the start  of
        the  partially matched string. However, for patterns that contain look-
@@ -5989,120 +6143,153 @@ PARTIAL MATCHING USING pcre_exec()
        This pattern matches "123", but only if it is preceded by "abc". If the
        subject string is "xyzabc12", the offsets after a partial match are for
        the  substring  "abc12",  because  all  these  characters are needed if
-       another match is tried with extra characters added.
+       another match is tried with extra characters added to the subject.
+
+       What happens when a partial match is identified depends on which of the
+       two partial matching options are set.
+
+   PCRE_PARTIAL_SOFT with pcre_exec()
 
-       If there is more than one partial match, the first one that  was  found
+       If  PCRE_PARTIAL_SOFT  is  set  when  pcre_exec()  identifies a partial
+       match, the partial match is remembered, but matching continues as  nor-
+       mal,  and  other  alternatives in the pattern are tried. If no complete
+       match can be found, pcre_exec() returns PCRE_ERROR_PARTIAL  instead  of
+       PCRE_ERROR_NOMATCH.
+
+       This  option  is "soft" because it prefers a complete match over a par-
+       tial match.  All the various matching items in a pattern behave  as  if
+       the  subject string is potentially complete. For example, \z, \Z, and $
+       match at the end of the subject, as normal, and for \b and \B  the  end
+       of the subject is treated as a non-alphanumeric.
+
+       If  there  is more than one partial match, the first one that was found
        provides the data that is returned. Consider this pattern:
 
          /123\w+X|dogY/
 
-       If  this is matched against the subject string "abc123dog", both alter-
-       natives fail to match, but the end of the  subject  is  reached  during
-       matching,    so    PCRE_ERROR_PARTIAL    is    returned    instead   of
-       PCRE_ERROR_NOMATCH. The  offsets  are  set  to  3  and  9,  identifying
-       "123dog"  as  the first partial match that was found. (In this example,
-       there are two partial matches,  because  "dog"  on  its  own  partially
-       matches the second alternative.)
+       If this is matched against the subject string "abc123dog", both  alter-
+       natives  fail  to  match,  but the end of the subject is reached during
+       matching, so PCRE_ERROR_PARTIAL is returned. The offsets are set  to  3
+       and  9, identifying "123dog" as the first partial match that was found.
+       (In this example, there are two partial matches, because "dog"  on  its
+       own partially matches the second alternative.)
+
+   PCRE_PARTIAL_HARD with pcre_exec()
 
        If PCRE_PARTIAL_HARD is set for pcre_exec(), it returns PCRE_ERROR_PAR-
        TIAL as soon as a partial match is found, without continuing to  search
-       for  possible  complete matches. The difference between the two options
-       can be illustrated by a pattern such as:
+       for possible complete matches. This option is "hard" because it prefers
+       an earlier partial match over a later complete match. For this  reason,
+       the  assumption is made that the end of the supplied subject string may
+       not be the true end of the available data, and so, if \z, \Z,  \b,  \B,
+       or  $  are  encountered  at  the  end  of  the  subject,  the result is
+       PCRE_ERROR_PARTIAL.
+
+       Setting PCRE_PARTIAL_HARD also affects the way pcre_exec() checks UTF-8
+       subject  strings  for  validity.  Normally,  an  invalid UTF-8 sequence
+       causes the error PCRE_ERROR_BADUTF8. However, in the special case of  a
+       truncated  UTF-8 character at the end of the subject, PCRE_ERROR_SHORT-
+       UTF8 is returned when PCRE_PARTIAL_HARD is set.
+
+   Comparing hard and soft partial matching
+
+       The difference between the two partial matching options can  be  illus-
+       trated by a pattern such as:
 
          /dog(sbody)?/
 
-       This matches either "dog" or "dogsbody", greedily (that is, it  prefers
-       the  longer  string  if  possible). If it is matched against the string
-       "dog" with PCRE_PARTIAL_SOFT, it yields a  complete  match  for  "dog".
+       This  matches either "dog" or "dogsbody", greedily (that is, it prefers
+       the longer string if possible). If it is  matched  against  the  string
+       "dog"  with  PCRE_PARTIAL_SOFT,  it  yields a complete match for "dog".
        However, if PCRE_PARTIAL_HARD is set, the result is PCRE_ERROR_PARTIAL.
-       On the other hand, if the pattern is made ungreedy the result  is  dif-
+       On  the  other hand, if the pattern is made ungreedy the result is dif-
        ferent:
 
          /dog(sbody)??/
 
-       In  this case the result is always a complete match because pcre_exec()
-       finds that first, and it never continues  after  finding  a  match.  It
-       might  be easier to follow this explanation by thinking of the two pat-
+       In this case the result is always a complete match because  pcre_exec()
+       finds  that  first,  and  it  never continues after finding a match. It
+       might be easier to follow this explanation by thinking of the two  pat-
        terns like this:
 
          /dog(sbody)?/    is the same as  /dogsbody|dog/
          /dog(sbody)??/   is the same as  /dog|dogsbody/
 
-       The second pattern will never  match  "dogsbody"  when  pcre_exec()  is
+       The  second  pattern  will  never  match "dogsbody" when pcre_exec() is
        used, because it will always find the shorter match first.
 
 
 PARTIAL MATCHING USING pcre_dfa_exec()
 
-       The  pcre_dfa_exec()  function moves along the subject string character
-       by character, without backtracking, searching for all possible  matches
-       simultaneously.  If the end of the subject is reached before the end of
-       the pattern, there is the possibility of a partial  match,  again  pro-
-       vided that at least one character has matched.
-
-       When  PCRE_PARTIAL_SOFT  is set, PCRE_ERROR_PARTIAL is returned only if
-       there have been no complete matches. Otherwise,  the  complete  matches
-       are  returned.   However,  if PCRE_PARTIAL_HARD is set, a partial match
-       takes precedence over any complete matches. The portion of  the  string
-       that  was  inspected when the longest partial match was found is set as
+       The pcre_dfa_exec() function moves along the subject  string  character
+       by  character, without backtracking, searching for all possible matches
+       simultaneously. If the end of the subject is reached before the end  of
+       the  pattern,  there  is the possibility of a partial match, again pro-
+       vided that at least one character has been inspected.
+
+       When PCRE_PARTIAL_SOFT is set, PCRE_ERROR_PARTIAL is returned  only  if
+       there  have  been  no complete matches. Otherwise, the complete matches
+       are returned.  However, if PCRE_PARTIAL_HARD is set,  a  partial  match
+       takes  precedence  over any complete matches. The portion of the string
+       that was inspected when the longest partial match was found is  set  as
        the first matching string, provided there are at least two slots in the
        offsets vector.
 
-       Because  pcre_dfa_exec()  always searches for all possible matches, and
-       there is no difference between greedy and ungreedy repetition, its  be-
+       Because pcre_dfa_exec() always searches for all possible  matches,  and
+       there  is no difference between greedy and ungreedy repetition, its be-
        haviour is different from pcre_exec when PCRE_PARTIAL_HARD is set. Con-
-       sider the string "dog"  matched  against  the  ungreedy  pattern  shown
+       sider  the  string  "dog"  matched  against  the ungreedy pattern shown
        above:
 
          /dog(sbody)??/
 
-       Whereas  pcre_exec()  stops  as soon as it finds the complete match for
+       Whereas pcre_exec() stops as soon as it finds the  complete  match  for
        "dog", pcre_dfa_exec() also finds the partial match for "dogsbody", and
        so returns that when PCRE_PARTIAL_HARD is set.
 
 
 PARTIAL MATCHING AND WORD BOUNDARIES
 
-       If  a  pattern ends with one of sequences \b or \B, which test for word
-       boundaries, partial matching with PCRE_PARTIAL_SOFT can  give  counter-
+       If a pattern ends with one of sequences \b or \B, which test  for  word
+       boundaries,  partial  matching with PCRE_PARTIAL_SOFT can give counter-
        intuitive results. Consider this pattern:
 
          /\bcat\b/
 
        This matches "cat", provided there is a word boundary at either end. If
        the subject string is "the cat", the comparison of the final "t" with a
-       following  character  cannot  take  place, so a partial match is found.
-       However, pcre_exec() carries on with normal matching, which matches  \b
-       at  the  end  of  the subject when the last character is a letter, thus
+       following character cannot take place, so a  partial  match  is  found.
+       However,  pcre_exec() carries on with normal matching, which matches \b
+       at the end of the subject when the last character  is  a  letter,  thus
        finding a complete match. The result, therefore, is not PCRE_ERROR_PAR-
-       TIAL.  The  same  thing  happens  with pcre_dfa_exec(), because it also
+       TIAL. The same thing happens  with  pcre_dfa_exec(),  because  it  also
        finds the complete match.
 
-       Using PCRE_PARTIAL_HARD in this  case  does  yield  PCRE_ERROR_PARTIAL,
+       Using  PCRE_PARTIAL_HARD  in  this  case does yield PCRE_ERROR_PARTIAL,
        because then the partial match takes precedence.
 
 
 FORMERLY RESTRICTED PATTERNS
 
        For releases of PCRE prior to 8.00, because of the way certain internal
-       optimizations  were  implemented  in  the  pcre_exec()  function,   the
-       PCRE_PARTIAL  option  (predecessor  of  PCRE_PARTIAL_SOFT) could not be
-       used with all patterns. From release 8.00 onwards, the restrictions  no
-       longer  apply,  and  partial matching with pcre_exec() can be requested
+       optimizations   were  implemented  in  the  pcre_exec()  function,  the
+       PCRE_PARTIAL option (predecessor of  PCRE_PARTIAL_SOFT)  could  not  be
+       used  with all patterns. From release 8.00 onwards, the restrictions no
+       longer apply, and partial matching with pcre_exec()  can  be  requested
        for any pattern.
 
        Items that were formerly restricted were repeated single characters and
-       repeated  metasequences. If PCRE_PARTIAL was set for a pattern that did
-       not conform to the restrictions, pcre_exec() returned  the  error  code
-       PCRE_ERROR_BADPARTIAL  (-13).  This error code is no longer in use. The
-       PCRE_INFO_OKPARTIAL call to pcre_fullinfo() to find out if  a  compiled
+       repeated metasequences. If PCRE_PARTIAL was set for a pattern that  did
+       not  conform  to  the restrictions, pcre_exec() returned the error code
+       PCRE_ERROR_BADPARTIAL (-13). This error code is no longer in  use.  The
+       PCRE_INFO_OKPARTIAL  call  to pcre_fullinfo() to find out if a compiled
        pattern can be used for partial matching now always returns 1.
 
 
 EXAMPLE OF PARTIAL MATCHING USING PCRETEST
 
-       If  the  escape  sequence  \P  is  present in a pcretest data line, the
-       PCRE_PARTIAL_SOFT option is used for  the  match.  Here  is  a  run  of
+       If the escape sequence \P is present  in  a  pcretest  data  line,  the
+       PCRE_PARTIAL_SOFT  option  is  used  for  the  match.  Here is a run of
        pcretest that uses the date example quoted above:
 
            re> /^\d?\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d\d$/
@@ -6118,24 +6305,24 @@ EXAMPLE OF PARTIAL MATCHING USING PCRETEST
          data> j\P
          No match
 
-       The  first  data  string  is  matched completely, so pcretest shows the
-       matched substrings. The remaining four strings do not  match  the  com-
+       The first data string is matched  completely,  so  pcretest  shows  the
+       matched  substrings.  The  remaining four strings do not match the com-
        plete pattern, but the first two are partial matches. Similar output is
        obtained when pcre_dfa_exec() is used.
 
-       If the escape sequence \P is present more than once in a pcretest  data
+       If  the escape sequence \P is present more than once in a pcretest data
        line, the PCRE_PARTIAL_HARD option is set for the match.
 
 
 MULTI-SEGMENT MATCHING WITH pcre_dfa_exec()
 
        When a partial match has been found using pcre_dfa_exec(), it is possi-
-       ble to continue the match by  providing  additional  subject  data  and
-       calling  pcre_dfa_exec()  again  with the same compiled regular expres-
-       sion, this time setting the PCRE_DFA_RESTART option. You must pass  the
+       ble  to  continue  the  match  by providing additional subject data and
+       calling pcre_dfa_exec() again with the same  compiled  regular  expres-
+       sion,  this time setting the PCRE_DFA_RESTART option. You must pass the
        same working space as before, because this is where details of the pre-
-       vious partial match are stored. Here  is  an  example  using  pcretest,
-       using  the  \R  escape  sequence to set the PCRE_DFA_RESTART option (\D
+       vious  partial  match  are  stored.  Here is an example using pcretest,
+       using the \R escape sequence to set  the  PCRE_DFA_RESTART  option  (\D
        specifies the use of pcre_dfa_exec()):
 
            re> /^\d?\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d\d$/
@@ -6144,30 +6331,33 @@ MULTI-SEGMENT MATCHING WITH pcre_dfa_exec()
          data> n05\R\D
           0: n05
 
-       The first call has "23ja" as the subject, and requests  partial  match-
-       ing;  the  second  call  has  "n05"  as  the  subject for the continued
-       (restarted) match.  Notice that when the match is  complete,  only  the
-       last  part  is  shown;  PCRE  does not retain the previously partially-
-       matched string. It is up to the calling program to do that if it  needs
+       The  first  call has "23ja" as the subject, and requests partial match-
+       ing; the second call  has  "n05"  as  the  subject  for  the  continued
+       (restarted)  match.   Notice  that when the match is complete, only the
+       last part is shown; PCRE does  not  retain  the  previously  partially-
+       matched  string. It is up to the calling program to do that if it needs
        to.
 
-       You  can  set  the  PCRE_PARTIAL_SOFT or PCRE_PARTIAL_HARD options with
-       PCRE_DFA_RESTART to continue partial matching over  multiple  segments.
-       This  facility  can  be  used  to  pass  very  long  subject strings to
+       You can set the PCRE_PARTIAL_SOFT  or  PCRE_PARTIAL_HARD  options  with
+       PCRE_DFA_RESTART  to  continue partial matching over multiple segments.
+       This facility can  be  used  to  pass  very  long  subject  strings  to
        pcre_dfa_exec().
 
 
 MULTI-SEGMENT MATCHING WITH pcre_exec()
 
-       From release 8.00, pcre_exec() can also be  used  to  do  multi-segment
-       matching.  Unlike  pcre_dfa_exec(),  it  is not possible to restart the
-       previous match with a new segment of data. Instead, new  data  must  be
-       added  to  the  previous  subject  string, and the entire match re-run,
-       starting from the point where the partial match occurred. Earlier  data
-       can be discarded.  Consider an unanchored pattern that matches dates:
+       From  release  8.00,  pcre_exec()  can also be used to do multi-segment
+       matching. Unlike pcre_dfa_exec(), it is not  possible  to  restart  the
+       previous  match  with  a new segment of data. Instead, new data must be
+       added to the previous subject string,  and  the  entire  match  re-run,
+       starting  from the point where the partial match occurred. Earlier data
+       can be discarded. It is best to use PCRE_PARTIAL_HARD  in  this  situa-
+       tion,  because it does not treat the end of a segment as the end of the
+       subject when matching \z, \Z, \b, \B, and  $.  Consider  an  unanchored
+       pattern that matches dates:
 
            re> /\d?\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d\d/
-         data> The date is 23ja\P
+         data> The date is 23ja\P\P
          Partial match: 23ja
 
        At  this stage, an application could discard the text preceding "23ja",
@@ -6188,29 +6378,30 @@ ISSUES WITH MULTI-SEGMENT MATCHING
        Certain types of pattern may give problems with multi-segment matching,
        whichever matching function is used.
 
-       1. If the pattern contains tests for the beginning or end  of  a  line,
-       you  need  to pass the PCRE_NOTBOL or PCRE_NOTEOL options, as appropri-
-       ate, when the subject string for any call does not contain  the  begin-
-       ning or end of a line.
-
-       2.  Lookbehind  assertions at the start of a pattern are catered for in
-       the offsets that are returned for a partial match. However, in  theory,
-       a  lookbehind assertion later in the pattern could require even earlier
-       characters to be inspected, and it might not have been reached  when  a
-       partial  match occurs. This is probably an extremely unlikely case; you
-       could guard against it to a certain extent by  always  including  extra
+       1. If the pattern contains a test for the beginning of a line, you need
+       to  pass  the  PCRE_NOTBOL  option when the subject string for any call
+       does start at the beginning of a line.  There  is  also  a  PCRE_NOTEOL
+       option, but in practice when doing multi-segment matching you should be
+       using PCRE_PARTIAL_HARD, which includes the effect of PCRE_NOTEOL.
+
+       2. Lookbehind assertions at the start of a pattern are catered  for  in
+       the  offsets that are returned for a partial match. However, in theory,
+       a lookbehind assertion later in the pattern could require even  earlier
+       characters  to  be inspected, and it might not have been reached when a
+       partial match occurs. This is probably an extremely unlikely case;  you
+       could  guard  against  it to a certain extent by always including extra
        characters at the start.
 
-       3.  Matching  a subject string that is split into multiple segments may
-       not always produce exactly the same result as matching over one  single
-       long  string,  especially  when  PCRE_PARTIAL_SOFT is used. The section
-       "Partial Matching and Word Boundaries" above describes  an  issue  that
-       arises  if  the  pattern ends with \b or \B. Another kind of difference
-       may occur when there are multiple  matching  possibilities,  because  a
-       partial match result is given only when there are no completed matches.
-       This means that as soon as the shortest match has been found, continua-
-       tion  to  a  new subject segment is no longer possible.  Consider again
-       this pcretest example:
+       3. Matching a subject string that is split into multiple  segments  may
+       not  always produce exactly the same result as matching over one single
+       long string, especially when PCRE_PARTIAL_SOFT  is  used.  The  section
+       "Partial  Matching  and  Word Boundaries" above describes an issue that
+       arises if the pattern ends with \b or \B. Another  kind  of  difference
+       may  occur when there are multiple matching possibilities, because (for
+       PCRE_PARTIAL_SOFT) a partial match result is given only when there  are
+       no completed matches. This means that as soon as the shortest match has
+       been found, continuation to a new subject segment is no  longer  possi-
+       ble. Consider again this pcretest example:
 
            re> /dog(sbody)?/
          data> dogsb\P
@@ -6223,18 +6414,18 @@ ISSUES WITH MULTI-SEGMENT MATCHING
           0: dogsbody
           1: dog
 
-       The first data line passes the string "dogsb" to  pcre_exec(),  setting
-       the  PCRE_PARTIAL_SOFT  option.  Although the string is a partial match
-       for "dogsbody", the  result  is  not  PCRE_ERROR_PARTIAL,  because  the
-       shorter  string  "dog" is a complete match. Similarly, when the subject
-       is presented to pcre_dfa_exec() in several parts ("do" and "gsb"  being
+       The  first  data line passes the string "dogsb" to pcre_exec(), setting
+       the PCRE_PARTIAL_SOFT option. Although the string is  a  partial  match
+       for  "dogsbody",  the  result  is  not  PCRE_ERROR_PARTIAL, because the
+       shorter string "dog" is a complete match. Similarly, when  the  subject
+       is  presented to pcre_dfa_exec() in several parts ("do" and "gsb" being
        the first two) the match stops when "dog" has been found, and it is not
-       possible to continue. On the other hand, if "dogsbody" is presented  as
+       possible  to continue. On the other hand, if "dogsbody" is presented as
        a single string, pcre_dfa_exec() finds both matches.
 
-       Because of these problems, it is probably best to use PCRE_PARTIAL_HARD
-       when matching multi-segment data. The example above then  behaves  dif-
-       ferently:
+       Because of these problems, it is best  to  use  PCRE_PARTIAL_HARD  when
+       matching  multi-segment  data.  The  example above then behaves differ-
+       ently:
 
            re> /dog(sbody)?/
          data> dogsb\P\P
@@ -6244,41 +6435,40 @@ ISSUES WITH MULTI-SEGMENT MATCHING
          data> gsb\R\P\P\D
          Partial match: gsb
 
-
        4. Patterns that contain alternatives at the top level which do not all
-       start with the  same  pattern  item  may  not  work  as  expected  when
-       PCRE_DFA_RESTART  is  used  with pcre_dfa_exec(). For example, consider
+       start  with  the  same  pattern  item  may  not  work  as expected when
+       PCRE_DFA_RESTART is used with pcre_dfa_exec().  For  example,  consider
        this pattern:
 
          1234|3789
 
-       If the first part of the subject is "ABC123", a partial  match  of  the
-       first  alternative  is found at offset 3. There is no partial match for
+       If  the  first  part of the subject is "ABC123", a partial match of the
+       first alternative is found at offset 3. There is no partial  match  for
        the second alternative, because such a match does not start at the same
-       point  in  the  subject  string. Attempting to continue with the string
-       "7890" does not yield a match  because  only  those  alternatives  that
-       match  at  one  point in the subject are remembered. The problem arises
-       because the start of the second alternative matches  within  the  first
-       alternative.  There  is  no  problem with anchored patterns or patterns
+       point in the subject string. Attempting to  continue  with  the  string
+       "7890"  does  not  yield  a  match because only those alternatives that
+       match at one point in the subject are remembered.  The  problem  arises
+       because  the  start  of the second alternative matches within the first
+       alternative. There is no problem with  anchored  patterns  or  patterns
        such as:
 
          1234|ABCD
 
-       where no string can be a partial match for both alternatives.  This  is
-       not  a  problem if pcre_exec() is used, because the entire match has to
+       where  no  string can be a partial match for both alternatives. This is
+       not a problem if pcre_exec() is used, because the entire match  has  to
        be rerun each time:
 
            re> /1234|3789/
-         data> ABC123\P
+         data> ABC123\P\P
          Partial match: 123
          data> 1237890
           0: 3789
 
-       Of course, instead of using PCRE_DFA_PARTIAL, the same technique of re-
+       Of course, instead of using PCRE_DFA_RESTART, the same technique of re-
        running the entire match can also be used with pcre_dfa_exec(). Another
        possibility is to work with two buffers. If a partial match at offset n
-       in  the first buffer is followed by "no match" when PCRE_DFA_RESTART is
-       used on the second buffer, you can then try a  new  match  starting  at
+       in the first buffer is followed by "no match" when PCRE_DFA_RESTART  is
+       used  on  the  second  buffer, you can then try a new match starting at
        offset n+1 in the first buffer.
 
 
@@ -6291,8 +6481,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 19 October 2009
-       Copyright (c) 1997-2009 University of Cambridge.
+       Last updated: 07 November 2010
+       Copyright (c) 1997-2010 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -6403,7 +6593,7 @@ COMPATIBILITY WITH DIFFERENT PCRE RELEASES
 
        In general, it is safest to  recompile  all  saved  patterns  when  you
        update  to  a new PCRE release, though not all updates actually require
-       this. Recompiling is definitely needed for release 7.2.
+       this.
 
 
 AUTHOR
@@ -6415,8 +6605,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 13 June 2007
-       Copyright (c) 1997-2007 University of Cambridge.
+       Last updated: 17 November 2010
+       Copyright (c) 1997-2010 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -7250,7 +7440,7 @@ PCRE SAMPLE PROGRAM
        expressions and the PCRE library. The pcredemo program is provided as a
        simple coding example.
 
-       When you try to run pcredemo when PCRE is not installed in the standard
+       If you try to run pcredemo when PCRE is not installed in  the  standard
        library  directory,  you  may  get an error like this on some operating
        systems (e.g. Solaris):
 
@@ -7274,7 +7464,7 @@ AUTHOR
 
 REVISION
 
-       Last updated: 26 May 2010
+       Last updated: 17 November 2010
        Copyright (c) 1997-2010 University of Cambridge.
 ------------------------------------------------------------------------------
 PCRESTACK(3)                                                      PCRESTACK(3)
diff --git a/ext/pcre/pcrelib/pcre.h b/ext/pcre/pcrelib/pcre.h
index febb617..ec454ee 100644
--- a/ext/pcre/pcrelib/pcre.h
+++ b/ext/pcre/pcrelib/pcre.h
@@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE.
 /* The current PCRE version information. */
 
 #define PCRE_MAJOR          8
-#define PCRE_MINOR          10
+#define PCRE_MINOR          11
 #define PCRE_PRERELEASE     
-#define PCRE_DATE           2010-06-25
+#define PCRE_DATE           2010-12-10
 
 /* When an application links to a PCRE DLL in Windows, the symbols that are
 imported have to be identified as such. When building PCRE, the appropriate
@@ -96,42 +96,44 @@ extern "C" {
 #endif
 
 /* Options. Some are compile-time only, some are run-time only, and some are
-both, so we keep them all distinct. */
-
-#define PCRE_CASELESS           0x00000001
-#define PCRE_MULTILINE          0x00000002
-#define PCRE_DOTALL             0x00000004
-#define PCRE_EXTENDED           0x00000008
-#define PCRE_ANCHORED           0x00000010
-#define PCRE_DOLLAR_ENDONLY     0x00000020
-#define PCRE_EXTRA              0x00000040
-#define PCRE_NOTBOL             0x00000080
-#define PCRE_NOTEOL             0x00000100
-#define PCRE_UNGREEDY           0x00000200
-#define PCRE_NOTEMPTY           0x00000400
-#define PCRE_UTF8               0x00000800
-#define PCRE_NO_AUTO_CAPTURE    0x00001000
-#define PCRE_NO_UTF8_CHECK      0x00002000
-#define PCRE_AUTO_CALLOUT       0x00004000
-#define PCRE_PARTIAL_SOFT       0x00008000
+both, so we keep them all distinct. However, almost all the bits in the options
+word are now used. In the long run, we may have to re-use some of the
+compile-time only bits for runtime options, or vice versa. */
+
+#define PCRE_CASELESS           0x00000001  /* Compile */
+#define PCRE_MULTILINE          0x00000002  /* Compile */
+#define PCRE_DOTALL             0x00000004  /* Compile */
+#define PCRE_EXTENDED           0x00000008  /* Compile */
+#define PCRE_ANCHORED           0x00000010  /* Compile, exec, DFA exec */
+#define PCRE_DOLLAR_ENDONLY     0x00000020  /* Compile */
+#define PCRE_EXTRA              0x00000040  /* Compile */
+#define PCRE_NOTBOL             0x00000080  /* Exec, DFA exec */
+#define PCRE_NOTEOL             0x00000100  /* Exec, DFA exec */
+#define PCRE_UNGREEDY           0x00000200  /* Compile */
+#define PCRE_NOTEMPTY           0x00000400  /* Exec, DFA exec */
+#define PCRE_UTF8               0x00000800  /* Compile */
+#define PCRE_NO_AUTO_CAPTURE    0x00001000  /* Compile */
+#define PCRE_NO_UTF8_CHECK      0x00002000  /* Compile, exec, DFA exec */
+#define PCRE_AUTO_CALLOUT       0x00004000  /* Compile */
+#define PCRE_PARTIAL_SOFT       0x00008000  /* Exec, DFA exec */
 #define PCRE_PARTIAL            0x00008000  /* Backwards compatible synonym */
-#define PCRE_DFA_SHORTEST       0x00010000
-#define PCRE_DFA_RESTART        0x00020000
-#define PCRE_FIRSTLINE          0x00040000
-#define PCRE_DUPNAMES           0x00080000
-#define PCRE_NEWLINE_CR         0x00100000
-#define PCRE_NEWLINE_LF         0x00200000
-#define PCRE_NEWLINE_CRLF       0x00300000
-#define PCRE_NEWLINE_ANY        0x00400000
-#define PCRE_NEWLINE_ANYCRLF    0x00500000
-#define PCRE_BSR_ANYCRLF        0x00800000
-#define PCRE_BSR_UNICODE        0x01000000
-#define PCRE_JAVASCRIPT_COMPAT  0x02000000
-#define PCRE_NO_START_OPTIMIZE  0x04000000
-#define PCRE_NO_START_OPTIMISE  0x04000000
-#define PCRE_PARTIAL_HARD       0x08000000
-#define PCRE_NOTEMPTY_ATSTART   0x10000000
-#define PCRE_UCP                0x20000000
+#define PCRE_DFA_SHORTEST       0x00010000  /* DFA exec */
+#define PCRE_DFA_RESTART        0x00020000  /* DFA exec */
+#define PCRE_FIRSTLINE          0x00040000  /* Compile */
+#define PCRE_DUPNAMES           0x00080000  /* Compile */
+#define PCRE_NEWLINE_CR         0x00100000  /* Compile, exec, DFA exec */
+#define PCRE_NEWLINE_LF         0x00200000  /* Compile, exec, DFA exec */
+#define PCRE_NEWLINE_CRLF       0x00300000  /* Compile, exec, DFA exec */
+#define PCRE_NEWLINE_ANY        0x00400000  /* Compile, exec, DFA exec */
+#define PCRE_NEWLINE_ANYCRLF    0x00500000  /* Compile, exec, DFA exec */
+#define PCRE_BSR_ANYCRLF        0x00800000  /* Compile, exec, DFA exec */
+#define PCRE_BSR_UNICODE        0x01000000  /* Compile, exec, DFA exec */
+#define PCRE_JAVASCRIPT_COMPAT  0x02000000  /* Compile */
+#define PCRE_NO_START_OPTIMIZE  0x04000000  /* Compile, exec, DFA exec */
+#define PCRE_NO_START_OPTIMISE  0x04000000  /* Synonym */
+#define PCRE_PARTIAL_HARD       0x08000000  /* Exec, DFA exec */
+#define PCRE_NOTEMPTY_ATSTART   0x10000000  /* Exec, DFA exec */
+#define PCRE_UCP                0x20000000  /* Compile */
 
 /* Exec-time and get/set-time error codes */
 
@@ -159,6 +161,8 @@ both, so we keep them all distinct. */
 #define PCRE_ERROR_RECURSIONLIMIT (-21)
 #define PCRE_ERROR_NULLWSLIMIT    (-22)  /* No longer actually used */
 #define PCRE_ERROR_BADNEWLINE     (-23)
+#define PCRE_ERROR_BADOFFSET      (-24)
+#define PCRE_ERROR_SHORTUTF8      (-25)
 
 /* Request types for pcre_fullinfo() */
 
diff --git a/ext/pcre/pcrelib/pcre_compile.c b/ext/pcre/pcrelib/pcre_compile.c
index 53027e6..b0d81ac 100644
--- a/ext/pcre/pcrelib/pcre_compile.c
+++ b/ext/pcre/pcrelib/pcre_compile.c
@@ -406,6 +406,7 @@ static const char error_texts[] =
   "different names for subpatterns of the same number are not allowed\0"
   "(*MARK) must have an argument\0"
   "this version of PCRE is not compiled with PCRE_UCP support\0"
+  "\\c must be followed by an ASCII character\0"
   ;
 
 /* Table to identify digits and hex digits. This is used when compiling
@@ -839,7 +840,8 @@ else
     break;
 
     /* For \c, a following letter is upper-cased; then the 0x40 bit is flipped.
-    This coding is ASCII-specific, but then the whole concept of \cx is
+    An error is given if the byte following \c is not an ASCII character. This
+    coding is ASCII-specific, but then the whole concept of \cx is
     ASCII-specific. (However, an EBCDIC equivalent has now been added.) */
 
     case CHAR_c:
@@ -849,11 +851,15 @@ else
       *errorcodeptr = ERR2;
       break;
       }
-
-#ifndef EBCDIC  /* ASCII/UTF-8 coding */
+#ifndef EBCDIC    /* ASCII/UTF-8 coding */
+    if (c > 127)  /* Excludes all non-ASCII in either mode */
+      {
+      *errorcodeptr = ERR68;
+      break;
+      }
     if (c >= CHAR_a && c <= CHAR_z) c -= 32;
     c ^= 0x40;
-#else           /* EBCDIC coding */
+#else             /* EBCDIC coding */
     if (c >= CHAR_a && c <= CHAR_z) c += 64;
     c ^= 0xC0;
 #endif
@@ -1097,10 +1103,21 @@ top-level call starts at the beginning of the pattern. All other calls must
 start at a parenthesis. It scans along a pattern's text looking for capturing
 subpatterns, and counting them. If it finds a named pattern that matches the
 name it is given, it returns its number. Alternatively, if the name is NULL, it
-returns when it reaches a given numbered subpattern. We know that if (?P< is
-encountered, the name will be terminated by '>' because that is checked in the
-first pass. Recursion is used to keep track of subpatterns that reset the
-capturing group numbers - the (?| feature.
+returns when it reaches a given numbered subpattern. Recursion is used to keep
+track of subpatterns that reset the capturing group numbers - the (?| feature.
+
+This function was originally called only from the second pass, in which we know
+that if (?< or (?' or (?P< is encountered, the name will be correctly
+terminated because that is checked in the first pass. There is now one call to
+this function in the first pass, to check for a recursive back reference by
+name (so that we can make the whole group atomic). In this case, we need check
+only up to the current position in the pattern, and that is still OK because
+and previous occurrences will have been checked. To make this work, the test
+for "end of pattern" is a check against cd->end_pattern in the main loop,
+instead of looking for a binary zero. This means that the special first-pass
+call can adjust cd->end_pattern temporarily. (Checks for binary zero while
+processing items within the loop are OK, because afterwards the main loop will
+terminate.)
 
 Arguments:
   ptrptr       address of the current character pointer (updated)
@@ -1108,6 +1125,7 @@ Arguments:
   name         name to seek, or NULL if seeking a numbered subpattern
   lorn         name length, or subpattern number if name is NULL
   xmode        TRUE if we are in /x mode
+  utf8         TRUE if we are in UTF-8 mode
   count        pointer to the current capturing subpattern number (updated)
 
 Returns:       the number of the named subpattern, or -1 if not found
@@ -1115,7 +1133,7 @@ Returns:       the number of the named subpattern, or -1 if not found
 
 static int
 find_parens_sub(uschar **ptrptr, compile_data *cd, const uschar *name, int lorn,
-  BOOL xmode, int *count)
+  BOOL xmode, BOOL utf8, int *count)
 {
 uschar *ptr = *ptrptr;
 int start_count = *count;
@@ -1200,9 +1218,11 @@ if (ptr[0] == CHAR_LEFT_PARENTHESIS)
   }
 
 /* Past any initial parenthesis handling, scan for parentheses or vertical
-bars. */
+bars. Stop if we get to cd->end_pattern. Note that this is important for the
+first-pass call when this value is temporarily adjusted to stop at the current
+position. So DO NOT change this to a test for binary zero. */
 
-for (; *ptr != 0; ptr++)
+for (; ptr < cd->end_pattern; ptr++)
   {
   /* Skip over backslashed characters and also entire \Q...\E */
 
@@ -1276,7 +1296,15 @@ for (; *ptr != 0; ptr++)
 
   if (xmode && *ptr == CHAR_NUMBER_SIGN)
     {
-    while (*(++ptr) != 0 && *ptr != CHAR_NL) {};
+    ptr++;
+    while (*ptr != 0)
+      {
+      if (IS_NEWLINE(ptr)) { ptr += cd->nllen - 1; break; }
+      ptr++;
+#ifdef SUPPORT_UTF8
+      if (utf8) while ((*ptr & 0xc0) == 0x80) ptr++;
+#endif
+      }
     if (*ptr == 0) goto FAIL_EXIT;
     continue;
     }
@@ -1285,7 +1313,7 @@ for (; *ptr != 0; ptr++)
 
   if (*ptr == CHAR_LEFT_PARENTHESIS)
     {
-    int rc = find_parens_sub(&ptr, cd, name, lorn, xmode, count);
+    int rc = find_parens_sub(&ptr, cd, name, lorn, xmode, utf8, count);
     if (rc > 0) return rc;
     if (*ptr == 0) goto FAIL_EXIT;
     }
@@ -1331,12 +1359,14 @@ Arguments:
   name         name to seek, or NULL if seeking a numbered subpattern
   lorn         name length, or subpattern number if name is NULL
   xmode        TRUE if we are in /x mode
+  utf8         TRUE if we are in UTF-8 mode
 
 Returns:       the number of the found subpattern, or -1 if not found
 */
 
 static int
-find_parens(compile_data *cd, const uschar *name, int lorn, BOOL xmode)
+find_parens(compile_data *cd, const uschar *name, int lorn, BOOL xmode,
+  BOOL utf8)
 {
 uschar *ptr = (uschar *)cd->start_pattern;
 int count = 0;
@@ -1349,7 +1379,7 @@ matching closing parens. That is why we have to have a loop. */
 
 for (;;)
   {
-  rc = find_parens_sub(&ptr, cd, name, lorn, xmode, &count);
+  rc = find_parens_sub(&ptr, cd, name, lorn, xmode, utf8, &count);
   if (rc > 0 || *ptr++ == 0) break;
   }
 
@@ -1722,9 +1752,12 @@ for (;;)
       case OP_MARK:
       case OP_PRUNE_ARG:
       case OP_SKIP_ARG:
-      case OP_THEN_ARG:
       code += code[1];
       break;
+
+      case OP_THEN_ARG:
+      code += code[1+LINK_SIZE];
+      break;
       }
 
     /* Add in the fixed length from the table */
@@ -1825,9 +1858,12 @@ for (;;)
       case OP_MARK:
       case OP_PRUNE_ARG:
       case OP_SKIP_ARG:
-      case OP_THEN_ARG:
       code += code[1];
       break;
+
+      case OP_THEN_ARG:
+      code += code[1+LINK_SIZE];
+      break;
       }
 
     /* Add in the fixed length from the table */
@@ -2103,10 +2139,13 @@ for (code = first_significant_code(code + _pcre_OP_lengths[*code], NULL, 0, TRUE
     case OP_MARK:
     case OP_PRUNE_ARG:
     case OP_SKIP_ARG:
-    case OP_THEN_ARG:
     code += code[1];
     break;
 
+    case OP_THEN_ARG:
+    code += code[1+LINK_SIZE];
+    break;
+
     /* None of the remaining opcodes are required to match a character. */
 
     default:
@@ -2504,8 +2543,15 @@ if ((options & PCRE_EXTENDED) != 0)
     while ((cd->ctypes[*ptr] & ctype_space) != 0) ptr++;
     if (*ptr == CHAR_NUMBER_SIGN)
       {
-      while (*(++ptr) != 0)
+      ptr++;
+      while (*ptr != 0)
+        {
         if (IS_NEWLINE(ptr)) { ptr += cd->nllen; break; }
+        ptr++;
+#ifdef SUPPORT_UTF8
+        if (utf8) while ((*ptr & 0xc0) == 0x80) ptr++;
+#endif
+        }
       }
     else break;
     }
@@ -2541,8 +2587,15 @@ if ((options & PCRE_EXTENDED) != 0)
     while ((cd->ctypes[*ptr] & ctype_space) != 0) ptr++;
     if (*ptr == CHAR_NUMBER_SIGN)
       {
-      while (*(++ptr) != 0)
+      ptr++;
+      while (*ptr != 0)
+        {
         if (IS_NEWLINE(ptr)) { ptr += cd->nllen; break; }
+        ptr++;
+#ifdef SUPPORT_UTF8
+        if (utf8) while ((*ptr & 0xc0) == 0x80) ptr++;
+#endif
+        }
       }
     else break;
     }
@@ -3115,9 +3168,14 @@ for (;; ptr++)
     if ((cd->ctypes[c] & ctype_space) != 0) continue;
     if (c == CHAR_NUMBER_SIGN)
       {
-      while (*(++ptr) != 0)
+      ptr++;
+      while (*ptr != 0)
         {
         if (IS_NEWLINE(ptr)) { ptr += cd->nllen - 1; break; }
+        ptr++;
+#ifdef SUPPORT_UTF8
+        if (utf8) while ((*ptr & 0xc0) == 0x80) ptr++;
+#endif
         }
       if (*ptr != 0) continue;
 
@@ -3492,9 +3550,14 @@ for (;; ptr++)
             for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_word];
             continue;
 
+            /* Perl 5.004 onwards omits VT from \s, but we must preserve it
+            if it was previously set by something earlier in the character
+            class. */
+
             case ESC_s:
-            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_space];
-            classbits[1] &= ~0x08;   /* Perl 5.004 onwards omits VT from \s */
+            classbits[0] |= cbits[cbit_space];
+            classbits[1] |= cbits[cbit_space+1] & ~0x08;
+            for (c = 2; c < 32; c++) classbits[c] |= cbits[c+cbit_space];
             continue;
 
             case ESC_S:
@@ -4806,7 +4869,12 @@ for (;; ptr++)
               *errorcodeptr = ERR66;
               goto FAILED;
               }
-            *code++ = verbs[i].op;
+            *code = verbs[i].op;
+            if (*code++ == OP_THEN)
+              {
+              PUT(code, 0, code - bcptr->current_branch - 1);
+              code += LINK_SIZE;
+              }
             }
 
           else
@@ -4816,7 +4884,12 @@ for (;; ptr++)
               *errorcodeptr = ERR59;
               goto FAILED;
               }
-            *code++ = verbs[i].op_arg;
+            *code = verbs[i].op_arg;
+            if (*code++ == OP_THEN_ARG)
+              {
+              PUT(code, 0, code - bcptr->current_branch - 1);
+              code += LINK_SIZE;
+              }
             *code++ = arglen;
             memcpy(code, arg, arglen);
             code += arglen;
@@ -5010,7 +5083,7 @@ for (;; ptr++)
         /* Search the pattern for a forward reference */
 
         else if ((i = find_parens(cd, name, namelen,
-                        (options & PCRE_EXTENDED) != 0)) > 0)
+                        (options & PCRE_EXTENDED) != 0, utf8)) > 0)
           {
           PUT2(code, 2+LINK_SIZE, i);
           code[1+LINK_SIZE]++;
@@ -5311,11 +5384,17 @@ for (;; ptr++)
         while ((cd->ctypes[*ptr] & ctype_word) != 0) ptr++;
         namelen = (int)(ptr - name);
 
-        /* In the pre-compile phase, do a syntax check and set a dummy
-        reference number. */
+        /* In the pre-compile phase, do a syntax check. We used to just set
+        a dummy reference number, because it was not used in the first pass.
+        However, with the change of recursive back references to be atomic,
+        we have to look for the number so that this state can be identified, as
+        otherwise the incorrect length is computed. If it's not a backwards
+        reference, the dummy number will do. */
 
         if (lengthptr != NULL)
           {
+          const uschar *temp;
+
           if (namelen == 0)
             {
             *errorcodeptr = ERR62;
@@ -5331,7 +5410,22 @@ for (;; ptr++)
             *errorcodeptr = ERR48;
             goto FAILED;
             }
-          recno = 0;
+
+          /* The name table does not exist in the first pass, so we cannot
+          do a simple search as in the code below. Instead, we have to scan the
+          pattern to find the number. It is important that we scan it only as
+          far as we have got because the syntax of named subpatterns has not
+          been checked for the rest of the pattern, and find_parens() assumes
+          correct syntax. In any case, it's a waste of resources to scan
+          further. We stop the scan at the current point by temporarily
+          adjusting the value of cd->endpattern. */
+
+          temp = cd->end_pattern;
+          cd->end_pattern = ptr;
+          recno = find_parens(cd, name, namelen,
+            (options & PCRE_EXTENDED) != 0, utf8);
+          cd->end_pattern = temp;
+          if (recno < 0) recno = 0;    /* Forward ref; set dummy number */
           }
 
         /* In the real compile, seek the name in the table. We check the name
@@ -5356,7 +5450,7 @@ for (;; ptr++)
             }
           else if ((recno =                /* Forward back reference */
                     find_parens(cd, name, namelen,
-                      (options & PCRE_EXTENDED) != 0)) <= 0)
+                      (options & PCRE_EXTENDED) != 0, utf8)) <= 0)
             {
             *errorcodeptr = ERR15;
             goto FAILED;
@@ -5467,7 +5561,7 @@ for (;; ptr++)
             if (called == NULL)
               {
               if (find_parens(cd, NULL, recno,
-                    (options & PCRE_EXTENDED) != 0) < 0)
+                    (options & PCRE_EXTENDED) != 0, utf8) < 0)
                 {
                 *errorcodeptr = ERR15;
                 goto FAILED;
@@ -6797,6 +6891,8 @@ while (ptr[skipatstart] == CHAR_LEFT_PARENTHESIS &&
     { skipatstart += 7; options |= PCRE_UTF8; continue; }
   else if (strncmp((char *)(ptr+skipatstart+2), STRING_UCP_RIGHTPAR, 4) == 0)
     { skipatstart += 6; options |= PCRE_UCP; continue; }
+  else if (strncmp((char *)(ptr+skipatstart+2), STRING_NO_START_OPT_RIGHTPAR, 13) == 0)
+    { skipatstart += 15; options |= PCRE_NO_START_OPTIMIZE; continue; }
 
   if (strncmp((char *)(ptr+skipatstart+2), STRING_CR_RIGHTPAR, 3) == 0)
     { skipatstart += 5; newnl = PCRE_NEWLINE_CR; }
diff --git a/ext/pcre/pcrelib/pcre_exec.c b/ext/pcre/pcrelib/pcre_exec.c
index 5588354..a007786 100644
--- a/ext/pcre/pcrelib/pcre_exec.c
+++ b/ext/pcre/pcrelib/pcre_exec.c
@@ -292,7 +292,7 @@ argument of match(), which never changes. */
 
 #define RMATCH(ra,rb,rc,rd,re,rf,rg,rw)\
   {\
-  heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\
+  heapframe *newframe = (heapframe *)(pcre_stack_malloc)(sizeof(heapframe));\
   if (newframe == NULL) RRETURN(PCRE_ERROR_NOMEMORY);\
   frame->Xwhere = rw; \
   newframe->Xeptr = ra;\
@@ -420,17 +420,18 @@ immediately. The second one is used when we already know we are past the end of
 the subject. */
 
 #define CHECK_PARTIAL()\
-  if (md->partial != 0 && eptr >= md->end_subject && eptr > mstart)\
-    {\
-    md->hitend = TRUE;\
-    if (md->partial > 1) MRRETURN(PCRE_ERROR_PARTIAL);\
+  if (md->partial != 0 && eptr >= md->end_subject && \
+      eptr > md->start_used_ptr) \
+    { \
+    md->hitend = TRUE; \
+    if (md->partial > 1) MRRETURN(PCRE_ERROR_PARTIAL); \
     }
 
 #define SCHECK_PARTIAL()\
-  if (md->partial != 0 && eptr > mstart)\
-    {\
-    md->hitend = TRUE;\
-    if (md->partial > 1) MRRETURN(PCRE_ERROR_PARTIAL);\
+  if (md->partial != 0 && eptr > md->start_used_ptr) \
+    { \
+    md->hitend = TRUE; \
+    if (md->partial > 1) MRRETURN(PCRE_ERROR_PARTIAL); \
     }
 
 
@@ -486,7 +487,7 @@ heap storage. Set up the top-level frame here; others are obtained from the
 heap whenever RMATCH() does a "recursion". See the macro definitions above. */
 
 #ifdef NO_RECURSE
-heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe));
+heapframe *frame = (heapframe *)(pcre_stack_malloc)(sizeof(heapframe));
 if (frame == NULL) RRETURN(PCRE_ERROR_NOMEMORY);
 frame->Xprevframe = NULL;            /* Marks the top level */
 
@@ -708,36 +709,47 @@ for (;;)
     case OP_FAIL:
     MRRETURN(MATCH_NOMATCH);
 
+    /* COMMIT overrides PRUNE, SKIP, and THEN */
+
     case OP_COMMIT:
     RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md,
       ims, eptrb, flags, RM52);
-    if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+    if (rrc != MATCH_NOMATCH && rrc != MATCH_PRUNE &&
+        rrc != MATCH_SKIP && rrc != MATCH_SKIP_ARG &&
+        rrc != MATCH_THEN)
+      RRETURN(rrc);
     MRRETURN(MATCH_COMMIT);
 
+    /* PRUNE overrides THEN */
+
     case OP_PRUNE:
     RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md,
       ims, eptrb, flags, RM51);
-    if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+    if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc);
     MRRETURN(MATCH_PRUNE);
 
     case OP_PRUNE_ARG:
     RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode] + ecode[1], offset_top, md,
       ims, eptrb, flags, RM56);
-    if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+    if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc);
     md->mark = ecode + 2;
     RRETURN(MATCH_PRUNE);
 
+    /* SKIP overrides PRUNE and THEN */
+
     case OP_SKIP:
     RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md,
       ims, eptrb, flags, RM53);
-    if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+    if (rrc != MATCH_NOMATCH && rrc != MATCH_PRUNE && rrc != MATCH_THEN)
+      RRETURN(rrc);
     md->start_match_ptr = eptr;   /* Pass back current position */
     MRRETURN(MATCH_SKIP);
 
     case OP_SKIP_ARG:
     RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode] + ecode[1], offset_top, md,
       ims, eptrb, flags, RM57);
-    if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+    if (rrc != MATCH_NOMATCH && rrc != MATCH_PRUNE && rrc != MATCH_THEN)
+      RRETURN(rrc);
 
     /* Pass back the current skip name by overloading md->start_match_ptr and
     returning the special MATCH_SKIP_ARG return code. This will either be
@@ -747,17 +759,24 @@ for (;;)
     md->start_match_ptr = ecode + 2;
     RRETURN(MATCH_SKIP_ARG);
 
+    /* For THEN (and THEN_ARG) we pass back the address of the bracket or
+    the alt that is at the start of the current branch. This makes it possible
+    to skip back past alternatives that precede the THEN within the current
+    branch. */
+
     case OP_THEN:
     RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md,
       ims, eptrb, flags, RM54);
     if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+    md->start_match_ptr = ecode - GET(ecode, 1);
     MRRETURN(MATCH_THEN);
 
     case OP_THEN_ARG:
-    RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode] + ecode[1], offset_top, md,
-      ims, eptrb, flags, RM58);
+    RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode] + ecode[1+LINK_SIZE],
+      offset_top, md, ims, eptrb, flags, RM58);
     if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-    md->mark = ecode + 2;
+    md->start_match_ptr = ecode - GET(ecode, 1);
+    md->mark = ecode + LINK_SIZE + 2;
     RRETURN(MATCH_THEN);
 
     /* Handle a capturing bracket. If there is space in the offset vector, save
@@ -802,7 +821,9 @@ for (;;)
         {
         RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md,
           ims, eptrb, flags, RM1);
-        if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc);
+        if (rrc != MATCH_NOMATCH &&
+            (rrc != MATCH_THEN || md->start_match_ptr != ecode))
+          RRETURN(rrc);
         md->capture_last = save_capture_last;
         ecode += GET(ecode, 1);
         }
@@ -863,7 +884,9 @@ for (;;)
 
       RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, ims,
         eptrb, flags, RM2);
-      if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc);
+      if (rrc != MATCH_NOMATCH &&
+          (rrc != MATCH_THEN || md->start_match_ptr != ecode))
+        RRETURN(rrc);
       ecode += GET(ecode, 1);
       }
     /* Control never reaches here. */
@@ -1064,7 +1087,8 @@ for (;;)
         ecode += 1 + LINK_SIZE + GET(ecode, LINK_SIZE + 2);
         while (*ecode == OP_ALT) ecode += GET(ecode, 1);
         }
-      else if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN)
+      else if (rrc != MATCH_NOMATCH &&
+              (rrc != MATCH_THEN || md->start_match_ptr != ecode))
         {
         RRETURN(rrc);         /* Need braces because of following else */
         }
@@ -1192,7 +1216,9 @@ for (;;)
         mstart = md->start_match_ptr;   /* In case \K reset it */
         break;
         }
-      if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc);
+      if (rrc != MATCH_NOMATCH &&
+          (rrc != MATCH_THEN || md->start_match_ptr != ecode))
+        RRETURN(rrc);
       ecode += GET(ecode, 1);
       }
     while (*ecode == OP_ALT);
@@ -1226,7 +1252,9 @@ for (;;)
         do ecode += GET(ecode,1); while (*ecode == OP_ALT);
         break;
         }
-      if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc);
+      if (rrc != MATCH_NOMATCH &&
+          (rrc != MATCH_THEN || md->start_match_ptr != ecode))
+        RRETURN(rrc);
       ecode += GET(ecode,1);
       }
     while (*ecode == OP_ALT);
@@ -1363,7 +1391,8 @@ for (;;)
             (pcre_free)(new_recursive.offset_save);
           MRRETURN(MATCH_MATCH);
           }
-        else if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN)
+        else if (rrc != MATCH_NOMATCH &&
+                (rrc != MATCH_THEN || md->start_match_ptr != ecode))
           {
           DPRINTF(("Recursion gave error %d\n", rrc));
           if (new_recursive.offset_save != stacksave)
@@ -1406,7 +1435,9 @@ for (;;)
         mstart = md->start_match_ptr;
         break;
         }
-      if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc);
+      if (rrc != MATCH_NOMATCH &&
+          (rrc != MATCH_THEN || md->start_match_ptr != ecode))
+        RRETURN(rrc);
       ecode += GET(ecode,1);
       }
     while (*ecode == OP_ALT);
@@ -1672,37 +1703,40 @@ for (;;)
       if (eptr < md->end_subject)
         { if (!IS_NEWLINE(eptr)) MRRETURN(MATCH_NOMATCH); }
       else
-        { if (md->noteol) MRRETURN(MATCH_NOMATCH); }
+        {
+        if (md->noteol) MRRETURN(MATCH_NOMATCH);
+        SCHECK_PARTIAL();
+        }
       ecode++;
       break;
       }
-    else
+    else  /* Not multiline */
       {
       if (md->noteol) MRRETURN(MATCH_NOMATCH);
-      if (!md->endonly)
-        {
-        if (eptr != md->end_subject &&
-            (!IS_NEWLINE(eptr) || eptr != md->end_subject - md->nllen))
-          MRRETURN(MATCH_NOMATCH);
-        ecode++;
-        break;
-        }
+      if (!md->endonly) goto ASSERT_NL_OR_EOS;
       }
+
     /* ... else fall through for endonly */
 
     /* End of subject assertion (\z) */
 
     case OP_EOD:
     if (eptr < md->end_subject) MRRETURN(MATCH_NOMATCH);
+    SCHECK_PARTIAL();
     ecode++;
     break;
 
     /* End of subject or ending \n assertion (\Z) */
 
     case OP_EODN:
-    if (eptr != md->end_subject &&
+    ASSERT_NL_OR_EOS:
+    if (eptr < md->end_subject &&
         (!IS_NEWLINE(eptr) || eptr != md->end_subject - md->nllen))
       MRRETURN(MATCH_NOMATCH);
+
+    /* Either at end of string or \n before end. */
+
+    SCHECK_PARTIAL();
     ecode++;
     break;
 
@@ -5598,6 +5632,7 @@ if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
 if (re == NULL || subject == NULL ||
    (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
 if (offsetcount < 0) return PCRE_ERROR_BADCOUNT;
+if (start_offset < 0 || start_offset > length) return PCRE_ERROR_BADOFFSET;
 
 /* This information is for finding all the numbers associated with a given
 name, for condition testing. */
@@ -5764,16 +5799,14 @@ back the character offset. */
 #ifdef SUPPORT_UTF8
 if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0)
   {
-  if (_pcre_valid_utf8((USPTR)subject, length) >= 0)
-    return PCRE_ERROR_BADUTF8;
+  int tb;
+  if ((tb = _pcre_valid_utf8((USPTR)subject, length)) >= 0)
+    return (tb == length && md->partial > 1)?
+      PCRE_ERROR_SHORTUTF8 : PCRE_ERROR_BADUTF8;
   if (start_offset > 0 && start_offset < length)
     {
-    int tb = ((USPTR)subject)[start_offset];
-    if (tb > 127)
-      {
-      tb &= 0xc0;
-      if (tb != 0 && tb != 0xc0) return PCRE_ERROR_BADUTF8_OFFSET;
-      }
+    tb = ((USPTR)subject)[start_offset] & 0xc0;
+    if (tb == 0x80) return PCRE_ERROR_BADUTF8_OFFSET;
     }
   }
 #endif
@@ -5901,9 +5934,10 @@ for(;;)
   /* There are some optimizations that avoid running the match if a known
   starting point is not found, or if a known later character is not present.
   However, there is an option that disables these, for testing and for ensuring
-  that all callouts do actually occur. */
+  that all callouts do actually occur. The option can be set in the regex by
+  (*NO_START_OPT) or passed in match-time options. */
 
-  if ((options & PCRE_NO_START_OPTIMIZE) == 0)
+  if (((options | re->options) & PCRE_NO_START_OPTIMIZE) == 0)
     {
     /* Advance to a unique first byte if there is one. */
 
diff --git a/ext/pcre/pcrelib/pcre_internal.h b/ext/pcre/pcrelib/pcre_internal.h
index 039a140..6ec0b7a 100644
--- a/ext/pcre/pcrelib/pcre_internal.h
+++ b/ext/pcre/pcrelib/pcre_internal.h
@@ -410,9 +410,10 @@ capturing parenthesis numbers in back references. */
 
 /* When UTF-8 encoding is being used, a character is no longer just a single
 byte. The macros for character handling generate simple sequences when used in
-byte-mode, and more complicated ones for UTF-8 characters. BACKCHAR should
-never be called in byte mode. To make sure it can never even appear when UTF-8
-support is omitted, we don't even define it. */
+byte-mode, and more complicated ones for UTF-8 characters. GETCHARLENTEST is
+not used when UTF-8 is not supported, so it is not defined, and BACKCHAR should
+never be called in byte mode. To make sure they can never even appear when
+UTF-8 support is omitted, we don't even define them. */
 
 #ifndef SUPPORT_UTF8
 #define GETCHAR(c, eptr) c = *eptr;
@@ -420,43 +421,83 @@ support is omitted, we don't even define it. */
 #define GETCHARINC(c, eptr) c = *eptr++;
 #define GETCHARINCTEST(c, eptr) c = *eptr++;
 #define GETCHARLEN(c, eptr, len) c = *eptr;
+/* #define GETCHARLENTEST(c, eptr, len) */
 /* #define BACKCHAR(eptr) */
 
 #else   /* SUPPORT_UTF8 */
 
+/* These macros were originally written in the form of loops that used data
+from the tables whose names start with _pcre_utf8_table. They were rewritten by
+a user so as not to use loops, because in some environments this gives a
+significant performance advantage, and it seems never to do any harm. */
+
+/* Base macro to pick up the remaining bytes of a UTF-8 character, not
+advancing the pointer. */
+
+#define GETUTF8(c, eptr) \
+    { \
+    if ((c & 0x20) == 0) \
+      c = ((c & 0x1f) << 6) | (eptr[1] & 0x3f); \
+    else if ((c & 0x10) == 0) \
+      c = ((c & 0x0f) << 12) | ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \
+    else if ((c & 0x08) == 0) \
+      c = ((c & 0x07) << 18) | ((eptr[1] & 0x3f) << 12) | \
+      ((eptr[2] & 0x3f) << 6) | (eptr[3] & 0x3f); \
+    else if ((c & 0x04) == 0) \
+      c = ((c & 0x03) << 24) | ((eptr[1] & 0x3f) << 18) | \
+          ((eptr[2] & 0x3f) << 12) | ((eptr[3] & 0x3f) << 6) | \
+          (eptr[4] & 0x3f); \
+    else \
+      c = ((c & 0x01) << 30) | ((eptr[1] & 0x3f) << 24) | \
+          ((eptr[2] & 0x3f) << 18) | ((eptr[3] & 0x3f) << 12) | \
+          ((eptr[4] & 0x3f) << 6) | (eptr[5] & 0x3f); \
+    }
+
 /* Get the next UTF-8 character, not advancing the pointer. This is called when
 we know we are in UTF-8 mode. */
 
 #define GETCHAR(c, eptr) \
   c = *eptr; \
-  if (c >= 0xc0) \
-    { \
-    int gcii; \
-    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
-    int gcss = 6*gcaa; \
-    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
-    for (gcii = 1; gcii <= gcaa; gcii++) \
-      { \
-      gcss -= 6; \
-      c |= (eptr[gcii] & 0x3f) << gcss; \
-      } \
-    }
+  if (c >= 0xc0) GETUTF8(c, eptr);
 
 /* Get the next UTF-8 character, testing for UTF-8 mode, and not advancing the
 pointer. */
 
 #define GETCHARTEST(c, eptr) \
   c = *eptr; \
-  if (utf8 && c >= 0xc0) \
+  if (utf8 && c >= 0xc0) GETUTF8(c, eptr);
+
+/* Base macro to pick up the remaining bytes of a UTF-8 character, advancing
+the pointer. */
+
+#define GETUTF8INC(c, eptr) \
     { \
-    int gcii; \
-    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
-    int gcss = 6*gcaa; \
-    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
-    for (gcii = 1; gcii <= gcaa; gcii++) \
+    if ((c & 0x20) == 0) \
+      c = ((c & 0x1f) << 6) | (*eptr++ & 0x3f); \
+    else if ((c & 0x10) == 0) \
+      { \
+      c = ((c & 0x0f) << 12) | ((*eptr & 0x3f) << 6) | (eptr[1] & 0x3f); \
+      eptr += 2; \
+      } \
+    else if ((c & 0x08) == 0) \
+      { \
+      c = ((c & 0x07) << 18) | ((*eptr & 0x3f) << 12) | \
+          ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \
+      eptr += 3; \
+      } \
+    else if ((c & 0x04) == 0) \
       { \
-      gcss -= 6; \
-      c |= (eptr[gcii] & 0x3f) << gcss; \
+      c = ((c & 0x03) << 24) | ((*eptr & 0x3f) << 18) | \
+          ((eptr[1] & 0x3f) << 12) | ((eptr[2] & 0x3f) << 6) | \
+          (eptr[3] & 0x3f); \
+      eptr += 4; \
+      } \
+    else \
+      { \
+      c = ((c & 0x01) << 30) | ((*eptr & 0x3f) << 24) | \
+          ((eptr[1] & 0x3f) << 18) | ((eptr[2] & 0x3f) << 12) | \
+          ((eptr[3] & 0x3f) << 6) | (eptr[4] & 0x3f); \
+      eptr += 5; \
       } \
     }
 
@@ -465,32 +506,49 @@ know we are in UTF-8 mode. */
 
 #define GETCHARINC(c, eptr) \
   c = *eptr++; \
-  if (c >= 0xc0) \
-    { \
-    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
-    int gcss = 6*gcaa; \
-    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
-    while (gcaa-- > 0) \
-      { \
-      gcss -= 6; \
-      c |= (*eptr++ & 0x3f) << gcss; \
-      } \
-    }
+  if (c >= 0xc0) GETUTF8INC(c, eptr);
 
 /* Get the next character, testing for UTF-8 mode, and advancing the pointer.
 This is called when we don't know if we are in UTF-8 mode. */
 
 #define GETCHARINCTEST(c, eptr) \
   c = *eptr++; \
-  if (utf8 && c >= 0xc0) \
+  if (utf8 && c >= 0xc0) GETUTF8INC(c, eptr);
+
+/* Base macro to pick up the remaining bytes of a UTF-8 character, not
+advancing the pointer, incrementing the length. */
+
+#define GETUTF8LEN(c, eptr, len) \
     { \
-    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
-    int gcss = 6*gcaa; \
-    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
-    while (gcaa-- > 0) \
+    if ((c & 0x20) == 0) \
+      { \
+      c = ((c & 0x1f) << 6) | (eptr[1] & 0x3f); \
+      len++; \
+      } \
+    else if ((c & 0x10)  == 0) \
       { \
-      gcss -= 6; \
-      c |= (*eptr++ & 0x3f) << gcss; \
+      c = ((c & 0x0f) << 12) | ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \
+      len += 2; \
+      } \
+    else if ((c & 0x08)  == 0) \
+      {\
+      c = ((c & 0x07) << 18) | ((eptr[1] & 0x3f) << 12) | \
+          ((eptr[2] & 0x3f) << 6) | (eptr[3] & 0x3f); \
+      len += 3; \
+      } \
+    else if ((c & 0x04)  == 0) \
+      { \
+      c = ((c & 0x03) << 24) | ((eptr[1] & 0x3f) << 18) | \
+          ((eptr[2] & 0x3f) << 12) | ((eptr[3] & 0x3f) << 6) | \
+          (eptr[4] & 0x3f); \
+      len += 4; \
+      } \
+    else \
+      {\
+      c = ((c & 0x01) << 30) | ((eptr[1] & 0x3f) << 24) | \
+          ((eptr[2] & 0x3f) << 18) | ((eptr[3] & 0x3f) << 12) | \
+          ((eptr[4] & 0x3f) << 6) | (eptr[5] & 0x3f); \
+      len += 5; \
       } \
     }
 
@@ -499,19 +557,7 @@ if there are extra bytes. This is called when we know we are in UTF-8 mode. */
 
 #define GETCHARLEN(c, eptr, len) \
   c = *eptr; \
-  if (c >= 0xc0) \
-    { \
-    int gcii; \
-    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
-    int gcss = 6*gcaa; \
-    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
-    for (gcii = 1; gcii <= gcaa; gcii++) \
-      { \
-      gcss -= 6; \
-      c |= (eptr[gcii] & 0x3f) << gcss; \
-      } \
-    len += gcaa; \
-    }
+  if (c >= 0xc0) GETUTF8LEN(c, eptr, len);
 
 /* Get the next UTF-8 character, testing for UTF-8 mode, not advancing the
 pointer, incrementing length if there are extra bytes. This is called when we
@@ -519,19 +565,7 @@ do not know if we are in UTF-8 mode. */
 
 #define GETCHARLENTEST(c, eptr, len) \
   c = *eptr; \
-  if (utf8 && c >= 0xc0) \
-    { \
-    int gcii; \
-    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
-    int gcss = 6*gcaa; \
-    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
-    for (gcii = 1; gcii <= gcaa; gcii++) \
-      { \
-      gcss -= 6; \
-      c |= (eptr[gcii] & 0x3f) << gcss; \
-      } \
-    len += gcaa; \
-    }
+  if (utf8 && c >= 0xc0) GETUTF8LEN(c, eptr, len);
 
 /* If the pointer is not at the start of a character, move it back until
 it is. This is called only in UTF-8 mode - we don't put a test within the macro
@@ -539,7 +573,7 @@ because almost all calls are already within a block of UTF-8 only code. */
 
 #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--
 
-#endif
+#endif  /* SUPPORT_UTF8 */
 
 
 /* In case there is no definition of offsetof() provided - though any proper
@@ -583,7 +617,7 @@ time, run time, or study time, respectively. */
    PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \
    PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE| \
    PCRE_DUPNAMES|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE| \
-   PCRE_JAVASCRIPT_COMPAT|PCRE_UCP)
+   PCRE_JAVASCRIPT_COMPAT|PCRE_UCP|PCRE_NO_START_OPTIMIZE)
 
 #define PUBLIC_EXEC_OPTIONS \
   (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NOTEMPTY_ATSTART| \
@@ -900,15 +934,16 @@ so that PCRE works on both ASCII and EBCDIC platforms, in non-UTF-mode only. */
 
 #define STRING_DEFINE               "DEFINE"
 
-#define STRING_CR_RIGHTPAR          "CR)"
-#define STRING_LF_RIGHTPAR          "LF)"
-#define STRING_CRLF_RIGHTPAR        "CRLF)"
-#define STRING_ANY_RIGHTPAR         "ANY)"
-#define STRING_ANYCRLF_RIGHTPAR     "ANYCRLF)"
-#define STRING_BSR_ANYCRLF_RIGHTPAR "BSR_ANYCRLF)"
-#define STRING_BSR_UNICODE_RIGHTPAR "BSR_UNICODE)"
-#define STRING_UTF8_RIGHTPAR        "UTF8)"
-#define STRING_UCP_RIGHTPAR         "UCP)"
+#define STRING_CR_RIGHTPAR             "CR)"
+#define STRING_LF_RIGHTPAR             "LF)"
+#define STRING_CRLF_RIGHTPAR           "CRLF)"
+#define STRING_ANY_RIGHTPAR            "ANY)"
+#define STRING_ANYCRLF_RIGHTPAR        "ANYCRLF)"
+#define STRING_BSR_ANYCRLF_RIGHTPAR    "BSR_ANYCRLF)"
+#define STRING_BSR_UNICODE_RIGHTPAR    "BSR_UNICODE)"
+#define STRING_UTF8_RIGHTPAR           "UTF8)"
+#define STRING_UCP_RIGHTPAR            "UCP)"
+#define STRING_NO_START_OPT_RIGHTPAR   "NO_START_OPT)"
 
 #else  /* SUPPORT_UTF8 */
 
@@ -1154,15 +1189,16 @@ only. */
 
 #define STRING_DEFINE               STR_D STR_E STR_F STR_I STR_N STR_E
 
-#define STRING_CR_RIGHTPAR          STR_C STR_R STR_RIGHT_PARENTHESIS
-#define STRING_LF_RIGHTPAR          STR_L STR_F STR_RIGHT_PARENTHESIS
-#define STRING_CRLF_RIGHTPAR        STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
-#define STRING_ANY_RIGHTPAR         STR_A STR_N STR_Y STR_RIGHT_PARENTHESIS
-#define STRING_ANYCRLF_RIGHTPAR     STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
-#define STRING_BSR_ANYCRLF_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
-#define STRING_BSR_UNICODE_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_U STR_N STR_I STR_C STR_O STR_D STR_E STR_RIGHT_PARENTHESIS
-#define STRING_UTF8_RIGHTPAR        STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS
-#define STRING_UCP_RIGHTPAR         STR_U STR_C STR_P STR_RIGHT_PARENTHESIS
+#define STRING_CR_RIGHTPAR             STR_C STR_R STR_RIGHT_PARENTHESIS
+#define STRING_LF_RIGHTPAR             STR_L STR_F STR_RIGHT_PARENTHESIS
+#define STRING_CRLF_RIGHTPAR           STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
+#define STRING_ANY_RIGHTPAR            STR_A STR_N STR_Y STR_RIGHT_PARENTHESIS
+#define STRING_ANYCRLF_RIGHTPAR        STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
+#define STRING_BSR_ANYCRLF_RIGHTPAR    STR_B STR_S STR_R STR_UNDERSCORE STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
+#define STRING_BSR_UNICODE_RIGHTPAR    STR_B STR_S STR_R STR_UNDERSCORE STR_U STR_N STR_I STR_C STR_O STR_D STR_E STR_RIGHT_PARENTHESIS
+#define STRING_UTF8_RIGHTPAR           STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS
+#define STRING_UCP_RIGHTPAR            STR_U STR_C STR_P STR_RIGHT_PARENTHESIS
+#define STRING_NO_START_OPT_RIGHTPAR   STR_N STR_O STR_UNDERSCORE STR_S STR_T STR_A STR_R STR_T STR_UNDERSCORE STR_O STR_P STR_T STR_RIGHT_PARENTHESIS
 
 #endif  /* SUPPORT_UTF8 */
 
@@ -1516,8 +1552,9 @@ in UTF-8 mode. The code that uses this table must know about such things. */
   3, 3,                          /* RREF, NRREF                            */ \
   1,                             /* DEF                                    */ \
   1, 1,                          /* BRAZERO, BRAMINZERO                    */ \
-  3, 1, 3,                       /* MARK, PRUNE, PRUNE_ARG,                */ \
-  1, 3, 1, 3,                    /* SKIP, SKIP_ARG, THEN, THEN_ARG,        */ \
+  3, 1, 3,                       /* MARK, PRUNE, PRUNE_ARG                 */ \
+  1, 3,                          /* SKIP, SKIP_ARG                         */ \
+  1+LINK_SIZE, 3+LINK_SIZE,      /* THEN, THEN_ARG                         */ \
   1, 1, 1, 3, 1                  /* COMMIT, FAIL, ACCEPT, CLOSE, SKIPZERO  */
 
 
@@ -1536,7 +1573,8 @@ enum { ERR0,  ERR1,  ERR2,  ERR3,  ERR4,  ERR5,  ERR6,  ERR7,  ERR8,  ERR9,
        ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39,
        ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47, ERR48, ERR49,
        ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59,
-       ERR60, ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERRCOUNT };
+       ERR60, ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68,
+       ERRCOUNT };
 
 /* The real format of the start of the pcre block; the index of names and the
 code vector run on as long as necessary after the end. We store an explicit
diff --git a/ext/pcre/pcrelib/pcre_printint.src b/ext/pcre/pcrelib/pcre_printint.src
index 49d9317..c7d8629 100644
--- a/ext/pcre/pcrelib/pcre_printint.src
+++ b/ext/pcre/pcrelib/pcre_printint.src
@@ -537,11 +537,26 @@ for(;;)
     case OP_MARK:
     case OP_PRUNE_ARG:
     case OP_SKIP_ARG:
-    case OP_THEN_ARG:
     fprintf(f, "    %s %s", OP_names[*code], code + 2);
     extra += code[1];
     break;
 
+    case OP_THEN:
+    if (print_lengths)
+      fprintf(f, "    %s %d", OP_names[*code], GET(code, 1));
+    else
+      fprintf(f, "    %s", OP_names[*code]);
+    break;
+
+    case OP_THEN_ARG:
+    if (print_lengths)
+      fprintf(f, "    %s %d %s", OP_names[*code], GET(code, 1),
+        code + 2 + LINK_SIZE);
+    else
+      fprintf(f, "    %s %s", OP_names[*code], code + 2 + LINK_SIZE);
+    extra += code[1+LINK_SIZE];
+    break;
+
     /* Anything else is just an item with no data*/
 
     default:
diff --git a/ext/pcre/pcrelib/pcre_study.c b/ext/pcre/pcrelib/pcre_study.c
index 3ac7e81..431ad9d 100644
--- a/ext/pcre/pcrelib/pcre_study.c
+++ b/ext/pcre/pcrelib/pcre_study.c
@@ -417,10 +417,13 @@ for (;;)
     case OP_MARK:
     case OP_PRUNE_ARG:
     case OP_SKIP_ARG:
-    case OP_THEN_ARG:
     cc += _pcre_OP_lengths[op] + cc[1];
     break;
 
+    case OP_THEN_ARG:
+    cc += _pcre_OP_lengths[op] + cc[1+LINK_SIZE];
+    break;
+
     /* For the record, these are the opcodes that are matched by "default":
     OP_ACCEPT, OP_CLOSE, OP_COMMIT, OP_FAIL, OP_PRUNE, OP_SET_SOM, OP_SKIP,
     OP_THEN. */
diff --git a/ext/pcre/pcrelib/pcre_valid_utf8.c b/ext/pcre/pcrelib/pcre_valid_utf8.c
index 3c81dc9..d54d3bd 100644
--- a/ext/pcre/pcrelib/pcre_valid_utf8.c
+++ b/ext/pcre/pcrelib/pcre_valid_utf8.c
@@ -70,6 +70,20 @@ Arguments:
 
 Returns:       < 0    if the string is a valid UTF-8 string
                >= 0   otherwise; the value is the offset of the bad byte
+
+Bad bytes can be:
+
+  . An isolated byte whose most significant bits are 0x80, because this
+    can only correctly appear within a UTF-8 character;
+
+  . A byte whose most significant bits are 0xc0, but whose other bits indicate
+    that there are more than 3 additional bytes (i.e. an RFC 2279 starting
+    byte, which is no longer valid under RFC 3629);
+
+  .
+
+The returned offset may also be equal to the length of the string; this means
+that one or more bytes is missing from the final UTF-8 character.
 */
 
 int
@@ -91,7 +105,8 @@ for (p = string; length-- > 0; p++)
   if (c < 128) continue;
   if (c < 0xc0) return p - string;
   ab = _pcre_utf8_table4[c & 0x3f];     /* Number of additional bytes */
-  if (length < ab || ab > 3) return p - string;
+  if (ab > 3) return p - string;        /* Too many for RFC 3629 */
+  if (length < ab) return p + 1 + length - string;   /* Missing bytes */
   length -= ab;
 
   /* Check top bits in the second byte */
diff --git a/ext/pcre/pcrelib/pcredemo.c b/ext/pcre/pcrelib/pcredemo.c
index d565aec..3a38ced 100644
--- a/ext/pcre/pcrelib/pcredemo.c
+++ b/ext/pcre/pcrelib/pcredemo.c
@@ -50,13 +50,16 @@ const char *error;
 char *pattern;
 char *subject;
 unsigned char *name_table;
+unsigned int option_bits;
 int erroffset;
 int find_all;
+int crlf_is_newline;
 int namecount;
 int name_entry_size;
 int ovector[OVECCOUNT];
 int subject_length;
 int rc, i;
+int utf8;
 
 
 /**************************************************************************
@@ -238,15 +241,56 @@ if (namecount <= 0) printf("No named substrings\n"); else
 * subject is not a valid match; other possibilities must be tried. The   *
 * second flag restricts PCRE to one match attempt at the initial string  *
 * position. If this match succeeds, an alternative to the empty string   *
-* match has been found, and we can proceed round the loop.               *
+* match has been found, and we can print it and proceed round the loop,  *
+* advancing by the length of whatever was found. If this match does not  *
+* succeed, we still stay in the loop, advancing by just one character.   *
+* In UTF-8 mode, which can be set by (*UTF8) in the pattern, this may be *
+* more than one byte.                                                    *
+*                                                                        *
+* However, there is a complication concerned with newlines. When the     *
+* newline convention is such that CRLF is a valid newline, we want must  *
+* advance by two characters rather than one. The newline convention can  *
+* be set in the regex by (*CR), etc.; if not, we must find the default.  *
 *************************************************************************/
 
-if (!find_all)
+if (!find_all)     /* Check for -g */
   {
   pcre_free(re);   /* Release the memory used for the compiled pattern */
   return 0;        /* Finish unless -g was given */
   }
 
+/* Before running the loop, check for UTF-8 and whether CRLF is a valid newline
+sequence. First, find the options with which the regex was compiled; extract
+the UTF-8 state, and mask off all but the newline options. */
+
+(void)pcre_fullinfo(re, NULL, PCRE_INFO_OPTIONS, &option_bits);
+utf8 = option_bits & PCRE_UTF8;
+option_bits &= PCRE_NEWLINE_CR|PCRE_NEWLINE_LF|PCRE_NEWLINE_CRLF|
+               PCRE_NEWLINE_ANY|PCRE_NEWLINE_ANYCRLF;
+
+/* If no newline options were set, find the default newline convention from the
+build configuration. */
+
+if (option_bits == 0)
+  {
+  int d;
+  (void)pcre_config(PCRE_CONFIG_NEWLINE, &d);
+  /* Note that these values are always the ASCII ones, even in
+  EBCDIC environments. CR = 13, NL = 10. */
+  option_bits = (d == 13)? PCRE_NEWLINE_CR :
+          (d == 10)? PCRE_NEWLINE_LF :
+          (d == (13<<8 | 10))? PCRE_NEWLINE_CRLF :
+          (d == -2)? PCRE_NEWLINE_ANYCRLF :
+          (d == -1)? PCRE_NEWLINE_ANY : 0;
+  }
+
+/* See if CRLF is a valid newline sequence. */
+
+crlf_is_newline =
+     option_bits == PCRE_NEWLINE_ANY ||
+     option_bits == PCRE_NEWLINE_CRLF ||
+     option_bits == PCRE_NEWLINE_ANYCRLF;
+
 /* Loop for second and subsequent matches */
 
 for (;;)
@@ -280,14 +324,32 @@ for (;;)
   is zero, it just means we have found all possible matches, so the loop ends.
   Otherwise, it means we have failed to find a non-empty-string match at a
   point where there was a previous empty-string match. In this case, we do what
-  Perl does: advance the matching position by one, and continue. We do this by
-  setting the "end of previous match" offset, because that is picked up at the
-  top of the loop as the point at which to start again. */
+  Perl does: advance the matching position by one character, and continue. We
+  do this by setting the "end of previous match" offset, because that is picked
+  up at the top of the loop as the point at which to start again.
+
+  There are two complications: (a) When CRLF is a valid newline sequence, and
+  the current position is just before it, advance by an extra byte. (b)
+  Otherwise we must ensure that we skip an entire UTF-8 character if we are in
+  UTF-8 mode. */
 
   if (rc == PCRE_ERROR_NOMATCH)
     {
-    if (options == 0) break;
-    ovector[1] = start_offset + 1;
+    if (options == 0) break;                    /* All matches found */
+    ovector[1] = start_offset + 1;              /* Advance one byte */
+    if (crlf_is_newline &&                      /* If CRLF is newline & */
+        start_offset < subject_length - 1 &&    /* we are at CRLF, */
+        subject[start_offset] == '\r' &&
+        subject[start_offset + 1] == '\n')
+      ovector[1] += 1;                          /* Advance by one more. */
+    else if (utf8)                              /* Otherwise, ensure we */
+      {                                         /* advance a whole UTF-8 */
+      while (ovector[1] < subject_length)       /* character. */
+        {
+        if ((subject[ovector[1]] & 0xc0) != 0x80) break;
+        ovector[1] += 1;
+        }
+      }
     continue;    /* Go round the loop again */
     }
 
diff --git a/ext/pcre/pcrelib/pcreposix.c b/ext/pcre/pcrelib/pcreposix.c
index 29d8446..ec2517c 100644
--- a/ext/pcre/pcrelib/pcreposix.c
+++ b/ext/pcre/pcrelib/pcreposix.c
@@ -149,6 +149,7 @@ static const int eint[] = {
   REG_BADPAT,  /* different names for subpatterns of the same number are not allowed */
   REG_BADPAT,  /* (*MARK) must have an argument */
   REG_INVARG,  /* this version of PCRE is not compiled with PCRE_UCP support */
+  REG_BADPAT,  /* \c must be followed by an ASCII character */
 };
 
 /* Table of texts corresponding to POSIX error codes */
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c
index 2cbc72a..1efbec3 100644
--- a/ext/pcre/php_pcre.c
+++ b/ext/pcre/php_pcre.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_pcre.c 305133 2010-11-06 18:35:38Z felipe $ */
+/* $Id: php_pcre.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_ini.h"
diff --git a/ext/pcre/php_pcre.h b/ext/pcre/php_pcre.h
index 5b173ea..9ca7f79 100644
--- a/ext/pcre/php_pcre.h
+++ b/ext/pcre/php_pcre.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: php_pcre.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pcre.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PCRE_H
 #define PHP_PCRE_H
diff --git a/ext/pdo/config.w32 b/ext/pdo/config.w32
index e8f864b..e300fb9 100755
--- a/ext/pdo/config.w32
+++ b/ext/pdo/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 263427 2008-07-24 16:05:34Z pajoye $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_ENABLE("pdo", "Enable PHP Data Objects support", "no");
@@ -6,4 +6,5 @@ ARG_ENABLE("pdo", "Enable PHP Data Objects support", "no");
 if (PHP_PDO != "no") {
 	EXTENSION('pdo', 'pdo.c pdo_dbh.c pdo_stmt.c pdo_sql_parser.c pdo_sqlstate.c', false /* force static, PHP_PDO_SHARED is broken yet somehow */);
 	ADD_EXTENSION_DEP('pdo', 'spl', true);
+	PHP_INSTALL_HEADERS("ext/pdo", "php_pdo.h php_pdo_driver.h");
 }
diff --git a/ext/pdo/pdo.c b/ext/pdo/pdo.c
index 7c8ee32..372eaee 100755
--- a/ext/pdo/pdo.c
+++ b/ext/pdo/pdo.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pdo.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index ac12437..a355491 100755
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_dbh.c 300464 2010-06-15 11:13:20Z iliaa $ */
+/* $Id: pdo_dbh.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* The PDO Database Handle Class */
 
diff --git a/ext/pdo/pdo_sql_parser.c b/ext/pdo/pdo_sql_parser.c
index aef93f6..3898ec8 100644
--- a/ext/pdo/pdo_sql_parser.c
+++ b/ext/pdo/pdo_sql_parser.c
@@ -3,7 +3,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_sql_parser.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pdo_sql_parser.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_pdo_driver.h"
diff --git a/ext/pdo/pdo_sql_parser.c.orig b/ext/pdo/pdo_sql_parser.c.orig
index 9332151..7b0ec46 100644
--- a/ext/pdo/pdo_sql_parser.c.orig
+++ b/ext/pdo/pdo_sql_parser.c.orig
@@ -4,7 +4,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_sql_parser.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pdo_sql_parser.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_pdo_driver.h"
diff --git a/ext/pdo/pdo_sql_parser.re b/ext/pdo/pdo_sql_parser.re
index 6021865..c56934d 100644
--- a/ext/pdo/pdo_sql_parser.re
+++ b/ext/pdo/pdo_sql_parser.re
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_sql_parser.re 293035 2010-01-03 08:22:14Z sebastian $ */
+/* $Id: pdo_sql_parser.re 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_pdo_driver.h"
diff --git a/ext/pdo/pdo_sqlstate.c b/ext/pdo/pdo_sqlstate.c
index fe6e41f..ad3e7c9 100644
--- a/ext/pdo/pdo_sqlstate.c
+++ b/ext/pdo/pdo_sqlstate.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_sqlstate.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pdo_sqlstate.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c
index a875fad..cb1a015 100755
--- a/ext/pdo/pdo_stmt.c
+++ b/ext/pdo/pdo_stmt.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_stmt.c 305381 2010-11-15 18:48:48Z felipe $ */
+/* $Id: pdo_stmt.c 308569 2011-02-22 15:48:25Z iliaa $ */
 
 /* The PDO Statement Handle Class */
 
@@ -2183,7 +2183,7 @@ static PHP_METHOD(PDOStatement, debugDumpParams)
 				php_stream_printf(out TSRMLS_CC, "Key: Name: [%d] %.*s\n", len, len, str);
 			}
 
-			php_stream_printf(out TSRMLS_CC, "paramno=%d\nname=[%d] \"%.*s\"\nis_param=%d\nparam_type=%d\n",
+			php_stream_printf(out TSRMLS_CC, "paramno=%ld\nname=[%d] \"%.*s\"\nis_param=%d\nparam_type=%d\n",
 				param->paramno, param->namelen, param->namelen, param->name ? param->name : "",
 				param->is_param,
 				param->param_type);
diff --git a/ext/pdo/php_pdo.h b/ext/pdo/php_pdo.h
index b72c8dc..866151d 100755
--- a/ext/pdo/php_pdo.h
+++ b/ext/pdo/php_pdo.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_H
 #define PHP_PDO_H
diff --git a/ext/pdo/php_pdo_driver.h b/ext/pdo/php_pdo_driver.h
index de64830..e95c738 100755
--- a/ext/pdo/php_pdo_driver.h
+++ b/ext/pdo/php_pdo_driver.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_driver.h 301252 2010-07-13 23:59:54Z kalle $ */
+/* $Id: php_pdo_driver.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_DRIVER_H
 #define PHP_PDO_DRIVER_H
diff --git a/ext/pdo/php_pdo_int.h b/ext/pdo/php_pdo_int.h
index 28f7969..20ca89f 100755
--- a/ext/pdo/php_pdo_int.h
+++ b/ext/pdo/php_pdo_int.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_int.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_int.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Stuff private to the PDO extension and not for consumption by PDO drivers
  * */
diff --git a/ext/pdo/tests/pdo_025.phpt b/ext/pdo/tests/pdo_025.phpt
index 4f299bf..d16d8dd 100644
--- a/ext/pdo/tests/pdo_025.phpt
+++ b/ext/pdo/tests/pdo_025.phpt
@@ -110,4 +110,4 @@ object(Test)#%d (3) {
 }
 ===FAIL===
 
-Fatal error: Cannot access protected property Fail::$id in %spdo_025.php on line %d%a
\ No newline at end of file
+Fatal error: Cannot access protected property Fail::$id in %spdo_025.php on line %d%A
diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c
index febe9c0..bd6b8ef 100644
--- a/ext/pdo_dblib/dblib_driver.c
+++ b/ext/pdo_dblib/dblib_driver.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: dblib_driver.c 293447 2010-01-12 12:46:54Z iliaa $ */
+/* $Id: dblib_driver.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
diff --git a/ext/pdo_dblib/dblib_stmt.c b/ext/pdo_dblib/dblib_stmt.c
index abc0061..4b71ab7 100644
--- a/ext/pdo_dblib/dblib_stmt.c
+++ b/ext/pdo_dblib/dblib_stmt.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: dblib_stmt.c 302196 2010-08-13 22:12:37Z felipe $ */
+/* $Id: dblib_stmt.c 308972 2011-03-06 13:36:44Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -67,7 +67,6 @@ static int pdo_dblib_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
 
 static int pdo_dblib_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
 {
-	pdo_dbh_t *dbh = stmt->dbh;
 	pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
 	pdo_dblib_db_handle *H = S->H;
 	RETCODE resret, ret;
diff --git a/ext/pdo_dblib/pdo_dblib.c b/ext/pdo_dblib/pdo_dblib.c
index 0da36da..1b64b76 100644
--- a/ext/pdo_dblib/pdo_dblib.c
+++ b/ext/pdo_dblib/pdo_dblib.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_dblib.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pdo_dblib.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
diff --git a/ext/pdo_dblib/php_pdo_dblib.h b/ext/pdo_dblib/php_pdo_dblib.h
index dc54a87..34e93d6 100644
--- a/ext/pdo_dblib/php_pdo_dblib.h
+++ b/ext/pdo_dblib/php_pdo_dblib.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_dblib.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_dblib.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_DBLIB_H
 #define PHP_PDO_DBLIB_H
diff --git a/ext/pdo_dblib/php_pdo_dblib_int.h b/ext/pdo_dblib/php_pdo_dblib_int.h
index 273fb07..6f29ef3 100644
--- a/ext/pdo_dblib/php_pdo_dblib_int.h
+++ b/ext/pdo_dblib/php_pdo_dblib_int.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_dblib_int.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_dblib_int.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_DBLIB_INT_H
 #define PHP_PDO_DBLIB_INT_H
diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c
index b72bb9d..542f88a 100644
--- a/ext/pdo_firebird/firebird_driver.c
+++ b/ext/pdo_firebird/firebird_driver.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: firebird_driver.c 305416 2010-11-16 21:02:14Z felipe $ */
+/* $Id: firebird_driver.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_firebird/firebird_statement.c b/ext/pdo_firebird/firebird_statement.c
index aea7bd5..06c252f 100644
--- a/ext/pdo_firebird/firebird_statement.c
+++ b/ext/pdo_firebird/firebird_statement.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: firebird_statement.c 305476 2010-11-18 01:24:00Z felipe $ */
+/* $Id: firebird_statement.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_firebird/pdo_firebird.c b/ext/pdo_firebird/pdo_firebird.c
index fb71c9d..bb5ae30 100644
--- a/ext/pdo_firebird/pdo_firebird.c
+++ b/ext/pdo_firebird/pdo_firebird.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_firebird.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pdo_firebird.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_firebird/php_pdo_firebird.h b/ext/pdo_firebird/php_pdo_firebird.h
index 7d77062..0dc4d99 100644
--- a/ext/pdo_firebird/php_pdo_firebird.h
+++ b/ext/pdo_firebird/php_pdo_firebird.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_firebird.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_firebird.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_FIREBIRD_H
 #define PHP_PDO_FIREBIRD_H
diff --git a/ext/pdo_firebird/php_pdo_firebird_int.h b/ext/pdo_firebird/php_pdo_firebird_int.h
index 0df268e..71e83d7 100644
--- a/ext/pdo_firebird/php_pdo_firebird_int.h
+++ b/ext/pdo_firebird/php_pdo_firebird_int.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_firebird_int.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_firebird_int.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_FIREBIRD_INT_H
 #define PHP_PDO_FIREBIRD_INT_H
diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c
index 07b7f92..b9b2b55 100755
--- a/ext/pdo_mysql/mysql_driver.c
+++ b/ext/pdo_mysql/mysql_driver.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysql_driver.c 298626 2010-04-26 23:55:03Z kalle $ */
+/* $Id: mysql_driver.c 307529 2011-01-17 09:54:22Z kalle $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -711,6 +711,13 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
 #endif
 	}
 
+#ifdef PDO_MYSQL_HAS_CHARSET
+	if (vars[0].optval && mysql_options(H->server, MYSQL_SET_CHARSET_NAME, vars[0].optval)) {
+		pdo_mysql_error(dbh);
+		goto cleanup;
+	}
+#endif
+
 	dbname = vars[1].optval;
 	host = vars[2].optval;	
 	if(vars[3].optval) {
diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c
index 9a390d2..49e7296 100755
--- a/ext/pdo_mysql/mysql_statement.c
+++ b/ext/pdo_mysql/mysql_statement.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysql_statement.c 304072 2010-10-05 09:58:15Z kalle $ */
+/* $Id: mysql_statement.c 307478 2011-01-14 14:57:57Z johannes $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -142,8 +142,7 @@ static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt TSRMLS_DC)
 	/* (re)bind the parameters */
 	if (mysql_stmt_bind_param(S->stmt, S->params) || mysql_stmt_execute(S->stmt)) {
 		if (S->params) {
-			efree(S->params);
-			S->params = 0;
+			memset(S->params, 0, S->num_params * sizeof(MYSQL_BIND));
 		}
 		pdo_mysql_error_stmt(stmt);
 		if (mysql_stmt_errno(S->stmt) == 2057) {
diff --git a/ext/pdo_mysql/pdo_mysql.c b/ext/pdo_mysql/pdo_mysql.c
index ec3e044..a09133f 100755
--- a/ext/pdo_mysql/pdo_mysql.c
+++ b/ext/pdo_mysql/pdo_mysql.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_mysql.c 294274 2010-01-31 19:18:56Z iliaa $ */
+/* $Id: pdo_mysql.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_mysql/php_pdo_mysql.h b/ext/pdo_mysql/php_pdo_mysql.h
index 202c2a2..8319b07 100755
--- a/ext/pdo_mysql/php_pdo_mysql.h
+++ b/ext/pdo_mysql/php_pdo_mysql.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_mysql.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_mysql.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_MYSQL_H
 #define PHP_PDO_MYSQL_H
diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h
index cfe5774..efc103e 100755
--- a/ext/pdo_mysql/php_pdo_mysql_int.h
+++ b/ext/pdo_mysql/php_pdo_mysql_int.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_mysql_int.h 304627 2010-10-22 15:46:26Z andrey $ */
+/* $Id: php_pdo_mysql_int.h 307529 2011-01-17 09:54:22Z kalle $ */
 
 #ifndef PHP_PDO_MYSQL_INT_H
 #define PHP_PDO_MYSQL_INT_H
@@ -33,6 +33,10 @@
 #	define PDO_MYSQL_PARAM_BIND MYSQL_BIND
 #endif
 
+#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50007 || defined(MYSQL_USE_MYSQLND)
+# define PDO_MYSQL_HAS_CHARSET
+#endif
+
 #if defined(PDO_USE_MYSQLND) && PHP_DEBUG && !defined(PHP_WIN32)
 #define PDO_DBG_ENABLED 1
 
diff --git a/ext/pdo_mysql/tests/bug53551.phpt b/ext/pdo_mysql/tests/bug53551.phpt
new file mode 100644
index 0000000..865dcea
--- /dev/null
+++ b/ext/pdo_mysql/tests/bug53551.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Bug #44327 (PDORow::queryString property & numeric offsets / Crash)
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+$db = MySQLPDOTest::factory();
+?>
+--FILE--
+<?php
+include __DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc';
+$db = MySQLPDOTest::factory();
+
+$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
+
+$createSql = "CREATE TABLE `bug53551` (
+  `count` bigint(20) unsigned NOT NULL DEFAULT '0'
+)";
+
+$db->exec('drop table if exists bug53551');
+$db->exec($createSql);
+$db->exec("insert into bug53551 set `count` = 1 ");
+$db->exec("SET sql_mode = 'Traditional'");
+$sql = 'UPDATE bug53551 SET `count` = :count';
+$stmt = $db->prepare($sql);
+
+$values = array (
+    'count' => NULL,
+);
+
+echo "1\n";
+$stmt->execute($values);
+var_dump($stmt->errorInfo());
+
+echo "2\n";
+$stmt->execute($values);
+var_dump($stmt->errorInfo());
+
+echo "\ndone\n";
+
+?>
+--CLEAN--
+<?php
+include __DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc';
+$db = MySQLPDOTest::factory();
+$db->exec('DROP TABLE IF EXISTS bug53551');
+?>
+--EXPECTF--
+1
+
+Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'count' cannot be null in %s on line %d
+array(3) {
+  [0]=>
+  string(5) "23000"
+  [1]=>
+  int(1048)
+  [2]=>
+  string(29) "Column 'count' cannot be null"
+}
+2
+
+Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'count' cannot be null in %s on line %d
+array(3) {
+  [0]=>
+  string(5) "23000"
+  [1]=>
+  int(1048)
+  [2]=>
+  string(29) "Column 'count' cannot be null"
+}
+
+done
diff --git a/ext/pdo_mysql/tests/mysql_pdo_test.inc b/ext/pdo_mysql/tests/mysql_pdo_test.inc
index 01c4cb9..a3ffd5b 100644
--- a/ext/pdo_mysql/tests/mysql_pdo_test.inc
+++ b/ext/pdo_mysql/tests/mysql_pdo_test.inc
@@ -4,9 +4,9 @@ require_once(dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc');
 
 class MySQLPDOTest extends PDOTest {
 
-	static function factory($classname = 'PDO', $drop_test_tables = false, $myattr = null) {
+	static function factory($classname = 'PDO', $drop_test_tables = false, $myattr = null, $mydsn = null) {
 
-		$dsn 	= self::getDSN();
+		$dsn 	= self::getDSN($mydsn);
 		$user	= PDO_MYSQL_TEST_USER;
 		$pass	= PDO_MYSQL_TEST_PASS;
 		$attr	= getenv('PDOTEST_ATTR');
diff --git a/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt b/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt
new file mode 100644
index 0000000..22d3618
--- /dev/null
+++ b/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt
@@ -0,0 +1,33 @@
+--TEST--
+PDO_MYSQL: Defining a connection charset in the DSN
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+?>
+--FILE--
+<?php
+	require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+
+	/* Connect to mysql to determine the current charset so we can diffinate it */
+	$link 		= MySQLPDOTest::factory();
+	$charset 	= $link->query("SHOW VARIABLES LIKE 'character_set_connection'")->fetchObject()->value;
+
+	/* Make sure that we don't attempt to set the current character set to make this case useful */
+	$new_charset	= ($charset == 'latin1' ? 'ascii' : 'latin1');
+
+	/* Done with the original connection, create a second link to test the character set being defined */
+	unset($link);
+
+	$link 		= MySQLPDOTest::factory('PDO', false, null, Array('charset' => $new_charset));
+	$conn_charset 	= $link->query("SHOW VARIABLES LIKE 'character_set_connection'")->fetchObject()->value;
+
+	if ($charset !== $conn_charset) {
+		echo "done!\n";
+	} else {
+		echo "failed!\n";
+	}
+?>
+--EXPECTF--
+done!
\ No newline at end of file
diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c
index 07df7f9..0544a29 100755
--- a/ext/pdo_oci/oci_driver.c
+++ b/ext/pdo_oci/oci_driver.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: oci_driver.c 293447 2010-01-12 12:46:54Z iliaa $ */
+/* $Id: oci_driver.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_oci/oci_statement.c b/ext/pdo_oci/oci_statement.c
index 87de607..5608b0c 100755
--- a/ext/pdo_oci/oci_statement.c
+++ b/ext/pdo_oci/oci_statement.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: oci_statement.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: oci_statement.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -31,6 +31,8 @@
 #include "php_pdo_oci_int.h"
 #include "Zend/zend_extensions.h"
 
+#define PDO_OCI_LOBMAXSIZE (4294967295UL) /* OCI_LOBMAXSIZE */
+
 #define STMT_CALL(name, params)											\
 	do {																\
 		S->last_err = name params;										\
@@ -634,11 +636,14 @@ static size_t oci_blob_read(php_stream *stream, char *buf, size_t count TSRMLS_D
 		&amt, self->offset, buf, count,
 		NULL, NULL, 0, SQLCS_IMPLICIT);
 
-	if (r != OCI_SUCCESS) {
+	if (r != OCI_SUCCESS && r != OCI_NEED_DATA) {
 		return (size_t)-1;
 	}
 
 	self->offset += amt;
+	if (amt < count) {
+		stream->eof = 1;
+	}
 	return amt;
 }
 
@@ -664,14 +669,17 @@ static int oci_blob_flush(php_stream *stream TSRMLS_DC)
 	return 0;
 }
 
-/* TODO: implement
 static int oci_blob_seek(php_stream *stream, off_t offset, int whence, off_t *newoffset TSRMLS_DC)
 {
 	struct oci_lob_self *self = (struct oci_lob_self*)stream->abstract;
 
-	return -1;
+	if (offset >= PDO_OCI_LOBMAXSIZE) {
+		return -1;
+	} else {
+		self->offset = offset + 1;  /* Oracle LOBS are 1-based, but PHP is 0-based */
+		return 0;
+	}
 }
-*/
 
 static php_stream_ops oci_blob_stream_ops = {
 	oci_blob_write,
@@ -679,7 +687,7 @@ static php_stream_ops oci_blob_stream_ops = {
 	oci_blob_close,
 	oci_blob_flush,
 	"pdo_oci blob stream",
-	NULL, /*oci_blob_seek,*/
+	oci_blob_seek,
 	NULL,
 	NULL,
 	NULL
diff --git a/ext/pdo_oci/pdo_oci.c b/ext/pdo_oci/pdo_oci.c
index 43004cf..35826e0 100755
--- a/ext/pdo_oci/pdo_oci.c
+++ b/ext/pdo_oci/pdo_oci.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_oci.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pdo_oci.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_oci/php_pdo_oci.h b/ext/pdo_oci/php_pdo_oci.h
index f73a01c..9e26438 100755
--- a/ext/pdo_oci/php_pdo_oci.h
+++ b/ext/pdo_oci/php_pdo_oci.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_oci.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_oci.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_OCI_H
 #define PHP_PDO_OCI_H
diff --git a/ext/pdo_oci/php_pdo_oci_int.h b/ext/pdo_oci/php_pdo_oci_int.h
index b4d7541..ea47648 100755
--- a/ext/pdo_oci/php_pdo_oci_int.h
+++ b/ext/pdo_oci/php_pdo_oci_int.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_oci_int.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_oci_int.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <oci.h>
 
diff --git a/ext/pdo_oci/tests/pdo_oci_fread_1.phpt b/ext/pdo_oci/tests/pdo_oci_fread_1.phpt
new file mode 100644
index 0000000..9604ef5
--- /dev/null
+++ b/ext/pdo_oci/tests/pdo_oci_fread_1.phpt
@@ -0,0 +1,59 @@
+--TEST--
+PDO_OCI: check fread() EOF
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_oci')) die('skip not loaded');
+require(dirname(__FILE__).'/../../pdo/tests/pdo_test.inc');
+PDOTest::skip();
+?>
+--FILE--
+<?php
+
+require(dirname(__FILE__) . '/../../pdo/tests/pdo_test.inc');
+
+$dbh = PDOTest::factory();
+
+$dbh->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
+
+// Initialization
+$stmtarray = array(
+    "begin execute immediate 'drop table pdo_oci_fread_tab'; exception when others then null; end;",
+	"create table pdo_oci_fread_tab (id number, data clob)",
+    "declare
+    lob1 clob := 'abc' || lpad('j',4020,'j') || 'xyz';
+   begin
+    insert into pdo_oci_fread_tab (id,data) values (1, lob1);
+  end;"
+);
+
+foreach ($stmtarray as $stmt) {
+	$dbh->exec($stmt);
+}
+
+echo "Test 1\n";
+
+$s = $dbh->query("select data from pdo_oci_fread_tab where id = 1");
+$r = $s->fetch();
+$sh = $r['data'];
+
+while (!feof($sh)) {
+    $buffer = fread($sh,1024);
+    echo '*'.$buffer.'*';
+}
+echo "\n";
+fclose($sh);
+
+// Clean up
+
+$stmtarray = array(
+	"drop table pdo_oci_fread_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+	$dbh->exec($stmt);
+}
+
+?>
+--EXPECTF--
+Test 1
+*abcjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj**jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj**jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj**jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjxyz*
diff --git a/ext/pdo_oci/tests/pdo_oci_stream_1.phpt b/ext/pdo_oci/tests/pdo_oci_stream_1.phpt
new file mode 100644
index 0000000..d054f88
--- /dev/null
+++ b/ext/pdo_oci/tests/pdo_oci_stream_1.phpt
@@ -0,0 +1,112 @@
+--TEST--
+PDO_OCI: stream_get_contents length & offset test
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_oci')) die('skip not loaded');
+require(dirname(__FILE__).'/../../pdo/tests/pdo_test.inc');
+PDOTest::skip();
+?>
+--FILE--
+<?php
+
+require(dirname(__FILE__) . '/../../pdo/tests/pdo_test.inc');
+
+$dbh = PDOTest::factory();
+
+$dbh->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
+
+// Initialization
+@$dbh->exec("drop table pdo_oci_stream_1_tab");
+
+$stmtarray = array(
+	"create table pdo_oci_stream_1_tab (id number, data clob)",
+);
+
+foreach ($stmtarray as $stmt) {
+	$dbh->exec($stmt);
+}
+
+$dbh->exec("
+  declare
+    lob1 clob := 'abc' || lpad('j',30000,'j') || 'xyz';
+   begin
+    insert into pdo_oci_stream_1_tab (id,data) values (1, 'abcdefghijklmnopqrstuvwxyz');
+    insert into pdo_oci_stream_1_tab (id,data) values (2, lob1);
+  end;");
+
+echo "Test 1\n";
+
+$s = $dbh->prepare("select data from pdo_oci_stream_1_tab where id = 1");
+$s->execute();
+$r = $s->fetch();
+
+// stream_get_contents ( resource $handle [, int $maxlength = -1 [, int $offset = -1 ]] )
+echo 'Read '.stream_get_contents($r['data'], 1, 1)."$\n";  // b
+echo 'Read '.stream_get_contents($r['data'], 2, 1)."$\n";  // cd
+echo 'Read '.stream_get_contents($r['data'], 2, 0)."$\n";  // ab
+echo 'Read '.stream_get_contents($r['data'], 26, 0)."$\n"; // abcdefghijklmnopqrstuvwxyz
+echo 'Read '.stream_get_contents($r['data'], 27, 0)."$\n"; // abcdefghijklmnopqrstuvwxyz
+echo 'Read '.stream_get_contents($r['data'], 27, 1)."$\n"; // bcdefghijklmnopqrstuvwxyz
+echo 'Read '.stream_get_contents($r['data'], 1, 20)."$\n"; // u
+echo 'Read '.stream_get_contents($r['data'], 1, 25)."$\n"; // z
+echo 'Read '.stream_get_contents($r['data'], 1, 26)."$\n"; // <blank>
+echo 'Read '.stream_get_contents($r['data'], 1, 0)."$\n";  // a
+
+echo "\nTest 2\n";
+
+$s = $dbh->prepare("select data from pdo_oci_stream_1_tab where id = 2");
+$s->execute();
+$r = $s->fetch();
+
+echo 'Read '.stream_get_contents($r['data'], 5, 0)."\n";           // abcjj
+echo 'Read '.stream_get_contents($r['data'], 5, 2)."\n";           // cjjjj
+echo 'Read '.stream_get_contents($r['data'], 6, 1)."\n";           // bcjjjj
+echo 'Read '.strlen(stream_get_contents($r['data'], -1,0))."\n";   // 30006
+echo 'Read '.strlen(stream_get_contents($r['data'], 0,0))."\n";    // 0
+echo 'Read '.strlen(stream_get_contents($r['data'], 0,1))."\n";    // 0
+echo 'Read '.strlen(stream_get_contents($r['data'], 10,100))."\n"; // 10
+echo 'Read '.stream_get_contents($r['data'], 6, 30000)."\n";       // jjjxyz
+echo 'Read '.stream_get_contents($r['data'], 7, 30000)."\n";       // jjjxyz
+echo 'Read '.strlen(stream_get_contents($r['data']))."\n";         // 0
+echo 'Read '.strlen(stream_get_contents($r['data'], 0))."\n";      // 0
+echo 'Read '.strlen(stream_get_contents($r['data'], -1))."\n";     // 0
+echo 'Read '.stream_get_contents($r['data'], -1, 30000)."\n";      // jjjxyz
+
+// Clean up
+
+$stmtarray = array(
+	"drop table pdo_oci_stream_1_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+	$dbh->exec($stmt);
+}
+
+?>
+--EXPECTF--
+Test 1
+Read b$
+Read cd$
+Read ab$
+Read abcdefghijklmnopqrstuvwxyz$
+Read abcdefghijklmnopqrstuvwxyz$
+Read bcdefghijklmnopqrstuvwxyz$
+Read u$
+Read z$
+Read $
+Read a$
+
+Test 2
+Read abcjj
+Read cjjjj
+Read bcjjjj
+Read 30006
+Read 0
+Read 0
+Read 10
+Read jjjxyz
+Read jjjxyz
+Read 0
+Read 0
+Read 0
+Read jjjxyz
\ No newline at end of file
diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c
index e7ebb1b..c149889 100755
--- a/ext/pdo_odbc/odbc_driver.c
+++ b/ext/pdo_odbc/odbc_driver.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.0 of the PHP license,       |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: odbc_driver.c 293447 2010-01-12 12:46:54Z iliaa $ */
+/* $Id: odbc_driver.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_odbc/odbc_stmt.c b/ext/pdo_odbc/odbc_stmt.c
index 589be13..4a59cc6 100755
--- a/ext/pdo_odbc/odbc_stmt.c
+++ b/ext/pdo_odbc/odbc_stmt.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.0 of the PHP license,       |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: odbc_stmt.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: odbc_stmt.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_odbc/pdo_odbc.c b/ext/pdo_odbc/pdo_odbc.c
index 311b310..56d46b5 100755
--- a/ext/pdo_odbc/pdo_odbc.c
+++ b/ext/pdo_odbc/pdo_odbc.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.0 of the PHP license,       |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_odbc.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pdo_odbc.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_odbc/php_pdo_odbc.h b/ext/pdo_odbc/php_pdo_odbc.h
index e5bc65d..dcea1e5 100644
--- a/ext/pdo_odbc/php_pdo_odbc.h
+++ b/ext/pdo_odbc/php_pdo_odbc.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.0 of the PHP license,       |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_odbc.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_odbc.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_ODBC_H
 #define PHP_PDO_ODBC_H
diff --git a/ext/pdo_odbc/php_pdo_odbc_int.h b/ext/pdo_odbc/php_pdo_odbc_int.h
index 24d60dd..26fc750 100755
--- a/ext/pdo_odbc/php_pdo_odbc_int.h
+++ b/ext/pdo_odbc/php_pdo_odbc_int.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.0 of the PHP license,       |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_odbc_int.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_odbc_int.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef PHP_WIN32
 # define PDO_ODBC_TYPE	"Win32"
diff --git a/ext/pdo_pgsql/pdo_pgsql.c b/ext/pdo_pgsql/pdo_pgsql.c
index 5b3bff5..268bd37 100644
--- a/ext/pdo_pgsql/pdo_pgsql.c
+++ b/ext/pdo_pgsql/pdo_pgsql.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_pgsql.c 300351 2010-06-10 12:11:19Z iliaa $ */
+/* $Id: pdo_pgsql.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -134,7 +134,7 @@ PHP_MINFO_FUNCTION(pdo_pgsql)
 	php_info_print_table_row(2, "PostgreSQL(libpq) Version", PG_VERSION);
 #endif	
 	php_info_print_table_row(2, "Module version", pdo_pgsql_module_entry.version);
-	php_info_print_table_row(2, "Revision", " $Id: pdo_pgsql.c 300351 2010-06-10 12:11:19Z iliaa $ ");
+	php_info_print_table_row(2, "Revision", " $Id: pdo_pgsql.c 306939 2011-01-01 02:19:59Z felipe $ ");
 
 	php_info_print_table_end();
 }
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
index 0720ce6..e1b8895 100644
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ b/ext/pdo_pgsql/pgsql_driver.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pgsql_driver.c 300464 2010-06-15 11:13:20Z iliaa $ */
+/* $Id: pgsql_driver.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c
index 8f2c8f8..e703874 100644
--- a/ext/pdo_pgsql/pgsql_statement.c
+++ b/ext/pdo_pgsql/pgsql_statement.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pgsql_statement.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pgsql_statement.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -184,7 +184,7 @@ stmt_retry:
 					 * chance to DEALLOCATE the prepared statements it has created. so, if we hit a 42P05 we 
 					 * deallocate it and retry ONCE (thies 2005.12.15)
 					 */
-					if (!strcmp(sqlstate, "42P05")) {
+					if (sqlstate && !strcmp(sqlstate, "42P05")) {
 						char buf[100]; /* stmt_name == "pdo_crsr_%08x" */
 						PGresult *res;
 						snprintf(buf, sizeof(buf), "DEALLOCATE %s", S->stmt_name);
diff --git a/ext/pdo_pgsql/php_pdo_pgsql.h b/ext/pdo_pgsql/php_pdo_pgsql.h
index 9cdb176..781a6f1 100644
--- a/ext/pdo_pgsql/php_pdo_pgsql.h
+++ b/ext/pdo_pgsql/php_pdo_pgsql.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_pgsql.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_pgsql.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_PGSQL_H
 #define PHP_PDO_PGSQL_H
diff --git a/ext/pdo_pgsql/php_pdo_pgsql_int.h b/ext/pdo_pgsql/php_pdo_pgsql_int.h
index 8cdfe12..8c2b9c0 100644
--- a/ext/pdo_pgsql/php_pdo_pgsql_int.h
+++ b/ext/pdo_pgsql/php_pdo_pgsql_int.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_pgsql_int.h 300351 2010-06-10 12:11:19Z iliaa $ */
+/* $Id: php_pdo_pgsql_int.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_PGSQL_INT_H
 #define PHP_PDO_PGSQL_INT_H
diff --git a/ext/pdo_sqlite/pdo_sqlite.c b/ext/pdo_sqlite/pdo_sqlite.c
index f9735f5..d8275b7 100644
--- a/ext/pdo_sqlite/pdo_sqlite.c
+++ b/ext/pdo_sqlite/pdo_sqlite.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_sqlite.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pdo_sqlite.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_sqlite/php_pdo_sqlite.h b/ext/pdo_sqlite/php_pdo_sqlite.h
index 71813e0..3adeab1 100644
--- a/ext/pdo_sqlite/php_pdo_sqlite.h
+++ b/ext/pdo_sqlite/php_pdo_sqlite.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_sqlite.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_sqlite.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 #ifndef PHP_PDO_SQLITE_H
diff --git a/ext/pdo_sqlite/php_pdo_sqlite_int.h b/ext/pdo_sqlite/php_pdo_sqlite_int.h
index eb8329a..3cba7fb 100644
--- a/ext/pdo_sqlite/php_pdo_sqlite_int.h
+++ b/ext/pdo_sqlite/php_pdo_sqlite_int.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_sqlite_int.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pdo_sqlite_int.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PDO_SQLITE_INT_H
 #define PHP_PDO_SQLITE_INT_H
diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c
index 550e96b..8a731fc 100644
--- a/ext/pdo_sqlite/sqlite_driver.c
+++ b/ext/pdo_sqlite/sqlite_driver.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: sqlite_driver.c 300612 2010-06-20 14:12:06Z felipe $ */
+/* $Id: sqlite_driver.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c
index 26e2e5f..74c6b1a 100644
--- a/ext/pdo_sqlite/sqlite_statement.c
+++ b/ext/pdo_sqlite/sqlite_statement.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: sqlite_statement.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: sqlite_statement.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index ca2d0f9..1cbe986 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: pgsql.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: pgsql.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdlib.h>
 
diff --git a/ext/pgsql/php_pgsql.h b/ext/pgsql/php_pgsql.h
index 09a53c1..c22d6a4 100644
--- a/ext/pgsql/php_pgsql.h
+++ b/ext/pgsql/php_pgsql.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: php_pgsql.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pgsql.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PGSQL_H
 #define PHP_PGSQL_H
diff --git a/ext/phar/Makefile.frag b/ext/phar/Makefile.frag
old mode 100755
new mode 100644
index fc93d1d..b1c820f
--- a/ext/phar/Makefile.frag
+++ b/ext/phar/Makefile.frag
@@ -1,6 +1,5 @@
-
 $(srcdir)/phar_path_check.c: $(srcdir)/phar_path_check.re
-	$(RE2C) -b -o $(srcdir)/phar_path_check.c $(srcdir)/phar_path_check.re
+	@(cd $(top_srcdir); $(RE2C) -b -o ext/phar/phar_path_check.c ext/phar/phar_path_check.re)
 
 pharcmd: $(builddir)/phar.php $(builddir)/phar.phar
 
diff --git a/ext/phar/dirstream.c b/ext/phar/dirstream.c
index 0e5c09b..f0fe1be 100644
--- a/ext/phar/dirstream.c
+++ b/ext/phar/dirstream.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar:// stream wrapper support                                       |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2005-2009 The PHP Group                                |
+  | Copyright (c) 2005-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/phar/dirstream.h b/ext/phar/dirstream.h
index e7bb4ae..eed6e66 100644
--- a/ext/phar/dirstream.h
+++ b/ext/phar/dirstream.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2009 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: dirstream.h 272370 2008-12-31 11:15:49Z sebastian $ */
+/* $Id: dirstream.h 306941 2011-01-01 02:48:19Z felipe $ */
 
 BEGIN_EXTERN_C()
 int phar_wrapper_mkdir(php_stream_wrapper *wrapper, char *url_from, int mode, int options, php_stream_context *context TSRMLS_DC);
diff --git a/ext/phar/func_interceptors.c b/ext/phar/func_interceptors.c
index 199509b..216cb05 100644
--- a/ext/phar/func_interceptors.c
+++ b/ext/phar/func_interceptors.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2005-2009 The PHP Group                                |
+  | Copyright (c) 2005-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: func_interceptors.c 280454 2009-05-13 15:55:12Z kalle $ */
+/* $Id: func_interceptors.c 306941 2011-01-01 02:48:19Z felipe $ */
 
 #include "phar_internal.h"
 
diff --git a/ext/phar/func_interceptors.h b/ext/phar/func_interceptors.h
index 1b4c623..3f738a9 100644
--- a/ext/phar/func_interceptors.h
+++ b/ext/phar/func_interceptors.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2009 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: func_interceptors.h 272370 2008-12-31 11:15:49Z sebastian $ */
+/* $Id: func_interceptors.h 306941 2011-01-01 02:48:19Z felipe $ */
 
 BEGIN_EXTERN_C()
 void phar_intercept_functions(TSRMLS_D);
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index bccc32e..2a69b59 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2005-2009 The PHP Group                                |
+  | Copyright (c) 2005-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: phar.c 305584 2010-11-20 20:59:28Z kalle $ */
+/* $Id: phar.c 307915 2011-02-01 14:01:00Z iliaa $ */
 
 #define PHAR_MAIN 1
 #include "phar_internal.h"
@@ -1265,7 +1265,7 @@ int phar_open_or_create_filename(char *fname, int fname_len, char *alias, int al
 			if (ext_len == -2) {
 				spprintf(error, 0, "Cannot create a phar archive from a URL like \"%s\". Phar objects can only be created from local files", fname);
 			} else {
-				spprintf(error, 0, "Cannot create phar '%s', file extension (or combination) not recognised", fname);
+				spprintf(error, 0, "Cannot create phar '%s', file extension (or combination) not recognised or the directory does not exist", fname);
 			}
 		}
 		return FAILURE;
@@ -3668,7 +3668,7 @@ PHP_MINFO_FUNCTION(phar) /* {{{ */
 	php_info_print_table_header(2, "Phar: PHP Archive support", "enabled");
 	php_info_print_table_row(2, "Phar EXT version", PHP_PHAR_VERSION);
 	php_info_print_table_row(2, "Phar API version", PHP_PHAR_API_VERSION);
-	php_info_print_table_row(2, "SVN revision", "$Revision: 305584 $");
+	php_info_print_table_row(2, "SVN revision", "$Revision: 307915 $");
 	php_info_print_table_row(2, "Phar-based phar archives", "enabled");
 	php_info_print_table_row(2, "Tar-based phar archives", "enabled");
 	php_info_print_table_row(2, "ZIP-based phar archives", "enabled");
diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h
old mode 100755
new mode 100644
index da9cf22..0b4b083
--- a/ext/phar/phar_internal.h
+++ b/ext/phar/phar_internal.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2009 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: phar_internal.h 286338 2009-07-26 01:03:47Z cellog $ */
+/* $Id: phar_internal.h 308657 2011-02-25 09:32:17Z nlopess $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
old mode 100755
new mode 100644
index 89a84a2..e5ffe08
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2005-2009 The PHP Group                                |
+  | Copyright (c) 2005-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: phar_object.c 303709 2010-09-23 04:41:14Z aharvey $ */
+/* $Id: phar_object.c 309222 2011-03-14 14:12:42Z felipe $ */
 
 #include "phar_internal.h"
 #include "func_interceptors.h"
@@ -307,7 +307,7 @@ static int phar_file_action(phar_archive_data *phar, phar_entry_info *info, char
 				char *error;
 				if (!phar_open_jit(phar, info, &error TSRMLS_CC)) {
 					if (error) {
-						zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+						zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 						efree(error);
 					}
 					return -1;
@@ -673,7 +673,7 @@ PHP_METHOD(Phar, webPhar)
 
 	if (phar_open_executed_filename(alias, alias_len, &error TSRMLS_CC) != SUCCESS) {
 		if (error) {
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 		}
 		return;
@@ -1095,7 +1095,7 @@ PHP_METHOD(Phar, createDefaultStub)
 	stub = phar_create_default_stub(index, webindex, &stub_len, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 		return;
 	}
@@ -1120,7 +1120,7 @@ PHP_METHOD(Phar, mapPhar)
 	RETVAL_BOOL(phar_open_executed_filename(alias, alias_len, &error TSRMLS_CC) == SUCCESS);
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 } /* }}} */
@@ -1141,7 +1141,7 @@ PHP_METHOD(Phar, loadPhar)
 	RETVAL_BOOL(phar_open_from_filename(fname, fname_len, alias, alias_len, REPORT_ERRORS, NULL, &error TSRMLS_CC) == SUCCESS);
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 } /* }}} */
@@ -2007,7 +2007,7 @@ PHP_METHOD(Phar, buildFromDirectory)
 		phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
 
 		if (error) {
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 		}
 
@@ -2070,7 +2070,7 @@ PHP_METHOD(Phar, buildFromIterator)
 		phar_obj->arc.archive->ufp = pass.fp;
 		phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
 		if (error) {
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 		}
 	} else {
@@ -2327,7 +2327,7 @@ its_ok:
 	phar_flush(phar, 0, 0, 1, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 		efree(oldpath);
 		return NULL;
@@ -2787,7 +2787,7 @@ PHP_METHOD(Phar, delete)
 
 	phar_flush(phar_obj->arc.archive, NULL, 0, 0, &error TSRMLS_CC);
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 
@@ -2862,7 +2862,7 @@ PHP_METHOD(Phar, setAlias)
 				efree(error);
 				goto valid_alias;
 			}
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 			RETURN_FALSE;
 		}
@@ -2899,7 +2899,7 @@ valid_alias:
 			phar_obj->arc.archive->alias = oldalias;
 			phar_obj->arc.archive->alias_len = oldalias_len;
 			phar_obj->arc.archive->is_temporary_alias = old_temp;
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			if (readd) {
 				zend_hash_add(&(PHAR_GLOBALS->phar_alias_map), oldalias, oldalias_len, (void*)&(phar_obj->arc.archive), sizeof(phar_archive_data*), NULL);
 			}
@@ -2972,7 +2972,7 @@ PHP_METHOD(Phar, stopBuffering)
 	phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 }
@@ -3021,7 +3021,7 @@ PHP_METHOD(Phar, setStub)
 			}
 			phar_flush(phar_obj->arc.archive, (char *) &zstub, len, 0, &error TSRMLS_CC);
 			if (error) {
-				zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+				zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 				efree(error);
 			}
 			RETURN_TRUE;
@@ -3037,7 +3037,7 @@ PHP_METHOD(Phar, setStub)
 		phar_flush(phar_obj->arc.archive, stub, stub_len, 0, &error TSRMLS_CC);
 
 		if (error) {
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 		}
 
@@ -3098,7 +3098,7 @@ PHP_METHOD(Phar, setDefaultStub)
 		stub = phar_create_default_stub(index, webindex, &stub_len, &error TSRMLS_CC);
 
 		if (error) {
-			zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 			if (stub) {
 				efree(stub);
@@ -3120,7 +3120,7 @@ PHP_METHOD(Phar, setDefaultStub)
 	}
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 		RETURN_FALSE;
 	}
@@ -3175,7 +3175,7 @@ PHP_METHOD(Phar, setSignatureAlgorithm)
 
 			phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
 			if (error) {
-				zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+				zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 				efree(error);
 			}
 			break;
@@ -3477,7 +3477,7 @@ PHP_METHOD(Phar, compressFiles)
 	phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 }
@@ -3517,7 +3517,7 @@ PHP_METHOD(Phar, decompressFiles)
 	phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 
@@ -3617,7 +3617,7 @@ PHP_METHOD(Phar, copy)
 		if (FAILURE == phar_copy_entry_fp(oldentry, &newentry, &error TSRMLS_CC)) {
 			efree(newentry.filename);
 			php_stream_close(newentry.fp);
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 			return;
 		}
@@ -3628,7 +3628,7 @@ PHP_METHOD(Phar, copy)
 	phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 
@@ -3774,7 +3774,7 @@ static void phar_add_file(phar_archive_data **pphar, char *filename, int filenam
 		phar_flush(*pphar, 0, 0, 0, &error TSRMLS_CC);
 
 		if (error) {
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 		}
 	}
@@ -3810,7 +3810,7 @@ static void phar_mkdir(phar_archive_data **pphar, char *dirname, int dirname_len
 		phar_flush(*pphar, 0, 0, 0, &error TSRMLS_CC);
 
 		if (error) {
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 		}
 	}
@@ -3896,7 +3896,7 @@ PHP_METHOD(Phar, offsetUnset)
 			phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
 
 			if (error) {
-				zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+				zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 				efree(error);
 			}
 
@@ -4152,7 +4152,7 @@ PHP_METHOD(Phar, setMetadata)
 	phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 }
@@ -4179,7 +4179,7 @@ PHP_METHOD(Phar, delMetadata)
 		phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
 
 		if (error) {
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 			RETURN_FALSE;
 		} else {
@@ -4727,7 +4727,7 @@ PHP_METHOD(PharFileInfo, chmod)
 	phar_flush(entry_obj->ent.entry->phar, 0, 0, 0, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 }
@@ -4813,7 +4813,7 @@ PHP_METHOD(PharFileInfo, setMetadata)
 	phar_flush(entry_obj->ent.entry->phar, 0, 0, 0, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 }
@@ -4858,7 +4858,7 @@ PHP_METHOD(PharFileInfo, delMetadata)
 		phar_flush(entry_obj->ent.entry->phar, 0, 0, 0, &error TSRMLS_CC);
 
 		if (error) {
-			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+			zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 			efree(error);
 			RETURN_FALSE;
 		} else {
@@ -5040,7 +5040,7 @@ PHP_METHOD(PharFileInfo, compress)
 	phar_flush(entry_obj->ent.entry->phar, 0, 0, 0, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 
@@ -5115,7 +5115,7 @@ PHP_METHOD(PharFileInfo, decompress)
 	phar_flush(entry_obj->ent.entry->phar, 0, 0, 0, &error TSRMLS_CC);
 
 	if (error) {
-		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);
+		zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
 		efree(error);
 	}
 	RETURN_TRUE;
diff --git a/ext/phar/phar_path_check.c b/ext/phar/phar_path_check.c
old mode 100755
new mode 100644
index f41d589..c33d75f
--- a/ext/phar/phar_path_check.c
+++ b/ext/phar/phar_path_check.c
@@ -1,10 +1,10 @@
-/* Generated by re2c 0.12.3 on Tue Jan  8 18:41:21 2008 */
+/* Generated by re2c 0.13.5 on Fri Feb 25 04:29:05 2011 */
 #line 1 "ext/phar/phar_path_check.re"
 /*
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2007-2009 The PHP Group                                |
+  | Copyright (c) 2007-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: phar_path_check.c 272370 2008-12-31 11:15:49Z sebastian $ */
+/* $Id: phar_path_check.c 308657 2011-02-25 09:32:17Z nlopess $ */
 
 #include "phar_internal.h"
 
@@ -42,66 +42,65 @@ phar_path_check_result phar_path_check(char **s, int *len, const char **error)
 #define YYFILL(n)
 
 loop:
-{
 
-#line 48 "ext/phar/phar_path_check.c"
-	{
-		YYCTYPE yych;
+#line 47 "ext/phar/phar_path_check.c"
+{
+	YYCTYPE yych;
 
-		if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
-		yych = *YYCURSOR;
-		if(yych <= '.') {
-			if(yych <= 0x0A) {
-				if(yych <= 0x00) goto yy13;
-				if(yych <= 0x09) goto yy10;
-				goto yy12;
-			} else {
-				if(yych <= 0x19) goto yy10;
-				if(yych == '*') goto yy6;
-				goto yy15;
-			}
+	if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+	yych = *YYCURSOR;
+	if (yych <= '.') {
+		if (yych <= '\n') {
+			if (yych <= 0x00) goto yy13;
+			if (yych <= '\t') goto yy10;
+			goto yy12;
 		} else {
-			if(yych <= '?') {
-				if(yych <= '/') goto yy2;
-				if(yych <= '>') goto yy15;
-				goto yy8;
-			} else {
-				if(yych == '\\') goto yy4;
-				if(yych <= 0x7F) goto yy15;
-				goto yy10;
-			}
+			if (yych <= 0x19) goto yy10;
+			if (yych == '*') goto yy6;
+			goto yy15;
 		}
+	} else {
+		if (yych <= '?') {
+			if (yych <= '/') goto yy2;
+			if (yych <= '>') goto yy15;
+			goto yy8;
+		} else {
+			if (yych == '\\') goto yy4;
+			if (yych <= 0x7F) goto yy15;
+			goto yy10;
+		}
+	}
 yy2:
-		yych = *(YYMARKER = ++YYCURSOR);
-		if(yych <= '-') goto yy3;
-		if(yych <= '.') goto yy16;
-		if(yych <= '/') goto yy18;
+	yych = *(YYMARKER = ++YYCURSOR);
+	if (yych <= '-') goto yy3;
+	if (yych <= '.') goto yy16;
+	if (yych <= '/') goto yy18;
 yy3:
 #line 93 "ext/phar/phar_path_check.re"
-		{
+	{
 			goto loop;
 		}
-#line 85 "ext/phar/phar_path_check.c"
+#line 84 "ext/phar/phar_path_check.c"
 yy4:
-		++YYCURSOR;
+	++YYCURSOR;
 #line 60 "ext/phar/phar_path_check.re"
-		{
+	{
 			*error = "back-slash";
 			return pcr_err_back_slash;
 		}
-#line 93 "ext/phar/phar_path_check.c"
+#line 92 "ext/phar/phar_path_check.c"
 yy6:
-		++YYCURSOR;
+	++YYCURSOR;
 #line 64 "ext/phar/phar_path_check.re"
-		{
+	{
 			*error = "star";
 			return pcr_err_star;
 		}
-#line 101 "ext/phar/phar_path_check.c"
+#line 100 "ext/phar/phar_path_check.c"
 yy8:
-		++YYCURSOR;
+	++YYCURSOR;
 #line 68 "ext/phar/phar_path_check.re"
-		{
+	{
 			if (**s == '/') {
 				(*s)++;
 			}
@@ -109,23 +108,23 @@ yy8:
 			*error = NULL;
 			return pcr_use_query;
 		}
-#line 113 "ext/phar/phar_path_check.c"
+#line 112 "ext/phar/phar_path_check.c"
 yy10:
-		++YYCURSOR;
+	++YYCURSOR;
 yy11:
 #line 76 "ext/phar/phar_path_check.re"
-		{
+	{
 			*error ="illegal character";
 			return pcr_err_illegal_char;
 		}
-#line 122 "ext/phar/phar_path_check.c"
+#line 121 "ext/phar/phar_path_check.c"
 yy12:
-		yych = *++YYCURSOR;
-		goto yy11;
+	yych = *++YYCURSOR;
+	goto yy11;
 yy13:
-		++YYCURSOR;
+	++YYCURSOR;
 #line 80 "ext/phar/phar_path_check.re"
-		{
+	{
 			if (**s == '/') {
 				(*s)++;
 				(*len)--;
@@ -138,49 +137,48 @@ yy13:
 			*error = NULL;
 			return pcr_is_ok;
 		}
-#line 142 "ext/phar/phar_path_check.c"
+#line 141 "ext/phar/phar_path_check.c"
 yy15:
-		yych = *++YYCURSOR;
-		goto yy3;
+	yych = *++YYCURSOR;
+	goto yy3;
 yy16:
-		yych = *++YYCURSOR;
-		if(yych <= 0x00) goto yy21;
-		if(yych <= '-') goto yy17;
-		if(yych <= '.') goto yy20;
-		if(yych <= '/') goto yy21;
+	yych = *++YYCURSOR;
+	if (yych <= 0x00) goto yy21;
+	if (yych <= '-') goto yy17;
+	if (yych <= '.') goto yy20;
+	if (yych <= '/') goto yy21;
 yy17:
-		YYCURSOR = YYMARKER;
-		goto yy3;
+	YYCURSOR = YYMARKER;
+	goto yy3;
 yy18:
-		++YYCURSOR;
+	++YYCURSOR;
 #line 48 "ext/phar/phar_path_check.re"
-		{
+	{
 			*error = "double slash";
 			return pcr_err_double_slash;
 		}
-#line 162 "ext/phar/phar_path_check.c"
+#line 161 "ext/phar/phar_path_check.c"
 yy20:
-		yych = *++YYCURSOR;
-		if(yych <= 0x00) goto yy23;
-		if(yych == '/') goto yy23;
-		goto yy17;
+	yych = *++YYCURSOR;
+	if (yych <= 0x00) goto yy23;
+	if (yych == '/') goto yy23;
+	goto yy17;
 yy21:
-		++YYCURSOR;
+	++YYCURSOR;
 #line 56 "ext/phar/phar_path_check.re"
-		{
+	{
 			*error = "current directory reference";
 			return pcr_err_curr_dir;
 		}
-#line 175 "ext/phar/phar_path_check.c"
+#line 174 "ext/phar/phar_path_check.c"
 yy23:
-		++YYCURSOR;
+	++YYCURSOR;
 #line 52 "ext/phar/phar_path_check.re"
-		{
+	{
 			*error = "upper directory reference";
 			return pcr_err_up_dir;
 		}
-#line 183 "ext/phar/phar_path_check.c"
-	}
+#line 182 "ext/phar/phar_path_check.c"
 }
 #line 96 "ext/phar/phar_path_check.re"
 
diff --git a/ext/phar/phar_path_check.re b/ext/phar/phar_path_check.re
old mode 100755
new mode 100644
index db92987..19da87c
--- a/ext/phar/phar_path_check.re
+++ b/ext/phar/phar_path_check.re
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2007-2009 The PHP Group                                |
+  | Copyright (c) 2007-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: phar_path_check.re 272369 2008-12-31 11:13:54Z sebastian $ */
+/* $Id: phar_path_check.re 308657 2011-02-25 09:32:17Z nlopess $ */
 
 #include "phar_internal.h"
 
diff --git a/ext/phar/pharzip.h b/ext/phar/pharzip.h
index b97b428..afc3ea2 100644
--- a/ext/phar/pharzip.h
+++ b/ext/phar/pharzip.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2009 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pharzip.h 284658 2009-07-23 16:30:27Z cellog $ */
+/* $Id: pharzip.h 306941 2011-01-01 02:48:19Z felipe $ */
 
 typedef struct _phar_zip_file_header {
 	char signature[4];       /* local file header signature     4 bytes  (0x04034b50) */
diff --git a/ext/phar/php_phar.h b/ext/phar/php_phar.h
index 198ac76..0dc6429 100644
--- a/ext/phar/php_phar.h
+++ b/ext/phar/php_phar.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2005-2009 The PHP Group                                |
+  | Copyright (c) 2005-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_phar.h 290527 2009-11-11 21:02:59Z cellog $ */
+/* $Id: php_phar.h 306941 2011-01-01 02:48:19Z felipe $ */
 
 #ifndef PHP_PHAR_H
 #define PHP_PHAR_H
diff --git a/ext/phar/stream.c b/ext/phar/stream.c
index 1fbbbb1..f9bf3f3 100644
--- a/ext/phar/stream.c
+++ b/ext/phar/stream.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar:// stream wrapper support                                       |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2005-2009 The PHP Group                                |
+  | Copyright (c) 2005-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -250,7 +250,7 @@ static php_stream * phar_wrapper_open_url(php_stream_wrapper *wrapper, char *pat
 		if (!*internal_file && (options & STREAM_OPEN_FOR_INCLUDE)) {
 			/* retrieve the stub */
 			if (FAILURE == phar_get_archive(&phar, resource->host, host_len, NULL, 0, NULL TSRMLS_CC)) {
-				php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "file %s is not a valid phar archive");
+				php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "file %s is not a valid phar archive", resource->host);
 				efree(internal_file);
 				php_url_free(resource);
 				return NULL;
diff --git a/ext/phar/stream.h b/ext/phar/stream.h
index 4609ca6..045186c 100644
--- a/ext/phar/stream.h
+++ b/ext/phar/stream.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2006-2009 The PHP Group                                |
+  | Copyright (c) 2006-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: stream.h 272370 2008-12-31 11:15:49Z sebastian $ */
+/* $Id: stream.h 306941 2011-01-01 02:48:19Z felipe $ */
 
 BEGIN_EXTERN_C()
 
diff --git a/ext/phar/stub.h b/ext/phar/stub.h
index 843c820..6a68464 100644
--- a/ext/phar/stub.h
+++ b/ext/phar/stub.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension generated stub         |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2005-2009 The PHP Group                                |
+  | Copyright (c) 2005-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: stub.h 272370 2008-12-31 11:15:49Z sebastian $ */
+/* $Id: stub.h 306941 2011-01-01 02:48:19Z felipe $ */
 
 static inline void phar_get_stub(const char *index_php, const char *web, size_t *len, char **stub, const int name_len, const int web_len TSRMLS_DC)
 {
diff --git a/ext/phar/tar.c b/ext/phar/tar.c
index a0b6f51..38c3f4f 100644
--- a/ext/phar/tar.c
+++ b/ext/phar/tar.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | TAR archive support for Phar                                         |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2005-2009 The PHP Group                                |
+  | Copyright (c) 2005-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/phar/tar.h b/ext/phar/tar.h
index 2532c61..950cace 100644
--- a/ext/phar/tar.h
+++ b/ext/phar/tar.h
@@ -4,7 +4,7 @@
   +----------------------------------------------------------------------+
   | TAR archive support for Phar                                         |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2005-2009 The PHP Group                                |
+  | Copyright (c) 2005-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/phar/tests/bug46032.phpt b/ext/phar/tests/bug46032.phpt
index 5a88d5b..7700e9b 100644
--- a/ext/phar/tests/bug46032.phpt
+++ b/ext/phar/tests/bug46032.phpt
@@ -27,7 +27,7 @@ new phardata('0000000000000000000');
 %string|unicode%(%d) "%smytest"
 %string|unicode%(%d) "%smytest"
 
-Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Cannot create phar '0000000000000000000', file extension (or combination) not recognised' in %sbug46032.php:%d
+Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Cannot create phar '0000000000000000000', file extension (or combination) not recognised or the directory does not exist' in %sbug46032.php:%d
 Stack trace:
 #0 %sbug46032.php(%d): PharData->__construct('000000000000000...')
 #1 {main}
diff --git a/ext/phar/tests/cached_manifest_1.phpt b/ext/phar/tests/cached_manifest_1.phpt
index f6bd903..af58523 100644
--- a/ext/phar/tests/cached_manifest_1.phpt
+++ b/ext/phar/tests/cached_manifest_1.phpt
@@ -6,7 +6,7 @@ if (!extension_loaded("phar")) die("skip");
 if (version_compare(PHP_VERSION, "6.0", ">")) die("skip pre-unicode version of PHP required");
 ?>
 --INI--
-phar.cache_list={$cwd}/files/nophar.phar
+phar.cache_list={PWD}/files/nophar.phar
 --FILE--
 <?php
 $pname = 'phar://' . dirname(__FILE__) . '/files/nophar.phar';
diff --git a/ext/phar/tests/cached_manifest_1U.phpt b/ext/phar/tests/cached_manifest_1U.phpt
index 27b3f9e..df77f07 100644
--- a/ext/phar/tests/cached_manifest_1U.phpt
+++ b/ext/phar/tests/cached_manifest_1U.phpt
@@ -6,7 +6,7 @@ if (!extension_loaded("phar")) die("skip");
 if (version_compare(PHP_VERSION, "6.0", "<")) die("skip Unicode support required");
 ?>
 --INI--
-phar.cache_list={$cwd}/files/nophar.phar
+phar.cache_list={PWD}/files/nophar.phar
 --FILE--
 <?php
 $pname = 'phar://' . dirname(__FILE__) . '/files/nophar.phar';
diff --git a/ext/phar/tests/phar_construct_invalidurl.phpt b/ext/phar/tests/phar_construct_invalidurl.phpt
index cc13415..30a4687 100644
--- a/ext/phar/tests/phar_construct_invalidurl.phpt
+++ b/ext/phar/tests/phar_construct_invalidurl.phpt
@@ -26,5 +26,5 @@ try {
 --EXPECT--
 Cannot create a phar archive from a URL like "http://should.fail.com". Phar objects can only be created from local files
 Cannot create a phar archive from a URL like "http://". Phar objects can only be created from local files
-Cannot create phar 'http:/', file extension (or combination) not recognised
+Cannot create phar 'http:/', file extension (or combination) not recognised or the directory does not exist
 ===DONE===
diff --git a/ext/phar/tests/phar_get_supported_signatures_002a.phpt b/ext/phar/tests/phar_get_supported_signatures_002a.phpt
index 154d180..32437a3 100644
--- a/ext/phar/tests/phar_get_supported_signatures_002a.phpt
+++ b/ext/phar/tests/phar_get_supported_signatures_002a.phpt
@@ -16,7 +16,6 @@ phar.readonly=0
 var_dump(Phar::getSupportedSignatures());
 ?>
 ===DONE===
-?>
 --EXPECT--
 array(5) {
   [0]=>
diff --git a/ext/phar/tests/zip/odt.phpt b/ext/phar/tests/zip/odt.phpt
index 1c903dd..b007d44 100644
--- a/ext/phar/tests/zip/odt.phpt
+++ b/ext/phar/tests/zip/odt.phpt
@@ -31,5 +31,5 @@ phar://%sodt.odt%cmeta.xml
 phar://%sodt.odt%cmimetype
 phar://%sodt.odt%csettings.xml
 phar://%sodt.odt%cstyles.xml
-Cannot create phar '%sodt.odt', file extension (or combination) not recognised
+Cannot create phar '%sodt.odt', file extension (or combination) not recognised or the directory does not exist
 ===DONE===
diff --git a/ext/phar/util.c b/ext/phar/util.c
index e918196..9bc704d 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -3,7 +3,7 @@
   | phar php single-file executable PHP extension                        |
   | utility functions                                                    |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2005-2009 The PHP Group                                |
+  | Copyright (c) 2005-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: util.c 298626 2010-04-26 23:55:03Z kalle $ */
+/* $Id: util.c 306941 2011-01-01 02:48:19Z felipe $ */
 
 #include "phar_internal.h"
 #ifdef PHAR_HASH_OK
diff --git a/ext/phar/zip.c b/ext/phar/zip.c
index eb64dea..fa3642f 100644
--- a/ext/phar/zip.c
+++ b/ext/phar/zip.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | ZIP archive support for Phar                                         |
   +----------------------------------------------------------------------+
-  | Copyright (c) 2007-2009 The PHP Group                                |
+  | Copyright (c) 2007-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -1434,9 +1434,9 @@ nocentralerror:
 	php_stream_seek(pass.centralfp, 0, SEEK_SET);
 
 	{
-		size_t len;
-		int ret = phar_stream_copy_to_stream(pass.centralfp, pass.filefp, PHP_STREAM_COPY_ALL, &len);
-		if (SUCCESS != ret || len != cdir_size) {
+		size_t clen;
+		int ret = phar_stream_copy_to_stream(pass.centralfp, pass.filefp, PHP_STREAM_COPY_ALL, &clen);
+		if (SUCCESS != ret || clen != cdir_size) {
 			if (error) {
 				spprintf(error, 4096, "phar zip flush of \"%s\" failed: unable to write central-directory", phar->fname);
 			}
diff --git a/ext/posix/php_posix.h b/ext/posix/php_posix.h
index 834fc7c..64ce54f 100644
--- a/ext/posix/php_posix.h
+++ b/ext/posix/php_posix.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
  */
 
 
-/* $Id: php_posix.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_posix.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_POSIX_H
 #define PHP_POSIX_H
diff --git a/ext/posix/posix.c b/ext/posix/posix.c
index 885c997..b04ef9a 100644
--- a/ext/posix/posix.c
+++ b/ext/posix/posix.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: posix.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: posix.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -310,7 +310,7 @@ const zend_function_entry posix_functions[] = {
 static PHP_MINFO_FUNCTION(posix)
 {
 	php_info_print_table_start();
-	php_info_print_table_row(2, "Revision", "$Revision: 305507 $");
+	php_info_print_table_row(2, "Revision", "$Revision: 306939 $");
 	php_info_print_table_end();
 }
 /* }}} */
diff --git a/ext/pspell/php_pspell.h b/ext/pspell/php_pspell.h
index 6aa91ef..ee26a81 100644
--- a/ext/pspell/php_pspell.h
+++ b/ext/pspell/php_pspell.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pspell.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_pspell.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef _PSPELL_H
 #define _PSPELL_H
diff --git a/ext/pspell/pspell.c b/ext/pspell/pspell.c
index d11f692..c1757c4 100644
--- a/ext/pspell/pspell.c
+++ b/ext/pspell/pspell.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: pspell.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: pspell.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define IS_EXT_MODULE
 
@@ -403,6 +403,7 @@ static PHP_FUNCTION(pspell_new_personal)
 #endif
 
 	if (strlen(personal) != personal_len) {
+		delete_pspell_config(config);
 		RETURN_FALSE;
 	}
 
diff --git a/ext/readline/php_readline.h b/ext/readline/php_readline.h
index eddf1f9..c6979e1 100644
--- a/ext/readline/php_readline.h
+++ b/ext/readline/php_readline.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_readline.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_readline.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_READLINE_H
 #define PHP_READLINE_H
diff --git a/ext/readline/readline.c b/ext/readline/readline.c
index 84b9ef2..ab9cfe7 100644
--- a/ext/readline/readline.c
+++ b/ext/readline/readline.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: readline.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: readline.c 307343 2011-01-10 18:19:02Z iliaa $ */
 
 /* {{{ includes & prototypes */
 
@@ -196,7 +196,7 @@ PHP_FUNCTION(readline)
 	int prompt_len;
 	char *result;
 
-	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!", &prompt, &prompt_len)) {
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &prompt, &prompt_len)) {
 		RETURN_FALSE;
 	}
 
diff --git a/ext/recode/php_recode.h b/ext/recode/php_recode.h
index 0dacd46..c131da6 100644
--- a/ext/recode/php_recode.h
+++ b/ext/recode/php_recode.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_recode.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_recode.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_RECODE_H
 #define PHP_RECODE_H
diff --git a/ext/recode/recode.c b/ext/recode/recode.c
index bc3e53c..9714777 100644
--- a/ext/recode/recode.c
+++ b/ext/recode/recode.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: recode.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: recode.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* {{{ includes & prototypes */
 
@@ -135,7 +135,7 @@ PHP_MINFO_FUNCTION(recode)
 {
 	php_info_print_table_start();
 	php_info_print_table_row(2, "Recode Support", "enabled");
-	php_info_print_table_row(2, "Revision", "$Revision: 293036 $");
+	php_info_print_table_row(2, "Revision", "$Revision: 306939 $");
 	php_info_print_table_end();
 }
 
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 018e262..8c04741 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_reflection.c 305605 2010-11-21 12:24:09Z johannes $ */
+/* $Id: php_reflection.c 307971 2011-02-03 12:45:30Z cataphract $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -3744,7 +3744,7 @@ ZEND_METHOD(reflection_class, getConstants)
 	}
 	GET_REFLECTION_OBJECT_PTR(ce);
 	array_init(return_value);
-	zend_hash_apply_with_argument(&ce->constants_table, (apply_func_arg_t) zval_update_constant, (void*)1 TSRMLS_CC);
+	zend_hash_apply_with_argument(&ce->constants_table, (apply_func_arg_t)zval_update_constant_inline_change, ce TSRMLS_CC);
 	zend_hash_copy(Z_ARRVAL_P(return_value), &ce->constants_table, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *));
 }
 /* }}} */
@@ -3765,7 +3765,7 @@ ZEND_METHOD(reflection_class, getConstant)
 	}
 
 	GET_REFLECTION_OBJECT_PTR(ce);
-	zend_hash_apply_with_argument(&ce->constants_table, (apply_func_arg_t) zval_update_constant, (void*)1 TSRMLS_CC);
+	zend_hash_apply_with_argument(&ce->constants_table, (apply_func_arg_t)zval_update_constant_inline_change, ce TSRMLS_CC);
 	if (zend_hash_find(&ce->constants_table, name, name_len + 1, (void **) &value) == FAILURE) {
 		RETURN_FALSE;
 	}
@@ -5535,7 +5535,7 @@ PHP_MINFO_FUNCTION(reflection) /* {{{ */
 	php_info_print_table_start();
 	php_info_print_table_header(2, "Reflection", "enabled");
 
-	php_info_print_table_row(2, "Version", "$Revision: 305605 $");
+	php_info_print_table_row(2, "Version", "$Revision: 307971 $");
 
 	php_info_print_table_end();
 } /* }}} */
@@ -5549,7 +5549,7 @@ zend_module_entry reflection_module_entry = { /* {{{ */
 	NULL,
 	NULL,
 	PHP_MINFO(reflection),
-	"$Revision: 305605 $",
+	"$Revision: 307971 $",
 	STANDARD_MODULE_PROPERTIES
 }; /* }}} */
 
diff --git a/ext/reflection/php_reflection.h b/ext/reflection/php_reflection.h
index f53f581..0607f7f 100644
--- a/ext/reflection/php_reflection.h
+++ b/ext/reflection/php_reflection.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_reflection.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_reflection.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_REFLECTION_H
 #define PHP_REFLECTION_H
diff --git a/ext/reflection/tests/bug53915.phpt b/ext/reflection/tests/bug53915.phpt
new file mode 100644
index 0000000..f2f2ae5
--- /dev/null
+++ b/ext/reflection/tests/bug53915.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Bug #53915 - ReflectionClass::getConstant(s) emits fatal error on selfreferencing constants
+--FILE--
+<?php
+Class Foo
+{
+	const A = 1;
+	const B = self::A;
+}
+
+$rc = new ReflectionClass('Foo');
+print_r($rc->getConstants());
+
+Class Foo2
+{
+        const A = 1;
+        const B = self::A;
+}
+
+$rc = new ReflectionClass('Foo2');
+print_r($rc->getConstant('B'));
+--EXPECT--
+Array
+(
+    [A] => 1
+    [B] => 1
+)
+1
diff --git a/ext/session/config.w32 b/ext/session/config.w32
index 353ff73..379538c 100644
--- a/ext/session/config.w32
+++ b/ext/session/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 145409 2003-12-02 23:17:04Z wez $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_ENABLE("session", "session support", "yes");
@@ -6,6 +6,5 @@ ARG_ENABLE("session", "session support", "yes");
 if (PHP_SESSION == "yes") {
 	EXTENSION("session", "session.c mod_files.c mod_mm.c mod_user.c", false /* never shared */);
 	AC_DEFINE("HAVE_PHP_SESSION", 1, "Session support");
+	PHP_INSTALL_HEADERS("ext/session/", "mod_mm.h");
 }
-
-
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c
index f7b785b..a25a7db 100644
--- a/ext/session/mod_files.c
+++ b/ext/session/mod_files.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_files.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mod_files.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/session/mod_files.h b/ext/session/mod_files.h
index bc5bb4c..357a120 100644
--- a/ext/session/mod_files.h
+++ b/ext/session/mod_files.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_files.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mod_files.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MOD_FILES_H
 #define MOD_FILES_H
diff --git a/ext/session/mod_mm.c b/ext/session/mod_mm.c
index a938c48..e84d4f5 100644
--- a/ext/session/mod_mm.c
+++ b/ext/session/mod_mm.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_mm.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mod_mm.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/session/mod_mm.h b/ext/session/mod_mm.h
index a5c2c99..638bd77 100644
--- a/ext/session/mod_mm.h
+++ b/ext/session/mod_mm.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_mm.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mod_mm.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MOD_MM_H
 #define MOD_MM_H
diff --git a/ext/session/mod_user.c b/ext/session/mod_user.c
index 01f7f8e..6431f3a 100644
--- a/ext/session/mod_user.c
+++ b/ext/session/mod_user.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_user.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mod_user.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_session.h"
diff --git a/ext/session/mod_user.h b/ext/session/mod_user.h
index 2b00250..e3a8dd7 100644
--- a/ext/session/mod_user.h
+++ b/ext/session/mod_user.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_user.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mod_user.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MOD_USER_H
 #define MOD_USER_H
diff --git a/ext/session/php_session.h b/ext/session/php_session.h
index b321f44..f93adf6 100644
--- a/ext/session/php_session.h
+++ b/ext/session/php_session.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_session.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_session.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SESSION_H
 #define PHP_SESSION_H
diff --git a/ext/session/session.c b/ext/session/session.c
index 9d4905d..b7a2451 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: session.c 305034 2010-11-02 18:34:56Z felipe $ */
+/* $Id: session.c 307671 2011-01-23 10:02:06Z pajoye $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1914,10 +1914,10 @@ static PHP_FUNCTION(session_unset)
 	}
 
 	IF_SESSION_VARS() {
-		HashTable *ht;
+		HashTable *ht_sess_var;
 
 		SEPARATE_ZVAL_IF_NOT_REF(&PS(http_session_vars));
-		ht = Z_ARRVAL_P(PS(http_session_vars));
+		ht_sess_var = Z_ARRVAL_P(PS(http_session_vars));
 
 		if (PG(register_globals)) {
 			uint str_len;
@@ -1925,16 +1925,16 @@ static PHP_FUNCTION(session_unset)
 			ulong num_key;
 			HashPosition pos;
 
-			zend_hash_internal_pointer_reset_ex(ht, &pos);
+			zend_hash_internal_pointer_reset_ex(ht_sess_var, &pos);
 
-			while (zend_hash_get_current_key_ex(ht, &str, &str_len, &num_key, 0, &pos) == HASH_KEY_IS_STRING) {
+			while (zend_hash_get_current_key_ex(ht_sess_var, &str, &str_len, &num_key, 0, &pos) == HASH_KEY_IS_STRING) {
 				zend_delete_global_variable(str, str_len - 1 TSRMLS_CC);
-				zend_hash_move_forward_ex(ht, &pos);
+				zend_hash_move_forward_ex(ht_sess_var, &pos);
 			}
 		}
 
 		/* Clean $_SESSION. */
-		zend_hash_clean(ht);
+		zend_hash_clean(ht_sess_var);
 	}
 }
 /* }}} */
diff --git a/ext/shmop/php_shmop.h b/ext/shmop/php_shmop.h
index 3cf94ce..7ad5ec2 100644
--- a/ext/shmop/php_shmop.h
+++ b/ext/shmop/php_shmop.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/shmop/shmop.c b/ext/shmop/shmop.c
index 58a0fcf..c85676c 100644
--- a/ext/shmop/shmop.c
+++ b/ext/shmop/shmop.c
@@ -1,8 +1,8 @@
 /*
    +----------------------------------------------------------------------+
-   | PHP version 4                                                        |
+   | PHP version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    |          Ilia Alshanetsky <ilia at prohost.org>                         |
    +----------------------------------------------------------------------+
  */
-/* $Id: shmop.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: shmop.c 309032 2011-03-08 18:24:04Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -256,7 +256,7 @@ PHP_FUNCTION(shmop_read)
 		RETURN_FALSE;
 	}
 
-	if (start + count > shmop->size || count < 0) {
+	if (count < 0 || start > (INT_MAX - count) || start + count > shmop->size) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "count is out of range");
 		RETURN_FALSE;
 	}
diff --git a/ext/simplexml/php_simplexml.h b/ext/simplexml/php_simplexml.h
index 822cc51..eee7013 100644
--- a/ext/simplexml/php_simplexml.h
+++ b/ext/simplexml/php_simplexml.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_simplexml.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_simplexml.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SIMPLEXML_H
 #define PHP_SIMPLEXML_H
diff --git a/ext/simplexml/php_simplexml_exports.h b/ext/simplexml/php_simplexml_exports.h
index 73c1651..313bb88 100755
--- a/ext/simplexml/php_simplexml_exports.h
+++ b/ext/simplexml/php_simplexml_exports.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_simplexml_exports.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_simplexml_exports.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SIMPLEXML_EXPORTS_H
 #define PHP_SIMPLEXML_EXPORTS_H
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index c15097d..75eb742 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: simplexml.c 302715 2010-08-23 17:01:44Z pajoye $ */
+/* $Id: simplexml.c 308262 2011-02-11 21:10:48Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1099,22 +1099,24 @@ static HashTable * sxe_get_prop_hash(zval *object, int is_debug TSRMLS_DC) /* {{
 		if (sxe->iter.type == SXE_ITER_ELEMENT) {
 			node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
 		}
-		attr = node ? (xmlAttrPtr)node->properties : NULL;
-		zattr = NULL;
-		test = sxe->iter.name && sxe->iter.type == SXE_ITER_ATTRLIST;
-		while (attr) {
-			if ((!test || !xmlStrcmp(attr->name, sxe->iter.name)) && match_ns(sxe, (xmlNodePtr)attr, sxe->iter.nsprefix, sxe->iter.isprefix)) {
-				MAKE_STD_ZVAL(value);
-				ZVAL_STRING(value, sxe_xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, attr->children, 1), 0);
-				namelen = xmlStrlen(attr->name) + 1;
-				if (!zattr) {
-					MAKE_STD_ZVAL(zattr);
-					array_init(zattr);
-					sxe_properties_add(rv, "@attributes", sizeof("@attributes"), zattr TSRMLS_CC);
+		if (!node || node->type != XML_ENTITY_DECL) {
+			attr = node ? (xmlAttrPtr)node->properties : NULL;
+			zattr = NULL;
+			test = sxe->iter.name && sxe->iter.type == SXE_ITER_ATTRLIST;
+			while (attr) {
+				if ((!test || !xmlStrcmp(attr->name, sxe->iter.name)) && match_ns(sxe, (xmlNodePtr)attr, sxe->iter.nsprefix, sxe->iter.isprefix)) {
+					MAKE_STD_ZVAL(value);
+					ZVAL_STRING(value, sxe_xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, attr->children, 1), 0);
+					namelen = xmlStrlen(attr->name) + 1;
+					if (!zattr) {
+						MAKE_STD_ZVAL(zattr);
+						array_init(zattr);
+						sxe_properties_add(rv, "@attributes", sizeof("@attributes"), zattr TSRMLS_CC);
+					}
+					add_assoc_zval_ex(zattr, (char*)attr->name, namelen, value);
 				}
-				add_assoc_zval_ex(zattr, (char*)attr->name, namelen, value);
+				attr = attr->next;
 			}
-			attr = attr->next;
 		}
 	}
 
@@ -2468,6 +2470,45 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_simplexml_import_dom, 0, 0, 1)
 	ZEND_ARG_INFO(0, node)
 	ZEND_ARG_INFO(0, class_name)
 ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_simplexmlelement_xpath, 0, 0, 1)
+	ZEND_ARG_INFO(0, path)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_simplexmlelement_registerxpathnamespace, 0, 0, 2)
+	ZEND_ARG_INFO(0, prefix)
+	ZEND_ARG_INFO(0, ns)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_simplexmlelement_asxml, 0, 0, 0)
+	ZEND_ARG_INFO(0, filename)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_simplexmlelement_getnamespaces, 0, 0, 0)
+	ZEND_ARG_INFO(0, recursve)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_simplexmlelement_children, 0, 0, 0)
+	ZEND_ARG_INFO(0, ns)
+	ZEND_ARG_INFO(0, is_prefix)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_simplexmlelement__construct, 0, 0, 1)
+	ZEND_ARG_INFO(0, data)
+	ZEND_ARG_INFO(0, options)
+	ZEND_ARG_INFO(0, data_is_url)
+	ZEND_ARG_INFO(0, ns)
+	ZEND_ARG_INFO(0, is_prefix)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO(arginfo_simplexmlelement__void, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_simplexmlelement_addchild, 0, 0, 1)
+	ZEND_ARG_INFO(0, name)
+	ZEND_ARG_INFO(0, value)
+	ZEND_ARG_INFO(0, ns)
+ZEND_END_ARG_INFO()
 /* }}} */
 
 const zend_function_entry simplexml_functions[] = { /* {{{ */
@@ -2507,20 +2548,20 @@ ZEND_GET_MODULE(simplexml)
 /* the method table */
 /* each method can have its own parameters and visibility */
 static const zend_function_entry sxe_functions[] = { /* {{{ */
-	SXE_ME(__construct,            NULL, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) /* must be called */
-	SXE_ME(asXML,                  NULL, ZEND_ACC_PUBLIC)
-	SXE_MALIAS(saveXML, asXML,	   NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(xpath,                  NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(registerXPathNamespace, NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(attributes,             NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(children,               NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(getNamespaces,          NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(getDocNamespaces,       NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(getName,                NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(addChild,               NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(addAttribute,           NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(__toString,             NULL, ZEND_ACC_PUBLIC)
-	SXE_ME(count,                  NULL, ZEND_ACC_PUBLIC)
+	SXE_ME(__construct,            arginfo_simplexmlelement__construct, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) /* must be called */
+	SXE_ME(asXML,                  arginfo_simplexmlelement_asxml, ZEND_ACC_PUBLIC)
+	SXE_MALIAS(saveXML, asXML,	   arginfo_simplexmlelement_asxml, ZEND_ACC_PUBLIC)
+	SXE_ME(xpath,                  arginfo_simplexmlelement_xpath, ZEND_ACC_PUBLIC)
+	SXE_ME(registerXPathNamespace, arginfo_simplexmlelement_registerxpathnamespace, ZEND_ACC_PUBLIC)
+	SXE_ME(attributes,             arginfo_simplexmlelement_children, ZEND_ACC_PUBLIC)
+	SXE_ME(children,               arginfo_simplexmlelement_children, ZEND_ACC_PUBLIC)
+	SXE_ME(getNamespaces,          arginfo_simplexmlelement_getnamespaces, ZEND_ACC_PUBLIC)
+	SXE_ME(getDocNamespaces,       arginfo_simplexmlelement_getnamespaces, ZEND_ACC_PUBLIC)
+	SXE_ME(getName,                arginfo_simplexmlelement__void, ZEND_ACC_PUBLIC)
+	SXE_ME(addChild,               arginfo_simplexmlelement_addchild, ZEND_ACC_PUBLIC)
+	SXE_ME(addAttribute,           arginfo_simplexmlelement_addchild, ZEND_ACC_PUBLIC)
+	SXE_ME(__toString,             arginfo_simplexmlelement__void, ZEND_ACC_PUBLIC)
+	SXE_ME(count,                  arginfo_simplexmlelement__void, ZEND_ACC_PUBLIC)
 	{NULL, NULL, NULL}
 };
 /* }}} */
@@ -2567,7 +2608,7 @@ PHP_MINFO_FUNCTION(simplexml)
 {
 	php_info_print_table_start();
 	php_info_print_table_header(2, "Simplexml support", "enabled");
-	php_info_print_table_row(2, "Revision", "$Revision: 302715 $");
+	php_info_print_table_row(2, "Revision", "$Revision: 308262 $");
 	php_info_print_table_row(2, "Schema support",
 #ifdef LIBXML_SCHEMAS_ENABLED
 		"enabled");
diff --git a/ext/simplexml/sxe.c b/ext/simplexml/sxe.c
index 30ea2da..8bc5bcb 100755
--- a/ext/simplexml/sxe.c
+++ b/ext/simplexml/sxe.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: sxe.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: sxe.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
diff --git a/ext/simplexml/sxe.h b/ext/simplexml/sxe.h
index 90489b2..c979d7e 100755
--- a/ext/simplexml/sxe.h
+++ b/ext/simplexml/sxe.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: sxe.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: sxe.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SXE_H
 #define SXE_H
diff --git a/ext/snmp/php_snmp.h b/ext/snmp/php_snmp.h
index c7b5512..6f17f94 100644
--- a/ext/snmp/php_snmp.h
+++ b/ext/snmp/php_snmp.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -20,7 +20,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_snmp.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_snmp.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SNMP_H
 #define PHP_SNMP_H
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
index b3d5405..861f2c2 100644
--- a/ext/snmp/snmp.c
+++ b/ext/snmp/snmp.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: snmp.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: snmp.c 307876 2011-01-31 11:34:12Z lytboris $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -689,7 +689,7 @@ retry:
 					}
 				}	
 			} else {
-				if (st != SNMP_CMD_WALK || response->errstat != SNMP_ERR_NOSUCHNAME) {
+				if ((st != SNMP_CMD_WALK && st != SNMP_CMD_REALWALK) || response->errstat != SNMP_ERR_NOSUCHNAME) {
 					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error in packet: %s", snmp_errstring(response->errstat));
 					if (response->errstat == SNMP_ERR_NOSUCHNAME) {
 						for (count=1, vars = response->variables; vars && count != response->errindex;
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c
index ac909c8..16981fa 100644
--- a/ext/soap/php_encoding.c
+++ b/ext/soap/php_encoding.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_encoding.c 303034 2010-09-03 22:24:08Z rasmus $ */
+/* $Id: php_encoding.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <time.h>
 
diff --git a/ext/soap/php_encoding.h b/ext/soap/php_encoding.h
index 17989c5..bf8ef5d 100644
--- a/ext/soap/php_encoding.h
+++ b/ext/soap/php_encoding.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_encoding.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_encoding.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_ENCODING_H
 #define PHP_ENCODING_H
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c
index 1f5c48f..63cd409 100644
--- a/ext/soap/php_http.c
+++ b/ext/soap/php_http.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_http.c 304084 2010-10-05 11:43:59Z dmitry $ */
+/* $Id: php_http.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_soap.h"
 #include "ext/standard/base64.h"
diff --git a/ext/soap/php_http.h b/ext/soap/php_http.h
index 2177e18..b22dd1e 100644
--- a/ext/soap/php_http.h
+++ b/ext/soap/php_http.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_http.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_http.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_HTTP_H
 #define PHP_HTTP_H
diff --git a/ext/soap/php_packet_soap.c b/ext/soap/php_packet_soap.c
index e86a204..a9c118f 100644
--- a/ext/soap/php_packet_soap.c
+++ b/ext/soap/php_packet_soap.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_packet_soap.c 303034 2010-09-03 22:24:08Z rasmus $ */
+/* $Id: php_packet_soap.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_soap.h"
 
diff --git a/ext/soap/php_packet_soap.h b/ext/soap/php_packet_soap.h
index 2ba3eb1..a062b4a 100644
--- a/ext/soap/php_packet_soap.h
+++ b/ext/soap/php_packet_soap.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_packet_soap.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_packet_soap.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_PACKET_SOAP_H
 #define PHP_PACKET_SOAP_H
diff --git a/ext/soap/php_schema.c b/ext/soap/php_schema.c
index 0396d91..0812225 100644
--- a/ext/soap/php_schema.c
+++ b/ext/soap/php_schema.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_schema.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_schema.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_soap.h"
 #include "libxml/uri.h"
diff --git a/ext/soap/php_schema.h b/ext/soap/php_schema.h
index 9022e3f..3b20422 100644
--- a/ext/soap/php_schema.h
+++ b/ext/soap/php_schema.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_schema.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_schema.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SCHEMA_H
 #define PHP_SCHEMA_H
diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c
index 37d519e..6eb0169 100644
--- a/ext/soap/php_sdl.c
+++ b/ext/soap/php_sdl.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_sdl.c 305198 2010-11-08 11:34:32Z dmitry $ */
+/* $Id: php_sdl.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_soap.h"
 #include "ext/libxml/php_libxml.h"
diff --git a/ext/soap/php_sdl.h b/ext/soap/php_sdl.h
index 5edbbdf..3c1c021 100644
--- a/ext/soap/php_sdl.h
+++ b/ext/soap/php_sdl.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_sdl.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_sdl.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SDL_H
 #define PHP_SDL_H
diff --git a/ext/soap/php_soap.h b/ext/soap/php_soap.h
index 36b154e..220bf8f 100644
--- a/ext/soap/php_soap.h
+++ b/ext/soap/php_soap.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_soap.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_soap.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SOAP_H
 #define PHP_SOAP_H
diff --git a/ext/soap/php_xml.c b/ext/soap/php_xml.c
index 5929ee2..4496108 100644
--- a/ext/soap/php_xml.c
+++ b/ext/soap/php_xml.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_xml.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_xml.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_soap.h"
 #include "libxml/parser.h"
diff --git a/ext/soap/php_xml.h b/ext/soap/php_xml.h
index cbef45e..62a4a18 100644
--- a/ext/soap/php_xml.h
+++ b/ext/soap/php_xml.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_xml.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_xml.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SOAP_XML_H
 #define PHP_SOAP_XML_H
diff --git a/ext/soap/soap.c b/ext/soap/soap.c
index c535d5f..6975e2b 100644
--- a/ext/soap/soap.c
+++ b/ext/soap/soap.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: soap.c 300317 2010-06-09 15:48:22Z iliaa $ */
+/* $Id: soap.c 307975 2011-02-03 13:33:10Z iliaa $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -3006,18 +3006,18 @@ PHP_METHOD(SoapClient, __call)
 	}
 
 	if (options) {
-		HashTable *ht = Z_ARRVAL_P(options);
-		if (zend_hash_find(ht, "location", sizeof("location"), (void**)&tmp) == SUCCESS &&
+		HashTable *hto = Z_ARRVAL_P(options);
+		if (zend_hash_find(hto, "location", sizeof("location"), (void**)&tmp) == SUCCESS &&
 			Z_TYPE_PP(tmp) == IS_STRING) {
 			location = Z_STRVAL_PP(tmp);
 		}
 
-		if (zend_hash_find(ht, "soapaction", sizeof("soapaction"), (void**)&tmp) == SUCCESS &&
+		if (zend_hash_find(hto, "soapaction", sizeof("soapaction"), (void**)&tmp) == SUCCESS &&
 			Z_TYPE_PP(tmp) == IS_STRING) {
 			soap_action = Z_STRVAL_PP(tmp);
 		}
 
-		if (zend_hash_find(ht, "uri", sizeof("uri"), (void**)&tmp) == SUCCESS &&
+		if (zend_hash_find(hto, "uri", sizeof("uri"), (void**)&tmp) == SUCCESS &&
 			Z_TYPE_PP(tmp) == IS_STRING) {
 			uri = Z_STRVAL_PP(tmp);
 		}
@@ -3045,10 +3045,10 @@ PHP_METHOD(SoapClient, __call)
 		HashTable *default_headers = Z_ARRVAL_P(*tmp);
 		if (soap_headers) {
 			if (!free_soap_headers) {
-				HashTable *tmp =  emalloc(sizeof(HashTable));
-				zend_hash_init(tmp, 0, NULL, ZVAL_PTR_DTOR, 0);
-				zend_hash_copy(tmp, soap_headers, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
-				soap_headers = tmp;
+				HashTable *t =  emalloc(sizeof(HashTable));
+				zend_hash_init(t, 0, NULL, ZVAL_PTR_DTOR, 0);
+				zend_hash_copy(t, soap_headers, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
+				soap_headers = t;
 				free_soap_headers = 1;
 			}
 			zend_hash_internal_pointer_reset(default_headers);
@@ -3756,7 +3756,6 @@ static sdlFunctionPtr deserialize_function_call(sdlPtr sdl, xmlDocPtr request, c
 		while (trav != NULL) {
 			if (trav->type == XML_ELEMENT_NODE) {
 				xmlNodePtr hdr_func = trav;
-				xmlAttrPtr attr;
 				int mustUnderstand = 0;
 
 				if (*version == SOAP_1_1) {
@@ -4002,7 +4001,6 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function
 
 		if (headers &&
 		    zend_hash_find(prop, "headerfault", sizeof("headerfault"), (void**)&tmp) == SUCCESS) {
-			xmlNodePtr head;
 			encodePtr hdr_enc = NULL;
 			int hdr_use = SOAP_LITERAL;
 			zval *hdr_ret  = *tmp;
@@ -4013,7 +4011,6 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function
 			if (Z_TYPE_P(hdr_ret) == IS_OBJECT &&
 			    instanceof_function(Z_OBJCE_P(hdr_ret), soap_header_class_entry TSRMLS_CC)) {
 				HashTable* ht = Z_OBJPROP_P(hdr_ret);
-				zval **tmp;
 				sdlSoapBindingFunctionHeaderPtr *hdr;
 				smart_str key = {0};
 
@@ -4202,7 +4199,7 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function
 					}
 				} else {
 					if (sparam->element) {
-						xmlNsPtr ns = encode_add_ns(x, sparam->element->namens);
+						ns = encode_add_ns(x, sparam->element->namens);
 						xmlNodeSetName(x, BAD_CAST(sparam->element->name));
 						xmlSetNs(x, ns);
 					}
diff --git a/ext/soap/tests/error_handler.phpt b/ext/soap/tests/error_handler.phpt
new file mode 100644
index 0000000..54162d7
--- /dev/null
+++ b/ext/soap/tests/error_handler.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #46760 (SoapClient doRequest fails when proxy is used)
+--SKIPIF--
+<?php require_once('skipif.inc'); 
+if (!extension_loaded('sqlite')) die('skip sqlite extension not available');
+?>
+--FILE--
+<?php
+echo "blllllllllaaaaaaa\n";
+$var475 = sqlite_factory("\x00");
+$var147 = use_soap_error_handler();
+$var477 = flock(false,false);dump($client->_proxy_port);
+?>
+--EXPECT--
+blllllllllaaaaaaa
+<?xml version="1.0" encoding="UTF-8"?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>Call to undefined function dump()</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
diff --git a/ext/sockets/config.w32 b/ext/sockets/config.w32
index 320a19b..8e0b124 100644
--- a/ext/sockets/config.w32
+++ b/ext/sockets/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 274392 2009-01-23 15:49:49Z kalle $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_ENABLE("sockets", "SOCKETS support", "no");
@@ -8,6 +8,7 @@ if (PHP_SOCKETS != "no") {
 	&& CHECK_HEADER_ADD_INCLUDE("winsock.h", "CFLAGS_SOCKETS")) {
 		EXTENSION('sockets', 'sockets.c');
 		AC_DEFINE('HAVE_SOCKETS', 1);
+		PHP_INSTALL_HEADERS("ext/sockets", "php_sockets.h");
 	} else {
 		WARNING("sockets not enabled; libraries and headers not found");
 	}
diff --git a/ext/sockets/php_sockets.h b/ext/sockets/php_sockets.h
index e941e64..c067532 100644
--- a/ext/sockets/php_sockets.h
+++ b/ext/sockets/php_sockets.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -22,7 +22,7 @@
 #ifndef PHP_SOCKETS_H
 #define PHP_SOCKETS_H
 
-/* $Id: php_sockets.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_sockets.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #if HAVE_SOCKETS
 
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index 9547f56..9e06b28 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: sockets.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: sockets.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/sockets/tests/socket_connect_params.phpt b/ext/sockets/tests/socket_connect_params.phpt
index c8dff06..44f0ffd 100644
--- a/ext/sockets/tests/socket_connect_params.phpt
+++ b/ext/sockets/tests/socket_connect_params.phpt
@@ -30,4 +30,4 @@ Warning: socket_connect() expects at least 2 parameters, 1 given in %s on line %
 
 Warning: socket_connect(): Socket of type AF_INET requires 3 arguments in %s on line %i
 
-Warning: socket_connect(): unable to connect [%i]: Transport endpoint is already connected in %s on line %i
+Warning: socket_connect(): unable to connect [%i]: %a in %s on line %i
diff --git a/ext/sockets/tests/socket_create_listen_used.phpt b/ext/sockets/tests/socket_create_listen_used.phpt
index d89f1b7..1e45f82 100644
--- a/ext/sockets/tests/socket_create_listen_used.phpt
+++ b/ext/sockets/tests/socket_create_listen_used.phpt
@@ -24,7 +24,7 @@ fa at php.net
 --EXPECTF--
 resource(%i) of type (Socket)
 
-Warning: socket_create_listen(): unable to bind to given address [%i]: Address already in use in %s on line %i
+Warning: socket_create_listen(): unable to bind to given address [%i]: %a in %s on line %i
 bool(false)
 
 Warning: socket_close() expects parameter 1 to be resource, boolean given in %s on line %i
diff --git a/ext/sockets/tests/socket_getpeername.phpt b/ext/sockets/tests/socket_getpeername.phpt
index 2252992..280fa2a 100644
--- a/ext/sockets/tests/socket_getpeername.phpt
+++ b/ext/sockets/tests/socket_getpeername.phpt
@@ -27,7 +27,7 @@ fa at php.net
 --EXPECTF--
 bool(true)
 
-Warning: socket_getpeername(): unable to retrieve peer name [%i]: Transport endpoint is not connected in %s on line %i
+Warning: socket_getpeername(): unable to retrieve peer name [%i]: %a in %s on line %i
 bool(false)
 NULL
 NULL
diff --git a/ext/sockets/tests/socket_read_params.phpt b/ext/sockets/tests/socket_read_params.phpt
index 69af710..3b4821a 100644
--- a/ext/sockets/tests/socket_read_params.phpt
+++ b/ext/sockets/tests/socket_read_params.phpt
@@ -25,4 +25,4 @@ Warning: socket_read() expects at least 2 parameters, 0 given in %s on line %i
 
 Warning: socket_read() expects at least 2 parameters, 1 given in %s on line %i
 
-Warning: socket_read(): unable to read from socket [%i]: Transport endpoint is not connected in %s on line %i
+Warning: socket_read(): unable to read from socket [%i]: %a in %s on line %i
diff --git a/ext/sockets/tests/socket_sentto_recvfrom_ipv4_udp.phpt b/ext/sockets/tests/socket_sentto_recvfrom_ipv4_udp.phpt
index 8b7ed0b..96cbf8f 100644
--- a/ext/sockets/tests/socket_sentto_recvfrom_ipv4_udp.phpt
+++ b/ext/sockets/tests/socket_sentto_recvfrom_ipv4_udp.phpt
@@ -44,7 +44,7 @@ if (!extension_loaded('sockets')) {
 
     socket_close($socket);
 --EXPECTF--
-Warning: socket_recvfrom(): unable to recvfrom [%d]: Resource temporarily unavailable in %s on line %d
+Warning: socket_recvfrom(): unable to recvfrom [%d]: %a in %s on line %d
 
 Warning: Wrong parameter count for socket_sendto() in %s on line %d
 
diff --git a/ext/sockets/tests/socket_strerror.phpt b/ext/sockets/tests/socket_strerror.phpt
index 074d2ff..d1759c5 100644
--- a/ext/sockets/tests/socket_strerror.phpt
+++ b/ext/sockets/tests/socket_strerror.phpt
@@ -8,6 +8,9 @@ fa at php.net
     if (!extension_loaded('sockets')) {
         die('skip sockets extension not available.');
     }
+    if (!stristr(PHP_OS, "linux") {
+        die('skip - test validtes linux error strings only.');
+    }
 ?>
 --FILE--
 <?php
diff --git a/ext/sockets/tests/socket_write_params.phpt b/ext/sockets/tests/socket_write_params.phpt
index e23766e..00360f7 100644
--- a/ext/sockets/tests/socket_write_params.phpt
+++ b/ext/sockets/tests/socket_write_params.phpt
@@ -25,4 +25,4 @@ Warning: socket_write() expects at least 2 parameters, 0 given in %s on line %i
 
 Warning: socket_write() expects at least 2 parameters, 1 given in %s on line %i
 
-Warning: socket_write(): unable to write to socket [%i]: Broken pipe in %s on line %i
+Warning: socket_write(): unable to write to socket [%i]: %a in %s on line %i
diff --git a/ext/sockets/unix_socket_constants.h b/ext/sockets/unix_socket_constants.h
index 0cba232..cf3efad 100644
--- a/ext/sockets/unix_socket_constants.h
+++ b/ext/sockets/unix_socket_constants.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: unix_socket_constants.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: unix_socket_constants.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* This file is to be included by sockets.c */
 
diff --git a/ext/sockets/win32_socket_constants.h b/ext/sockets/win32_socket_constants.h
index 74b572e..34d1069 100644
--- a/ext/sockets/win32_socket_constants.h
+++ b/ext/sockets/win32_socket_constants.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: win32_socket_constants.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: win32_socket_constants.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* This file is to be included by sockets.c */
 
diff --git a/ext/spl/config.w32 b/ext/spl/config.w32
index a91c273..af02eac 100644
--- a/ext/spl/config.w32
+++ b/ext/spl/config.w32
@@ -1,6 +1,7 @@
-// $Id: config.w32 268395 2008-11-06 00:37:13Z colder $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 EXTENSION("spl", "php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fixedarray.c", false /*never shared */);
 AC_DEFINE('HAVE_SPL', 1);
 PHP_SPL="yes";
+PHP_INSTALL_HEADERS("ext/spl", "php_spl.h spl_array.h spl_directory.h spl_engine.h spl_exceptions.h spl_functions.h spl_iterators.h spl_observer.h spl_dllist.h spl_heap.h spl_fixedarray.h");
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c
index 93194cd..965d0d3 100755
--- a/ext/spl/php_spl.c
+++ b/ext/spl/php_spl.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_spl.c 305335 2010-11-14 18:40:08Z felipe $ */
+/* $Id: php_spl.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/spl/php_spl.h b/ext/spl/php_spl.h
index 353923a..bafaf53 100755
--- a/ext/spl/php_spl.h
+++ b/ext/spl/php_spl.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index 640cf34..99a0982 100755
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_array.c 305335 2010-11-14 18:40:08Z felipe $ */
+/* $Id: spl_array.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -579,8 +579,15 @@ static int spl_array_has_dimension_ex(int check_inherited, zval *object, zval *o
 	switch(Z_TYPE_P(offset)) {
 	case IS_STRING:
 		if (check_empty) {
-			if (zend_symtable_find(spl_array_get_hash_table(intern, 0 TSRMLS_CC), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **) &tmp) != FAILURE && zend_is_true(*tmp)) {
-				return 1;
+			if (zend_symtable_find(spl_array_get_hash_table(intern, 0 TSRMLS_CC), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **) &tmp) != FAILURE) {
+				switch (check_empty) {
+					case 0:
+						return Z_TYPE_PP(tmp) != IS_NULL;
+					case 2:
+						return 1;
+					default:
+						return zend_is_true(*tmp);
+				}
 			}
 			return 0;
 		} else {
@@ -597,8 +604,15 @@ static int spl_array_has_dimension_ex(int check_inherited, zval *object, zval *o
 		}
 		if (check_empty) {
 			HashTable *ht = spl_array_get_hash_table(intern, 0 TSRMLS_CC);
-			if (zend_hash_index_find(ht, index, (void **)&tmp) != FAILURE && zend_is_true(*tmp)) {
-				return 1;
+			if (zend_hash_index_find(ht, index, (void **)&tmp) != FAILURE) {
+				switch (check_empty) {
+					case 0:
+						return Z_TYPE_PP(tmp) != IS_NULL;
+					case 2:
+						return 1;
+					default:
+						return zend_is_true(*tmp);
+				}
 			}
 			return 0;
 		} else {
diff --git a/ext/spl/spl_array.h b/ext/spl/spl_array.h
index be11a51..90b8e66 100755
--- a/ext/spl/spl_array.h
+++ b/ext/spl/spl_array.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_array.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spl_array.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SPL_ARRAY_H
 #define SPL_ARRAY_H
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index e13c18e..b91fa5e 100755
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_directory.c 305335 2010-11-14 18:40:08Z felipe $ */
+/* $Id: spl_directory.c 309035 2011-03-08 19:56:29Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -164,11 +164,13 @@ static zend_object_value spl_filesystem_object_new(zend_class_entry *class_type
 
 PHPAPI char* spl_filesystem_object_get_path(spl_filesystem_object *intern, int *len TSRMLS_DC) /* {{{ */
 {
+#ifdef HAVE_GLOB
 	if (intern->type == SPL_FS_DIR) {
 		if (php_stream_is(intern->u.dir.dirp ,&php_glob_stream_ops)) {
 			return php_glob_stream_get_path(intern->u.dir.dirp, 0, len);
 		}
 	}
+#endif
 	if (len) {
 		*len = intern->_path_len;
 	}
@@ -575,6 +577,7 @@ static HashTable* spl_filesystem_object_get_debug_info(zval *obj, int *is_temp T
 		efree(pnstr);
 	}
 	if (intern->type == SPL_FS_DIR) {
+#ifdef HAVE_GLOB
 		pnstr = spl_gen_private_prop_name(spl_ce_DirectoryIterator, "glob", sizeof("glob")-1, &pnlen TSRMLS_CC);
 		if (php_stream_is(intern->u.dir.dirp ,&php_glob_stream_ops)) {
 			add_assoc_stringl_ex(&zrv, pnstr, pnlen+1, intern->_path, intern->_path_len, 1);
@@ -582,6 +585,7 @@ static HashTable* spl_filesystem_object_get_debug_info(zval *obj, int *is_temp T
 			add_assoc_bool_ex(&zrv, pnstr, pnlen+1, 0);
 		}
 		efree(pnstr);
+#endif
 		pnstr = spl_gen_private_prop_name(spl_ce_RecursiveDirectoryIterator, "subPathName", sizeof("subPathName")-1, &pnlen TSRMLS_CC);
 		if (intern->u.dir.sub_path) {
 			add_assoc_stringl_ex(&zrv, pnstr, pnlen+1, intern->u.dir.sub_path, intern->u.dir.sub_path_len, 1);
@@ -647,12 +651,16 @@ void spl_filesystem_object_construct(INTERNAL_FUNCTION_PARAMETERS, long ctor_fla
 
 	intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
 	intern->flags = flags;
+#ifdef HAVE_GLOB
 	if (SPL_HAS_FLAG(ctor_flags, DIT_CTOR_GLOB) && strstr(path, "glob://") != path) {
 		spprintf(&path, 0, "glob://%s", path);
 		spl_filesystem_dir_open(intern, path TSRMLS_CC);
 		efree(path);
-	} else {
+	} else
+#endif
+	{
 		spl_filesystem_dir_open(intern, path TSRMLS_CC);
+
 	}
 
 	intern->u.dir.is_recursive = instanceof_function(intern->std.ce, spl_ce_RecursiveDirectoryIterator TSRMLS_CC) ? 1 : 0;
@@ -841,6 +849,78 @@ SPL_METHOD(DirectoryIterator, getFilename)
 }
 /* }}} */
 
+/* {{{ proto string SplFileInfo::getExtension()
+   Returns file extension component of path */
+SPL_METHOD(SplFileInfo, getExtension)
+{
+	spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+	char *fname = NULL;
+	const char *p;
+	size_t flen;
+	int path_len, idx;
+
+	if (zend_parse_parameters_none() == FAILURE) {
+		return;
+	}
+
+	spl_filesystem_object_get_path(intern, &path_len TSRMLS_CC);
+
+	if (path_len && path_len < intern->file_name_len) {
+		fname = intern->file_name + path_len + 1;
+		flen = intern->file_name_len - (path_len + 1);
+	} else {
+		fname = intern->file_name;
+		flen = intern->file_name_len;
+	}
+
+	php_basename(fname, flen, NULL, 0, &fname, &flen TSRMLS_CC);
+
+	p = zend_memrchr(fname, '.', flen);
+	if (p) {
+		idx = p - fname;
+		RETVAL_STRINGL(fname + idx + 1, flen - idx - 1, 1);
+		efree(fname);
+		return;
+	} else {
+		if (fname) {
+			efree(fname);
+		}
+		RETURN_EMPTY_STRING();
+	}
+}
+/* }}}*/
+
+/* {{{ proto string DirectoryIterator::getExtension()
+   Returns the file extension component of path */
+SPL_METHOD(DirectoryIterator, getExtension)
+{
+	spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+	char *fname = NULL;
+	const char *p;
+	size_t flen;
+	int idx;
+
+	if (zend_parse_parameters_none() == FAILURE) {
+		return;
+	}
+
+	php_basename(intern->u.dir.entry.d_name, strlen(intern->u.dir.entry.d_name), NULL, 0, &fname, &flen TSRMLS_CC);
+
+	p = zend_memrchr(fname, '.', flen);
+	if (p) {
+		idx = p - fname;
+		RETVAL_STRINGL(fname + idx + 1, flen - idx - 1, 1);
+		efree(fname);
+		return;
+	} else {
+		if (fname) {
+			efree(fname);
+		}
+		RETURN_EMPTY_STRING();
+	}
+}
+/* }}} */
+
 /* {{{ proto string SplFileInfo::getBasename([string $suffix]) U
    Returns filename component of path */
 SPL_METHOD(SplFileInfo, getBasename)
@@ -1439,6 +1519,7 @@ SPL_METHOD(RecursiveDirectoryIterator, __construct)
 }
 /* }}} */
 
+#ifdef HAVE_GLOB
 /* {{{ proto int GlobIterator::__construct(string path [, int flags])
  Cronstructs a new dir iterator from a glob expression (no glob:// needed). */
 SPL_METHOD(GlobIterator, __construct)
@@ -1465,6 +1546,7 @@ SPL_METHOD(GlobIterator, count)
 	}
 }
 /* }}} */
+#endif /* HAVE_GLOB */
 
 /* {{{ forward declarations to the iterator handlers */
 static void spl_filesystem_dir_it_dtor(zend_object_iterator *iter TSRMLS_DC);
@@ -1514,7 +1596,9 @@ static void spl_filesystem_dir_it_dtor(zend_object_iterator *iter TSRMLS_DC)
 
 	iterator->intern.data = NULL; /* mark as unused */
 	zval_ptr_dtor(&iterator->current);
-	zval_ptr_dtor(&zfree);
+	if (zfree) {
+		zval_ptr_dtor(&zfree);
+	}
 }
 /* }}} */
 
@@ -1776,6 +1860,7 @@ static const zend_function_entry spl_SplFileInfo_functions[] = {
 	SPL_ME(SplFileInfo,       __construct,   arginfo_info___construct, ZEND_ACC_PUBLIC)
 	SPL_ME(SplFileInfo,       getPath,       arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
 	SPL_ME(SplFileInfo,       getFilename,   arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
+	SPL_ME(SplFileInfo,       getExtension,  arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
 	SPL_ME(SplFileInfo,       getBasename,   arginfo_optinalSuffix, ZEND_ACC_PUBLIC)
 	SPL_ME(SplFileInfo,       getPathname,   arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
 	SPL_ME(SplFileInfo,       getPerms,      arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
@@ -1819,6 +1904,7 @@ ZEND_END_ARG_INFO();
 static const zend_function_entry spl_DirectoryIterator_functions[] = {
 	SPL_ME(DirectoryIterator, __construct,   arginfo_dir___construct, ZEND_ACC_PUBLIC)
 	SPL_ME(DirectoryIterator, getFilename,   arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
+	SPL_ME(DirectoryIterator, getExtension,  arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
 	SPL_ME(DirectoryIterator, getBasename,   arginfo_optinalSuffix, ZEND_ACC_PUBLIC)
 	SPL_ME(DirectoryIterator, isDot,         arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
 	SPL_ME(DirectoryIterator, rewind,        arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
@@ -1864,11 +1950,13 @@ static const zend_function_entry spl_RecursiveDirectoryIterator_functions[] = {
 	{NULL, NULL, NULL}
 };
 
+#ifdef HAVE_GLOB
 static const zend_function_entry spl_GlobIterator_functions[] = {
 	SPL_ME(GlobIterator, __construct,   arginfo_r_dir___construct, ZEND_ACC_PUBLIC)
 	SPL_ME(GlobIterator, count,         arginfo_splfileinfo_void,  ZEND_ACC_PUBLIC)
 	{NULL, NULL, NULL}
 };
+#endif
 /* }}} */
 
 static int spl_filesystem_file_read(spl_filesystem_object *intern, int silent TSRMLS_DC) /* {{{ */
@@ -2824,8 +2912,10 @@ PHP_MINIT_FUNCTION(spl_directory)
 	REGISTER_SPL_SUB_CLASS_EX(RecursiveDirectoryIterator, FilesystemIterator, spl_filesystem_object_new, spl_RecursiveDirectoryIterator_functions);
 	REGISTER_SPL_IMPLEMENTS(RecursiveDirectoryIterator, RecursiveIterator);
 
+#ifdef HAVE_GLOB
 	REGISTER_SPL_SUB_CLASS_EX(GlobIterator, FilesystemIterator, spl_filesystem_object_new, spl_GlobIterator_functions);
 	REGISTER_SPL_IMPLEMENTS(GlobIterator, Countable);
+#endif
 
 	REGISTER_SPL_SUB_CLASS_EX(SplFileObject, SplFileInfo, spl_filesystem_object_new, spl_SplFileObject_functions);
 	REGISTER_SPL_IMPLEMENTS(SplFileObject, RecursiveIterator);
diff --git a/ext/spl/spl_directory.h b/ext/spl/spl_directory.h
index 404390e..1d97efe 100755
--- a/ext/spl/spl_directory.h
+++ b/ext/spl/spl_directory.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_directory.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spl_directory.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SPL_DIRECTORY_H
 #define SPL_DIRECTORY_H
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c
index c0baf46..da7effc 100644
--- a/ext/spl/spl_dllist.c
+++ b/ext/spl/spl_dllist.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_dllist.c 305335 2010-11-14 18:40:08Z felipe $ */
+/* $Id: spl_dllist.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
diff --git a/ext/spl/spl_dllist.h b/ext/spl/spl_dllist.h
index 08545b7..3bb8c28 100644
--- a/ext/spl/spl_dllist.h
+++ b/ext/spl/spl_dllist.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_dllist.h 293730 2010-01-19 13:24:02Z johannes $ */
+/* $Id: spl_dllist.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SPL_DLLIST_H
 #define SPL_DLLIST_H
diff --git a/ext/spl/spl_engine.c b/ext/spl/spl_engine.c
index e8edf6a..0e922c5 100755
--- a/ext/spl/spl_engine.c
+++ b/ext/spl/spl_engine.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/spl/spl_engine.h b/ext/spl/spl_engine.h
index 7baea3a..f6c5f5f 100755
--- a/ext/spl/spl_engine.h
+++ b/ext/spl/spl_engine.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_engine.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spl_engine.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SPL_ENGINE_H
 #define SPL_ENGINE_H
diff --git a/ext/spl/spl_exceptions.c b/ext/spl/spl_exceptions.c
index b761be7..3cdcd1f 100755
--- a/ext/spl/spl_exceptions.c
+++ b/ext/spl/spl_exceptions.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_exceptions.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spl_exceptions.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
diff --git a/ext/spl/spl_exceptions.h b/ext/spl/spl_exceptions.h
index 20416d5..3f0808d 100755
--- a/ext/spl/spl_exceptions.h
+++ b/ext/spl/spl_exceptions.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_exceptions.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spl_exceptions.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SPL_EXCEPTIONS_H
 #define SPL_EXCEPTIONS_H
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index e81cfcc..71a12be 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: spl_fixedarray.c 305565 2010-11-19 20:07:32Z felipe $ */
+/* $Id: spl_fixedarray.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/spl/spl_fixedarray.h b/ext/spl/spl_fixedarray.h
index 224103a..a85ddb9 100644
--- a/ext/spl/spl_fixedarray.h
+++ b/ext/spl/spl_fixedarray.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: spl_fixedarray.h 293721 2010-01-19 10:44:36Z johannes $ */
+/* $Id: spl_fixedarray.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SPL_FIXEDARRAY_H
 #define SPL_FIXEDARRAY_H
diff --git a/ext/spl/spl_functions.c b/ext/spl/spl_functions.c
index 177a131..48481f3 100755
--- a/ext/spl/spl_functions.c
+++ b/ext/spl/spl_functions.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_functions.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spl_functions.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 	#include "config.h"
diff --git a/ext/spl/spl_functions.h b/ext/spl/spl_functions.h
index 6cfb8bf..eb96ff6 100755
--- a/ext/spl/spl_functions.h
+++ b/ext/spl/spl_functions.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_functions.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spl_functions.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_FUNCTIONS_H
 #define PHP_FUNCTIONS_H
diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c
index bb164d8..1001b3b 100644
--- a/ext/spl/spl_heap.c
+++ b/ext/spl/spl_heap.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_heap.c 305335 2010-11-14 18:40:08Z felipe $ */
+/* $Id: spl_heap.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
diff --git a/ext/spl/spl_heap.h b/ext/spl/spl_heap.h
index 3a309ca..43bba03 100644
--- a/ext/spl/spl_heap.h
+++ b/ext/spl/spl_heap.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_heap.h 293721 2010-01-19 10:44:36Z johannes $ */
+/* $Id: spl_heap.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SPL_HEAP_H
 #define SPL_HEAP_H
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 40c747f..e69eb81 100755
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_iterators.c 305335 2010-11-14 18:40:08Z felipe $ */
+/* $Id: spl_iterators.c 308503 2011-02-20 16:09:50Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -2739,7 +2739,7 @@ SPL_METHOD(CachingIterator, setFlags)
 		zend_throw_exception(spl_ce_InvalidArgumentException, "Unsetting flag TOSTRING_USE_INNER is not possible", 0 TSRMLS_CC);
 		return;
 	}
-	if ((flags && CIT_FULL_CACHE) != 0 && (intern->u.caching.flags & CIT_FULL_CACHE) == 0) {
+	if ((flags & CIT_FULL_CACHE) != 0 && (intern->u.caching.flags & CIT_FULL_CACHE) == 0) {
 		/* clear on (re)enable */
 		zend_hash_clean(HASH_OF(intern->u.caching.zcache));
 	}
diff --git a/ext/spl/spl_iterators.h b/ext/spl/spl_iterators.h
index 4464e09..dadd3a5 100755
--- a/ext/spl/spl_iterators.h
+++ b/ext/spl/spl_iterators.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_iterators.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spl_iterators.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SPL_ITERATORS_H
 #define SPL_ITERATORS_H
diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c
index cd5fb9f..b418530 100755
--- a/ext/spl/spl_observer.c
+++ b/ext/spl/spl_observer.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is SplSubject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_observer.c 305335 2010-11-14 18:40:08Z felipe $ */
+/* $Id: spl_observer.c 308784 2011-03-01 00:13:23Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -485,6 +485,36 @@ SPL_METHOD(SplObjectStorage, removeAll)
 	RETURN_LONG(zend_hash_num_elements(&intern->storage));
 } /* }}} */
 
+/* {{{ proto bool SplObjectStorage::removeAllExcept(SplObjectStorage $os)
+ Remove elements not common to both this SplObjectStorage instance and $os */
+SPL_METHOD(SplObjectStorage, removeAllExcept)
+{
+	zval *obj;
+	spl_SplObjectStorage *intern = (spl_SplObjectStorage *)zend_object_store_get_object(getThis() TSRMLS_CC);
+	spl_SplObjectStorage *other;
+	spl_SplObjectStorageElement *element;
+
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &obj, spl_ce_SplObjectStorage) == FAILURE) {
+		return;
+	}
+
+	other = (spl_SplObjectStorage *)zend_object_store_get_object(obj TSRMLS_CC);
+
+	zend_hash_internal_pointer_reset(&intern->storage);
+	while (zend_hash_get_current_data(&intern->storage, (void **)&element) == SUCCESS) {
+		if (!spl_object_storage_contains(other, element->obj TSRMLS_CC)) {
+			spl_object_storage_detach(intern, element->obj TSRMLS_CC);
+		}
+		zend_hash_move_forward(&intern->storage);
+	}
+
+	zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
+	intern->index = 0;
+
+	RETURN_LONG(zend_hash_num_elements(&intern->storage));
+}
+/* }}} */
+
 /* {{{ proto bool SplObjectStorage::contains($obj)
  Determine whethe an object is contained in the storage */
 SPL_METHOD(SplObjectStorage, contains)
@@ -813,11 +843,6 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetGet, 0, 0, 1)
 	ZEND_ARG_INFO(0, object)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetSet, 0, 0, 2)
-	ZEND_ARG_INFO(0, object)
-	ZEND_ARG_INFO(0, info)
-ZEND_END_ARG_INFO()
-
 ZEND_BEGIN_ARG_INFO(arginfo_splobject_void, 0)
 ZEND_END_ARG_INFO()
 
@@ -827,6 +852,7 @@ static const zend_function_entry spl_funcs_SplObjectStorage[] = {
 	SPL_ME(SplObjectStorage,  contains,    arginfo_Object,        0)
 	SPL_ME(SplObjectStorage,  addAll,      arginfo_Object,        0)
 	SPL_ME(SplObjectStorage,  removeAll,   arginfo_Object,        0)
+	SPL_ME(SplObjectStorage,  removeAllExcept, arginfo_Object,    0)
 	SPL_ME(SplObjectStorage,  getInfo,     arginfo_splobject_void,0)
 	SPL_ME(SplObjectStorage,  setInfo,     arginfo_setInfo,       0)
 	/* Countable */
@@ -842,7 +868,7 @@ static const zend_function_entry spl_funcs_SplObjectStorage[] = {
 	SPL_ME(SplObjectStorage,  serialize,   arginfo_splobject_void,0)
 	/* ArrayAccess */
 	SPL_MA(SplObjectStorage, offsetExists, SplObjectStorage, contains, arginfo_offsetGet, 0)
-	SPL_MA(SplObjectStorage, offsetSet,    SplObjectStorage, attach,   arginfo_offsetSet, 0)
+	SPL_MA(SplObjectStorage, offsetSet,    SplObjectStorage, attach,   arginfo_attach, 0)
 	SPL_MA(SplObjectStorage, offsetUnset,  SplObjectStorage, detach,   arginfo_offsetGet, 0)
 	SPL_ME(SplObjectStorage, offsetGet,    arginfo_offsetGet,     0)
 	{NULL, NULL, NULL}
diff --git a/ext/spl/spl_observer.h b/ext/spl/spl_observer.h
index cbe25d6..ef246a0 100755
--- a/ext/spl/spl_observer.h
+++ b/ext/spl/spl_observer.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_observer.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spl_observer.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SPL_OBSERVER_H
 #define SPL_OBSERVER_H
diff --git a/ext/spl/tests/DirectoryIterator_getExtension_basic.phpt b/ext/spl/tests/DirectoryIterator_getExtension_basic.phpt
new file mode 100644
index 0000000..20ef3bf
--- /dev/null
+++ b/ext/spl/tests/DirectoryIterator_getExtension_basic.phpt
@@ -0,0 +1,51 @@
+--TEST--
+SPL: DirectoryIterator::getExtension() basic test
+--FILE--
+<?php
+$dir = __DIR__ . DIRECTORY_SEPARATOR . md5('DirectoryIterator::getExtension') . DIRECTORY_SEPARATOR;
+mkdir($dir);
+
+$files = array('test.txt', 'test.extension', 'test..', 'test.', 'test');
+foreach ($files as $file) {
+    touch($dir . $file);
+}
+
+$dit_exts = array();
+$nfo_exts = array();
+$skip = array('.', '..');
+
+foreach (new DirectoryIterator($dir) as $file) {
+    if (in_array($file->getFilename(), $skip)) {
+        continue;
+    }
+    $dit_exts[] = $file->getExtension();
+    $nfo_exts[] = pathinfo($file->getFilename(), PATHINFO_EXTENSION);
+}
+var_dump($dit_exts === $nfo_exts);
+sort($dit_exts);
+var_dump($dit_exts);
+?>
+--CLEAN--
+<?php
+$dir   = __DIR__ . DIRECTORY_SEPARATOR . md5('DirectoryIterator::getExtension') . DIRECTORY_SEPARATOR;
+$files = array('test.txt', 'test.extension', 'test..', 'test.', 'test');
+foreach ($files as $file) {
+    unlink($dir . $file);
+}
+rmdir($dir);
+?>
+--EXPECTF--
+bool(true)
+array(5) {
+  [0]=>
+  string(0) ""
+  [1]=>
+  string(0) ""
+  [2]=>
+  string(0) ""
+  [3]=>
+  string(9) "extension"
+  [4]=>
+  string(3) "txt"
+}
+
diff --git a/ext/spl/tests/SplFileInfo_getExtension_basic.phpt b/ext/spl/tests/SplFileInfo_getExtension_basic.phpt
new file mode 100644
index 0000000..b47b6bb
--- /dev/null
+++ b/ext/spl/tests/SplFileInfo_getExtension_basic.phpt
@@ -0,0 +1,31 @@
+--TEST--
+SPL: SplFileInfo::getExtension() basic test
+--FILE--
+<?php
+$file = md5('SplFileInfo::getExtension');
+$exts = array('.txt', '.extension', '..', '.', '');
+foreach ($exts as $ext) {
+    touch($file . $ext);
+    $info = new SplFileInfo($file . $ext);
+    var_dump($info->getExtension(), pathinfo($file . $ext, PATHINFO_EXTENSION));
+}
+?>
+--CLEAN--
+<?php
+$file = md5('SplFileInfo::getExtension');
+$exts = array('.txt', '.extension', '..', '.', '');
+foreach ($exts as $ext) {
+    unlink($file . $ext);
+}
+?>
+--EXPECTF--
+string(3) "txt"
+string(3) "txt"
+string(9) "extension"
+string(9) "extension"
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt
index ba53a18..abfe5f2 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt
@@ -2,7 +2,7 @@
 SplFileObject::fgetcsv default path
 --FILE--
 <?php
-$fp = fopen('SplFileObject::fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
 fputcsv($fp, array(
 	'field1',
 	'field2',
@@ -11,12 +11,12 @@ fputcsv($fp, array(
 ));
 fclose($fp);
 
-$fo = new SplFileObject('SplFileObject::fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
 var_dump($fo->fgetcsv());
 ?>
 --CLEAN--
 <?php
-unlink('SplFileObject::fgetcsv.csv');
+unlink('SplFileObject__fgetcsv.csv');
 ?>
 --EXPECTF--
 array(4) {
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt
index 38b32c2..32705f0 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt
@@ -2,7 +2,7 @@
 SplFileObject::fgetcsv with alternative delimeter
 --FILE--
 <?php
-$fp = fopen('SplFileObject::fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
 fputcsv($fp, array(
 	'field1',
 	'field2',
@@ -11,12 +11,12 @@ fputcsv($fp, array(
 ), '|');
 fclose($fp);
 
-$fo = new SplFileObject('SplFileObject::fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
 var_dump($fo->fgetcsv('|'));
 ?>
 --CLEAN--
 <?php
-unlink('SplFileObject::fgetcsv.csv');
+unlink('SplFileObject__fgetcsv.csv');
 ?>
 --EXPECTF--
 array(4) {
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt
index 42677cc..942c761 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt
@@ -2,7 +2,7 @@
 SplFileObject::fgetcsv with alternative delimeter
 --FILE--
 <?php
-$fp = fopen('SplFileObject::fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
 fputcsv($fp, array(
 	'field1',
 	'field2',
@@ -11,12 +11,12 @@ fputcsv($fp, array(
 ), '|');
 fclose($fp);
 
-$fo = new SplFileObject('SplFileObject::fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
 var_dump($fo->fgetcsv('invalid'));
 ?>
 --CLEAN--
 <?php
-unlink('SplFileObject::fgetcsv.csv');
+unlink('SplFileObject__fgetcsv.csv');
 ?>
 --EXPECTF--
 Warning: SplFileObject::fgetcsv(): delimiter must be a character in %s on line %d
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt
index ab071ac..ee24972 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt
@@ -2,7 +2,7 @@
 SplFileObject::fgetcsv with alternative delimeter
 --FILE--
 <?php
-$fp = fopen('SplFileObject::fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
 fputcsv($fp, array(
 	'field1',
 	'field2',
@@ -11,12 +11,12 @@ fputcsv($fp, array(
 ), ',', '"');
 fclose($fp);
 
-$fo = new SplFileObject('SplFileObject::fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
 var_dump($fo->fgetcsv(',', '"'));
 ?>
 --CLEAN--
 <?php
-unlink('SplFileObject::fgetcsv.csv');
+unlink('SplFileObject__fgetcsv.csv');
 ?>
 --EXPECTF--
 array(4) {
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt
index afc8ad3..5430e53 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt
@@ -2,7 +2,7 @@
 SplFileObject::fgetcsv with alternative delimeter
 --FILE--
 <?php
-$fp = fopen('SplFileObject::fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
 fputcsv($fp, array(
 	'field1',
 	'field2',
@@ -11,12 +11,12 @@ fputcsv($fp, array(
 ), ',', '"');
 fclose($fp);
 
-$fo = new SplFileObject('SplFileObject::fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
 var_dump($fo->fgetcsv(',', 'invalid'));
 ?>
 --CLEAN--
 <?php
-unlink('SplFileObject::fgetcsv.csv');
+unlink('SplFileObject__fgetcsv.csv');
 ?>
 --EXPECTF--
 Warning: SplFileObject::fgetcsv(): enclosure must be a character in %s on line %d
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_escape_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_escape_basic.phpt
index 1e2e273..96c0290 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_escape_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_escape_basic.phpt
@@ -2,16 +2,16 @@
 SplFileObject::fgetcsv with alternative delimeter
 --FILE--
 <?php
-$fp = fopen('SplFileObject::fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
 fwrite($fp, '"aaa","b""bb","ccc"');
 fclose($fp);
 
-$fo = new SplFileObject('SplFileObject::fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
 var_dump($fo->fgetcsv(',', '"', '"'));
 ?>
 --CLEAN--
 <?php
-unlink('SplFileObject::fgetcsv.csv');
+unlink('SplFileObject__fgetcsv.csv');
 ?>
 --EXPECTF--
 array(3) {
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_escape_default.phpt b/ext/spl/tests/SplFileObject_fgetcsv_escape_default.phpt
index b3b6c7c..c628ac0 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_escape_default.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_escape_default.phpt
@@ -2,16 +2,16 @@
 SplFileObject::fgetcsv with default escape character
 --FILE--
 <?php
-$fp = fopen('SplFileObject::fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
 fwrite($fp, '"aa\"","bb","\"c"');
 fclose($fp);
 
-$fo = new SplFileObject('SplFileObject::fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
 var_dump($fo->fgetcsv());
 ?>
 --CLEAN--
 <?php
-unlink('SplFileObject::fgetcsv.csv');
+unlink('SplFileObject__fgetcsv.csv');
 ?>
 --EXPECTF--
 array(3) {
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt b/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt
index 8dcfc92..a570318 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt
@@ -2,16 +2,16 @@
 SplFileObject::fgetcsv with alternative delimeter
 --FILE--
 <?php
-$fp = fopen('SplFileObject::fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
 fwrite($fp, '"aaa","b""bb","ccc"');
 fclose($fp);
 
-$fo = new SplFileObject('SplFileObject::fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
 var_dump($fo->fgetcsv(',', '"', 'invalid'));
 ?>
 --CLEAN--
 <?php
-unlink('SplFileObject::fgetcsv.csv');
+unlink('SplFileObject__fgetcsv.csv');
 ?>
 --EXPECTF--
 Warning: SplFileObject::fgetcsv(): escape must be a character in %s on line %d
diff --git a/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt b/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt
index f8d518f..61741a8 100644
--- a/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt
+++ b/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt
@@ -9,6 +9,10 @@ if(file_exists($file)) {
 $obj = New SplFileObject($file,'w');
 $obj->fwrite('test_write',4);
 var_dump(file_get_contents($file));
+?>
+--CLEAN--
+<?php
+$file = dirname(__FILE__).'/SplFileObject_fwrite_variation_001.txt';
 if(file_exists($file)) {
 	unlink($file);
 }
diff --git a/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt b/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt
index 47b1332..31399a0 100644
--- a/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt
+++ b/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt
@@ -9,6 +9,10 @@ if(file_exists($file)) {
 $obj = New SplFileObject($file,'w');
 $obj->fwrite('test_write',12);
 var_dump(file_get_contents($file));
+?>
+--CLEAN--
+<?php
+$file = dirname(__FILE__).'/SplFileObject_fwrite_variation_002.txt';
 if(file_exists($file)) {
 	unlink($file);
 }
diff --git a/ext/spl/tests/SplFileObject_fwrite_variation_003.phpt b/ext/spl/tests/SplFileObject_fwrite_variation_003.phpt
index 8e5c88e..429d2a6 100644
--- a/ext/spl/tests/SplFileObject_fwrite_variation_003.phpt
+++ b/ext/spl/tests/SplFileObject_fwrite_variation_003.phpt
@@ -10,6 +10,10 @@ if(file_exists($file)) {
 $obj = New SplFileObject($file,'w');
 $obj->fwrite('"test" \'write\'');
 var_dump(file_get_contents($file));
+?>
+--CLEAN--
+<?php
+$file = dirname(__FILE__).'/SplFileObject_fwrite_variation_002.txt';
 if(file_exists($file)) {
 	unlink($file);
 }
diff --git a/ext/spl/tests/SplObjectStorage_removeAllExcept_basic.phpt b/ext/spl/tests/SplObjectStorage_removeAllExcept_basic.phpt
new file mode 100644
index 0000000..7c8cb75
--- /dev/null
+++ b/ext/spl/tests/SplObjectStorage_removeAllExcept_basic.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Check that SplObjectStorage::removeUncommon functions when receiving proper input 
+--CREDITS--
+Matthew Turland (me at matthewturland.com)
+--FILE--
+<?php
+
+    $a = (object) 'a'; 
+    $b = (object) 'b'; 
+    $c = (object) 'c'; 
+
+   $foo = new SplObjectStorage;
+    $foo->attach($a);
+    $foo->attach($b);
+
+    $bar = new SplObjectStorage;
+    $bar->attach($b);
+    $bar->attach($c);
+
+    $foo->removeAllExcept($bar);
+    var_dump($foo->contains($a));
+    var_dump($foo->contains($b));
+
+?>
+--EXPECT--
+bool(false)
+bool(true)
diff --git a/ext/spl/tests/SplObjectStorage_removeAllExcept_invalid_parameter.phpt b/ext/spl/tests/SplObjectStorage_removeAllExcept_invalid_parameter.phpt
new file mode 100644
index 0000000..62e0dde
--- /dev/null
+++ b/ext/spl/tests/SplObjectStorage_removeAllExcept_invalid_parameter.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Check that SplObjectStorage::removeAllExcept generate a warning and returns NULL when passed non-object param
+--CREDITS--
+Matthew Turland (me at matthewturland.com)
+Based on work done at PHPNW Testfest 2009 by Simon Westcott (swestcott at gmail.com)
+--FILE--
+<?php
+
+$data_provider = array(
+   array(),
+   true,
+   "string",
+   12345,
+   1.2345,
+   NULL
+);
+
+foreach($data_provider as $input) {
+
+   $s = new SplObjectStorage();
+
+   var_dump($s->removeAllExcept($input));
+}
+
+?>
+--EXPECTF--
+Warning: SplObjectStorage::removeAllExcept() expects parameter 1 to be SplObjectStorage, array given in %s on line %d
+NULL
+
+Warning: SplObjectStorage::removeAllExcept() expects parameter 1 to be SplObjectStorage, boolean given in %s on line %d
+NULL
+
+Warning: SplObjectStorage::removeAllExcept() expects parameter 1 to be SplObjectStorage, %unicode_string_optional% given in %s on line %d
+NULL
+
+Warning: SplObjectStorage::removeAllExcept() expects parameter 1 to be SplObjectStorage, integer given in %s on line %d
+NULL
+
+Warning: SplObjectStorage::removeAllExcept() expects parameter 1 to be SplObjectStorage, double given in %s on line %d
+NULL
+
+Warning: SplObjectStorage::removeAllExcept() expects parameter 1 to be SplObjectStorage, null given in %s on line %d
+NULL
+
diff --git a/ext/spl/tests/bug42364.phpt b/ext/spl/tests/bug42364.phpt
index ad0bd8f..971fcc5 100644
--- a/ext/spl/tests/bug42364.phpt
+++ b/ext/spl/tests/bug42364.phpt
@@ -19,7 +19,6 @@ if ($count > 0) {
 }
 ?>
 ===DONE===
-?>
 --EXPECTF--
 Found %i entries!
 ===DONE===
diff --git a/ext/spl/tests/bug53515.phpt b/ext/spl/tests/bug53515.phpt
new file mode 100644
index 0000000..f99840e
--- /dev/null
+++ b/ext/spl/tests/bug53515.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Bug #53515 (property_exists incorrect on ArrayObject null and 0 values)
+--FILE--
+<?php
+
+$a = array('a' => 1, 'b'=> true, 'c' => 0, 'd' => null, 'e' => false, 'f' => array());
+$o = new ArrayObject($a, ArrayObject::ARRAY_AS_PROPS);
+
+$a['z'] = '';
+$a[''] = '';
+
+foreach ($a as $key => $value) {
+ echo $key . ': ' . (is_null($value) ? 'null' : $value) . 
+    ' array_key_exists: ' . (array_key_exists($key, $a) ? 'true' : 'false') . 
+    ' property_exists: ' . (property_exists($o, $key) ? 'true' : 'false'),"\n";
+}
+
+?>
+--EXPECT--
+a: 1 array_key_exists: true property_exists: true
+b: 1 array_key_exists: true property_exists: true
+c: 0 array_key_exists: true property_exists: true
+d: null array_key_exists: true property_exists: true
+e:  array_key_exists: true property_exists: true
+f: Array array_key_exists: true property_exists: true
+z:  array_key_exists: true property_exists: false
+:  array_key_exists: true property_exists: false
diff --git a/ext/spl/tests/dit_001.phpt b/ext/spl/tests/dit_001.phpt
index 2b0e50e..a56166d 100755
--- a/ext/spl/tests/dit_001.phpt
+++ b/ext/spl/tests/dit_001.phpt
@@ -1,5 +1,8 @@
 --TEST--
 SPL: Problem with casting to string
+--SKIPIF--
+<?php
+if (!defined('GLOB_ERR')) print "skip";
 --FILE--
 <?php
 $d = new DirectoryIterator('.');
diff --git a/ext/spl/tests/dit_001_noglob.phpt b/ext/spl/tests/dit_001_noglob.phpt
new file mode 100644
index 0000000..acb2092
--- /dev/null
+++ b/ext/spl/tests/dit_001_noglob.phpt
@@ -0,0 +1,27 @@
+--TEST--
+SPL: Problem with casting to string (no glob version)
+--SKIPIF--
+<?php
+if (defined('GLOB_ERR')) print "skip";
+--FILE--
+<?php
+$d = new DirectoryIterator('.');
+var_dump($d);
+var_dump(is_string($d));
+preg_match('/x/', $d);
+var_dump(is_string($d));
+?>
+===DONE===
+--EXPECTF--
+object(DirectoryIterator)#%d (3) {
+  %s"pathName"%s"SplFileInfo":private]=>
+  %s(%d) ".%c%s"
+  %s"fileName"%s"SplFileInfo":private]=>
+  %s(%d) "%s"
+  %s"subPathName"%s"RecursiveDirectoryIterator":private]=>
+  %s(0) ""
+}
+bool(false)
+bool(false)
+===DONE===
+
diff --git a/ext/spl/tests/dit_002.phpt b/ext/spl/tests/dit_002.phpt
index 5e825a1..a266542 100755
--- a/ext/spl/tests/dit_002.phpt
+++ b/ext/spl/tests/dit_002.phpt
@@ -1,7 +1,7 @@
 --TEST--
 SPL: DirectoryIterator defaults
 --SKIPIF--
-<?php if (!extension_loaded("spl") || !extension_loaded('reflection')) print "skip"; ?>
+<?php if (!extension_loaded("spl") || !extension_loaded('reflection') || !defined('GLOB_ERR')) print "skip"; ?>
 --FILE--
 <?php
 
diff --git a/ext/sqlite/pdo_sqlite2.c b/ext/sqlite/pdo_sqlite2.c
index 8b7a93f..07a6d9c 100644
--- a/ext/sqlite/pdo_sqlite2.c
+++ b/ext/sqlite/pdo_sqlite2.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_sqlite2.c 300612 2010-06-20 14:12:06Z felipe $ */
+/* $Id: pdo_sqlite2.c 306939 2011-01-01 02:19:59Z felipe $ */
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
diff --git a/ext/sqlite/php_sqlite.h b/ext/sqlite/php_sqlite.h
index 439cbf5..aac75f0 100644
--- a/ext/sqlite/php_sqlite.h
+++ b/ext/sqlite/php_sqlite.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    |          Marcus Boerger <helly at php.net>                              |
    +----------------------------------------------------------------------+
 
-   $Id: php_sqlite.h 293036 2010-01-03 09:23:27Z sebastian $ 
+   $Id: php_sqlite.h 306939 2011-01-01 02:19:59Z felipe $ 
 */
 
 #ifndef PHP_SQLITE_H
diff --git a/ext/sqlite/sess_sqlite.c b/ext/sqlite/sess_sqlite.c
index 443f621..ca082bc 100644
--- a/ext/sqlite/sess_sqlite.c
+++ b/ext/sqlite/sess_sqlite.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: sess_sqlite.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: sess_sqlite.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/sqlite/sqlite.c b/ext/sqlite/sqlite.c
index 964c9a7..f01e0b7 100644
--- a/ext/sqlite/sqlite.c
+++ b/ext/sqlite/sqlite.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    |          Marcus Boerger <helly at php.net>                              |
    +----------------------------------------------------------------------+
 
-   $Id: sqlite.c 305507 2010-11-18 15:22:22Z pajoye $
+   $Id: sqlite.c 306939 2011-01-01 02:19:59Z felipe $
 */
 
 #ifdef HAVE_CONFIG_H
@@ -1458,7 +1458,7 @@ PHP_MINFO_FUNCTION(sqlite)
 {
 	php_info_print_table_start();
 	php_info_print_table_header(2, "SQLite support", "enabled");
-	php_info_print_table_row(2, "PECL Module version", PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c 305507 2010-11-18 15:22:22Z pajoye $");
+	php_info_print_table_row(2, "PECL Module version", PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c 306939 2011-01-01 02:19:59Z felipe $");
 	php_info_print_table_row(2, "SQLite Library", sqlite_libversion());
 	php_info_print_table_row(2, "SQLite Encoding", sqlite_libencoding());
 	php_info_print_table_end();
@@ -1641,8 +1641,10 @@ PHP_FUNCTION(sqlite_open)
 	}
 
 	if (strlen(filename) != filename_len) {
+		zend_restore_error_handling(&error_handling TSRMLS_CC);
 		RETURN_FALSE;
 	}
+
 	if (strncmp(filename, ":memory:", sizeof(":memory:") - 1)) {
 		/* resolve the fully-qualified path name to use as the hash key */
 		if (!(fullpath = expand_filepath(filename, NULL TSRMLS_CC))) {
@@ -1697,6 +1699,7 @@ PHP_FUNCTION(sqlite_factory)
 	}
 
 	if (strlen(filename) != filename_len) {
+		zend_restore_error_handling(&error_handling TSRMLS_CC);
 		RETURN_FALSE;
 	}
 
diff --git a/ext/sqlite3/CREDITS b/ext/sqlite3/CREDITS
index 6b2d3f3..2bea9b8 100644
--- a/ext/sqlite3/CREDITS
+++ b/ext/sqlite3/CREDITS
@@ -1,2 +1,2 @@
 SQLite3
-Scott MacVicar
+Scott MacVicar, Ilia Alshanetsky
diff --git a/ext/sqlite3/config.w32 b/ext/sqlite3/config.w32
index 9b36073..b00f4da 100644
--- a/ext/sqlite3/config.w32
+++ b/ext/sqlite3/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 289692 2009-10-16 02:22:48Z scottmac $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_WITH("sqlite3", "SQLite 3 support", "no");
@@ -10,4 +10,5 @@ if (PHP_SQLITE3 != "no") {
 	ADD_SOURCES(configure_module_dirname + "/libsqlite", "sqlite3.c", "sqlite3");
 
 	AC_DEFINE("HAVE_SQLITE3", 1, "SQLite support");
+	PHP_INSTALL_HEADERS("ext/sqlite3", "libsqlite/sqlite3.h");
 }
diff --git a/ext/sqlite3/libsqlite/sqlite3.c b/ext/sqlite3/libsqlite/sqlite3.c
index 55fcebc..51b0a6a 100644
--- a/ext/sqlite3/libsqlite/sqlite3.c
+++ b/ext/sqlite3/libsqlite/sqlite3.c
@@ -4,11 +4,11 @@
 
 /******************************************************************************
 ** This file is an amalgamation of many separate C source files from SQLite
-** version 3.7.3.  By combining all the individual C code files into this 
+** version 3.7.4.  By combining all the individual C code files into this 
 ** single large file, the entire code can be compiled as a one translation
 ** unit.  This allows many compilers to do optimizations that would not be
 ** possible if the files were compiled separately.  Performance improvements
-** of 5% are more are commonly seen when SQLite is compiled as a single
+** of 5% or more are commonly seen when SQLite is compiled as a single
 ** translation unit.
 **
 ** This file is all you need to compile SQLite.  To use SQLite in other
@@ -654,9 +654,9 @@ extern "C" {
 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
 ** [sqlite_version()] and [sqlite_source_id()].
 */
-#define SQLITE_VERSION        "3.7.3"
-#define SQLITE_VERSION_NUMBER 3007003
-#define SQLITE_SOURCE_ID      "2010-10-08 02:34:02 2677848087c9c090efb17c1893e77d6136a9111d"
+#define SQLITE_VERSION        "3.7.4"
+#define SQLITE_VERSION_NUMBER 3007004
+#define SQLITE_SOURCE_ID      "2010-12-07 20:14:09 a586a4deeb25330037a49df295b36aaf624d0f45"
 
 /*
 ** CAPI3REF: Run-Time Library Version Numbers
@@ -1089,6 +1089,18 @@ SQLITE_API int sqlite3_exec(
 ** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
 ** If the lower four bits equal SQLITE_SYNC_FULL, that means
 ** to use Mac OS X style fullsync instead of fsync().
+**
+** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
+** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL
+** settings.  The [synchronous pragma] determines when calls to the
+** xSync VFS method occur and applies uniformly across all platforms.
+** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
+** energetic or rigorous or forceful the sync operations are and
+** only make a difference on Mac OSX for the default SQLite code.
+** (Third-party VFS implementations might also make the distinction
+** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
+** operating systems natively supported by SQLite, only Mac OSX
+** cares about the difference.)
 */
 #define SQLITE_SYNC_NORMAL        0x00002
 #define SQLITE_SYNC_FULL          0x00003
@@ -1257,6 +1269,8 @@ struct sqlite3_io_methods {
 #define SQLITE_LAST_ERRNO             4
 #define SQLITE_FCNTL_SIZE_HINT        5
 #define SQLITE_FCNTL_CHUNK_SIZE       6
+#define SQLITE_FCNTL_FILE_POINTER     7
+
 
 /*
 ** CAPI3REF: Mutex Handle
@@ -3181,6 +3195,20 @@ SQLITE_API int sqlite3_prepare16_v2(
 SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);
 
 /*
+** CAPI3REF: Determine If An SQL Statement Writes The Database
+**
+** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
+** the [prepared statement] X is [SELECT] statement and false (zero) if
+** X is an [INSERT], [UPDATE], [DELETE], CREATE, DROP, [ANALYZE],
+** [ALTER], or [REINDEX] statement.
+** If X is a NULL pointer or any other kind of statement, including but
+** not limited to [ATTACH], [DETACH], [COMMIT], [ROLLBACK], [RELEASE],
+** [SAVEPOINT], [PRAGMA], or [VACUUM] the result of sqlite3_stmt_readonly(X) is
+** undefined.
+*/
+SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
+
+/*
 ** CAPI3REF: Dynamically Typed Value Object
 ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value}
 **
@@ -3279,7 +3307,10 @@ typedef struct sqlite3_context sqlite3_context;
 **
 ** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and
 ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or
-** string after SQLite has finished with it. ^If the fifth argument is
+** string after SQLite has finished with it.  ^The destructor is called
+** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(),
+** sqlite3_bind_text(), or sqlite3_bind_text16() fails.  
+** ^If the fifth argument is
 ** the special value [SQLITE_STATIC], then SQLite assumes that the
 ** information is in static, unmanaged space and does not need to be freed.
 ** ^If the fifth argument has the value [SQLITE_TRANSIENT], then
@@ -3919,12 +3950,15 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
 ** SQL function or aggregate, pass NULL poiners for all three function
 ** callbacks.
 **
-** ^If the tenth parameter to sqlite3_create_function_v2() is not NULL,
-** then it is invoked when the function is deleted, either by being
-** overloaded or when the database connection closes.
-** ^When the destructure callback of the tenth parameter is invoked, it
-** is passed a single argument which is a copy of the pointer which was
-** the fifth parameter to sqlite3_create_function_v2().
+** ^(If the tenth parameter to sqlite3_create_function_v2() is not NULL,
+** then it is destructor for the application data pointer. 
+** The destructor is invoked when the function is deleted, either by being
+** overloaded or when the database connection closes.)^
+** ^The destructor is also invoked if the call to
+** sqlite3_create_function_v2() fails.
+** ^When the destructor callback of the tenth parameter is invoked, it
+** is passed a single argument which is a copy of the application data 
+** pointer which was the fifth parameter to sqlite3_create_function_v2().
 **
 ** ^It is permitted to register multiple implementations of the same
 ** functions with the same name but with either differing numbers of
@@ -4388,6 +4422,15 @@ SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n);
 ** calls to the collation creation functions or when the
 ** [database connection] is closed using [sqlite3_close()].
 **
+** ^The xDestroy callback is <u>not</u> called if the 
+** sqlite3_create_collation_v2() function fails.  Applications that invoke
+** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should 
+** check the return code and dispose of the application data pointer
+** themselves rather than expecting SQLite to deal with it for them.
+** This is different from every other SQLite interface.  The inconsistency 
+** is unfortunate but cannot be changed without breaking backwards 
+** compatibility.
+**
 ** See also:  [sqlite3_collation_needed()] and [sqlite3_collation_needed16()].
 */
 SQLITE_API int sqlite3_create_collation(
@@ -5142,7 +5185,9 @@ struct sqlite3_index_info {
 ** ^The sqlite3_create_module_v2() interface has a fifth parameter which
 ** is a pointer to a destructor for the pClientData.  ^SQLite will
 ** invoke the destructor function (if it is not NULL) when SQLite
-** no longer needs the pClientData pointer.  ^The sqlite3_create_module()
+** no longer needs the pClientData pointer.  ^The destructor will also
+** be invoked if the call to sqlite3_create_module_v2() fails.
+** ^The sqlite3_create_module()
 ** interface is equivalent to sqlite3_create_module_v2() with a NULL
 ** destructor.
 */
@@ -5326,6 +5371,30 @@ SQLITE_API int sqlite3_blob_open(
 );
 
 /*
+** CAPI3REF: Move a BLOB Handle to a New Row
+**
+** ^This function is used to move an existing blob handle so that it points
+** to a different row of the same database table. ^The new row is identified
+** by the rowid value passed as the second argument. Only the row can be
+** changed. ^The database, table and column on which the blob handle is open
+** remain the same. Moving an existing blob handle to a new row can be
+** faster than closing the existing handle and opening a new one.
+**
+** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] -
+** it must exist and there must be either a blob or text value stored in
+** the nominated column.)^ ^If the new row is not present in the table, or if
+** it does not contain a blob or text value, or if another error occurs, an
+** SQLite error code is returned and the blob handle is considered aborted.
+** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or
+** [sqlite3_blob_reopen()] on an aborted blob handle immediately return
+** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle
+** always returns zero.
+**
+** ^This function sets the database handle error code and message.
+*/
+SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
+
+/*
 ** CAPI3REF: Close A BLOB Handle
 **
 ** ^Closes an open [BLOB handle].
@@ -5732,7 +5801,7 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
 ** ^The [sqlite3_file_control()] interface makes a direct call to the
 ** xFileControl method for the [sqlite3_io_methods] object associated
 ** with a particular database identified by the second argument. ^The
-** name of the database "main" for the main database or "temp" for the
+** name of the database is "main" for the main database or "temp" for the
 ** TEMP database, or the name that appears after the AS keyword for
 ** databases that are added using the [ATTACH] SQL command.
 ** ^A NULL pointer can be used in place of "main" to refer to the
@@ -5742,6 +5811,12 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
 ** the xFileControl method.  ^The return value of the xFileControl
 ** method becomes the return value of this routine.
 **
+** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes
+** a pointer to the underlying [sqlite3_file] object to be written into
+** the space pointed to by the 4th parameter.  ^The SQLITE_FCNTL_FILE_POINTER
+** case is a short-circuit path which does not actually invoke the
+** underlying sqlite3_io_methods.xFileControl method.
+**
 ** ^If the second parameter (zDbName) does not match the name of any
 ** open database file, then SQLITE_ERROR is returned.  ^This error
 ** code is not remembered and will not be recalled by [sqlite3_errcode()]
@@ -7411,7 +7486,7 @@ SQLITE_PRIVATE int sqlite3BtreeOpen(
 
 SQLITE_PRIVATE int sqlite3BtreeClose(Btree*);
 SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree*,int);
-SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int);
+SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int,int);
 SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree*);
 SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int nPagesize, int nReserve, int eFix);
 SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree*);
@@ -7895,12 +7970,12 @@ typedef struct VdbeOpList VdbeOpList;
 #define OP_VRename                            132
 #define OP_VUpdate                            133
 #define OP_Pagecount                          134
-#define OP_Trace                              135
-#define OP_Noop                               136
-#define OP_Explain                            137
+#define OP_MaxPgcnt                           135
+#define OP_Trace                              136
+#define OP_Noop                               137
+#define OP_Explain                            138
 
 /* The following opcode values are never used */
-#define OP_NotUsed_138                        138
 #define OP_NotUsed_139                        139
 #define OP_NotUsed_140                        140
 
@@ -7933,7 +8008,7 @@ typedef struct VdbeOpList VdbeOpList;
 /* 104 */ 0x00, 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01,\
 /* 112 */ 0x08, 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02,\
 /* 120 */ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
-/* 128 */ 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x00,\
+/* 128 */ 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x02,\
 /* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04,\
 /* 144 */ 0x04, 0x04,}
 
@@ -8118,7 +8193,7 @@ SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *);
 SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager*, u32*, int);
 SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager*, int);
 SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager*, int);
-SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager*,int,int);
+SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager*,int,int,int);
 SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *, int);
 SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *, int);
 SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager*);
@@ -8983,13 +9058,14 @@ struct sqlite3 {
 #define SQLITE_ReadUncommitted 0x0080000  /* For shared-cache mode */
 #define SQLITE_LegacyFileFmt  0x00100000  /* Create new databases in format 1 */
 #define SQLITE_FullFSync      0x00200000  /* Use full fsync on the backend */
-#define SQLITE_LoadExtension  0x00400000  /* Enable load_extension */
+#define SQLITE_CkptFullFSync  0x00400000  /* Use full fsync for checkpoint */
 #define SQLITE_RecoveryMode   0x00800000  /* Ignore schema errors */
 #define SQLITE_ReverseOrder   0x01000000  /* Reverse unordered SELECTs */
 #define SQLITE_RecTriggers    0x02000000  /* Enable recursive triggers */
 #define SQLITE_ForeignKeys    0x04000000  /* Enforce foreign key constraints  */
 #define SQLITE_AutoIndex      0x08000000  /* Enable automatic indexes */
 #define SQLITE_PreferBuiltin  0x10000000  /* Preference to built-in funcs */
+#define SQLITE_LoadExtension  0x20000000  /* Enable load_extension */
 
 /*
 ** Bits of the sqlite3.flags field that are used by the
@@ -9002,6 +9078,7 @@ struct sqlite3 {
 #define SQLITE_IndexSearch    0x08        /* Disable indexes for searching */
 #define SQLITE_IndexCover     0x10        /* Disable index covering table */
 #define SQLITE_GroupByOrder   0x20        /* Disable GROUPBY cover of ORDERBY */
+#define SQLITE_FactorOutConst 0x40        /* Disable factoring out constants */
 #define SQLITE_OptMask        0xff        /* Mask of all disablable opts */
 
 /*
@@ -9890,6 +9967,9 @@ struct SrcList {
     u8 isPopulated;   /* Temporary table associated with SELECT is populated */
     u8 jointype;      /* Type of join between this able and the previous */
     u8 notIndexed;    /* True if there is a NOT INDEXED clause */
+#ifndef SQLITE_OMIT_EXPLAIN
+    u8 iSelectId;     /* If pSelect!=0, the id of the sub-select in EQP */
+#endif
     int iCursor;      /* The VDBE cursor number used to access this table */
     Expr *pOn;        /* The ON clause of a join */
     IdList *pUsing;   /* The USING clause of a join */
@@ -9928,6 +10008,7 @@ struct SrcList {
 struct WherePlan {
   u32 wsFlags;                   /* WHERE_* flags that describe the strategy */
   u32 nEq;                       /* Number of == constraints */
+  double nRow;                   /* Estimated number of rows (for EQP) */
   union {
     Index *pIdx;                   /* Index when WHERE_INDEXED is true */
     struct WhereTerm *pTerm;       /* WHERE clause term for OR-search */
@@ -10012,6 +10093,7 @@ struct WhereInfo {
   int nLevel;                    /* Number of nested loop */
   struct WhereClause *pWC;       /* Decomposition of the WHERE clause */
   double savedNQueryLoop;        /* pParse->nQueryLoop outside the WHERE loop */
+  double nRowOut;                /* Estimated number of output rows */
   WhereLevel a[1];               /* Information about each nest loop in WHERE */
 };
 
@@ -10087,6 +10169,7 @@ struct Select {
   Expr *pOffset;         /* OFFSET expression. NULL means not used. */
   int iLimit, iOffset;   /* Memory registers holding LIMIT & OFFSET counters */
   int addrOpenEphm[3];   /* OP_OpenEphem opcodes related to this select */
+  double nSelectRow;     /* Estimated number of result rows */
 };
 
 /*
@@ -10282,6 +10365,11 @@ struct Parse {
   int nHeight;            /* Expression tree height of current sub-select */
   Table *pZombieTab;      /* List of Table objects to delete after code gen */
   TriggerPrg *pTriggerPrg;    /* Linked list of coded triggers */
+
+#ifndef SQLITE_OMIT_EXPLAIN
+  int iSelectId;
+  int iNextSelectId;
+#endif
 };
 
 #ifdef SQLITE_OMIT_VIRTUALTABLE
@@ -10897,6 +10985,7 @@ SQLITE_PRIVATE int sqlite3FixExprList(DbFixer*, ExprList*);
 SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
 SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
 SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
+SQLITE_PRIVATE int sqlite3Atoi(const char*);
 SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *pData, int nChar);
 SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *pData, int nByte);
 SQLITE_PRIVATE int sqlite3Utf8Read(const u8*, const u8**);
@@ -11975,26 +12064,34 @@ typedef struct VdbeCursor VdbeCursor;
 ** restoring the state of the VM to as it was before the sub-program
 ** began executing.
 **
-** Frames are stored in a linked list headed at Vdbe.pParent. Vdbe.pParent
-** is the parent of the current frame, or zero if the current frame
-** is the main Vdbe program.
+** The memory for a VdbeFrame object is allocated and managed by a memory
+** cell in the parent (calling) frame. When the memory cell is deleted or
+** overwritten, the VdbeFrame object is not freed immediately. Instead, it
+** is linked into the Vdbe.pDelFrame list. The contents of the Vdbe.pDelFrame
+** list is deleted when the VM is reset in VdbeHalt(). The reason for doing
+** this instead of deleting the VdbeFrame immediately is to avoid recursive
+** calls to sqlite3VdbeMemRelease() when the memory cells belonging to the
+** child frame are released.
+**
+** The currently executing frame is stored in Vdbe.pFrame. Vdbe.pFrame is
+** set to NULL if the currently executing frame is the main program.
 */
 typedef struct VdbeFrame VdbeFrame;
 struct VdbeFrame {
   Vdbe *v;                /* VM this frame belongs to */
-  int pc;                 /* Program Counter */
-  Op *aOp;                /* Program instructions */
+  int pc;                 /* Program Counter in parent (calling) frame */
+  Op *aOp;                /* Program instructions for parent frame */
   int nOp;                /* Size of aOp array */
-  Mem *aMem;              /* Array of memory cells */
+  Mem *aMem;              /* Array of memory cells for parent frame */
   int nMem;               /* Number of entries in aMem */
-  VdbeCursor **apCsr;     /* Element of Vdbe cursors */
+  VdbeCursor **apCsr;     /* Array of Vdbe cursors for parent frame */
   u16 nCursor;            /* Number of entries in apCsr */
   void *token;            /* Copy of SubProgram.token */
   int nChildMem;          /* Number of memory cells for child frame */
   int nChildCsr;          /* Number of cursors for child frame */
   i64 lastRowid;          /* Last insert rowid (sqlite3.lastRowid) */
   int nChange;            /* Statement changes (Vdbe.nChanges)     */
-  VdbeFrame *pParent;     /* Parent of this frame */
+  VdbeFrame *pParent;     /* Parent of this frame, or NULL if parent is main */
 };
 
 #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
@@ -12211,6 +12308,7 @@ struct Vdbe {
   FILE *trace;            /* Write an execution trace here, if not NULL */
 #endif
   VdbeFrame *pFrame;      /* Parent frame */
+  VdbeFrame *pDelFrame;   /* List of frame objects to free on VM reset */
   int nFrame;             /* Number of frames in pFrame list */
   u32 expmask;            /* Binding to these vars invalidates VM */
   SubProgram *pProgram;   /* Linked list of all sub-programs used by VM */
@@ -20400,6 +20498,16 @@ SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){
 }
 
 /*
+** Return a 32-bit integer value extracted from a string.  If the
+** string is not an integer, just return 0.
+*/
+SQLITE_PRIVATE int sqlite3Atoi(const char *z){
+  int x = 0;
+  if( z ) sqlite3GetInt32(z, &x);
+  return x;
+}
+
+/*
 ** The variable-length integer encoding is as follows:
 **
 ** KEY:
@@ -21328,10 +21436,10 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
      /* 132 */ "VRename",
      /* 133 */ "VUpdate",
      /* 134 */ "Pagecount",
-     /* 135 */ "Trace",
-     /* 136 */ "Noop",
-     /* 137 */ "Explain",
-     /* 138 */ "NotUsed_138",
+     /* 135 */ "MaxPgcnt",
+     /* 136 */ "Trace",
+     /* 137 */ "Noop",
+     /* 138 */ "Explain",
      /* 139 */ "NotUsed_139",
      /* 140 */ "NotUsed_140",
      /* 141 */ "ToText",
@@ -27317,9 +27425,24 @@ static int findCreateFileMode(
     int nDb;                      /* Number of valid bytes in zDb */
     struct stat sStat;            /* Output of stat() on database file */
 
-    nDb = sqlite3Strlen30(zPath) - ((flags & SQLITE_OPEN_WAL) ? 4 : 8);
+    /* zPath is a path to a WAL or journal file. The following block derives
+    ** the path to the associated database file from zPath. This block handles
+    ** the following naming conventions:
+    **
+    **   "<path to db>-journal"
+    **   "<path to db>-wal"
+    **   "<path to db>-journal-NNNN"
+    **   "<path to db>-wal-NNNN"
+    **
+    ** where NNNN is a 4 digit decimal number. The NNNN naming schemes are 
+    ** used by the test_multiplex.c module.
+    */
+    nDb = sqlite3Strlen30(zPath) - 1; 
+    while( nDb>0 && zPath[nDb]!='l' ) nDb--;
+    nDb -= ((flags & SQLITE_OPEN_WAL) ? 3 : 7);
     memcpy(zDb, zPath, nDb);
     zDb[nDb] = '\0';
+
     if( 0==stat(zDb, &sStat) ){
       *pMode = sStat.st_mode & 0777;
     }else{
@@ -27734,7 +27857,7 @@ static void *unixDlOpen(sqlite3_vfs *NotUsed, const char *zFilename){
 ** error message.
 */
 static void unixDlError(sqlite3_vfs *NotUsed, int nBuf, char *zBufOut){
-  char *zErr;
+  const char *zErr;
   UNUSED_PARAMETER(NotUsed);
   unixEnterMutex();
   zErr = dlerror();
@@ -27871,7 +27994,7 @@ static int unixCurrentTimeInt64(sqlite3_vfs *NotUsed, sqlite3_int64 *piNow){
 #if defined(NO_GETTOD)
   time_t t;
   time(&t);
-  *piNow = ((sqlite3_int64)i)*1000 + unixEpoch;
+  *piNow = ((sqlite3_int64)t)*1000 + unixEpoch;
 #elif OS_VXWORKS
   struct timespec sNow;
   clock_gettime(CLOCK_REALTIME, &sNow);
@@ -28328,27 +28451,27 @@ static int proxyBreakConchLock(unixFile *pFile, uuid_t myHostID){
   pathLen = strlcpy(tPath, cPath, MAXPATHLEN);
   if( pathLen>MAXPATHLEN || pathLen<6 || 
      (strlcpy(&tPath[pathLen-5], "break", 6) != 5) ){
-    sprintf(errmsg, "path error (len %d)", (int)pathLen);
+    sqlite3_snprintf(sizeof(errmsg),errmsg,"path error (len %d)",(int)pathLen);
     goto end_breaklock;
   }
   /* read the conch content */
   readLen = pread(conchFile->h, buf, PROXY_MAXCONCHLEN, 0);
   if( readLen<PROXY_PATHINDEX ){
-    sprintf(errmsg, "read error (len %d)", (int)readLen);
+    sqlite3_snprintf(sizeof(errmsg),errmsg,"read error (len %d)",(int)readLen);
     goto end_breaklock;
   }
   /* write it out to the temporary break file */
   fd = open(tPath, (O_RDWR|O_CREAT|O_EXCL), SQLITE_DEFAULT_FILE_PERMISSIONS);
   if( fd<0 ){
-    sprintf(errmsg, "create failed (%d)", errno);
+    sqlite3_snprintf(sizeof(errmsg), errmsg, "create failed (%d)", errno);
     goto end_breaklock;
   }
   if( pwrite(fd, buf, readLen, 0) != (ssize_t)readLen ){
-    sprintf(errmsg, "write failed (%d)", errno);
+    sqlite3_snprintf(sizeof(errmsg), errmsg, "write failed (%d)", errno);
     goto end_breaklock;
   }
   if( rename(tPath, cPath) ){
-    sprintf(errmsg, "rename failed (%d)", errno);
+    sqlite3_snprintf(sizeof(errmsg), errmsg, "rename failed (%d)", errno);
     goto end_breaklock;
   }
   rc = 0;
@@ -34525,6 +34648,7 @@ SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, u8 iBatch, sqlite3_int64 i
 # define sqlite3WalCheckpoint(u,v,w,x)         0
 # define sqlite3WalCallback(z)                 0
 # define sqlite3WalExclusiveMode(y,z)          0
+# define sqlite3WalHeapMemory(z)               0
 #else
 
 #define WAL_SAVEPOINT_NDATA 4
@@ -34535,7 +34659,7 @@ SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, u8 iBatch, sqlite3_int64 i
 typedef struct Wal Wal;
 
 /* Open and close a connection to a write-ahead log. */
-SQLITE_PRIVATE int sqlite3WalOpen(sqlite3_vfs*, sqlite3_file*, const char *zName, Wal**);
+SQLITE_PRIVATE int sqlite3WalOpen(sqlite3_vfs*, sqlite3_file*, const char *zName, int, Wal**);
 SQLITE_PRIVATE int sqlite3WalClose(Wal *pWal, int sync_flags, int, u8 *);
 
 /* Used by readers to open (lock) and close (unlock) a snapshot.  A 
@@ -34592,6 +34716,12 @@ SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal);
 */
 SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op);
 
+/* Return true if the argument is non-NULL and the WAL module is using
+** heap-memory for the wal-index. Otherwise, if the argument is NULL or the
+** WAL module is using shared-memory, return false. 
+*/
+SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal);
+
 #endif /* ifndef SQLITE_OMIT_WAL */
 #endif /* _WAL_H_ */
 
@@ -35191,7 +35321,8 @@ struct Pager {
   u8 noReadlock;              /* Do not bother to obtain readlocks */
   u8 noSync;                  /* Do not sync the journal if true */
   u8 fullSync;                /* Do extra syncs of the journal for robustness */
-  u8 sync_flags;              /* One of SYNC_NORMAL or SYNC_FULL */
+  u8 ckptSyncFlags;           /* SYNC_NORMAL or SYNC_FULL for checkpoint */
+  u8 syncFlags;               /* SYNC_NORMAL or SYNC_FULL otherwise */
   u8 tempFile;                /* zFilename is a temporary file */
   u8 readOnly;                /* True for a read-only database */
   u8 memDb;                   /* True to inhibit all file I/O */
@@ -35502,7 +35633,9 @@ static int assert_pager_state(Pager *p){
 
   return 1;
 }
+#endif /* ifndef NDEBUG */
 
+#ifdef SQLITE_DEBUG 
 /*
 ** Return a pointer to a human readable string in a static buffer
 ** containing the state of the Pager object passed as an argument. This
@@ -35626,7 +35759,7 @@ static int write32bits(sqlite3_file *fd, i64 offset, u32 val){
 static int pagerUnlockDb(Pager *pPager, int eLock){
   int rc = SQLITE_OK;
 
-  assert( !pPager->exclusiveMode );
+  assert( !pPager->exclusiveMode || pPager->eLock==eLock );
   assert( eLock==NO_LOCK || eLock==SHARED_LOCK );
   assert( eLock!=NO_LOCK || pagerUseWal(pPager)==0 );
   if( isOpen(pPager->fd) ){
@@ -35873,7 +36006,7 @@ static int zeroJournalHdr(Pager *pPager, int doTruncate){
       rc = sqlite3OsWrite(pPager->jfd, zeroHdr, sizeof(zeroHdr), 0);
     }
     if( rc==SQLITE_OK && !pPager->noSync ){
-      rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_DATAONLY|pPager->sync_flags);
+      rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_DATAONLY|pPager->syncFlags);
     }
 
     /* At this point the transaction is committed but the write lock 
@@ -37325,7 +37458,7 @@ end_playback:
   if( rc==SQLITE_OK && !pPager->noSync 
    && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
   ){
-    rc = sqlite3OsSync(pPager->fd, pPager->sync_flags);
+    rc = sqlite3OsSync(pPager->fd, pPager->syncFlags);
   }
   if( rc==SQLITE_OK ){
     rc = pager_end_transaction(pPager, zMaster[0]!='\0');
@@ -37499,13 +37632,13 @@ static int pagerWalFrames(
   PgHdr *pList,                   /* List of frames to log */
   Pgno nTruncate,                 /* Database size after this commit */
   int isCommit,                   /* True if this is a commit */
-  int sync_flags                  /* Flags to pass to OsSync() (or 0) */
+  int syncFlags                   /* Flags to pass to OsSync() (or 0) */
 ){
   int rc;                         /* Return code */
 
   assert( pPager->pWal );
   rc = sqlite3WalFrames(pPager->pWal, 
-      pPager->pageSize, pList, nTruncate, isCommit, sync_flags
+      pPager->pageSize, pList, nTruncate, isCommit, syncFlags
   );
   if( rc==SQLITE_OK && pPager->pBackup ){
     PgHdr *p;
@@ -37835,14 +37968,49 @@ SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){
 **              assurance that the journal will not be corrupted to the
 **              point of causing damage to the database during rollback.
 **
+** The above is for a rollback-journal mode.  For WAL mode, OFF continues
+** to mean that no syncs ever occur.  NORMAL means that the WAL is synced
+** prior to the start of checkpoint and that the database file is synced
+** at the conclusion of the checkpoint if the entire content of the WAL
+** was written back into the database.  But no sync operations occur for
+** an ordinary commit in NORMAL mode with WAL.  FULL means that the WAL
+** file is synced following each commit operation, in addition to the
+** syncs associated with NORMAL.
+**
+** Do not confuse synchronous=FULL with SQLITE_SYNC_FULL.  The
+** SQLITE_SYNC_FULL macro means to use the MacOSX-style full-fsync
+** using fcntl(F_FULLFSYNC).  SQLITE_SYNC_NORMAL means to do an
+** ordinary fsync() call.  There is no difference between SQLITE_SYNC_FULL
+** and SQLITE_SYNC_NORMAL on platforms other than MacOSX.  But the
+** synchronous=FULL versus synchronous=NORMAL setting determines when
+** the xSync primitive is called and is relevant to all platforms.
+**
 ** Numeric values associated with these states are OFF==1, NORMAL=2,
 ** and FULL=3.
 */
 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
-SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager *pPager, int level, int bFullFsync){
+SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(
+  Pager *pPager,        /* The pager to set safety level for */
+  int level,            /* PRAGMA synchronous.  1=OFF, 2=NORMAL, 3=FULL */  
+  int bFullFsync,       /* PRAGMA fullfsync */
+  int bCkptFullFsync    /* PRAGMA checkpoint_fullfsync */
+){
+  assert( level>=1 && level<=3 );
   pPager->noSync =  (level==1 || pPager->tempFile) ?1:0;
   pPager->fullSync = (level==3 && !pPager->tempFile) ?1:0;
-  pPager->sync_flags = (bFullFsync?SQLITE_SYNC_FULL:SQLITE_SYNC_NORMAL);
+  if( pPager->noSync ){
+    pPager->syncFlags = 0;
+    pPager->ckptSyncFlags = 0;
+  }else if( bFullFsync ){
+    pPager->syncFlags = SQLITE_SYNC_FULL;
+    pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
+  }else if( bCkptFullFsync ){
+    pPager->syncFlags = SQLITE_SYNC_NORMAL;
+    pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
+  }else{
+    pPager->syncFlags = SQLITE_SYNC_NORMAL;
+    pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
+  }
 }
 #endif
 
@@ -38021,9 +38189,8 @@ SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager *pPager, int mxPage){
   if( mxPage>0 ){
     pPager->mxPgno = mxPage;
   }
-  if( pPager->eState!=PAGER_OPEN && pPager->mxPgno<pPager->dbSize ){
-    pPager->mxPgno = pPager->dbSize;
-  }
+  assert( pPager->eState!=PAGER_OPEN );      /* Called only by OP_MaxPgcnt */
+  assert( pPager->mxPgno>=pPager->dbSize );  /* OP_MaxPgcnt enforces this */
   return pPager->mxPgno;
 }
 
@@ -38228,10 +38395,7 @@ SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager){
   /* pPager->errCode = 0; */
   pPager->exclusiveMode = 0;
 #ifndef SQLITE_OMIT_WAL
-  sqlite3WalClose(pPager->pWal,
-    (pPager->noSync ? 0 : pPager->sync_flags), 
-    pPager->pageSize, pTmp
-  );
+  sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags, pPager->pageSize, pTmp);
   pPager->pWal = 0;
 #endif
   pager_reset(pPager);
@@ -38397,7 +38561,7 @@ static int syncJournal(Pager *pPager, int newHdr){
         if( pPager->fullSync && 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
           PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
           IOTRACE(("JSYNC %p\n", pPager))
-          rc = sqlite3OsSync(pPager->jfd, pPager->sync_flags);
+          rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags);
           if( rc!=SQLITE_OK ) return rc;
         }
         IOTRACE(("JHDR %p %lld\n", pPager, pPager->journalHdr));
@@ -38409,8 +38573,8 @@ static int syncJournal(Pager *pPager, int newHdr){
       if( 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
         PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
         IOTRACE(("JSYNC %p\n", pPager))
-        rc = sqlite3OsSync(pPager->jfd, pPager->sync_flags| 
-          (pPager->sync_flags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0)
+        rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags| 
+          (pPager->syncFlags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0)
         );
         if( rc!=SQLITE_OK ) return rc;
       }
@@ -39000,7 +39164,8 @@ SQLITE_PRIVATE int sqlite3PagerOpen(
   assert( useJournal || pPager->tempFile );
   pPager->noSync = pPager->tempFile;
   pPager->fullSync = pPager->noSync ?0:1;
-  pPager->sync_flags = SQLITE_SYNC_NORMAL;
+  pPager->syncFlags = pPager->noSync ? 0 : SQLITE_SYNC_NORMAL;
+  pPager->ckptSyncFlags = pPager->syncFlags;
   /* pPager->pFirst = 0; */
   /* pPager->pFirstSynced = 0; */
   /* pPager->pLast = 0; */
@@ -39100,7 +39265,7 @@ static int hasHotJournal(Pager *pPager, int *pExists){
           sqlite3BeginBenignMalloc();
           if( pagerLockDb(pPager, RESERVED_LOCK)==SQLITE_OK ){
             sqlite3OsDelete(pVfs, pPager->zJournal, 0);
-            pagerUnlockDb(pPager, SHARED_LOCK);
+            if( !pPager->exclusiveMode ) pagerUnlockDb(pPager, SHARED_LOCK);
           }
           sqlite3EndBenignMalloc();
         }else{
@@ -40123,10 +40288,10 @@ static int pager_incr_changecounter(Pager *pPager, int isDirectMode){
 }
 
 /*
-** Sync the pager file to disk. This is a no-op for in-memory files
+** Sync the database file to disk. This is a no-op for in-memory databases
 ** or pages with the Pager.noSync flag set.
 **
-** If successful, or called on a pager for which it is a no-op, this
+** If successful, or if called on a pager for which it is a no-op, this
 ** function returns SQLITE_OK. Otherwise, an IO error code is returned.
 */
 SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager){
@@ -40135,7 +40300,7 @@ SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager){
   if( pPager->noSync ){
     rc = SQLITE_OK;
   }else{
-    rc = sqlite3OsSync(pPager->fd, pPager->sync_flags);
+    rc = sqlite3OsSync(pPager->fd, pPager->syncFlags);
   }
   return rc;
 }
@@ -40224,7 +40389,7 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
       PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache);
       if( pList ){
         rc = pagerWalFrames(pPager, pList, pPager->dbSize, 1, 
-            (pPager->fullSync ? pPager->sync_flags : 0)
+            (pPager->fullSync ? pPager->syncFlags : 0)
         );
       }
       if( rc==SQLITE_OK ){
@@ -40355,7 +40520,7 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
   
       /* Finally, sync the database file. */
       if( !pPager->noSync && !noSync ){
-        rc = sqlite3OsSync(pPager->fd, pPager->sync_flags);
+        rc = sqlite3OsSync(pPager->fd, pPager->syncFlags);
       }
       IOTRACE(("DBSYNC %p\n", pPager))
     }
@@ -40926,7 +41091,8 @@ SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *pPager, int eMode){
             || eMode==PAGER_LOCKINGMODE_EXCLUSIVE );
   assert( PAGER_LOCKINGMODE_QUERY<0 );
   assert( PAGER_LOCKINGMODE_NORMAL>=0 && PAGER_LOCKINGMODE_EXCLUSIVE>=0 );
-  if( eMode>=0 && !pPager->tempFile ){
+  assert( pPager->exclusiveMode || 0==sqlite3WalHeapMemory(pPager->pWal) );
+  if( eMode>=0 && !pPager->tempFile && !sqlite3WalHeapMemory(pPager->pWal) ){
     pPager->exclusiveMode = (u8)eMode;
   }
   return (int)pPager->exclusiveMode;
@@ -41095,10 +41261,8 @@ SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager){
   int rc = SQLITE_OK;
   if( pPager->pWal ){
     u8 *zBuf = (u8 *)pPager->pTmpSpace;
-    rc = sqlite3WalCheckpoint(pPager->pWal,
-        (pPager->noSync ? 0 : pPager->sync_flags),
-        pPager->pageSize, zBuf
-    );
+    rc = sqlite3WalCheckpoint(pPager->pWal, pPager->ckptSyncFlags,
+                              pPager->pageSize, zBuf);
   }
   return rc;
 }
@@ -41113,10 +41277,62 @@ SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager){
 */
 SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager){
   const sqlite3_io_methods *pMethods = pPager->fd->pMethods;
-  return pMethods->iVersion>=2 && pMethods->xShmMap!=0;
+  return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap);
 }
 
 /*
+** Attempt to take an exclusive lock on the database file. If a PENDING lock
+** is obtained instead, immediately release it.
+*/
+static int pagerExclusiveLock(Pager *pPager){
+  int rc;                         /* Return code */
+
+  assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK );
+  rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
+  if( rc!=SQLITE_OK ){
+    /* If the attempt to grab the pending lock failed, release the 
+    ** exclusive lock that may have been obtained instead.  */
+    pagerUnlockDb(pPager, SHARED_LOCK);
+  }
+
+  return rc;
+}
+
+/*
+** Call sqlite3WalOpen() to open the WAL handle. If the pager is in 
+** exclusive-locking mode when this function is called, take an EXCLUSIVE
+** lock on the database file and use heap-memory to store the wal-index
+** in. Otherwise, use the normal shared-memory.
+*/
+static int pagerOpenWal(Pager *pPager){
+  int rc = SQLITE_OK;
+
+  assert( pPager->pWal==0 && pPager->tempFile==0 );
+  assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK || pPager->noReadlock);
+
+  /* If the pager is already in exclusive-mode, the WAL module will use 
+  ** heap-memory for the wal-index instead of the VFS shared-memory 
+  ** implementation. Take the exclusive lock now, before opening the WAL
+  ** file, to make sure this is safe.
+  */
+  if( pPager->exclusiveMode ){
+    rc = pagerExclusiveLock(pPager);
+  }
+
+  /* Open the connection to the log file. If this operation fails, 
+  ** (e.g. due to malloc() failure), return an error code.
+  */
+  if( rc==SQLITE_OK ){
+    rc = sqlite3WalOpen(pPager->pVfs, 
+        pPager->fd, pPager->zWal, pPager->exclusiveMode, &pPager->pWal
+    );
+  }
+
+  return rc;
+}
+
+
+/*
 ** The caller must be holding a SHARED lock on the database file to call
 ** this function.
 **
@@ -41149,11 +41365,7 @@ SQLITE_PRIVATE int sqlite3PagerOpenWal(
     /* Close any rollback journal previously open */
     sqlite3OsClose(pPager->jfd);
 
-    /* Open the connection to the log file. If this operation fails, 
-    ** (e.g. due to malloc() failure), unlock the database file and 
-    ** return an error code.
-    */
-    rc = sqlite3WalOpen(pPager->pVfs, pPager->fd, pPager->zWal, &pPager->pWal);
+    rc = pagerOpenWal(pPager);
     if( rc==SQLITE_OK ){
       pPager->journalMode = PAGER_JOURNALMODE_WAL;
       pPager->eState = PAGER_OPEN;
@@ -41192,8 +41404,7 @@ SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager){
       );
     }
     if( rc==SQLITE_OK && logexists ){
-      rc = sqlite3WalOpen(pPager->pVfs, pPager->fd,
-                          pPager->zWal, &pPager->pWal);
+      rc = pagerOpenWal(pPager);
     }
   }
     
@@ -41201,17 +41412,11 @@ SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager){
   ** the database file, the log and log-summary files will be deleted.
   */
   if( rc==SQLITE_OK && pPager->pWal ){
-    rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
+    rc = pagerExclusiveLock(pPager);
     if( rc==SQLITE_OK ){
-      rc = sqlite3WalClose(pPager->pWal,
-                           (pPager->noSync ? 0 : pPager->sync_flags), 
-        pPager->pageSize, (u8*)pPager->pTmpSpace
-      );
+      rc = sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags,
+                           pPager->pageSize, (u8*)pPager->pTmpSpace);
       pPager->pWal = 0;
-    }else{
-      /* If we cannot get an EXCLUSIVE lock, downgrade the PENDING lock
-      ** that we did get back to SHARED. */
-      pagerUnlockDb(pPager, SQLITE_LOCK_SHARED);
     }
   }
   return rc;
@@ -41668,6 +41873,13 @@ struct Wal {
 };
 
 /*
+** Candidate values for Wal.exclusiveMode.
+*/
+#define WAL_NORMAL_MODE     0
+#define WAL_EXCLUSIVE_MODE  1     
+#define WAL_HEAPMEMORY_MODE 2
+
+/*
 ** Each page of the wal-index mapping contains a hash-table made up of
 ** an array of HASHTABLE_NSLOT elements of the following type.
 */
@@ -41753,9 +41965,14 @@ static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){
 
   /* Request a pointer to the required page from the VFS */
   if( pWal->apWiData[iPage]==0 ){
-    rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ, 
-        pWal->writeLock, (void volatile **)&pWal->apWiData[iPage]
-    );
+    if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
+      pWal->apWiData[iPage] = (u32 volatile *)sqlite3MallocZero(WALINDEX_PGSZ);
+      if( !pWal->apWiData[iPage] ) rc = SQLITE_NOMEM;
+    }else{
+      rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ, 
+          pWal->writeLock, (void volatile **)&pWal->apWiData[iPage]
+      );
+    }
   }
 
   *ppPage = pWal->apWiData[iPage];
@@ -41838,6 +42055,12 @@ static void walChecksumBytes(
   aOut[1] = s2;
 }
 
+static void walShmBarrier(Wal *pWal){
+  if( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE ){
+    sqlite3OsShmBarrier(pWal->pDbFd);
+  }
+}
+
 /*
 ** Write the header information in pWal->hdr into the wal-index.
 **
@@ -41852,7 +42075,7 @@ static void walIndexWriteHdr(Wal *pWal){
   pWal->hdr.iVersion = WALINDEX_MAX_VERSION;
   walChecksumBytes(1, (u8*)&pWal->hdr, nCksum, 0, pWal->hdr.aCksum);
   memcpy((void *)&aHdr[1], (void *)&pWal->hdr, sizeof(WalIndexHdr));
-  sqlite3OsShmBarrier(pWal->pDbFd);
+  walShmBarrier(pWal);
   memcpy((void *)&aHdr[0], (void *)&pWal->hdr, sizeof(WalIndexHdr));
 }
 
@@ -42424,7 +42647,15 @@ recovery_error:
 ** Close an open wal-index.
 */
 static void walIndexClose(Wal *pWal, int isDelete){
-  sqlite3OsShmUnmap(pWal->pDbFd, isDelete);
+  if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
+    int i;
+    for(i=0; i<pWal->nWiData; i++){
+      sqlite3_free((void *)pWal->apWiData[i]);
+      pWal->apWiData[i] = 0;
+    }
+  }else{
+    sqlite3OsShmUnmap(pWal->pDbFd, isDelete);
+  }
 }
 
 /* 
@@ -42446,6 +42677,7 @@ SQLITE_PRIVATE int sqlite3WalOpen(
   sqlite3_vfs *pVfs,              /* vfs module to open wal and wal-index */
   sqlite3_file *pDbFd,            /* The open database file */
   const char *zWalName,           /* Name of the WAL file */
+  int bNoShm,                     /* True to run in heap-memory mode */
   Wal **ppWal                     /* OUT: Allocated Wal handle */
 ){
   int rc;                         /* Return Code */
@@ -42479,6 +42711,7 @@ SQLITE_PRIVATE int sqlite3WalOpen(
   pRet->pDbFd = pDbFd;
   pRet->readLock = -1;
   pRet->zWalName = zWalName;
+  pRet->exclusiveMode = (bNoShm ? WAL_HEAPMEMORY_MODE: WAL_NORMAL_MODE);
 
   /* Open file handle on the write-ahead log file. */
   flags = (SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_WAL);
@@ -42912,7 +43145,9 @@ SQLITE_PRIVATE int sqlite3WalClose(
     */
     rc = sqlite3OsLock(pWal->pDbFd, SQLITE_LOCK_EXCLUSIVE);
     if( rc==SQLITE_OK ){
-      pWal->exclusiveMode = 1;
+      if( pWal->exclusiveMode==WAL_NORMAL_MODE ){
+        pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
+      }
       rc = sqlite3WalCheckpoint(pWal, sync_flags, nBuf, zBuf);
       if( rc==SQLITE_OK ){
         isDelete = 1;
@@ -42968,7 +43203,7 @@ static int walIndexTryHdr(Wal *pWal, int *pChanged){
   */
   aHdr = walIndexHdr(pWal);
   memcpy(&h1, (void *)&aHdr[0], sizeof(h1));
-  sqlite3OsShmBarrier(pWal->pDbFd);
+  walShmBarrier(pWal);
   memcpy(&h2, (void *)&aHdr[1], sizeof(h2));
 
   if( memcmp(&h1, &h2, sizeof(h1))!=0 ){
@@ -43169,7 +43404,7 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
     ** and can be safely ignored.
     */
     rc = walLockShared(pWal, WAL_READ_LOCK(0));
-    sqlite3OsShmBarrier(pWal->pDbFd);
+    walShmBarrier(pWal);
     if( rc==SQLITE_OK ){
       if( memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) ){
         /* It is not safe to allow the reader to continue here if frames
@@ -43263,7 +43498,7 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
     ** log-wrap (either of which would require an exclusive lock on
     ** WAL_READ_LOCK(mxI)) has not occurred since the snapshot was valid.
     */
-    sqlite3OsShmBarrier(pWal->pDbFd);
+    walShmBarrier(pWal);
     if( pInfo->aReadMark[mxI]!=mxReadMark
      || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr))
     ){
@@ -43906,13 +44141,14 @@ SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal){
 ** on the main database file before invoking this operation.
 **
 ** If op is negative, then do a dry-run of the op==1 case but do
-** not actually change anything.  The pager uses this to see if it
+** not actually change anything. The pager uses this to see if it
 ** should acquire the database exclusive lock prior to invoking
 ** the op==1 case.
 */
 SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){
   int rc;
   assert( pWal->writeLock==0 );
+  assert( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE || op==-1 );
 
   /* pWal->readLock is usually set, but might be -1 if there was a 
   ** prior error while attempting to acquire are read-lock. This cannot 
@@ -43946,6 +44182,15 @@ SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){
   return rc;
 }
 
+/* 
+** Return true if the argument is non-NULL and the WAL module is using
+** heap-memory for the wal-index. Otherwise, if the argument is NULL or the
+** WAL module is using shared-memory, return false. 
+*/
+SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal){
+  return (pWal && pWal->exclusiveMode==WAL_HEAPMEMORY_MODE );
+}
+
 #endif /* #ifndef SQLITE_OMIT_WAL */
 
 /************** End of wal.c *************************************************/
@@ -46669,17 +46914,13 @@ SQLITE_PRIVATE int sqlite3BtreeOpen(
   const int isTempDb = zFilename==0 || zFilename[0]==0;
 
   /* Set the variable isMemdb to true for an in-memory database, or 
-  ** false for a file-based database. This symbol is only required if
-  ** either of the shared-data or autovacuum features are compiled 
-  ** into the library.
+  ** false for a file-based database.
   */
-#if !defined(SQLITE_OMIT_SHARED_CACHE) || !defined(SQLITE_OMIT_AUTOVACUUM)
-  #ifdef SQLITE_OMIT_MEMORYDB
-    const int isMemdb = 0;
-  #else
-    const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0)
-                         || (isTempDb && sqlite3TempInMemory(db));
-  #endif
+#ifdef SQLITE_OMIT_MEMORYDB
+  const int isMemdb = 0;
+#else
+  const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0)
+                       || (isTempDb && sqlite3TempInMemory(db));
 #endif
 
   assert( db!=0 );
@@ -47063,11 +47304,17 @@ SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){
 ** probability of damage to near zero but with a write performance reduction.
 */
 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
-SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree *p, int level, int fullSync){
+SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(
+  Btree *p,              /* The btree to set the safety level on */
+  int level,             /* PRAGMA synchronous.  1=OFF, 2=NORMAL, 3=FULL */
+  int fullSync,          /* PRAGMA fullfsync. */
+  int ckptFullSync       /* PRAGMA checkpoint_fullfync */
+){
   BtShared *pBt = p->pBt;
   assert( sqlite3_mutex_held(p->db->mutex) );
+  assert( level>=1 && level<=3 );
   sqlite3BtreeEnter(p);
-  sqlite3PagerSetSafetyLevel(pBt->pPager, level, fullSync);
+  sqlite3PagerSetSafetyLevel(pBt->pPager, level, fullSync, ckptFullSync);
   sqlite3BtreeLeave(p);
   return SQLITE_OK;
 }
@@ -48125,8 +48372,8 @@ static void btreeEndTransaction(Btree *p){
 ** are no active cursors, it also releases the read lock.
 */
 SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p){
-  BtShared *pBt = p->pBt;
 
+  if( p->inTrans==TRANS_NONE ) return SQLITE_OK;
   sqlite3BtreeEnter(p);
   btreeIntegrity(p);
 
@@ -48135,6 +48382,7 @@ SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p){
   */
   if( p->inTrans==TRANS_WRITE ){
     int rc;
+    BtShared *pBt = p->pBt;
     assert( pBt->inTransaction==TRANS_WRITE );
     assert( pBt->nTransaction>0 );
     rc = sqlite3PagerCommitPhaseTwo(pBt->pPager);
@@ -53053,8 +53301,7 @@ SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void
 SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *pCur){
   assert( cursorHoldsMutex(pCur) );
   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
-  assert(!pCur->isIncrblobHandle);
-  assert(!pCur->aOverflow);
+  invalidateOverflowCache(pCur);
   pCur->isIncrblobHandle = 1;
 }
 #endif
@@ -54242,7 +54489,9 @@ SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
 */
 SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){
   if( pMem->flags & MEM_Frame ){
-    sqlite3VdbeFrameDelete(pMem->u.pFrame);
+    VdbeFrame *pFrame = pMem->u.pFrame;
+    pFrame->pParent = pFrame->v->pDelFrame;
+    pFrame->v->pDelFrame = pFrame;
   }
   if( pMem->flags & MEM_RowSet ){
     sqlite3RowSetClear(pMem->u.pRowSet);
@@ -56087,12 +56336,10 @@ SQLITE_PRIVATE int sqlite3VdbeList(
     pMem->type = SQLITE_INTEGER;
     pMem++;
 
-    if( p->explain==1 ){
-      pMem->flags = MEM_Int;
-      pMem->u.i = pOp->p3;                          /* P3 */
-      pMem->type = SQLITE_INTEGER;
-      pMem++;
-    }
+    pMem->flags = MEM_Int;
+    pMem->u.i = pOp->p3;                          /* P3 */
+    pMem->type = SQLITE_INTEGER;
+    pMem++;
 
     if( sqlite3VdbeMemGrow(pMem, 32, 0) ){            /* P4 */
       assert( p->db->mallocFailed );
@@ -56137,7 +56384,7 @@ SQLITE_PRIVATE int sqlite3VdbeList(
       }
     }
 
-    p->nResColumn = 8 - 5*(p->explain-1);
+    p->nResColumn = 8 - 4*(p->explain-1);
     p->rc = SQLITE_OK;
     rc = SQLITE_ROW;
   }
@@ -56444,6 +56691,11 @@ static void closeAllCursors(Vdbe *p){
   if( p->aMem ){
     releaseMemArray(&p->aMem[1], p->nMem);
   }
+  while( p->pDelFrame ){
+    VdbeFrame *pDel = p->pDelFrame;
+    p->pDelFrame = pDel->pParent;
+    sqlite3VdbeFrameDelete(pDel);
+  }
 }
 
 /*
@@ -59084,6 +59336,8 @@ static int bindText(
       rc = sqlite3ApiExit(p->db, rc);
     }
     sqlite3_mutex_leave(p->db->mutex);
+  }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
+    xDel((void*)zData);
   }
   return rc;
 }
@@ -59327,6 +59581,14 @@ SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
 }
 
 /*
+** Return true if the prepared statement is guaranteed to not modify the
+** database.
+*/
+SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
+  return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;
+}
+
+/*
 ** Return a pointer to the next prepared statement after pStmt associated
 ** with database connection pDb.  If pStmt is NULL, return the first
 ** prepared statement for the database connection.  Return NULL if there
@@ -59810,13 +60072,13 @@ static void applyAffinity(
 ** into a numeric representation.  Use either INTEGER or REAL whichever
 ** is appropriate.  But only do the conversion if it is possible without
 ** loss of information and return the revised type of the argument.
-**
-** This is an EXPERIMENTAL api and is subject to change or removal.
 */
 SQLITE_API int sqlite3_value_numeric_type(sqlite3_value *pVal){
   Mem *pMem = (Mem*)pVal;
-  applyNumericAffinity(pMem);
-  sqlite3VdbeMemStoreType(pMem);
+  if( pMem->type==SQLITE_TEXT ){
+    applyNumericAffinity(pMem);
+    sqlite3VdbeMemStoreType(pMem);
+  }
   return pMem->type;
 }
 
@@ -61517,7 +61779,6 @@ case OP_AddImm: {            /* in1 */
 */
 case OP_MustBeInt: {            /* jump, in1 */
   pIn1 = &aMem[pOp->p1];
-  memAboutToChange(p, pIn1);
   applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
   if( (pIn1->flags & MEM_Int)==0 ){
     if( pOp->p2==0 ){
@@ -65903,6 +66164,32 @@ case OP_Pagecount: {            /* out2-prerelease */
 }
 #endif
 
+
+#ifndef  SQLITE_OMIT_PAGER_PRAGMAS
+/* Opcode: MaxPgcnt P1 P2 P3 * *
+**
+** Try to set the maximum page count for database P1 to the value in P3.
+** Do not let the maximum page count fall below the current page count and
+** do not change the maximum page count value if P3==0.
+**
+** Store the maximum page count after the change in register P2.
+*/
+case OP_MaxPgcnt: {            /* out2-prerelease */
+  unsigned int newMax;
+  Btree *pBt;
+
+  pBt = db->aDb[pOp->p1].pBt;
+  newMax = 0;
+  if( pOp->p3 ){
+    newMax = sqlite3BtreeLastPage(pBt);
+    if( newMax < (unsigned)pOp->p3 ) newMax = (unsigned)pOp->p3;
+  }
+  pOut->u.i = sqlite3BtreeMaxPageCount(pBt, newMax);
+  break;
+}
+#endif
+
+
 #ifndef SQLITE_OMIT_TRACE
 /* Opcode: Trace * * * P4 *
 **
@@ -66077,11 +66364,82 @@ struct Incrblob {
   int flags;              /* Copy of "flags" passed to sqlite3_blob_open() */
   int nByte;              /* Size of open blob, in bytes */
   int iOffset;            /* Byte offset of blob in cursor data */
+  int iCol;               /* Table column this handle is open on */
   BtCursor *pCsr;         /* Cursor pointing at blob row */
   sqlite3_stmt *pStmt;    /* Statement holding cursor open */
   sqlite3 *db;            /* The associated database */
 };
 
+
+/*
+** This function is used by both blob_open() and blob_reopen(). It seeks
+** the b-tree cursor associated with blob handle p to point to row iRow.
+** If successful, SQLITE_OK is returned and subsequent calls to
+** sqlite3_blob_read() or sqlite3_blob_write() access the specified row.
+**
+** If an error occurs, or if the specified row does not exist or does not
+** contain a value of type TEXT or BLOB in the column nominated when the
+** blob handle was opened, then an error code is returned and *pzErr may
+** be set to point to a buffer containing an error message. It is the
+** responsibility of the caller to free the error message buffer using
+** sqlite3DbFree().
+**
+** If an error does occur, then the b-tree cursor is closed. All subsequent
+** calls to sqlite3_blob_read(), blob_write() or blob_reopen() will 
+** immediately return SQLITE_ABORT.
+*/
+static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){
+  int rc;                         /* Error code */
+  char *zErr = 0;                 /* Error message */
+  Vdbe *v = (Vdbe *)p->pStmt;
+
+  /* Set the value of the SQL statements only variable to integer iRow. 
+  ** This is done directly instead of using sqlite3_bind_int64() to avoid 
+  ** triggering asserts related to mutexes.
+  */
+  assert( v->aVar[0].flags&MEM_Int );
+  v->aVar[0].u.i = iRow;
+
+  rc = sqlite3_step(p->pStmt);
+  if( rc==SQLITE_ROW ){
+    u32 type = v->apCsr[0]->aType[p->iCol];
+    if( type<12 ){
+      zErr = sqlite3MPrintf(p->db, "cannot open value of type %s",
+          type==0?"null": type==7?"real": "integer"
+      );
+      rc = SQLITE_ERROR;
+      sqlite3_finalize(p->pStmt);
+      p->pStmt = 0;
+    }else{
+      p->iOffset = v->apCsr[0]->aOffset[p->iCol];
+      p->nByte = sqlite3VdbeSerialTypeLen(type);
+      p->pCsr =  v->apCsr[0]->pCursor;
+      sqlite3BtreeEnterCursor(p->pCsr);
+      sqlite3BtreeCacheOverflow(p->pCsr);
+      sqlite3BtreeLeaveCursor(p->pCsr);
+    }
+  }
+
+  if( rc==SQLITE_ROW ){
+    rc = SQLITE_OK;
+  }else if( p->pStmt ){
+    rc = sqlite3_finalize(p->pStmt);
+    p->pStmt = 0;
+    if( rc==SQLITE_OK ){
+      zErr = sqlite3MPrintf(p->db, "no such rowid: %lld", iRow);
+      rc = SQLITE_ERROR;
+    }else{
+      zErr = sqlite3MPrintf(p->db, "%s", sqlite3_errmsg(p->db));
+    }
+  }
+
+  assert( rc!=SQLITE_OK || zErr==0 );
+  assert( rc!=SQLITE_ROW && rc!=SQLITE_DONE );
+
+  *pzErr = zErr;
+  return rc;
+}
+
 /*
 ** Open a blob handle.
 */
@@ -66122,29 +66480,35 @@ SQLITE_API int sqlite3_blob_open(
     {OP_OpenWrite, 0, 0, 0},       /* 4: Open cursor 0 for read/write */
 
     {OP_Variable, 1, 1, 1},        /* 5: Push the rowid to the stack */
-    {OP_NotExists, 0, 9, 1},       /* 6: Seek the cursor */
+    {OP_NotExists, 0, 10, 1},      /* 6: Seek the cursor */
     {OP_Column, 0, 0, 1},          /* 7  */
     {OP_ResultRow, 1, 0, 0},       /* 8  */
-    {OP_Close, 0, 0, 0},           /* 9  */
-    {OP_Halt, 0, 0, 0},            /* 10 */
+    {OP_Goto, 0, 5, 0},            /* 9  */
+    {OP_Close, 0, 0, 0},           /* 10 */
+    {OP_Halt, 0, 0, 0},            /* 11 */
   };
 
-  Vdbe *v = 0;
   int rc = SQLITE_OK;
   char *zErr = 0;
   Table *pTab;
-  Parse *pParse;
+  Parse *pParse = 0;
+  Incrblob *pBlob = 0;
 
+  flags = !!flags;                /* flags = (flags ? 1 : 0); */
   *ppBlob = 0;
+
   sqlite3_mutex_enter(db->mutex);
+
+  pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob));
+  if( !pBlob ) goto blob_open_out;
   pParse = sqlite3StackAllocRaw(db, sizeof(*pParse));
-  if( pParse==0 ){
-    rc = SQLITE_NOMEM;
-    goto blob_open_out;
-  }
+  if( !pParse ) goto blob_open_out;
+
   do {
     memset(pParse, 0, sizeof(Parse));
     pParse->db = db;
+    sqlite3DbFree(db, zErr);
+    zErr = 0;
 
     sqlite3BtreeEnterAll(db);
     pTab = sqlite3LocateTable(pParse, 0, zTable, zDb);
@@ -66170,7 +66534,7 @@ SQLITE_API int sqlite3_blob_open(
     }
 
     /* Now search pTab for the exact column. */
-    for(iCol=0; iCol < pTab->nCol; iCol++) {
+    for(iCol=0; iCol<pTab->nCol; iCol++) {
       if( sqlite3StrICmp(pTab->aCol[iCol].zName, zColumn)==0 ){
         break;
       }
@@ -66224,11 +66588,14 @@ SQLITE_API int sqlite3_blob_open(
       }
     }
 
-    v = sqlite3VdbeCreate(db);
-    if( v ){
+    pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(db);
+    assert( pBlob->pStmt || db->mallocFailed );
+    if( pBlob->pStmt ){
+      Vdbe *v = (Vdbe *)pBlob->pStmt;
       int iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
+
       sqlite3VdbeAddOpList(v, sizeof(openBlob)/sizeof(VdbeOpList), openBlob);
-      flags = !!flags;                 /* flags = (flags ? 1 : 0); */
+
 
       /* Configure the OP_Transaction */
       sqlite3VdbeChangeP1(v, 0, iDb);
@@ -66271,65 +66638,25 @@ SQLITE_API int sqlite3_blob_open(
       }
     }
    
+    pBlob->flags = flags;
+    pBlob->iCol = iCol;
+    pBlob->db = db;
     sqlite3BtreeLeaveAll(db);
     if( db->mallocFailed ){
       goto blob_open_out;
     }
-
-    sqlite3_bind_int64((sqlite3_stmt *)v, 1, iRow);
-    rc = sqlite3_step((sqlite3_stmt *)v);
-    if( rc!=SQLITE_ROW ){
-      nAttempt++;
-      rc = sqlite3_finalize((sqlite3_stmt *)v);
-      sqlite3DbFree(db, zErr);
-      zErr = sqlite3MPrintf(db, sqlite3_errmsg(db));
-      v = 0;
-    }
-  } while( nAttempt<5 && rc==SQLITE_SCHEMA );
-
-  if( rc==SQLITE_ROW ){
-    /* The row-record has been opened successfully. Check that the
-    ** column in question contains text or a blob. If it contains
-    ** text, it is up to the caller to get the encoding right.
-    */
-    Incrblob *pBlob;
-    u32 type = v->apCsr[0]->aType[iCol];
-
-    if( type<12 ){
-      sqlite3DbFree(db, zErr);
-      zErr = sqlite3MPrintf(db, "cannot open value of type %s",
-          type==0?"null": type==7?"real": "integer"
-      );
-      rc = SQLITE_ERROR;
-      goto blob_open_out;
-    }
-    pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob));
-    if( db->mallocFailed ){
-      sqlite3DbFree(db, pBlob);
-      goto blob_open_out;
-    }
-    pBlob->flags = flags;
-    pBlob->pCsr =  v->apCsr[0]->pCursor;
-    sqlite3BtreeEnterCursor(pBlob->pCsr);
-    sqlite3BtreeCacheOverflow(pBlob->pCsr);
-    sqlite3BtreeLeaveCursor(pBlob->pCsr);
-    pBlob->pStmt = (sqlite3_stmt *)v;
-    pBlob->iOffset = v->apCsr[0]->aOffset[iCol];
-    pBlob->nByte = sqlite3VdbeSerialTypeLen(type);
-    pBlob->db = db;
-    *ppBlob = (sqlite3_blob *)pBlob;
-    rc = SQLITE_OK;
-  }else if( rc==SQLITE_OK ){
-    sqlite3DbFree(db, zErr);
-    zErr = sqlite3MPrintf(db, "no such rowid: %lld", iRow);
-    rc = SQLITE_ERROR;
-  }
+    sqlite3_bind_int64(pBlob->pStmt, 1, iRow);
+    rc = blobSeekToRow(pBlob, iRow, &zErr);
+  } while( (++nAttempt)<5 && rc==SQLITE_SCHEMA );
 
 blob_open_out:
-  if( v && (rc!=SQLITE_OK || db->mallocFailed) ){
-    sqlite3VdbeFinalize(v);
+  if( rc==SQLITE_OK && db->mallocFailed==0 ){
+    *ppBlob = (sqlite3_blob *)pBlob;
+  }else{
+    if( pBlob && pBlob->pStmt ) sqlite3VdbeFinalize((Vdbe *)pBlob->pStmt);
+    sqlite3DbFree(db, pBlob);
   }
-  sqlite3Error(db, rc, zErr);
+  sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
   sqlite3DbFree(db, zErr);
   sqlite3StackFree(db, pParse);
   rc = sqlite3ApiExit(db, rc);
@@ -66382,7 +66709,7 @@ static int blobReadWrite(
     /* Request is out of range. Return a transient error. */
     rc = SQLITE_ERROR;
     sqlite3Error(db, SQLITE_ERROR, 0);
-  } else if( v==0 ){
+  }else if( v==0 ){
     /* If there is no statement handle, then the blob-handle has
     ** already been invalidated. Return SQLITE_ABORT in this case.
     */
@@ -66430,7 +66757,47 @@ SQLITE_API int sqlite3_blob_write(sqlite3_blob *pBlob, const void *z, int n, int
 */
 SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *pBlob){
   Incrblob *p = (Incrblob *)pBlob;
-  return p ? p->nByte : 0;
+  return (p && p->pStmt) ? p->nByte : 0;
+}
+
+/*
+** Move an existing blob handle to point to a different row of the same
+** database table.
+**
+** If an error occurs, or if the specified row does not exist or does not
+** contain a blob or text value, then an error code is returned and the
+** database handle error code and message set. If this happens, then all 
+** subsequent calls to sqlite3_blob_xxx() functions (except blob_close()) 
+** immediately return SQLITE_ABORT.
+*/
+SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){
+  int rc;
+  Incrblob *p = (Incrblob *)pBlob;
+  sqlite3 *db;
+
+  if( p==0 ) return SQLITE_MISUSE_BKPT;
+  db = p->db;
+  sqlite3_mutex_enter(db->mutex);
+
+  if( p->pStmt==0 ){
+    /* If there is no statement handle, then the blob-handle has
+    ** already been invalidated. Return SQLITE_ABORT in this case.
+    */
+    rc = SQLITE_ABORT;
+  }else{
+    char *zErr;
+    rc = blobSeekToRow(p, iRow, &zErr);
+    if( rc!=SQLITE_OK ){
+      sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
+      sqlite3DbFree(db, zErr);
+    }
+    assert( rc!=SQLITE_SCHEMA );
+  }
+
+  rc = sqlite3ApiExit(db, rc);
+  assert( rc==SQLITE_OK || p->pStmt==0 );
+  sqlite3_mutex_leave(db->mutex);
+  return rc;
 }
 
 #endif /* #ifndef SQLITE_OMIT_INCRBLOB */
@@ -68763,6 +69130,9 @@ SQLITE_PRIVATE Expr *sqlite3PExpr(
 ){
   Expr *p = sqlite3ExprAlloc(pParse->db, op, pToken, 1);
   sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight);
+  if( p ) {
+    sqlite3ExprCheckHeight(pParse, p->nHeight);
+  }
   return p;
 }
 
@@ -69876,6 +70246,16 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(
     assert( testAddr>0 || pParse->db->mallocFailed );
   }
 
+#ifndef SQLITE_OMIT_EXPLAIN
+  if( pParse->explain==2 ){
+    char *zMsg = sqlite3MPrintf(
+        pParse->db, "EXECUTE %s%s SUBQUERY %d", testAddr?"":"CORRELATED ",
+        pExpr->op==TK_IN?"LIST":"SCALAR", pParse->iNextSelectId
+    );
+    sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
+  }
+#endif
+
   switch( pExpr->op ){
     case TK_IN: {
       char affinity;              /* Affinity of the LHS of the IN */
@@ -69921,6 +70301,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(
         sqlite3SelectDestInit(&dest, SRT_Set, pExpr->iTable);
         dest.affinity = (u8)affinity;
         assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable );
+        pExpr->x.pSelect->iLimit = 0;
         if( sqlite3Select(pParse, pExpr->x.pSelect, &dest) ){
           return 0;
         }
@@ -70021,6 +70402,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(
       sqlite3ExprDelete(pParse->db, pSel->pLimit);
       pSel->pLimit = sqlite3PExpr(pParse, TK_INTEGER, 0, 0,
                                   &sqlite3IntTokens[1]);
+      pSel->iLimit = 0;
       if( sqlite3Select(pParse, pSel, &dest) ){
         return 0;
       }
@@ -71304,9 +71686,22 @@ static int evalConstExpr(Walker *pWalker, Expr *pExpr){
 ** Preevaluate constant subexpressions within pExpr and store the
 ** results in registers.  Modify pExpr so that the constant subexpresions
 ** are TK_REGISTER opcodes that refer to the precomputed values.
+**
+** This routine is a no-op if the jump to the cookie-check code has
+** already occur.  Since the cookie-check jump is generated prior to
+** any other serious processing, this check ensures that there is no
+** way to accidently bypass the constant initializations.
+**
+** This routine is also a no-op if the SQLITE_FactorOutConst optimization
+** is disabled via the sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS)
+** interface.  This allows test logic to verify that the same answer is
+** obtained for queries regardless of whether or not constants are
+** precomputed into registers or if they are inserted in-line.
 */
 SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse *pParse, Expr *pExpr){
   Walker w;
+  if( pParse->cookieGoto ) return;
+  if( (pParse->db->flags & SQLITE_FactorOutConst)!=0 ) return;
   w.xExprCallback = evalConstExpr;
   w.xSelectCallback = 0;
   w.pParse = pParse;
@@ -84062,6 +84457,27 @@ struct sqlite3_api_routines {
   sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*);
   const char *(*sql)(sqlite3_stmt*);
   int (*status)(int,int*,int*,int);
+  int (*backup_finish)(sqlite3_backup*);
+  sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*);
+  int (*backup_pagecount)(sqlite3_backup*);
+  int (*backup_remaining)(sqlite3_backup*);
+  int (*backup_step)(sqlite3_backup*,int);
+  const char *(*compileoption_get)(int);
+  int (*compileoption_used)(const char*);
+  int (*create_function_v2)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*),void(*xDestroy)(void*));
+  int (*db_config)(sqlite3*,int,...);
+  sqlite3_mutex *(*db_mutex)(sqlite3*);
+  int (*db_status)(sqlite3*,int,int*,int*,int);
+  int (*extended_errcode)(sqlite3*);
+  void (*log)(int,const char*,...);
+  sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64);
+  const char *(*sourceid)(void);
+  int (*stmt_status)(sqlite3_stmt*,int,int);
+  int (*strnicmp)(const char*,const char*,int);
+  int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*);
+  int (*wal_autocheckpoint)(sqlite3*,int);
+  int (*wal_checkpoint)(sqlite3*,const char*);
+  void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*);
 };
 
 /*
@@ -84241,6 +84657,27 @@ struct sqlite3_api_routines {
 #define sqlite3_next_stmt              sqlite3_api->next_stmt
 #define sqlite3_sql                    sqlite3_api->sql
 #define sqlite3_status                 sqlite3_api->status
+#define sqlite3_backup_finish          sqlite3_api->backup_finish
+#define sqlite3_backup_init            sqlite3_api->backup_init
+#define sqlite3_backup_pagecount       sqlite3_api->backup_pagecount
+#define sqlite3_backup_remaining       sqlite3_api->backup_remaining
+#define sqlite3_backup_step            sqlite3_api->backup_step
+#define sqlite3_compileoption_get      sqlite3_api->compileoption_get
+#define sqlite3_compileoption_used     sqlite3_api->compileoption_used
+#define sqlite3_create_function_v2     sqlite3_api->create_function_v2
+#define sqlite3_db_config              sqlite3_api->db_config
+#define sqlite3_db_mutex               sqlite3_api->db_mutex
+#define sqlite3_db_status              sqlite3_api->db_status
+#define sqlite3_extended_errcode       sqlite3_api->extended_errcode
+#define sqlite3_log                    sqlite3_api->log
+#define sqlite3_soft_heap_limit64      sqlite3_api->soft_heap_limit64
+#define sqlite3_sourceid               sqlite3_api->sourceid
+#define sqlite3_stmt_status            sqlite3_api->stmt_status
+#define sqlite3_strnicmp               sqlite3_api->strnicmp
+#define sqlite3_unlock_notify          sqlite3_api->unlock_notify
+#define sqlite3_wal_autocheckpoint     sqlite3_api->wal_autocheckpoint
+#define sqlite3_wal_checkpoint         sqlite3_api->wal_checkpoint
+#define sqlite3_wal_hook               sqlite3_api->wal_hook
 #endif /* SQLITE_CORE */
 
 #define SQLITE_EXTENSION_INIT1     const sqlite3_api_routines *sqlite3_api = 0;
@@ -84558,6 +84995,46 @@ static const sqlite3_api_routines sqlite3Apis = {
   sqlite3_next_stmt,
   sqlite3_sql,
   sqlite3_status,
+
+  /*
+  ** Added for 3.7.4
+  */
+  sqlite3_backup_finish,
+  sqlite3_backup_init,
+  sqlite3_backup_pagecount,
+  sqlite3_backup_remaining,
+  sqlite3_backup_step,
+#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
+  sqlite3_compileoption_get,
+  sqlite3_compileoption_used,
+#else
+  0,
+  0,
+#endif
+  sqlite3_create_function_v2,
+  sqlite3_db_config,
+  sqlite3_db_mutex,
+  sqlite3_db_status,
+  sqlite3_extended_errcode,
+  sqlite3_log,
+  sqlite3_soft_heap_limit64,
+  sqlite3_sourceid,
+  sqlite3_stmt_status,
+  sqlite3_strnicmp,
+#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
+  sqlite3_unlock_notify,
+#else
+  0,
+#endif
+#ifndef SQLITE_OMIT_WAL
+  sqlite3_wal_autocheckpoint,
+  sqlite3_wal_checkpoint,
+  sqlite3_wal_hook,
+#else
+  0,
+  0,
+  0,
+#endif
 };
 
 /*
@@ -84873,7 +85350,7 @@ static u8 getSafetyLevel(const char *z){
   static const u8 iValue[] =  {1, 0, 0, 0, 1, 1, 2};
   int i, n;
   if( sqlite3Isdigit(*z) ){
-    return (u8)atoi(z);
+    return (u8)sqlite3Atoi(z);
   }
   n = sqlite3Strlen30(z);
   for(i=0; i<ArraySize(iLength); i++){
@@ -84914,7 +85391,7 @@ static int getAutoVacuum(const char *z){
   if( 0==sqlite3StrICmp(z, "none") ) return BTREE_AUTOVACUUM_NONE;
   if( 0==sqlite3StrICmp(z, "full") ) return BTREE_AUTOVACUUM_FULL;
   if( 0==sqlite3StrICmp(z, "incremental") ) return BTREE_AUTOVACUUM_INCR;
-  i = atoi(z);
+  i = sqlite3Atoi(z);
   return (u8)((i>=0&&i<=2)?i:0);
 }
 #endif /* ifndef SQLITE_OMIT_AUTOVACUUM */
@@ -85010,6 +85487,7 @@ static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){
     { "empty_result_callbacks",   SQLITE_NullCallback  },
     { "legacy_file_format",       SQLITE_LegacyFileFmt },
     { "fullfsync",                SQLITE_FullFSync     },
+    { "checkpoint_fullfsync",     SQLITE_CkptFullFSync },
     { "reverse_unordered_selects", SQLITE_ReverseOrder  },
 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
     { "automatic_index",          SQLITE_AutoIndex     },
@@ -85221,7 +85699,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
       sqlite3VdbeChangeP1(v, addr+1, iDb);
       sqlite3VdbeChangeP1(v, addr+6, SQLITE_DEFAULT_CACHE_SIZE);
     }else{
-      int size = atoi(zRight);
+      int size = sqlite3Atoi(zRight);
       if( size<0 ) size = -size;
       sqlite3BeginWriteOperation(pParse, 0, iDb);
       sqlite3VdbeAddOp2(v, OP_Integer, size, 1);
@@ -85250,7 +85728,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
       /* Malloc may fail when setting the page-size, as there is an internal
       ** buffer that the pager module resizes using sqlite3_realloc().
       */
-      db->nextPagesize = atoi(zRight);
+      db->nextPagesize = sqlite3Atoi(zRight);
       if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize, -1, 0) ){
         db->mallocFailed = 1;
       }
@@ -85258,28 +85736,6 @@ SQLITE_PRIVATE void sqlite3Pragma(
   }else
 
   /*
-  **  PRAGMA [database.]max_page_count
-  **  PRAGMA [database.]max_page_count=N
-  **
-  ** The first form reports the current setting for the
-  ** maximum number of pages in the database file.  The 
-  ** second form attempts to change this setting.  Both
-  ** forms return the current setting.
-  */
-  if( sqlite3StrICmp(zLeft,"max_page_count")==0 ){
-    Btree *pBt = pDb->pBt;
-    int newMax = 0;
-    assert( pBt!=0 );
-    if( zRight ){
-      newMax = atoi(zRight);
-    }
-    if( ALWAYS(pBt) ){
-      newMax = sqlite3BtreeMaxPageCount(pBt, newMax);
-    }
-    returnSingleInt(pParse, "max_page_count", newMax);
-  }else
-
-  /*
   **  PRAGMA [database.]secure_delete
   **  PRAGMA [database.]secure_delete=ON/OFF
   **
@@ -85305,19 +85761,33 @@ SQLITE_PRIVATE void sqlite3Pragma(
   }else
 
   /*
+  **  PRAGMA [database.]max_page_count
+  **  PRAGMA [database.]max_page_count=N
+  **
+  ** The first form reports the current setting for the
+  ** maximum number of pages in the database file.  The 
+  ** second form attempts to change this setting.  Both
+  ** forms return the current setting.
+  **
   **  PRAGMA [database.]page_count
   **
   ** Return the number of pages in the specified database.
   */
-  if( sqlite3StrICmp(zLeft,"page_count")==0 ){
+  if( sqlite3StrICmp(zLeft,"page_count")==0
+   || sqlite3StrICmp(zLeft,"max_page_count")==0
+  ){
     int iReg;
     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
     sqlite3CodeVerifySchema(pParse, iDb);
     iReg = ++pParse->nMem;
-    sqlite3VdbeAddOp2(v, OP_Pagecount, iDb, iReg);
+    if( zLeft[0]=='p' ){
+      sqlite3VdbeAddOp2(v, OP_Pagecount, iDb, iReg);
+    }else{
+      sqlite3VdbeAddOp3(v, OP_MaxPgcnt, iDb, iReg, sqlite3Atoi(zRight));
+    }
     sqlite3VdbeAddOp2(v, OP_ResultRow, iReg, 1);
     sqlite3VdbeSetNumCols(v, 1);
-    sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "page_count", SQLITE_STATIC);
+    sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT);
   }else
 
   /*
@@ -85539,7 +86009,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
     if( !zRight ){
       returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size);
     }else{
-      int size = atoi(zRight);
+      int size = sqlite3Atoi(zRight);
       if( size<0 ) size = -size;
       pDb->pSchema->cache_size = size;
       sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
@@ -85932,7 +86402,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
     /* Set the maximum error count */
     mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
     if( zRight ){
-      mxErr = atoi(zRight);
+      sqlite3GetInt32(zRight, &mxErr);
       if( mxErr<=0 ){
         mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
       }
@@ -86189,7 +86659,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
       };
       int addr = sqlite3VdbeAddOpList(v, ArraySize(setCookie), setCookie);
       sqlite3VdbeChangeP1(v, addr, iDb);
-      sqlite3VdbeChangeP1(v, addr+1, atoi(zRight));
+      sqlite3VdbeChangeP1(v, addr+1, sqlite3Atoi(zRight));
       sqlite3VdbeChangeP1(v, addr+2, iDb);
       sqlite3VdbeChangeP2(v, addr+2, iCookie);
     }else{
@@ -86250,8 +86720,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
   */
   if( sqlite3StrICmp(zLeft, "wal_autocheckpoint")==0 ){
     if( zRight ){
-      int nAuto = atoi(zRight);
-      sqlite3_wal_autocheckpoint(db, nAuto);
+      sqlite3_wal_autocheckpoint(db, sqlite3Atoi(zRight));
     }
     returnSingleInt(pParse, "wal_autocheckpoint", 
        db->xWalCallback==sqlite3WalDefaultHook ? 
@@ -86341,7 +86810,8 @@ SQLITE_PRIVATE void sqlite3Pragma(
 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
   if( db->autoCommit ){
     sqlite3BtreeSetSafetyLevel(pDb->pBt, pDb->safety_level,
-               (db->flags&SQLITE_FullFSync)!=0);
+               (db->flags&SQLITE_FullFSync)!=0,
+               (db->flags&SQLITE_CkptFullFSync)!=0);
   }
 #endif
 pragma_out:
@@ -86433,7 +86903,7 @@ SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char
 
     assert( db->init.busy );
     db->init.iDb = iDb;
-    db->init.newTnum = atoi(argv[1]);
+    db->init.newTnum = sqlite3Atoi(argv[1]);
     db->init.orphanTrigger = 0;
     TESTONLY(rcp = ) sqlite3_prepare(db, argv[2], -1, &pStmt, 0);
     rc = db->errCode;
@@ -86982,13 +87452,13 @@ static int sqlite3Prepare(
   if( rc==SQLITE_OK && pParse->pVdbe && pParse->explain ){
     static const char * const azColName[] = {
        "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment",
-       "order", "from", "detail"
+       "selectid", "order", "from", "detail"
     };
     int iFirst, mx;
     if( pParse->explain==2 ){
-      sqlite3VdbeSetNumCols(pParse->pVdbe, 3);
+      sqlite3VdbeSetNumCols(pParse->pVdbe, 4);
       iFirst = 8;
-      mx = 11;
+      mx = 12;
     }else{
       sqlite3VdbeSetNumCols(pParse->pVdbe, 8);
       iFirst = 0;
@@ -87987,6 +88457,88 @@ static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){
   return pInfo;
 }
 
+#ifndef SQLITE_OMIT_COMPOUND_SELECT
+/*
+** Name of the connection operator, used for error messages.
+*/
+static const char *selectOpName(int id){
+  char *z;
+  switch( id ){
+    case TK_ALL:       z = "UNION ALL";   break;
+    case TK_INTERSECT: z = "INTERSECT";   break;
+    case TK_EXCEPT:    z = "EXCEPT";      break;
+    default:           z = "UNION";       break;
+  }
+  return z;
+}
+#endif /* SQLITE_OMIT_COMPOUND_SELECT */
+
+#ifndef SQLITE_OMIT_EXPLAIN
+/*
+** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
+** is a no-op. Otherwise, it adds a single row of output to the EQP result,
+** where the caption is of the form:
+**
+**   "USE TEMP B-TREE FOR xxx"
+**
+** where xxx is one of "DISTINCT", "ORDER BY" or "GROUP BY". Exactly which
+** is determined by the zUsage argument.
+*/
+static void explainTempTable(Parse *pParse, const char *zUsage){
+  if( pParse->explain==2 ){
+    Vdbe *v = pParse->pVdbe;
+    char *zMsg = sqlite3MPrintf(pParse->db, "USE TEMP B-TREE FOR %s", zUsage);
+    sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
+  }
+}
+
+/*
+** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
+** is a no-op. Otherwise, it adds a single row of output to the EQP result,
+** where the caption is of one of the two forms:
+**
+**   "COMPOSITE SUBQUERIES iSub1 and iSub2 (op)"
+**   "COMPOSITE SUBQUERIES iSub1 and iSub2 USING TEMP B-TREE (op)"
+**
+** where iSub1 and iSub2 are the integers passed as the corresponding
+** function parameters, and op is the text representation of the parameter
+** of the same name. The parameter "op" must be one of TK_UNION, TK_EXCEPT,
+** TK_INTERSECT or TK_ALL. The first form is used if argument bUseTmp is 
+** false, or the second form if it is true.
+*/
+static void explainComposite(
+  Parse *pParse,                  /* Parse context */
+  int op,                         /* One of TK_UNION, TK_EXCEPT etc. */
+  int iSub1,                      /* Subquery id 1 */
+  int iSub2,                      /* Subquery id 2 */
+  int bUseTmp                     /* True if a temp table was used */
+){
+  assert( op==TK_UNION || op==TK_EXCEPT || op==TK_INTERSECT || op==TK_ALL );
+  if( pParse->explain==2 ){
+    Vdbe *v = pParse->pVdbe;
+    char *zMsg = sqlite3MPrintf(
+        pParse->db, "COMPOUND SUBQUERIES %d AND %d %s(%s)", iSub1, iSub2,
+        bUseTmp?"USING TEMP B-TREE ":"", selectOpName(op)
+    );
+    sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
+  }
+}
+
+/*
+** Assign expression b to lvalue a. A second, no-op, version of this macro
+** is provided when SQLITE_OMIT_EXPLAIN is defined. This allows the code
+** in sqlite3Select() to assign values to structure member variables that
+** only exist if SQLITE_OMIT_EXPLAIN is not defined without polluting the
+** code with #ifndef directives.
+*/
+# define explainSetInteger(a, b) a = b
+
+#else
+/* No-op versions of the explainXXX() functions and macros. */
+# define explainTempTable(y,z)
+# define explainComposite(v,w,x,y,z)
+# define explainSetInteger(y,z)
+#endif
 
 /*
 ** If the inner loop was generated using a non-null pOrderBy argument,
@@ -88334,22 +88886,6 @@ static void generateColumnNames(
   generateColumnTypes(pParse, pTabList, pEList);
 }
 
-#ifndef SQLITE_OMIT_COMPOUND_SELECT
-/*
-** Name of the connection operator, used for error messages.
-*/
-static const char *selectOpName(int id){
-  char *z;
-  switch( id ){
-    case TK_ALL:       z = "UNION ALL";   break;
-    case TK_INTERSECT: z = "INTERSECT";   break;
-    case TK_EXCEPT:    z = "EXCEPT";      break;
-    default:           z = "UNION";       break;
-  }
-  return z;
-}
-#endif /* SQLITE_OMIT_COMPOUND_SELECT */
-
 /*
 ** Given a an expression list (which is really the list of expressions
 ** that form the result set of a SELECT statement) compute appropriate
@@ -88512,6 +89048,7 @@ SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
   assert( db->lookaside.bEnabled==0 );
   pTab->nRef = 1;
   pTab->zName = 0;
+  pTab->nRowEst = 1000000;
   selectColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
   selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSelect);
   pTab->iPKey = -1;
@@ -88582,6 +89119,8 @@ static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
       VdbeComment((v, "LIMIT counter"));
       if( n==0 ){
         sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak);
+      }else{
+        if( p->nSelectRow > (double)n ) p->nSelectRow = (double)n;
       }
     }else{
       sqlite3ExprCode(pParse, p->pLimit, iLimit);
@@ -88682,6 +89221,10 @@ static int multiSelect(
   SelectDest dest;      /* Alternative data destination */
   Select *pDelete = 0;  /* Chain of simple selects to delete */
   sqlite3 *db;          /* Database connection */
+#ifndef SQLITE_OMIT_EXPLAIN
+  int iSub1;            /* EQP id of left-hand query */
+  int iSub2;            /* EQP id of right-hand query */
+#endif
 
   /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs.  Only
   ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT.
@@ -88739,9 +89282,11 @@ static int multiSelect(
   switch( p->op ){
     case TK_ALL: {
       int addr = 0;
+      int nLimit;
       assert( !pPrior->pLimit );
       pPrior->pLimit = p->pLimit;
       pPrior->pOffset = p->pOffset;
+      explainSetInteger(iSub1, pParse->iNextSelectId);
       rc = sqlite3Select(pParse, pPrior, &dest);
       p->pLimit = 0;
       p->pOffset = 0;
@@ -88755,10 +89300,18 @@ static int multiSelect(
         addr = sqlite3VdbeAddOp1(v, OP_IfZero, p->iLimit);
         VdbeComment((v, "Jump ahead if LIMIT reached"));
       }
+      explainSetInteger(iSub2, pParse->iNextSelectId);
       rc = sqlite3Select(pParse, p, &dest);
       testcase( rc!=SQLITE_OK );
       pDelete = p->pPrior;
       p->pPrior = pPrior;
+      p->nSelectRow += pPrior->nSelectRow;
+      if( pPrior->pLimit
+       && sqlite3ExprIsInteger(pPrior->pLimit, &nLimit)
+       && p->nSelectRow > (double)nLimit 
+      ){
+        p->nSelectRow = (double)nLimit;
+      }
       if( addr ){
         sqlite3VdbeJumpHere(v, addr);
       }
@@ -88802,6 +89355,7 @@ static int multiSelect(
       */
       assert( !pPrior->pOrderBy );
       sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
+      explainSetInteger(iSub1, pParse->iNextSelectId);
       rc = sqlite3Select(pParse, pPrior, &uniondest);
       if( rc ){
         goto multi_select_end;
@@ -88821,6 +89375,7 @@ static int multiSelect(
       pOffset = p->pOffset;
       p->pOffset = 0;
       uniondest.eDest = op;
+      explainSetInteger(iSub2, pParse->iNextSelectId);
       rc = sqlite3Select(pParse, p, &uniondest);
       testcase( rc!=SQLITE_OK );
       /* Query flattening in sqlite3Select() might refill p->pOrderBy.
@@ -88829,6 +89384,7 @@ static int multiSelect(
       pDelete = p->pPrior;
       p->pPrior = pPrior;
       p->pOrderBy = 0;
+      if( p->op==TK_UNION ) p->nSelectRow += pPrior->nSelectRow;
       sqlite3ExprDelete(db, p->pLimit);
       p->pLimit = pLimit;
       p->pOffset = pOffset;
@@ -88886,6 +89442,7 @@ static int multiSelect(
       /* Code the SELECTs to our left into temporary table "tab1".
       */
       sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
+      explainSetInteger(iSub1, pParse->iNextSelectId);
       rc = sqlite3Select(pParse, pPrior, &intersectdest);
       if( rc ){
         goto multi_select_end;
@@ -88902,10 +89459,12 @@ static int multiSelect(
       pOffset = p->pOffset;
       p->pOffset = 0;
       intersectdest.iParm = tab2;
+      explainSetInteger(iSub2, pParse->iNextSelectId);
       rc = sqlite3Select(pParse, p, &intersectdest);
       testcase( rc!=SQLITE_OK );
       pDelete = p->pPrior;
       p->pPrior = pPrior;
+      if( p->nSelectRow>pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
       sqlite3ExprDelete(db, p->pLimit);
       p->pLimit = pLimit;
       p->pOffset = pOffset;
@@ -88938,6 +89497,8 @@ static int multiSelect(
     }
   }
 
+  explainComposite(pParse, p->op, iSub1, iSub2, p->op!=TK_ALL);
+
   /* Compute collating sequences used by 
   ** temporary tables needed to implement the compound select.
   ** Attach the KeyInfo structure to all temporary tables.
@@ -89281,6 +89842,10 @@ static int multiSelectOrderBy(
   ExprList *pOrderBy;   /* The ORDER BY clause */
   int nOrderBy;         /* Number of terms in the ORDER BY clause */
   int *aPermute;        /* Mapping from ORDER BY terms to result set columns */
+#ifndef SQLITE_OMIT_EXPLAIN
+  int iSub1;            /* EQP id of left-hand query */
+  int iSub2;            /* EQP id of right-hand query */
+#endif
 
   assert( p->pOrderBy!=0 );
   assert( pKeyDup==0 ); /* "Managed" code needs this.  Ticket #3382. */
@@ -89434,6 +89999,7 @@ static int multiSelectOrderBy(
   */
   VdbeNoopComment((v, "Begin coroutine for left SELECT"));
   pPrior->iLimit = regLimitA;
+  explainSetInteger(iSub1, pParse->iNextSelectId);
   sqlite3Select(pParse, pPrior, &destA);
   sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofA);
   sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
@@ -89448,6 +90014,7 @@ static int multiSelectOrderBy(
   savedOffset = p->iOffset;
   p->iLimit = regLimitB;
   p->iOffset = 0;  
+  explainSetInteger(iSub2, pParse->iNextSelectId);
   sqlite3Select(pParse, p, &destB);
   p->iLimit = savedLimit;
   p->iOffset = savedOffset;
@@ -89484,6 +90051,7 @@ static int multiSelectOrderBy(
     sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
     sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofA);
+    p->nSelectRow += pPrior->nSelectRow;
   }
 
   /* Generate a subroutine to run when the results from select B
@@ -89491,6 +90059,7 @@ static int multiSelectOrderBy(
   */
   if( op==TK_INTERSECT ){
     addrEofB = addrEofA;
+    if( p->nSelectRow > pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
   }else{  
     VdbeNoopComment((v, "eof-B subroutine"));
     addrEofB = sqlite3VdbeAddOp2(v, OP_If, regEofA, labelEnd);
@@ -89578,6 +90147,7 @@ static int multiSelectOrderBy(
 
   /*** TBD:  Insert subroutine calls to close cursors on incomplete
   **** subqueries ****/
+  explainComposite(pParse, p->op, iSub1, iSub2, 0);
   return SQLITE_OK;
 }
 #endif
@@ -90311,6 +90881,7 @@ static int selectExpander(Walker *pWalker, Select *p){
       while( pSel->pPrior ){ pSel = pSel->pPrior; }
       selectColumnsFromExprList(pParse, pSel->pEList, &pTab->nCol, &pTab->aCol);
       pTab->iPKey = -1;
+      pTab->nRowEst = 1000000;
       pTab->tabFlags |= TF_Ephemeral;
 #endif
     }else{
@@ -90804,6 +91375,11 @@ SQLITE_PRIVATE int sqlite3Select(
   int iEnd;              /* Address of the end of the query */
   sqlite3 *db;           /* The database connection */
 
+#ifndef SQLITE_OMIT_EXPLAIN
+  int iRestoreSelectId = pParse->iSelectId;
+  pParse->iSelectId = pParse->iNextSelectId++;
+#endif
+
   db = pParse->db;
   if( p==0 || db->mallocFailed || pParse->nErr ){
     return 1;
@@ -90875,8 +91451,10 @@ SQLITE_PRIVATE int sqlite3Select(
     }else{
       sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
       assert( pItem->isPopulated==0 );
+      explainSetInteger(pItem->iSelectId, (u8)pParse->iNextSelectId);
       sqlite3Select(pParse, pSub, &dest);
       pItem->isPopulated = 1;
+      pItem->pTab->nRowEst = (unsigned)pSub->nSelectRow;
     }
     if( /*pParse->nErr ||*/ db->mallocFailed ){
       goto select_end;
@@ -90910,10 +91488,12 @@ SQLITE_PRIVATE int sqlite3Select(
       mxSelect = db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT];
       if( mxSelect && cnt>mxSelect ){
         sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
-        return 1;
+        goto select_end;
       }
     }
-    return multiSelect(pParse, p, pDest);
+    rc = multiSelect(pParse, p, pDest);
+    explainSetInteger(pParse->iSelectId, iRestoreSelectId);
+    return rc;
   }
 #endif
 
@@ -90925,7 +91505,6 @@ SQLITE_PRIVATE int sqlite3Select(
     p->pGroupBy = sqlite3ExprListDup(db, p->pEList, 0);
     pGroupBy = p->pGroupBy;
     p->selFlags &= ~SF_Distinct;
-    isDistinct = 0;
   }
 
   /* If there is both a GROUP BY and an ORDER BY clause and they are
@@ -90968,11 +91547,12 @@ SQLITE_PRIVATE int sqlite3Select(
   /* Set the limiter.
   */
   iEnd = sqlite3VdbeMakeLabel(v);
+  p->nSelectRow = (double)LARGEST_INT64;
   computeLimitRegisters(pParse, p, iEnd);
 
   /* Open a virtual index to use for the distinct set.
   */
-  if( isDistinct ){
+  if( p->selFlags & SF_Distinct ){
     KeyInfo *pKeyInfo;
     assert( isAgg || pGroupBy );
     distinct = pParse->nTab++;
@@ -90991,6 +91571,7 @@ SQLITE_PRIVATE int sqlite3Select(
     */
     pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy, 0);
     if( pWInfo==0 ) goto select_end;
+    if( pWInfo->nRowOut < p->nSelectRow ) p->nSelectRow = pWInfo->nRowOut;
 
     /* If sorting index that was created by a prior OP_OpenEphemeral 
     ** instruction ended up not being needed, then change the OP_OpenEphemeral
@@ -91035,6 +91616,9 @@ SQLITE_PRIVATE int sqlite3Select(
       for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){
         pItem->iAlias = 0;
       }
+      if( p->nSelectRow>(double)100 ) p->nSelectRow = (double)100;
+    }else{
+      p->nSelectRow = (double)1;
     }
 
  
@@ -91131,6 +91715,9 @@ SQLITE_PRIVATE int sqlite3Select(
         int nCol;
         int nGroupBy;
 
+        explainTempTable(pParse, 
+            isDistinct && !(p->selFlags&SF_Distinct)?"DISTINCT":"GROUP BY");
+
         groupBySort = 1;
         nGroupBy = pGroupBy->nExpr;
         nCol = nGroupBy + 1;
@@ -91392,10 +91979,15 @@ SQLITE_PRIVATE int sqlite3Select(
     
   } /* endif aggregate query */
 
+  if( distinct>=0 ){
+    explainTempTable(pParse, "DISTINCT");
+  }
+
   /* If there is an ORDER BY clause, then we need to sort the results
   ** and send them to the callback one by one.
   */
   if( pOrderBy ){
+    explainTempTable(pParse, "ORDER BY");
     generateSortTail(pParse, p, v, pEList->nExpr, pDest);
   }
 
@@ -91412,6 +92004,7 @@ SQLITE_PRIVATE int sqlite3Select(
   ** successful coding of the SELECT.
   */
 select_end:
+  explainSetInteger(pParse->iSelectId, iRestoreSelectId);
 
   /* Identify column names if results of the SELECT are to be output.
   */
@@ -94501,7 +95094,7 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
       }
       db->pVTab = 0;
     }else{
-      sqlite3Error(db, SQLITE_ERROR, zErr);
+      sqlite3Error(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
       sqlite3DbFree(db, zErr);
       rc = SQLITE_ERROR;
     }
@@ -94963,7 +95556,6 @@ struct WhereMaskSet {
 struct WhereCost {
   WherePlan plan;    /* The lookup strategy */
   double rCost;      /* Overall cost of pursuing this search strategy */
-  double nRow;       /* Estimated number of output rows */
   Bitmask used;      /* Bitmask of cursors used by this plan */
 };
 
@@ -95006,10 +95598,11 @@ struct WhereCost {
 #define WHERE_COLUMN_IN    0x00040000  /* x IN (...) */
 #define WHERE_COLUMN_NULL  0x00080000  /* x IS NULL */
 #define WHERE_INDEXED      0x000f0000  /* Anything that uses an index */
-#define WHERE_NOT_FULLSCAN 0x000f3000  /* Does not do a full table scan */
+#define WHERE_NOT_FULLSCAN 0x100f3000  /* Does not do a full table scan */
 #define WHERE_IN_ABLE      0x000f1000  /* Able to support an IN operator */
 #define WHERE_TOP_LIMIT    0x00100000  /* x<EXPR or x<=EXPR constraint */
 #define WHERE_BTM_LIMIT    0x00200000  /* x>EXPR or x>=EXPR constraint */
+#define WHERE_BOTH_LIMIT   0x00300000  /* Both x>EXPR and x<EXPR */
 #define WHERE_IDX_ONLY     0x00800000  /* Use index only - omit table */
 #define WHERE_ORDERBY      0x01000000  /* Output will appear in correct order */
 #define WHERE_REVERSE      0x02000000  /* Scan in reverse order */
@@ -96352,8 +96945,9 @@ static void bestOrClauseIndex(
   WhereTerm * const pWCEnd = &pWC->a[pWC->nTerm];        /* End of pWC->a[] */
   WhereTerm *pTerm;                 /* A single term of the WHERE clause */
 
-  /* No OR-clause optimization allowed if the NOT INDEXED clause is used */
-  if( pSrc->notIndexed ){
+  /* No OR-clause optimization allowed if the INDEXED BY or NOT INDEXED clauses
+  ** are used */
+  if( pSrc->notIndexed || pSrc->pIndex!=0 ){
     return;
   }
 
@@ -96391,7 +96985,7 @@ static void bestOrClauseIndex(
           continue;
         }
         rTotal += sTermCost.rCost;
-        nRow += sTermCost.nRow;
+        nRow += sTermCost.plan.nRow;
         used |= sTermCost.used;
         if( rTotal>=pCost->rCost ) break;
       }
@@ -96410,8 +97004,8 @@ static void bestOrClauseIndex(
       WHERETRACE(("... multi-index OR cost=%.9g nrow=%.9g\n", rTotal, nRow));
       if( rTotal<pCost->rCost ){
         pCost->rCost = rTotal;
-        pCost->nRow = nRow;
         pCost->used = used;
+        pCost->plan.nRow = nRow;
         pCost->plan.wsFlags = flags;
         pCost->plan.u.pTerm = pTerm;
       }
@@ -96495,7 +97089,7 @@ static void bestAutomaticIndex(
       WHERETRACE(("auto-index reduces cost from %.2f to %.2f\n",
                     pCost->rCost, costTempIdx));
       pCost->rCost = costTempIdx;
-      pCost->nRow = logN + 1;
+      pCost->plan.nRow = logN + 1;
       pCost->plan.wsFlags = WHERE_TEMP_INDEX;
       pCost->used = pTerm->prereqRight;
       break;
@@ -97568,11 +98162,11 @@ static void bestBtreeIndex(
     ** index and its cost in the pCost structure.
     */
     if( (!pIdx || wsFlags)
-     && (cost<pCost->rCost || (cost<=pCost->rCost && nRow<pCost->nRow))
+     && (cost<pCost->rCost || (cost<=pCost->rCost && nRow<pCost->plan.nRow))
     ){
       pCost->rCost = cost;
-      pCost->nRow = nRow;
       pCost->used = used;
+      pCost->plan.nRow = nRow;
       pCost->plan.wsFlags = (wsFlags&wsFlagMask);
       pCost->plan.nEq = nEq;
       pCost->plan.u.pIdx = pIdx;
@@ -97901,6 +98495,161 @@ static int codeAllEqualityTerms(
   return regBase;
 }
 
+#ifndef SQLITE_OMIT_EXPLAIN
+/*
+** This routine is a helper for explainIndexRange() below
+**
+** pStr holds the text of an expression that we are building up one term
+** at a time.  This routine adds a new term to the end of the expression.
+** Terms are separated by AND so add the "AND" text for second and subsequent
+** terms only.
+*/
+static void explainAppendTerm(
+  StrAccum *pStr,             /* The text expression being built */
+  int iTerm,                  /* Index of this term.  First is zero */
+  const char *zColumn,        /* Name of the column */
+  const char *zOp             /* Name of the operator */
+){
+  if( iTerm ) sqlite3StrAccumAppend(pStr, " AND ", 5);
+  sqlite3StrAccumAppend(pStr, zColumn, -1);
+  sqlite3StrAccumAppend(pStr, zOp, 1);
+  sqlite3StrAccumAppend(pStr, "?", 1);
+}
+
+/*
+** Argument pLevel describes a strategy for scanning table pTab. This 
+** function returns a pointer to a string buffer containing a description
+** of the subset of table rows scanned by the strategy in the form of an
+** SQL expression. Or, if all rows are scanned, NULL is returned.
+**
+** For example, if the query:
+**
+**   SELECT * FROM t1 WHERE a=1 AND b>2;
+**
+** is run and there is an index on (a, b), then this function returns a
+** string similar to:
+**
+**   "a=? AND b>?"
+**
+** The returned pointer points to memory obtained from sqlite3DbMalloc().
+** It is the responsibility of the caller to free the buffer when it is
+** no longer required.
+*/
+static char *explainIndexRange(sqlite3 *db, WhereLevel *pLevel, Table *pTab){
+  WherePlan *pPlan = &pLevel->plan;
+  Index *pIndex = pPlan->u.pIdx;
+  int nEq = pPlan->nEq;
+  int i, j;
+  Column *aCol = pTab->aCol;
+  int *aiColumn = pIndex->aiColumn;
+  StrAccum txt;
+
+  if( nEq==0 && (pPlan->wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ){
+    return 0;
+  }
+  sqlite3StrAccumInit(&txt, 0, 0, SQLITE_MAX_LENGTH);
+  txt.db = db;
+  sqlite3StrAccumAppend(&txt, " (", 2);
+  for(i=0; i<nEq; i++){
+    explainAppendTerm(&txt, i, aCol[aiColumn[i]].zName, "=");
+  }
+
+  j = i;
+  if( pPlan->wsFlags&WHERE_BTM_LIMIT ){
+    explainAppendTerm(&txt, i++, aCol[aiColumn[j]].zName, ">");
+  }
+  if( pPlan->wsFlags&WHERE_TOP_LIMIT ){
+    explainAppendTerm(&txt, i, aCol[aiColumn[j]].zName, "<");
+  }
+  sqlite3StrAccumAppend(&txt, ")", 1);
+  return sqlite3StrAccumFinish(&txt);
+}
+
+/*
+** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN
+** command. If the query being compiled is an EXPLAIN QUERY PLAN, a single
+** record is added to the output to describe the table scan strategy in 
+** pLevel.
+*/
+static void explainOneScan(
+  Parse *pParse,                  /* Parse context */
+  SrcList *pTabList,              /* Table list this loop refers to */
+  WhereLevel *pLevel,             /* Scan to write OP_Explain opcode for */
+  int iLevel,                     /* Value for "level" column of output */
+  int iFrom,                      /* Value for "from" column of output */
+  u16 wctrlFlags                  /* Flags passed to sqlite3WhereBegin() */
+){
+  if( pParse->explain==2 ){
+    u32 flags = pLevel->plan.wsFlags;
+    struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
+    Vdbe *v = pParse->pVdbe;      /* VM being constructed */
+    sqlite3 *db = pParse->db;     /* Database handle */
+    char *zMsg;                   /* Text to add to EQP output */
+    sqlite3_int64 nRow;           /* Expected number of rows visited by scan */
+    int iId = pParse->iSelectId;  /* Select id (left-most output column) */
+    int isSearch;                 /* True for a SEARCH. False for SCAN. */
+
+    if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return;
+
+    isSearch = (pLevel->plan.nEq>0)
+             || (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0
+             || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX));
+
+    zMsg = sqlite3MPrintf(db, "%s", isSearch?"SEARCH":"SCAN");
+    if( pItem->pSelect ){
+      zMsg = sqlite3MAppendf(db, zMsg, "%s SUBQUERY %d", zMsg,pItem->iSelectId);
+    }else{
+      zMsg = sqlite3MAppendf(db, zMsg, "%s TABLE %s", zMsg, pItem->zName);
+    }
+
+    if( pItem->zAlias ){
+      zMsg = sqlite3MAppendf(db, zMsg, "%s AS %s", zMsg, pItem->zAlias);
+    }
+    if( (flags & WHERE_INDEXED)!=0 ){
+      char *zWhere = explainIndexRange(db, pLevel, pItem->pTab);
+      zMsg = sqlite3MAppendf(db, zMsg, "%s USING %s%sINDEX%s%s%s", zMsg, 
+          ((flags & WHERE_TEMP_INDEX)?"AUTOMATIC ":""),
+          ((flags & WHERE_IDX_ONLY)?"COVERING ":""),
+          ((flags & WHERE_TEMP_INDEX)?"":" "),
+          ((flags & WHERE_TEMP_INDEX)?"": pLevel->plan.u.pIdx->zName),
+          zWhere
+      );
+      sqlite3DbFree(db, zWhere);
+    }else if( flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
+      zMsg = sqlite3MAppendf(db, zMsg, "%s USING INTEGER PRIMARY KEY", zMsg);
+
+      if( flags&WHERE_ROWID_EQ ){
+        zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid=?)", zMsg);
+      }else if( (flags&WHERE_BOTH_LIMIT)==WHERE_BOTH_LIMIT ){
+        zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>? AND rowid<?)", zMsg);
+      }else if( flags&WHERE_BTM_LIMIT ){
+        zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>?)", zMsg);
+      }else if( flags&WHERE_TOP_LIMIT ){
+        zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid<?)", zMsg);
+      }
+    }
+#ifndef SQLITE_OMIT_VIRTUALTABLE
+    else if( (flags & WHERE_VIRTUALTABLE)!=0 ){
+      sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx;
+      zMsg = sqlite3MAppendf(db, zMsg, "%s VIRTUAL TABLE INDEX %d:%s", zMsg,
+                  pVtabIdx->idxNum, pVtabIdx->idxStr);
+    }
+#endif
+    if( wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX) ){
+      testcase( wctrlFlags & WHERE_ORDERBY_MIN );
+      nRow = 1;
+    }else{
+      nRow = (sqlite3_int64)pLevel->plan.nRow;
+    }
+    zMsg = sqlite3MAppendf(db, zMsg, "%s (~%lld rows)", zMsg, nRow);
+    sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg, P4_DYNAMIC);
+  }
+}
+#else
+# define explainOneScan(u,v,w,x,y,z)
+#endif /* SQLITE_OMIT_EXPLAIN */
+
+
 /*
 ** Generate code for the start of the iLevel-th loop in the WHERE clause
 ** implementation described by pWInfo.
@@ -98308,7 +99057,7 @@ static Bitmask codeOneLoopStart(
     r1 = sqlite3GetTempReg(pParse);
     testcase( pLevel->plan.wsFlags & WHERE_BTM_LIMIT );
     testcase( pLevel->plan.wsFlags & WHERE_TOP_LIMIT );
-    if( pLevel->plan.wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT) ){
+    if( (pLevel->plan.wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 ){
       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, nEq, r1);
       sqlite3VdbeAddOp2(v, OP_IsNull, r1, addrCont);
     }
@@ -98442,6 +99191,9 @@ static Bitmask codeOneLoopStart(
                         WHERE_OMIT_OPEN | WHERE_OMIT_CLOSE |
                         WHERE_FORCE_TABLE | WHERE_ONETABLE_ONLY);
         if( pSubWInfo ){
+          explainOneScan(
+              pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0
+          );
           if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){
             int iSet = ((ii==pOrWc->nTerm-1)?-1:ii);
             int r;
@@ -98837,6 +99589,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
 
     memset(&bestPlan, 0, sizeof(bestPlan));
     bestPlan.rCost = SQLITE_BIG_DBL;
+    WHERETRACE(("*** Begin search for loop %d ***\n", i));
 
     /* Loop through the remaining entries in the FROM clause to find the
     ** next nested loop. The loop tests all FROM clause entries
@@ -98901,6 +99654,8 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
         pOrderBy = ((i==0 && ppOrderBy )?*ppOrderBy:0);
         if( pTabItem->pIndex==0 ) nUnconstrained++;
   
+        WHERETRACE(("=== trying table %d with isOptimal=%d ===\n",
+                    j, isOptimal));
         assert( pTabItem->pTab );
 #ifndef SQLITE_OMIT_VIRTUALTABLE
         if( IsVirtual(pTabItem->pTab) ){
@@ -98951,10 +99706,12 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
             && (nUnconstrained==0 || pTabItem->pIndex==0   /* (3) */
                 || NEVER((sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0))
             && (bestJ<0 || sCost.rCost<bestPlan.rCost      /* (4) */
-                || (sCost.rCost<=bestPlan.rCost && sCost.nRow<bestPlan.nRow))
+                || (sCost.rCost<=bestPlan.rCost 
+                 && sCost.plan.nRow<bestPlan.plan.nRow))
         ){
-          WHERETRACE(("... best so far with cost=%g and nRow=%g\n",
-                      sCost.rCost, sCost.nRow));
+          WHERETRACE(("=== table %d is best so far"
+                      " with cost=%g and nRow=%g\n",
+                      j, sCost.rCost, sCost.plan.nRow));
           bestPlan = sCost;
           bestJ = j;
         }
@@ -98963,8 +99720,9 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
     }
     assert( bestJ>=0 );
     assert( notReady & getMask(pMaskSet, pTabList->a[bestJ].iCursor) );
-    WHERETRACE(("*** Optimizer selects table %d for loop %d\n", bestJ,
-           pLevel-pWInfo->a));
+    WHERETRACE(("*** Optimizer selects table %d for loop %d"
+                " with cost=%g and nRow=%g\n",
+                bestJ, pLevel-pWInfo->a, bestPlan.rCost, bestPlan.plan.nRow));
     if( (bestPlan.plan.wsFlags & WHERE_ORDERBY)!=0 ){
       *ppOrderBy = 0;
     }
@@ -98979,7 +99737,9 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
     }
     notReady &= ~getMask(pMaskSet, pTabList->a[bestJ].iCursor);
     pLevel->iFrom = (u8)bestJ;
-    if( bestPlan.nRow>=(double)1 ) pParse->nQueryLoop *= bestPlan.nRow;
+    if( bestPlan.plan.nRow>=(double)1 ){
+      pParse->nQueryLoop *= bestPlan.plan.nRow;
+    }
 
     /* Check that if the table scanned by this loop iteration had an
     ** INDEXED BY clause attached to it, that the named index is being
@@ -99027,44 +99787,15 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
   */
   sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */
   notReady = ~(Bitmask)0;
+  pWInfo->nRowOut = (double)1;
   for(i=0, pLevel=pWInfo->a; i<nTabList; i++, pLevel++){
     Table *pTab;     /* Table to open */
     int iDb;         /* Index of database containing table/index */
 
-#ifndef SQLITE_OMIT_EXPLAIN
-    if( pParse->explain==2 ){
-      char *zMsg;
-      struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
-      zMsg = sqlite3MPrintf(db, "TABLE %s", pItem->zName);
-      if( pItem->zAlias ){
-        zMsg = sqlite3MAppendf(db, zMsg, "%s AS %s", zMsg, pItem->zAlias);
-      }
-      if( (pLevel->plan.wsFlags & WHERE_TEMP_INDEX)!=0 ){
-        zMsg = sqlite3MAppendf(db, zMsg, "%s WITH AUTOMATIC INDEX", zMsg);
-      }else if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){
-        zMsg = sqlite3MAppendf(db, zMsg, "%s WITH INDEX %s",
-           zMsg, pLevel->plan.u.pIdx->zName);
-      }else if( pLevel->plan.wsFlags & WHERE_MULTI_OR ){
-        zMsg = sqlite3MAppendf(db, zMsg, "%s VIA MULTI-INDEX UNION", zMsg);
-      }else if( pLevel->plan.wsFlags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
-        zMsg = sqlite3MAppendf(db, zMsg, "%s USING PRIMARY KEY", zMsg);
-      }
-#ifndef SQLITE_OMIT_VIRTUALTABLE
-      else if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){
-        sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx;
-        zMsg = sqlite3MAppendf(db, zMsg, "%s VIRTUAL TABLE INDEX %d:%s", zMsg,
-                    pVtabIdx->idxNum, pVtabIdx->idxStr);
-      }
-#endif
-      if( pLevel->plan.wsFlags & WHERE_ORDERBY ){
-        zMsg = sqlite3MAppendf(db, zMsg, "%s ORDER BY", zMsg);
-      }
-      sqlite3VdbeAddOp4(v, OP_Explain, i, pLevel->iFrom, 0, zMsg, P4_DYNAMIC);
-    }
-#endif /* SQLITE_OMIT_EXPLAIN */
     pTabItem = &pTabList->a[pLevel->iFrom];
     pTab = pTabItem->pTab;
     pLevel->iTabCur = pTabItem->iCursor;
+    pWInfo->nRowOut *= pLevel->plan.nRow;
     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
     if( (pTab->tabFlags & TF_Ephemeral)!=0 || pTab->pSelect ){
       /* Do nothing */
@@ -99120,8 +99851,10 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
   */
   notReady = ~(Bitmask)0;
   for(i=0; i<nTabList; i++){
+    pLevel = &pWInfo->a[i];
+    explainOneScan(pParse, pTabList, pLevel, i, pLevel->iFrom, wctrlFlags);
     notReady = codeOneLoopStart(pWInfo, i, wctrlFlags, notReady);
-    pWInfo->iContinue = pWInfo->a[i].addrCont;
+    pWInfo->iContinue = pLevel->addrCont;
   }
 
 #ifdef SQLITE_TEST  /* For testing and debugging use only */
@@ -105523,13 +106256,12 @@ static int createCollation(
   }
 
   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 1);
-  if( pColl ){
-    pColl->xCmp = xCompare;
-    pColl->pUser = pCtx;
-    pColl->xDel = xDel;
-    pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED));
-    pColl->type = collType;
-  }
+  if( pColl==0 ) return SQLITE_NOMEM;
+  pColl->xCmp = xCompare;
+  pColl->pUser = pCtx;
+  pColl->xDel = xDel;
+  pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED));
+  pColl->type = collType;
   sqlite3Error(db, SQLITE_OK, 0);
   return SQLITE_OK;
 }
@@ -106278,7 +107010,10 @@ SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, vo
       assert( pPager!=0 );
       fd = sqlite3PagerFile(pPager);
       assert( fd!=0 );
-      if( fd->pMethods ){
+      if( op==SQLITE_FCNTL_FILE_POINTER ){
+        *(sqlite3_file**)pArg = fd;
+        rc = SQLITE_OK;
+      }else if( fd->pMethods ){
         rc = sqlite3OsFileControl(fd, op, pArg);
       }
       sqlite3BtreeLeave(pBtree);
@@ -107497,8 +108232,14 @@ SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(const Fts3Hash *, const voi
 ** Macros indicating that conditional expressions are always true or
 ** false.
 */
+#ifdef SQLITE_COVERAGE_TEST
+# define ALWAYS(x) (1)
+# define NEVER(X)  (0)
+#else
 # define ALWAYS(x) (x)
 # define NEVER(X)  (x)
+#endif
+
 /*
 ** Internal types used by SQLite.
 */
@@ -107516,8 +108257,12 @@ typedef struct Fts3Table Fts3Table;
 typedef struct Fts3Cursor Fts3Cursor;
 typedef struct Fts3Expr Fts3Expr;
 typedef struct Fts3Phrase Fts3Phrase;
-typedef struct Fts3SegReader Fts3SegReader;
+typedef struct Fts3PhraseToken Fts3PhraseToken;
+
 typedef struct Fts3SegFilter Fts3SegFilter;
+typedef struct Fts3DeferredToken Fts3DeferredToken;
+typedef struct Fts3SegReader Fts3SegReader;
+typedef struct Fts3SegReaderArray Fts3SegReaderArray;
 
 /*
 ** A connection to a fulltext index is an instance of the following
@@ -107538,22 +108283,14 @@ struct Fts3Table {
   /* Precompiled statements used by the implementation. Each of these 
   ** statements is run and reset within a single virtual table API call. 
   */
-  sqlite3_stmt *aStmt[25];
-
-  /* Pointer to string containing the SQL:
-  **
-  ** "SELECT block FROM %_segments WHERE blockid BETWEEN ? AND ? 
-  **    ORDER BY blockid"
-  */
-  char *zSelectLeaves;
-  int nLeavesStmt;                /* Valid statements in aLeavesStmt */
-  int nLeavesTotal;               /* Total number of prepared leaves stmts */
-  int nLeavesAlloc;               /* Allocated size of aLeavesStmt */
-  sqlite3_stmt **aLeavesStmt;     /* Array of prepared zSelectLeaves stmts */
+  sqlite3_stmt *aStmt[24];
 
   int nNodeSize;                  /* Soft limit for node size */
-  u8 bHasContent;                 /* True if %_content table exists */
+  u8 bHasStat;                    /* True if %_stat table exists */
   u8 bHasDocsize;                 /* True if %_docsize table exists */
+  int nPgsz;                      /* Page size for host database */
+  char *zSegmentsTbl;             /* Name of %_segments table */
+  sqlite3_blob *pSegments;        /* Blob handle open on %_segments table */
 
   /* The following hash table is used to buffer pending index updates during
   ** transactions. Variable nPendingData estimates the memory size of the 
@@ -107580,14 +108317,25 @@ struct Fts3Cursor {
   u8 isRequireSeek;               /* True if must seek pStmt to %_content row */
   sqlite3_stmt *pStmt;            /* Prepared statement in use by the cursor */
   Fts3Expr *pExpr;                /* Parsed MATCH query string */
+  int nPhrase;                    /* Number of matchable phrases in query */
+  Fts3DeferredToken *pDeferred;   /* Deferred search tokens, if any */
   sqlite3_int64 iPrevId;          /* Previous id read from aDoclist */
   char *pNextId;                  /* Pointer into the body of aDoclist */
   char *aDoclist;                 /* List of docids for full-text queries */
   int nDoclist;                   /* Size of buffer at aDoclist */
+  int eEvalmode;                  /* An FTS3_EVAL_XX constant */
+  int nRowAvg;                    /* Average size of database rows, in pages */
+
   int isMatchinfoNeeded;          /* True when aMatchinfo[] needs filling in */
   u32 *aMatchinfo;                /* Information about most recent match */
+  int nMatchinfo;                 /* Number of elements in aMatchinfo[] */
+  char *zMatchinfo;               /* Matchinfo specification */
 };
 
+#define FTS3_EVAL_FILTER    0
+#define FTS3_EVAL_NEXT      1
+#define FTS3_EVAL_MATCHINFO 2
+
 /*
 ** The Fts3Cursor.eSearch member is always set to one of the following.
 ** Actualy, Fts3Cursor.eSearch can be greater than or equal to
@@ -107610,18 +108358,30 @@ struct Fts3Cursor {
 /*
 ** A "phrase" is a sequence of one or more tokens that must match in
 ** sequence.  A single token is the base case and the most common case.
-** For a sequence of tokens contained in "...", nToken will be the number
-** of tokens in the string.
-*/
+** For a sequence of tokens contained in double-quotes (i.e. "one two three")
+** nToken will be the number of tokens in the string.
+**
+** The nDocMatch and nMatch variables contain data that may be used by the
+** matchinfo() function. They are populated when the full-text index is 
+** queried for hits on the phrase. If one or more tokens in the phrase
+** are deferred, the nDocMatch and nMatch variables are populated based
+** on the assumption that the 
+*/
+struct Fts3PhraseToken {
+  char *z;                        /* Text of the token */
+  int n;                          /* Number of bytes in buffer z */
+  int isPrefix;                   /* True if token ends with a "*" character */
+  int bFulltext;                  /* True if full-text index was used */
+  Fts3SegReaderArray *pArray;     /* Segment-reader for this token */
+  Fts3DeferredToken *pDeferred;   /* Deferred token object for this token */
+};
+
 struct Fts3Phrase {
+  /* Variables populated by fts3_expr.c when parsing a MATCH expression */
   int nToken;                /* Number of tokens in the phrase */
   int iColumn;               /* Index of column this phrase must match */
   int isNot;                 /* Phrase prefixed by unary not (-) operator */
-  struct PhraseToken {
-    char *z;                 /* Text of the token */
-    int n;                   /* Number of bytes in buffer pointed to by z */
-    int isPrefix;            /* True if token ends in with a "*" character */
-  } aToken[1];               /* One entry for each token in the phrase */
+  Fts3PhraseToken aToken[1]; /* One entry for each token in the phrase */
 };
 
 /*
@@ -107671,29 +108431,34 @@ struct Fts3Expr {
 #define FTSQUERY_PHRASE 5
 
 
-/* fts3_init.c */
-SQLITE_PRIVATE int sqlite3Fts3DeleteVtab(int, sqlite3_vtab *);
-SQLITE_PRIVATE int sqlite3Fts3InitVtab(int, sqlite3*, void*, int, const char*const*, 
-                        sqlite3_vtab **, char **);
-
 /* fts3_write.c */
 SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(sqlite3_vtab*,int,sqlite3_value**,sqlite3_int64*);
 SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *);
 SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *);
 SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *);
-SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(Fts3Table *,int, sqlite3_int64,
+SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(int, sqlite3_int64,
   sqlite3_int64, sqlite3_int64, const char *, int, Fts3SegReader**);
 SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(Fts3Table*,const char*,int,int,Fts3SegReader**);
-SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3Table *, Fts3SegReader *);
+SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *);
 SQLITE_PRIVATE int sqlite3Fts3SegReaderIterate(
   Fts3Table *, Fts3SegReader **, int, Fts3SegFilter *,
   int (*)(Fts3Table *, void *, char *, int, char *, int),  void *
 );
-SQLITE_PRIVATE int sqlite3Fts3ReadBlock(Fts3Table*, sqlite3_int64, char const**, int*);
+SQLITE_PRIVATE int sqlite3Fts3SegReaderCost(Fts3Cursor *, Fts3SegReader *, int *);
 SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(Fts3Table*, sqlite3_stmt **);
-SQLITE_PRIVATE int sqlite3Fts3MatchinfoDocsizeLocal(Fts3Cursor*, u32*);
-SQLITE_PRIVATE int sqlite3Fts3MatchinfoDocsizeGlobal(Fts3Cursor*, u32*);
 SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *);
+SQLITE_PRIVATE int sqlite3Fts3ReadBlock(Fts3Table*, sqlite3_int64, char **, int*);
+
+SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(Fts3Table *, sqlite3_stmt **);
+SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(Fts3Table *, sqlite3_int64, sqlite3_stmt **);
+
+SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *);
+SQLITE_PRIVATE int sqlite3Fts3DeferToken(Fts3Cursor *, Fts3PhraseToken *, int);
+SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *);
+SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *);
+SQLITE_PRIVATE char *sqlite3Fts3DeferredDoclist(Fts3DeferredToken *, int *);
+
+SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *);
 
 /* Flags allowed as part of the 4th argument to SegmentReaderIterate() */
 #define FTS3_SEGMENT_REQUIRE_POS   0x00000001
@@ -107717,22 +108482,24 @@ SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64);
 SQLITE_PRIVATE void sqlite3Fts3Dequote(char *);
 
 SQLITE_PRIVATE char *sqlite3Fts3FindPositions(Fts3Expr *, sqlite3_int64, int);
-SQLITE_PRIVATE int sqlite3Fts3ExprLoadDoclist(Fts3Table *, Fts3Expr *);
+SQLITE_PRIVATE int sqlite3Fts3ExprLoadDoclist(Fts3Cursor *, Fts3Expr *);
+SQLITE_PRIVATE int sqlite3Fts3ExprLoadFtDoclist(Fts3Cursor *, Fts3Expr *, char **, int *);
 SQLITE_PRIVATE int sqlite3Fts3ExprNearTrim(Fts3Expr *, Fts3Expr *, int);
 
 /* fts3_tokenizer.c */
 SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *, int *);
 SQLITE_PRIVATE int sqlite3Fts3InitHashTable(sqlite3 *, Fts3Hash *, const char *);
-SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(Fts3Hash *pHash, 
-  const char *, sqlite3_tokenizer **, const char **, char **
+SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(Fts3Hash *pHash, const char *, 
+    sqlite3_tokenizer **, char **
 );
+SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char);
 
 /* fts3_snippet.c */
 SQLITE_PRIVATE void sqlite3Fts3Offsets(sqlite3_context*, Fts3Cursor*);
 SQLITE_PRIVATE void sqlite3Fts3Snippet(sqlite3_context *, Fts3Cursor *, const char *,
   const char *, const char *, int, int
 );
-SQLITE_PRIVATE void sqlite3Fts3Matchinfo(sqlite3_context *, Fts3Cursor *);
+SQLITE_PRIVATE void sqlite3Fts3Matchinfo(sqlite3_context *, Fts3Cursor *, const char *);
 
 /* fts3_expr.c */
 SQLITE_PRIVATE int sqlite3Fts3ExprParse(sqlite3_tokenizer *, 
@@ -107881,16 +108648,13 @@ static int fts3DisconnectMethod(sqlite3_vtab *pVtab){
   int i;
 
   assert( p->nPendingData==0 );
+  assert( p->pSegments==0 );
 
   /* Free any prepared statements held */
   for(i=0; i<SizeofArray(p->aStmt); i++){
     sqlite3_finalize(p->aStmt[i]);
   }
-  for(i=0; i<p->nLeavesStmt; i++){
-    sqlite3_finalize(p->aLeavesStmt[i]);
-  }
-  sqlite3_free(p->zSelectLeaves);
-  sqlite3_free(p->aLeavesStmt);
+  sqlite3_free(p->zSegmentsTbl);
 
   /* Invoke the tokenizer destructor to free the tokenizer. */
   p->pTokenizer->pModule->xDestroy(p->pTokenizer);
@@ -107901,7 +108665,7 @@ static int fts3DisconnectMethod(sqlite3_vtab *pVtab){
 
 /*
 ** Construct one or more SQL statements from the format string given
-** and then evaluate those statements.  The success code is writting
+** and then evaluate those statements. The success code is written
 ** into *pRc.
 **
 ** If *pRc is initially non-zero then this routine is a no-op.
@@ -107953,33 +108717,38 @@ static int fts3DestroyMethod(sqlite3_vtab *pVtab){
 ** Invoke sqlite3_declare_vtab() to declare the schema for the FTS3 table
 ** passed as the first argument. This is done as part of the xConnect()
 ** and xCreate() methods.
+**
+** If *pRc is non-zero when this function is called, it is a no-op. 
+** Otherwise, if an error occurs, an SQLite error code is stored in *pRc
+** before returning.
 */
-static int fts3DeclareVtab(Fts3Table *p){
-  int i;                          /* Iterator variable */
-  int rc;                         /* Return code */
-  char *zSql;                     /* SQL statement passed to declare_vtab() */
-  char *zCols;                    /* List of user defined columns */
+static void fts3DeclareVtab(int *pRc, Fts3Table *p){
+  if( *pRc==SQLITE_OK ){
+    int i;                        /* Iterator variable */
+    int rc;                       /* Return code */
+    char *zSql;                   /* SQL statement passed to declare_vtab() */
+    char *zCols;                  /* List of user defined columns */
 
-  /* Create a list of user columns for the virtual table */
-  zCols = sqlite3_mprintf("%Q, ", p->azColumn[0]);
-  for(i=1; zCols && i<p->nColumn; i++){
-    zCols = sqlite3_mprintf("%z%Q, ", zCols, p->azColumn[i]);
-  }
+    /* Create a list of user columns for the virtual table */
+    zCols = sqlite3_mprintf("%Q, ", p->azColumn[0]);
+    for(i=1; zCols && i<p->nColumn; i++){
+      zCols = sqlite3_mprintf("%z%Q, ", zCols, p->azColumn[i]);
+    }
 
-  /* Create the whole "CREATE TABLE" statement to pass to SQLite */
-  zSql = sqlite3_mprintf(
-      "CREATE TABLE x(%s %Q HIDDEN, docid HIDDEN)", zCols, p->zName
-  );
+    /* Create the whole "CREATE TABLE" statement to pass to SQLite */
+    zSql = sqlite3_mprintf(
+        "CREATE TABLE x(%s %Q HIDDEN, docid HIDDEN)", zCols, p->zName
+    );
+    if( !zCols || !zSql ){
+      rc = SQLITE_NOMEM;
+    }else{
+      rc = sqlite3_declare_vtab(p->db, zSql);
+    }
 
-  if( !zCols || !zSql ){
-    rc = SQLITE_NOMEM;
-  }else{
-    rc = sqlite3_declare_vtab(p->db, zSql);
+    sqlite3_free(zSql);
+    sqlite3_free(zCols);
+    *pRc = rc;
   }
-
-  sqlite3_free(zSql);
-  sqlite3_free(zCols);
-  return rc;
 }
 
 /*
@@ -107998,21 +108767,19 @@ static int fts3CreateTables(Fts3Table *p){
   sqlite3 *db = p->db;            /* The database connection */
 
   /* Create a list of user columns for the content table */
-  if( p->bHasContent ){
-    zContentCols = sqlite3_mprintf("docid INTEGER PRIMARY KEY");
-    for(i=0; zContentCols && i<p->nColumn; i++){
-      char *z = p->azColumn[i];
-      zContentCols = sqlite3_mprintf("%z, 'c%d%q'", zContentCols, i, z);
-    }
-    if( zContentCols==0 ) rc = SQLITE_NOMEM;
-
-    /* Create the content table */
-    fts3DbExec(&rc, db, 
-       "CREATE TABLE %Q.'%q_content'(%s)",
-       p->zDb, p->zName, zContentCols
-    );
-    sqlite3_free(zContentCols);
+  zContentCols = sqlite3_mprintf("docid INTEGER PRIMARY KEY");
+  for(i=0; zContentCols && i<p->nColumn; i++){
+    char *z = p->azColumn[i];
+    zContentCols = sqlite3_mprintf("%z, 'c%d%q'", zContentCols, i, z);
   }
+  if( zContentCols==0 ) rc = SQLITE_NOMEM;
+
+  /* Create the content table */
+  fts3DbExec(&rc, db, 
+     "CREATE TABLE %Q.'%q_content'(%s)",
+     p->zDb, p->zName, zContentCols
+  );
+  sqlite3_free(zContentCols);
   /* Create other tables */
   fts3DbExec(&rc, db, 
       "CREATE TABLE %Q.'%q_segments'(blockid INTEGER PRIMARY KEY, block BLOB);",
@@ -108035,6 +108802,8 @@ static int fts3CreateTables(Fts3Table *p){
         "CREATE TABLE %Q.'%q_docsize'(docid INTEGER PRIMARY KEY, size BLOB);",
         p->zDb, p->zName
     );
+  }
+  if( p->bHasStat ){
     fts3DbExec(&rc, db, 
         "CREATE TABLE %Q.'%q_stat'(id INTEGER PRIMARY KEY, value BLOB);",
         p->zDb, p->zName
@@ -108044,39 +108813,63 @@ static int fts3CreateTables(Fts3Table *p){
 }
 
 /*
-** An sqlite3_exec() callback for fts3TableExists.
+** Store the current database page-size in bytes in p->nPgsz.
+**
+** If *pRc is non-zero when this function is called, it is a no-op. 
+** Otherwise, if an error occurs, an SQLite error code is stored in *pRc
+** before returning.
 */
-static int fts3TableExistsCallback(void *pArg, int n, char **pp1, char **pp2){
-  UNUSED_PARAMETER(n);
-  UNUSED_PARAMETER(pp1);
-  UNUSED_PARAMETER(pp2);
-  *(int*)pArg = 1;
-  return 1;
+static void fts3DatabasePageSize(int *pRc, Fts3Table *p){
+  if( *pRc==SQLITE_OK ){
+    int rc;                       /* Return code */
+    char *zSql;                   /* SQL text "PRAGMA %Q.page_size" */
+    sqlite3_stmt *pStmt;          /* Compiled "PRAGMA %Q.page_size" statement */
+  
+    zSql = sqlite3_mprintf("PRAGMA %Q.page_size", p->zDb);
+    if( !zSql ){
+      rc = SQLITE_NOMEM;
+    }else{
+      rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
+      if( rc==SQLITE_OK ){
+        sqlite3_step(pStmt);
+        p->nPgsz = sqlite3_column_int(pStmt, 0);
+        rc = sqlite3_finalize(pStmt);
+      }
+    }
+    assert( p->nPgsz>0 || rc!=SQLITE_OK );
+    sqlite3_free(zSql);
+    *pRc = rc;
+  }
 }
 
 /*
-** Determine if a table currently exists in the database.
+** "Special" FTS4 arguments are column specifications of the following form:
+**
+**   <key> = <value>
+**
+** There may not be whitespace surrounding the "=" character. The <value> 
+** term may be quoted, but the <key> may not.
 */
-static void fts3TableExists(
-  int *pRc,             /* Success code */
-  sqlite3 *db,          /* The database connection to test */
-  const char *zDb,      /* ATTACHed database within the connection */
-  const char *zName,    /* Name of the FTS3 table */
-  const char *zSuffix,  /* Shadow table extension */
-  u8 *pResult           /* Write results here */
+static int fts3IsSpecialColumn(
+  const char *z, 
+  int *pnKey,
+  char **pzValue
 ){
-  int rc = SQLITE_OK;
-  int res = 0;
-  char *zSql;
-  if( *pRc ) return;
-  zSql = sqlite3_mprintf(
-    "SELECT 1 FROM %Q.sqlite_master WHERE name='%q%s'",
-    zDb, zName, zSuffix
-  );    
-  rc = sqlite3_exec(db, zSql, fts3TableExistsCallback, &res, 0);
-  sqlite3_free(zSql);
-  *pResult = (u8)(res & 0xff);
-  if( rc!=SQLITE_ABORT ) *pRc = rc;
+  char *zValue;
+  const char *zCsr = z;
+
+  while( *zCsr!='=' ){
+    if( *zCsr=='\0' ) return 0;
+    zCsr++;
+  }
+
+  *pnKey = (int)(zCsr-z);
+  zValue = sqlite3_mprintf("%s", &zCsr[1]);
+  if( zValue ){
+    sqlite3Fts3Dequote(zValue);
+  }
+  *pzValue = zValue;
+  return 1;
 }
 
 /*
@@ -108100,8 +108893,8 @@ static int fts3InitVtab(
   char **pzErr                    /* Write any error message here */
 ){
   Fts3Hash *pHash = (Fts3Hash *)pAux;
-  Fts3Table *p;                   /* Pointer to allocated vtab */
-  int rc;                         /* Return code */
+  Fts3Table *p = 0;               /* Pointer to allocated vtab */
+  int rc = SQLITE_OK;             /* Return code */
   int i;                          /* Iterator variable */
   int nByte;                      /* Size of allocation used for *p */
   int iCol;                       /* Column index */
@@ -108110,35 +108903,90 @@ static int fts3InitVtab(
   char *zCsr;                     /* Space for holding column names */
   int nDb;                        /* Bytes required to hold database name */
   int nName;                      /* Bytes required to hold table name */
-
-  const char *zTokenizer = 0;               /* Name of tokenizer to use */
+  int isFts4 = (argv[0][3]=='4'); /* True for FTS4, false for FTS3 */
+  int bNoDocsize = 0;             /* True to omit %_docsize table */
+  const char **aCol;              /* Array of column names */
   sqlite3_tokenizer *pTokenizer = 0;        /* Tokenizer for this table */
 
+  assert( strlen(argv[0])==4 );
+  assert( (sqlite3_strnicmp(argv[0], "fts4", 4)==0 && isFts4)
+       || (sqlite3_strnicmp(argv[0], "fts3", 4)==0 && !isFts4)
+  );
+
   nDb = (int)strlen(argv[1]) + 1;
   nName = (int)strlen(argv[2]) + 1;
-  for(i=3; i<argc; i++){
+
+  aCol = (const char **)sqlite3_malloc(sizeof(const char *) * (argc-2) );
+  if( !aCol ) return SQLITE_NOMEM;
+  memset((void *)aCol, 0, sizeof(const char *) * (argc-2));
+
+  /* Loop through all of the arguments passed by the user to the FTS3/4
+  ** module (i.e. all the column names and special arguments). This loop
+  ** does the following:
+  **
+  **   + Figures out the number of columns the FTSX table will have, and
+  **     the number of bytes of space that must be allocated to store copies
+  **     of the column names.
+  **
+  **   + If there is a tokenizer specification included in the arguments,
+  **     initializes the tokenizer pTokenizer.
+  */
+  for(i=3; rc==SQLITE_OK && i<argc; i++){
     char const *z = argv[i];
-    rc = sqlite3Fts3InitTokenizer(pHash, z, &pTokenizer, &zTokenizer, pzErr);
-    if( rc!=SQLITE_OK ){
-      return rc;
+    int nKey;
+    char *zVal;
+
+    /* Check if this is a tokenizer specification */
+    if( !pTokenizer 
+     && strlen(z)>8
+     && 0==sqlite3_strnicmp(z, "tokenize", 8) 
+     && 0==sqlite3Fts3IsIdChar(z[8])
+    ){
+      rc = sqlite3Fts3InitTokenizer(pHash, &z[9], &pTokenizer, pzErr);
     }
-    if( z!=zTokenizer ){
-      nString += (int)(strlen(z) + 1);
+
+    /* Check if it is an FTS4 special argument. */
+    else if( isFts4 && fts3IsSpecialColumn(z, &nKey, &zVal) ){
+      if( !zVal ){
+        rc = SQLITE_NOMEM;
+        goto fts3_init_out;
+      }
+      if( nKey==9 && 0==sqlite3_strnicmp(z, "matchinfo", 9) ){
+        if( strlen(zVal)==4 && 0==sqlite3_strnicmp(zVal, "fts3", 4) ){
+          bNoDocsize = 1;
+        }else{
+          *pzErr = sqlite3_mprintf("unrecognized matchinfo: %s", zVal);
+          rc = SQLITE_ERROR;
+        }
+      }else{
+        *pzErr = sqlite3_mprintf("unrecognized parameter: %s", z);
+        rc = SQLITE_ERROR;
+      }
+      sqlite3_free(zVal);
     }
-  }
-  nCol = argc - 3 - (zTokenizer!=0);
-  if( zTokenizer==0 ){
-    rc = sqlite3Fts3InitTokenizer(pHash, 0, &pTokenizer, 0, pzErr);
-    if( rc!=SQLITE_OK ){
-      return rc;
+
+    /* Otherwise, the argument is a column name. */
+    else {
+      nString += (int)(strlen(z) + 1);
+      aCol[nCol++] = z;
     }
-    assert( pTokenizer );
   }
+  if( rc!=SQLITE_OK ) goto fts3_init_out;
 
   if( nCol==0 ){
+    assert( nString==0 );
+    aCol[0] = "content";
+    nString = 8;
     nCol = 1;
   }
 
+  if( pTokenizer==0 ){
+    rc = sqlite3Fts3InitTokenizer(pHash, "simple", &pTokenizer, pzErr);
+    if( rc!=SQLITE_OK ) goto fts3_init_out;
+  }
+  assert( pTokenizer );
+
+
   /* Allocate and populate the Fts3Table structure. */
   nByte = sizeof(Fts3Table) +              /* Fts3Table */
           nCol * sizeof(char *) +              /* azColumn */
@@ -108151,7 +108999,6 @@ static int fts3InitVtab(
     goto fts3_init_out;
   }
   memset(p, 0, nByte);
-
   p->db = db;
   p->nColumn = nCol;
   p->nPendingData = 0;
@@ -108159,11 +109006,12 @@ static int fts3InitVtab(
   p->pTokenizer = pTokenizer;
   p->nNodeSize = 1000;
   p->nMaxPendingData = FTS3_MAX_PENDING_DATA;
-  zCsr = (char *)&p->azColumn[nCol];
-
+  p->bHasDocsize = (isFts4 && bNoDocsize==0);
+  p->bHasStat = isFts4;
   fts3HashInit(&p->pendingTerms, FTS3_HASH_STRING, 1);
 
   /* Fill in the zName and zDb fields of the vtab structure. */
+  zCsr = (char *)&p->azColumn[nCol];
   p->zName = zCsr;
   memcpy(zCsr, argv[2], nName);
   zCsr += nName;
@@ -108172,52 +109020,45 @@ static int fts3InitVtab(
   zCsr += nDb;
 
   /* Fill in the azColumn array */
-  iCol = 0;
-  for(i=3; i<argc; i++){
-    if( argv[i]!=zTokenizer ){
-      char *z; 
-      int n;
-      z = (char *)sqlite3Fts3NextToken(argv[i], &n);
-      memcpy(zCsr, z, n);
-      zCsr[n] = '\0';
-      sqlite3Fts3Dequote(zCsr);
-      p->azColumn[iCol++] = zCsr;
-      zCsr += n+1;
-      assert( zCsr <= &((char *)p)[nByte] );
-    }
-  }
-  if( iCol==0 ){
-    assert( nCol==1 );
-    p->azColumn[0] = "content";
+  for(iCol=0; iCol<nCol; iCol++){
+    char *z; 
+    int n;
+    z = (char *)sqlite3Fts3NextToken(aCol[iCol], &n);
+    memcpy(zCsr, z, n);
+    zCsr[n] = '\0';
+    sqlite3Fts3Dequote(zCsr);
+    p->azColumn[iCol] = zCsr;
+    zCsr += n+1;
+    assert( zCsr <= &((char *)p)[nByte] );
   }
 
   /* If this is an xCreate call, create the underlying tables in the 
   ** database. TODO: For xConnect(), it could verify that said tables exist.
   */
   if( isCreate ){
-    p->bHasContent = 1;
-    p->bHasDocsize = argv[0][3]=='4';
     rc = fts3CreateTables(p);
-  }else{
-    rc = SQLITE_OK;
-    fts3TableExists(&rc, db, argv[1], argv[2], "_content", &p->bHasContent);
-    fts3TableExists(&rc, db, argv[1], argv[2], "_docsize", &p->bHasDocsize);
   }
-  if( rc!=SQLITE_OK ) goto fts3_init_out;
 
-  rc = fts3DeclareVtab(p);
-  if( rc!=SQLITE_OK ) goto fts3_init_out;
+  /* Figure out the page-size for the database. This is required in order to
+  ** estimate the cost of loading large doclists from the database (see 
+  ** function sqlite3Fts3SegReaderCost() for details).
+  */
+  fts3DatabasePageSize(&rc, p);
 
-  *ppVTab = &p->base;
+  /* Declare the table schema to SQLite. */
+  fts3DeclareVtab(&rc, p);
 
 fts3_init_out:
-  assert( p || (pTokenizer && rc!=SQLITE_OK) );
+
+  sqlite3_free((void *)aCol);
   if( rc!=SQLITE_OK ){
     if( p ){
       fts3DisconnectMethod((sqlite3_vtab *)p);
-    }else{
+    }else if( pTokenizer ){
       pTokenizer->pModule->xDestroy(pTokenizer);
     }
+  }else{
+    *ppVTab = &p->base;
   }
   return rc;
 }
@@ -108329,10 +109170,12 @@ static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
 ** Close the cursor.  For additional information see the documentation
 ** on the xClose method of the virtual table interface.
 */
-static int fulltextClose(sqlite3_vtab_cursor *pCursor){
+static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){
   Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
+  assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
   sqlite3_finalize(pCsr->pStmt);
   sqlite3Fts3ExprFree(pCsr->pExpr);
+  sqlite3Fts3FreeDeferredTokens(pCsr);
   sqlite3_free(pCsr->aDoclist);
   sqlite3_free(pCsr->aMatchinfo);
   sqlite3_free(pCsr);
@@ -108371,50 +109214,137 @@ static int fts3CursorSeek(sqlite3_context *pContext, Fts3Cursor *pCsr){
 }
 
 /*
-** Advance the cursor to the next row in the %_content table that
-** matches the search criteria.  For a MATCH search, this will be
-** the next row that matches.  For a full-table scan, this will be
-** simply the next row in the %_content table.  For a docid lookup,
-** this routine simply sets the EOF flag.
+** This function is used to process a single interior node when searching
+** a b-tree for a term or term prefix. The node data is passed to this 
+** function via the zNode/nNode parameters. The term to search for is
+** passed in zTerm/nTerm.
 **
-** Return SQLITE_OK if nothing goes wrong.  SQLITE_OK is returned
-** even if we reach end-of-file.  The fts3EofMethod() will be called
-** subsequently to determine whether or not an EOF was hit.
+** If piFirst is not NULL, then this function sets *piFirst to the blockid
+** of the child node that heads the sub-tree that may contain the term.
+**
+** If piLast is not NULL, then *piLast is set to the right-most child node
+** that heads a sub-tree that may contain a term for which zTerm/nTerm is
+** a prefix.
+**
+** If an OOM error occurs, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK.
 */
-static int fts3NextMethod(sqlite3_vtab_cursor *pCursor){
+static int fts3ScanInteriorNode(
+  const char *zTerm,              /* Term to select leaves for */
+  int nTerm,                      /* Size of term zTerm in bytes */
+  const char *zNode,              /* Buffer containing segment interior node */
+  int nNode,                      /* Size of buffer at zNode */
+  sqlite3_int64 *piFirst,         /* OUT: Selected child node */
+  sqlite3_int64 *piLast           /* OUT: Selected child node */
+){
   int rc = SQLITE_OK;             /* Return code */
-  Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
+  const char *zCsr = zNode;       /* Cursor to iterate through node */
+  const char *zEnd = &zCsr[nNode];/* End of interior node buffer */
+  char *zBuffer = 0;              /* Buffer to load terms into */
+  int nAlloc = 0;                 /* Size of allocated buffer */
+  int isFirstTerm = 1;            /* True when processing first term on page */
+  sqlite3_int64 iChild;           /* Block id of child node to descend to */
 
-  if( pCsr->aDoclist==0 ){
-    if( SQLITE_ROW!=sqlite3_step(pCsr->pStmt) ){
-      pCsr->isEof = 1;
-      rc = sqlite3_reset(pCsr->pStmt);
-    }
-  }else if( pCsr->pNextId>=&pCsr->aDoclist[pCsr->nDoclist] ){
-    pCsr->isEof = 1;
-  }else{
-    sqlite3_reset(pCsr->pStmt);
-    fts3GetDeltaVarint(&pCsr->pNextId, &pCsr->iPrevId);
-    pCsr->isRequireSeek = 1;
-    pCsr->isMatchinfoNeeded = 1;
+  /* Skip over the 'height' varint that occurs at the start of every 
+  ** interior node. Then load the blockid of the left-child of the b-tree
+  ** node into variable iChild.  
+  **
+  ** Even if the data structure on disk is corrupted, this (reading two
+  ** varints from the buffer) does not risk an overread. If zNode is a
+  ** root node, then the buffer comes from a SELECT statement. SQLite does
+  ** not make this guarantee explicitly, but in practice there are always
+  ** either more than 20 bytes of allocated space following the nNode bytes of
+  ** contents, or two zero bytes. Or, if the node is read from the %_segments
+  ** table, then there are always 20 bytes of zeroed padding following the
+  ** nNode bytes of content (see sqlite3Fts3ReadBlock() for details).
+  */
+  zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
+  zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
+  if( zCsr>zEnd ){
+    return SQLITE_CORRUPT;
   }
+  
+  while( zCsr<zEnd && (piFirst || piLast) ){
+    int cmp;                      /* memcmp() result */
+    int nSuffix;                  /* Size of term suffix */
+    int nPrefix = 0;              /* Size of term prefix */
+    int nBuffer;                  /* Total term size */
+  
+    /* Load the next term on the node into zBuffer. Use realloc() to expand
+    ** the size of zBuffer if required.  */
+    if( !isFirstTerm ){
+      zCsr += sqlite3Fts3GetVarint32(zCsr, &nPrefix);
+    }
+    isFirstTerm = 0;
+    zCsr += sqlite3Fts3GetVarint32(zCsr, &nSuffix);
+    
+    if( nPrefix<0 || nSuffix<0 || &zCsr[nSuffix]>zEnd ){
+      rc = SQLITE_CORRUPT;
+      goto finish_scan;
+    }
+    if( nPrefix+nSuffix>nAlloc ){
+      char *zNew;
+      nAlloc = (nPrefix+nSuffix) * 2;
+      zNew = (char *)sqlite3_realloc(zBuffer, nAlloc);
+      if( !zNew ){
+        rc = SQLITE_NOMEM;
+        goto finish_scan;
+      }
+      zBuffer = zNew;
+    }
+    memcpy(&zBuffer[nPrefix], zCsr, nSuffix);
+    nBuffer = nPrefix + nSuffix;
+    zCsr += nSuffix;
+
+    /* Compare the term we are searching for with the term just loaded from
+    ** the interior node. If the specified term is greater than or equal
+    ** to the term from the interior node, then all terms on the sub-tree 
+    ** headed by node iChild are smaller than zTerm. No need to search 
+    ** iChild.
+    **
+    ** If the interior node term is larger than the specified term, then
+    ** the tree headed by iChild may contain the specified term.
+    */
+    cmp = memcmp(zTerm, zBuffer, (nBuffer>nTerm ? nTerm : nBuffer));
+    if( piFirst && (cmp<0 || (cmp==0 && nBuffer>nTerm)) ){
+      *piFirst = iChild;
+      piFirst = 0;
+    }
+
+    if( piLast && cmp<0 ){
+      *piLast = iChild;
+      piLast = 0;
+    }
+
+    iChild++;
+  };
+
+  if( piFirst ) *piFirst = iChild;
+  if( piLast ) *piLast = iChild;
+
+ finish_scan:
+  sqlite3_free(zBuffer);
   return rc;
 }
 
 
 /*
-** The buffer pointed to by argument zNode (size nNode bytes) contains the
-** root node of a b-tree segment. The segment is guaranteed to be at least
-** one level high (i.e. the root node is not also a leaf). If successful,
-** this function locates the leaf node of the segment that may contain the 
-** term specified by arguments zTerm and nTerm and writes its block number 
-** to *piLeaf.
+** The buffer pointed to by argument zNode (size nNode bytes) contains an
+** interior node of a b-tree segment. The zTerm buffer (size nTerm bytes)
+** contains a term. This function searches the sub-tree headed by the zNode
+** node for the range of leaf nodes that may contain the specified term
+** or terms for which the specified term is a prefix.
 **
-** It is possible that the returned leaf node does not contain the specified
-** term. However, if the segment does contain said term, it is stored on
-** the identified leaf node. Because this function only inspects interior
-** segment nodes (and never loads leaf nodes into memory), it is not possible
-** to be sure.
+** If piLeaf is not NULL, then *piLeaf is set to the blockid of the 
+** left-most leaf node in the tree that may contain the specified term.
+** If piLeaf2 is not NULL, then *piLeaf2 is set to the blockid of the
+** right-most leaf node that may contain a term for which the specified
+** term is a prefix.
+**
+** It is possible that the range of returned leaf nodes does not contain 
+** the specified term or any terms for which it is a prefix. However, if the 
+** segment does contain any such terms, they are stored within the identified
+** range. Because this function only inspects interior segment nodes (and
+** never loads leaf nodes into memory), it is not possible to be sure.
 **
 ** If an error occurs, an error code other than SQLITE_OK is returned.
 */ 
@@ -108424,77 +109354,41 @@ static int fts3SelectLeaf(
   int nTerm,                      /* Size of term zTerm in bytes */
   const char *zNode,              /* Buffer containing segment interior node */
   int nNode,                      /* Size of buffer at zNode */
-  sqlite3_int64 *piLeaf           /* Selected leaf node */
+  sqlite3_int64 *piLeaf,          /* Selected leaf node */
+  sqlite3_int64 *piLeaf2          /* Selected leaf node */
 ){
-  int rc = SQLITE_OK;             /* Return code */
-  const char *zCsr = zNode;       /* Cursor to iterate through node */
-  const char *zEnd = &zCsr[nNode];/* End of interior node buffer */
-  char *zBuffer = 0;              /* Buffer to load terms into */
-  int nAlloc = 0;                 /* Size of allocated buffer */
+  int rc;                         /* Return code */
+  int iHeight;                    /* Height of this node in tree */
 
-  while( 1 ){
-    int isFirstTerm = 1;          /* True when processing first term on page */
-    int iHeight;                  /* Height of this node in tree */
-    sqlite3_int64 iChild;         /* Block id of child node to descend to */
-    int nBlock;                   /* Size of child node in bytes */
+  assert( piLeaf || piLeaf2 );
 
-    zCsr += sqlite3Fts3GetVarint32(zCsr, &iHeight);
-    zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
-  
-    while( zCsr<zEnd ){
-      int cmp;                    /* memcmp() result */
-      int nSuffix;                /* Size of term suffix */
-      int nPrefix = 0;            /* Size of term prefix */
-      int nBuffer;                /* Total term size */
-  
-      /* Load the next term on the node into zBuffer */
-      if( !isFirstTerm ){
-        zCsr += sqlite3Fts3GetVarint32(zCsr, &nPrefix);
-      }
-      isFirstTerm = 0;
-      zCsr += sqlite3Fts3GetVarint32(zCsr, &nSuffix);
-      if( nPrefix+nSuffix>nAlloc ){
-        char *zNew;
-        nAlloc = (nPrefix+nSuffix) * 2;
-        zNew = (char *)sqlite3_realloc(zBuffer, nAlloc);
-        if( !zNew ){
-          sqlite3_free(zBuffer);
-          return SQLITE_NOMEM;
-        }
-        zBuffer = zNew;
-      }
-      memcpy(&zBuffer[nPrefix], zCsr, nSuffix);
-      nBuffer = nPrefix + nSuffix;
-      zCsr += nSuffix;
-  
-      /* Compare the term we are searching for with the term just loaded from
-      ** the interior node. If the specified term is greater than or equal
-      ** to the term from the interior node, then all terms on the sub-tree 
-      ** headed by node iChild are smaller than zTerm. No need to search 
-      ** iChild.
-      **
-      ** If the interior node term is larger than the specified term, then
-      ** the tree headed by iChild may contain the specified term.
-      */
-      cmp = memcmp(zTerm, zBuffer, (nBuffer>nTerm ? nTerm : nBuffer));
-      if( cmp<0 || (cmp==0 && nBuffer>nTerm) ) break;
-      iChild++;
-    };
+  sqlite3Fts3GetVarint32(zNode, &iHeight);
+  rc = fts3ScanInteriorNode(zTerm, nTerm, zNode, nNode, piLeaf, piLeaf2);
+  assert( !piLeaf2 || !piLeaf || rc!=SQLITE_OK || (*piLeaf<=*piLeaf2) );
 
-    /* If (iHeight==1), the children of this interior node are leaves. The
-    ** specified term may be present on leaf node iChild.
-    */
-    if( iHeight==1 ){
-      *piLeaf = iChild;
-      break;
+  if( rc==SQLITE_OK && iHeight>1 ){
+    char *zBlob = 0;              /* Blob read from %_segments table */
+    int nBlob;                    /* Size of zBlob in bytes */
+
+    if( piLeaf && piLeaf2 && (*piLeaf!=*piLeaf2) ){
+      rc = sqlite3Fts3ReadBlock(p, *piLeaf, &zBlob, &nBlob);
+      if( rc==SQLITE_OK ){
+        rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, 0);
+      }
+      sqlite3_free(zBlob);
+      piLeaf = 0;
+      zBlob = 0;
     }
 
-    /* Descend to interior node iChild. */
-    rc = sqlite3Fts3ReadBlock(p, iChild, &zCsr, &nBlock);
-    if( rc!=SQLITE_OK ) break;
-    zEnd = &zCsr[nBlock];
+    if( rc==SQLITE_OK ){
+      rc = sqlite3Fts3ReadBlock(p, piLeaf ? *piLeaf : *piLeaf2, &zBlob, &nBlob);
+    }
+    if( rc==SQLITE_OK ){
+      rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, piLeaf2);
+    }
+    sqlite3_free(zBlob);
   }
-  sqlite3_free(zBuffer);
+
   return rc;
 }
 
@@ -108726,20 +109620,44 @@ static void fts3PoslistMerge(
 
 /*
 ** nToken==1 searches for adjacent positions.
+**
+** This function is used to merge two position lists into one. When it is
+** called, *pp1 and *pp2 must both point to position lists. A position-list is
+** the part of a doclist that follows each document id. For example, if a row
+** contains:
+**
+**     'a b c'|'x y z'|'a b b a'
+**
+** Then the position list for this row for token 'b' would consist of:
+**
+**     0x02 0x01 0x02 0x03 0x03 0x00
+**
+** When this function returns, both *pp1 and *pp2 are left pointing to the
+** byte following the 0x00 terminator of their respective position lists.
+**
+** If isSaveLeft is 0, an entry is added to the output position list for 
+** each position in *pp2 for which there exists one or more positions in
+** *pp1 so that (pos(*pp2)>pos(*pp1) && pos(*pp2)-pos(*pp1)<=nToken). i.e.
+** when the *pp1 token appears before the *pp2 token, but not more than nToken
+** slots before it.
 */
 static int fts3PoslistPhraseMerge(
-  char **pp,                      /* Output buffer */
+  char **pp,                      /* IN/OUT: Preallocated output buffer */
   int nToken,                     /* Maximum difference in token positions */
   int isSaveLeft,                 /* Save the left position */
-  char **pp1,                     /* Left input list */
-  char **pp2                      /* Right input list */
+  int isExact,                    /* If *pp1 is exactly nTokens before *pp2 */
+  char **pp1,                     /* IN/OUT: Left input list */
+  char **pp2                      /* IN/OUT: Right input list */
 ){
   char *p = (pp ? *pp : 0);
   char *p1 = *pp1;
   char *p2 = *pp2;
-
   int iCol1 = 0;
   int iCol2 = 0;
+
+  /* Never set both isSaveLeft and isExact for the same invocation. */
+  assert( isSaveLeft==0 || isExact==0 );
+
   assert( *p1!=0 && *p2!=0 );
   if( *p1==POS_COLUMN ){ 
     p1++;
@@ -108768,7 +109686,9 @@ static int fts3PoslistPhraseMerge(
       fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2;
 
       while( 1 ){
-        if( iPos2>iPos1 && iPos2<=iPos1+nToken ){
+        if( iPos2==iPos1+nToken 
+         || (isExact==0 && iPos2>iPos1 && iPos2<=iPos1+nToken) 
+        ){
           sqlite3_int64 iSave;
           if( !pp ){
             fts3PoslistCopy(0, &p2);
@@ -108851,21 +109771,21 @@ static int fts3PoslistNearMerge(
   char *p2 = *pp2;
 
   if( !pp ){
-    if( fts3PoslistPhraseMerge(0, nRight, 0, pp1, pp2) ) return 1;
+    if( fts3PoslistPhraseMerge(0, nRight, 0, 0, pp1, pp2) ) return 1;
     *pp1 = p1;
     *pp2 = p2;
-    return fts3PoslistPhraseMerge(0, nLeft, 0, pp2, pp1);
+    return fts3PoslistPhraseMerge(0, nLeft, 0, 0, pp2, pp1);
   }else{
     char *pTmp1 = aTmp;
     char *pTmp2;
     char *aTmp2;
     int res = 1;
 
-    fts3PoslistPhraseMerge(&pTmp1, nRight, 0, pp1, pp2);
+    fts3PoslistPhraseMerge(&pTmp1, nRight, 0, 0, pp1, pp2);
     aTmp2 = pTmp2 = pTmp1;
     *pp1 = p1;
     *pp2 = p2;
-    fts3PoslistPhraseMerge(&pTmp2, nLeft, 1, pp2, pp1);
+    fts3PoslistPhraseMerge(&pTmp2, nLeft, 1, 0, pp2, pp1);
     if( pTmp1!=aTmp && pTmp2!=aTmp2 ){
       fts3PoslistMerge(pp, &aTmp, &aTmp2);
     }else if( pTmp1!=aTmp ){
@@ -108911,7 +109831,8 @@ static int fts3DoclistMerge(
   char *a1,                       /* Buffer containing first doclist */
   int n1,                         /* Size of buffer a1 */
   char *a2,                       /* Buffer containing second doclist */
-  int n2                          /* Size of buffer a2 */
+  int n2,                         /* Size of buffer a2 */
+  int *pnDoc                      /* OUT: Number of docids in output */
 ){
   sqlite3_int64 i1 = 0;
   sqlite3_int64 i2 = 0;
@@ -108922,6 +109843,7 @@ static int fts3DoclistMerge(
   char *p2 = a2;
   char *pEnd1 = &a1[n1];
   char *pEnd2 = &a2[n2];
+  int nDoc = 0;
 
   assert( mergetype==MERGE_OR     || mergetype==MERGE_POS_OR 
        || mergetype==MERGE_AND    || mergetype==MERGE_NOT
@@ -108965,6 +109887,7 @@ static int fts3DoclistMerge(
           fts3PutDeltaVarint(&p, &iPrev, i1);
           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
+          nDoc++;
         }else if( i1<i2 ){
           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
         }else{
@@ -108995,9 +109918,11 @@ static int fts3DoclistMerge(
           char *pSave = p;
           sqlite3_int64 iPrevSave = iPrev;
           fts3PutDeltaVarint(&p, &iPrev, i1);
-          if( 0==fts3PoslistPhraseMerge(ppPos, 1, 0, &p1, &p2) ){
+          if( 0==fts3PoslistPhraseMerge(ppPos, nParam1, 0, 1, &p1, &p2) ){
             p = pSave;
             iPrev = iPrevSave;
+          }else{
+            nDoc++;
           }
           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
@@ -109050,6 +109975,7 @@ static int fts3DoclistMerge(
     }
   }
 
+  if( pnDoc ) *pnDoc = nDoc;
   *pnBuffer = (int)(p-aBuffer);
   return SQLITE_OK;
 }
@@ -109088,7 +110014,7 @@ static int fts3TermSelectMerge(TermSelect *pTS){
       if( !aOut ){
         aOut = pTS->aaOutput[i];
         nOut = pTS->anOutput[i];
-        pTS->aaOutput[0] = 0;
+        pTS->aaOutput[i] = 0;
       }else{
         int nNew = nOut + pTS->anOutput[i];
         char *aNew = sqlite3_malloc(nNew);
@@ -109097,7 +110023,7 @@ static int fts3TermSelectMerge(TermSelect *pTS){
           return SQLITE_NOMEM;
         }
         fts3DoclistMerge(mergetype, 0, 0,
-            aNew, &nNew, pTS->aaOutput[i], pTS->anOutput[i], aOut, nOut
+            aNew, &nNew, pTS->aaOutput[i], pTS->anOutput[i], aOut, nOut, 0
         );
         sqlite3_free(pTS->aaOutput[i]);
         sqlite3_free(aOut);
@@ -109168,8 +110094,8 @@ static int fts3TermSelectCb(
         }
         return SQLITE_NOMEM;
       }
-      fts3DoclistMerge(mergetype, 0, 0,
-          aNew, &nNew, pTS->aaOutput[iOut], pTS->anOutput[iOut], aMerge, nMerge
+      fts3DoclistMerge(mergetype, 0, 0, aNew, &nNew, 
+          pTS->aaOutput[iOut], pTS->anOutput[iOut], aMerge, nMerge, 0
       );
 
       if( iOut>0 ) sqlite3_free(aMerge);
@@ -109187,43 +110113,106 @@ static int fts3TermSelectCb(
   return SQLITE_OK;
 }
 
+static int fts3DeferredTermSelect(
+  Fts3DeferredToken *pToken,      /* Phrase token */
+  int isTermPos,                  /* True to include positions */
+  int *pnOut,                     /* OUT: Size of list */
+  char **ppOut                    /* OUT: Body of list */
+){
+  char *aSource;
+  int nSource;
+
+  aSource = sqlite3Fts3DeferredDoclist(pToken, &nSource);
+  if( !aSource ){
+    *pnOut = 0;
+    *ppOut = 0;
+  }else if( isTermPos ){
+    *ppOut = sqlite3_malloc(nSource);
+    if( !*ppOut ) return SQLITE_NOMEM;
+    memcpy(*ppOut, aSource, nSource);
+    *pnOut = nSource;
+  }else{
+    sqlite3_int64 docid;
+    *pnOut = sqlite3Fts3GetVarint(aSource, &docid);
+    *ppOut = sqlite3_malloc(*pnOut);
+    if( !*ppOut ) return SQLITE_NOMEM;
+    sqlite3Fts3PutVarint(*ppOut, docid);
+  }
+
+  return SQLITE_OK;
+}
+
 /*
-** This function retreives the doclist for the specified term (or term
-** prefix) from the database. 
-**
-** The returned doclist may be in one of two formats, depending on the 
-** value of parameter isReqPos. If isReqPos is zero, then the doclist is
-** a sorted list of delta-compressed docids (a bare doclist). If isReqPos
-** is non-zero, then the returned list is in the same format as is stored 
-** in the database without the found length specifier at the start of on-disk
-** doclists.
+** An Fts3SegReaderArray is used to store an array of Fts3SegReader objects.
+** Elements are added to the array using fts3SegReaderArrayAdd(). 
 */
-static int fts3TermSelect(
-  Fts3Table *p,                   /* Virtual table handle */
-  int iColumn,                    /* Column to query (or -ve for all columns) */
+struct Fts3SegReaderArray {
+  int nSegment;                   /* Number of valid entries in apSegment[] */
+  int nAlloc;                     /* Allocated size of apSegment[] */
+  int nCost;                      /* The cost of executing SegReaderIterate() */
+  Fts3SegReader *apSegment[1];    /* Array of seg-reader objects */
+};
+
+
+/*
+** Free an Fts3SegReaderArray object. Also free all seg-readers in the
+** array (using sqlite3Fts3SegReaderFree()).
+*/
+static void fts3SegReaderArrayFree(Fts3SegReaderArray *pArray){
+  if( pArray ){
+    int i;
+    for(i=0; i<pArray->nSegment; i++){
+      sqlite3Fts3SegReaderFree(pArray->apSegment[i]);
+    }
+    sqlite3_free(pArray);
+  }
+}
+
+static int fts3SegReaderArrayAdd(
+  Fts3SegReaderArray **ppArray, 
+  Fts3SegReader *pNew
+){
+  Fts3SegReaderArray *pArray = *ppArray;
+
+  if( !pArray || pArray->nAlloc==pArray->nSegment ){
+    int nNew = (pArray ? pArray->nAlloc+16 : 16);
+    pArray = (Fts3SegReaderArray *)sqlite3_realloc(pArray, 
+        sizeof(Fts3SegReaderArray) + (nNew-1) * sizeof(Fts3SegReader*)
+    );
+    if( !pArray ){
+      sqlite3Fts3SegReaderFree(pNew);
+      return SQLITE_NOMEM;
+    }
+    if( nNew==16 ){
+      pArray->nSegment = 0;
+      pArray->nCost = 0;
+    }
+    pArray->nAlloc = nNew;
+    *ppArray = pArray;
+  }
+
+  pArray->apSegment[pArray->nSegment++] = pNew;
+  return SQLITE_OK;
+}
+
+static int fts3TermSegReaderArray(
+  Fts3Cursor *pCsr,               /* Virtual table cursor handle */
   const char *zTerm,              /* Term to query for */
   int nTerm,                      /* Size of zTerm in bytes */
   int isPrefix,                   /* True for a prefix search */
-  int isReqPos,                   /* True to include position lists in output */
-  int *pnOut,                     /* OUT: Size of buffer at *ppOut */
-  char **ppOut                    /* OUT: Malloced result buffer */
+  Fts3SegReaderArray **ppArray    /* OUT: Allocated seg-reader array */
 ){
-  int i;
-  TermSelect tsc;
-  Fts3SegFilter filter;           /* Segment term filter configuration */
-  Fts3SegReader **apSegment;      /* Array of segments to read data from */
-  int nSegment = 0;               /* Size of apSegment array */
-  int nAlloc = 16;                /* Allocated size of segment array */
+  Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
   int rc;                         /* Return code */
+  Fts3SegReaderArray *pArray = 0; /* Array object to build */
+  Fts3SegReader *pReader = 0;     /* Seg-reader to add to pArray */ 
   sqlite3_stmt *pStmt = 0;        /* SQL statement to scan %_segdir table */
   int iAge = 0;                   /* Used to assign ages to segments */
 
-  apSegment = (Fts3SegReader **)sqlite3_malloc(sizeof(Fts3SegReader*)*nAlloc);
-  if( !apSegment ) return SQLITE_NOMEM;
-  rc = sqlite3Fts3SegReaderPending(p, zTerm, nTerm, isPrefix, &apSegment[0]);
-  if( rc!=SQLITE_OK ) goto finished;
-  if( apSegment[0] ){
-    nSegment = 1;
+  /* Allocate a seg-reader to scan the pending terms, if any. */
+  rc = sqlite3Fts3SegReaderPending(p, zTerm, nTerm, isPrefix, &pReader);
+  if( rc==SQLITE_OK && pReader ) {
+    rc = fts3SegReaderArrayAdd(&pArray, pReader);
   }
 
   /* Loop through the entire %_segdir table. For each segment, create a
@@ -109231,12 +110220,10 @@ static int fts3TermSelect(
   ** that may contain a term that matches zTerm/nTerm. For non-prefix
   ** searches, this is always a single leaf. For prefix searches, this
   ** may be a contiguous block of leaves.
-  **
-  ** The code in this loop does not actually load any leaves into memory
-  ** (unless the root node happens to be a leaf). It simply examines the
-  ** b-tree structure to determine which leaves need to be inspected.
   */
-  rc = sqlite3Fts3AllSegdirs(p, &pStmt);
+  if( rc==SQLITE_OK ){
+    rc = sqlite3Fts3AllSegdirs(p, &pStmt);
+  }
   while( rc==SQLITE_OK && SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){
     Fts3SegReader *pNew = 0;
     int nRoot = sqlite3_column_bytes(pStmt, 4);
@@ -109246,66 +110233,79 @@ static int fts3TermSelect(
       ** leaf). Do not bother inspecting any data in this case, just
       ** create a Fts3SegReader to scan the single leaf. 
       */
-      rc = sqlite3Fts3SegReaderNew(p, iAge, 0, 0, 0, zRoot, nRoot, &pNew);
+      rc = sqlite3Fts3SegReaderNew(iAge, 0, 0, 0, zRoot, nRoot, &pNew);
     }else{
-      int rc2;                    /* Return value of sqlite3Fts3ReadBlock() */
-      sqlite3_int64 i1;           /* Blockid of leaf that may contain zTerm */
-      rc = fts3SelectLeaf(p, zTerm, nTerm, zRoot, nRoot, &i1);
+      sqlite3_int64 i1;           /* First leaf that may contain zTerm */
+      sqlite3_int64 i2;           /* Final leaf that may contain zTerm */
+      rc = fts3SelectLeaf(p, zTerm, nTerm, zRoot, nRoot, &i1, (isPrefix?&i2:0));
+      if( isPrefix==0 ) i2 = i1;
       if( rc==SQLITE_OK ){
-        sqlite3_int64 i2 = sqlite3_column_int64(pStmt, 2);
-        rc = sqlite3Fts3SegReaderNew(p, iAge, i1, i2, 0, 0, 0, &pNew);
+        rc = sqlite3Fts3SegReaderNew(iAge, i1, i2, 0, 0, 0, &pNew);
       }
+    }
+    assert( (pNew==0)==(rc!=SQLITE_OK) );
 
-      /* The following call to ReadBlock() serves to reset the SQL statement
-      ** used to retrieve blocks of data from the %_segments table. If it is
-      ** not reset here, then it may remain classified as an active statement 
-      ** by SQLite, which may lead to "DROP TABLE" or "DETACH" commands 
-      ** failing.
-      */ 
-      rc2 = sqlite3Fts3ReadBlock(p, 0, 0, 0);
-      if( rc==SQLITE_OK ){
-        rc = rc2;
-      }
+    /* If a new Fts3SegReader was allocated, add it to the array. */
+    if( rc==SQLITE_OK ){
+      rc = fts3SegReaderArrayAdd(&pArray, pNew);
+    }
+    if( rc==SQLITE_OK ){
+      rc = sqlite3Fts3SegReaderCost(pCsr, pNew, &pArray->nCost);
     }
     iAge++;
+  }
 
-    /* If a new Fts3SegReader was allocated, add it to the apSegment array. */
-    assert( pNew!=0 || rc!=SQLITE_OK );
-    if( pNew ){
-      if( nSegment==nAlloc ){
-        Fts3SegReader **pArray;
-        nAlloc += 16;
-        pArray = (Fts3SegReader **)sqlite3_realloc(
-            apSegment, nAlloc*sizeof(Fts3SegReader *)
-        );
-        if( !pArray ){
-          sqlite3Fts3SegReaderFree(p, pNew);
-          rc = SQLITE_NOMEM;
-          goto finished;
-        }
-        apSegment = pArray;
-      }
-      apSegment[nSegment++] = pNew;
-    }
+  if( rc==SQLITE_DONE ){
+    rc = sqlite3_reset(pStmt);
+  }else{
+    sqlite3_reset(pStmt);
   }
-  if( rc!=SQLITE_DONE ){
-    assert( rc!=SQLITE_OK );
-    goto finished;
+  if( rc!=SQLITE_OK ){
+    fts3SegReaderArrayFree(pArray);
+    pArray = 0;
   }
+  *ppArray = pArray;
+  return rc;
+}
+
+/*
+** This function retreives the doclist for the specified term (or term
+** prefix) from the database. 
+**
+** The returned doclist may be in one of two formats, depending on the 
+** value of parameter isReqPos. If isReqPos is zero, then the doclist is
+** a sorted list of delta-compressed docids (a bare doclist). If isReqPos
+** is non-zero, then the returned list is in the same format as is stored 
+** in the database without the found length specifier at the start of on-disk
+** doclists.
+*/
+static int fts3TermSelect(
+  Fts3Table *p,                   /* Virtual table handle */
+  Fts3PhraseToken *pTok,          /* Token to query for */
+  int iColumn,                    /* Column to query (or -ve for all columns) */
+  int isReqPos,                   /* True to include position lists in output */
+  int *pnOut,                     /* OUT: Size of buffer at *ppOut */
+  char **ppOut                    /* OUT: Malloced result buffer */
+){
+  int rc;                         /* Return code */
+  Fts3SegReaderArray *pArray;     /* Seg-reader array for this term */
+  TermSelect tsc;               /* Context object for fts3TermSelectCb() */
+  Fts3SegFilter filter;         /* Segment term filter configuration */
 
+  pArray = pTok->pArray;
   memset(&tsc, 0, sizeof(TermSelect));
   tsc.isReqPos = isReqPos;
 
   filter.flags = FTS3_SEGMENT_IGNORE_EMPTY 
-        | (isPrefix ? FTS3_SEGMENT_PREFIX : 0)
+        | (pTok->isPrefix ? FTS3_SEGMENT_PREFIX : 0)
         | (isReqPos ? FTS3_SEGMENT_REQUIRE_POS : 0)
         | (iColumn<p->nColumn ? FTS3_SEGMENT_COLUMN_FILTER : 0);
   filter.iCol = iColumn;
-  filter.zTerm = zTerm;
-  filter.nTerm = nTerm;
+  filter.zTerm = pTok->z;
+  filter.nTerm = pTok->n;
 
-  rc = sqlite3Fts3SegReaderIterate(p, apSegment, nSegment, &filter,
-      fts3TermSelectCb, (void *)&tsc
+  rc = sqlite3Fts3SegReaderIterate(p, pArray->apSegment, pArray->nSegment, 
+      &filter, fts3TermSelectCb, (void *)&tsc
   );
   if( rc==SQLITE_OK ){
     rc = fts3TermSelectMerge(&tsc);
@@ -109315,26 +110315,112 @@ static int fts3TermSelect(
     *ppOut = tsc.aaOutput[0];
     *pnOut = tsc.anOutput[0];
   }else{
+    int i;
     for(i=0; i<SizeofArray(tsc.aaOutput); i++){
       sqlite3_free(tsc.aaOutput[i]);
     }
   }
 
-finished:
-  sqlite3_reset(pStmt);
-  for(i=0; i<nSegment; i++){
-    sqlite3Fts3SegReaderFree(p, apSegment[i]);
+  fts3SegReaderArrayFree(pArray);
+  pTok->pArray = 0;
+  return rc;
+}
+
+/*
+** This function counts the total number of docids in the doclist stored
+** in buffer aList[], size nList bytes.
+**
+** If the isPoslist argument is true, then it is assumed that the doclist
+** contains a position-list following each docid. Otherwise, it is assumed
+** that the doclist is simply a list of docids stored as delta encoded 
+** varints.
+*/
+static int fts3DoclistCountDocids(int isPoslist, char *aList, int nList){
+  int nDoc = 0;                   /* Return value */
+  if( aList ){
+    char *aEnd = &aList[nList];   /* Pointer to one byte after EOF */
+    char *p = aList;              /* Cursor */
+    if( !isPoslist ){
+      /* The number of docids in the list is the same as the number of 
+      ** varints. In FTS3 a varint consists of a single byte with the 0x80 
+      ** bit cleared and zero or more bytes with the 0x80 bit set. So to
+      ** count the varints in the buffer, just count the number of bytes
+      ** with the 0x80 bit clear.  */
+      while( p<aEnd ) nDoc += (((*p++)&0x80)==0);
+    }else{
+      while( p<aEnd ){
+        nDoc++;
+        while( (*p++)&0x80 );     /* Skip docid varint */
+        fts3PoslistCopy(0, &p);   /* Skip over position list */
+      }
+    }
+  }
+
+  return nDoc;
+}
+
+/*
+** Call sqlite3Fts3DeferToken() for each token in the expression pExpr.
+*/
+static int fts3DeferExpression(Fts3Cursor *pCsr, Fts3Expr *pExpr){
+  int rc = SQLITE_OK;
+  if( pExpr ){
+    rc = fts3DeferExpression(pCsr, pExpr->pLeft);
+    if( rc==SQLITE_OK ){
+      rc = fts3DeferExpression(pCsr, pExpr->pRight);
+    }
+    if( pExpr->eType==FTSQUERY_PHRASE ){
+      int iCol = pExpr->pPhrase->iColumn;
+      int i;
+      for(i=0; rc==SQLITE_OK && i<pExpr->pPhrase->nToken; i++){
+        Fts3PhraseToken *pToken = &pExpr->pPhrase->aToken[i];
+        if( pToken->pDeferred==0 ){
+          rc = sqlite3Fts3DeferToken(pCsr, pToken, iCol);
+        }
+      }
+    }
   }
-  sqlite3_free(apSegment);
   return rc;
 }
 
+/*
+** This function removes the position information from a doclist. When
+** called, buffer aList (size *pnList bytes) contains a doclist that includes
+** position information. This function removes the position information so
+** that aList contains only docids, and adjusts *pnList to reflect the new
+** (possibly reduced) size of the doclist.
+*/
+static void fts3DoclistStripPositions(
+  char *aList,                    /* IN/OUT: Buffer containing doclist */
+  int *pnList                     /* IN/OUT: Size of doclist in bytes */
+){
+  if( aList ){
+    char *aEnd = &aList[*pnList]; /* Pointer to one byte after EOF */
+    char *p = aList;              /* Input cursor */
+    char *pOut = aList;           /* Output cursor */
+  
+    while( p<aEnd ){
+      sqlite3_int64 delta;
+      p += sqlite3Fts3GetVarint(p, &delta);
+      fts3PoslistCopy(0, &p);
+      pOut += sqlite3Fts3PutVarint(pOut, delta);
+    }
+
+    *pnList = (int)(pOut - aList);
+  }
+}
 
 /* 
 ** Return a DocList corresponding to the phrase *pPhrase.
+**
+** If this function returns SQLITE_OK, but *pnOut is set to a negative value,
+** then no tokens in the phrase were looked up in the full-text index. This
+** is only possible when this function is called from within xFilter(). The
+** caller should assume that all documents match the phrase. The actual
+** filtering will take place in xNext().
 */
 static int fts3PhraseSelect(
-  Fts3Table *p,                   /* Virtual table handle */
+  Fts3Cursor *pCsr,               /* Virtual table cursor handle */
   Fts3Phrase *pPhrase,            /* Phrase to return a doclist for */
   int isReqPos,                   /* True if output should contain positions */
   char **paOut,                   /* OUT: Pointer to malloc'd result buffer */
@@ -109346,42 +110432,137 @@ static int fts3PhraseSelect(
   int ii;
   int iCol = pPhrase->iColumn;
   int isTermPos = (pPhrase->nToken>1 || isReqPos);
+  Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
+  int isFirst = 1;
+
+  int iPrevTok = 0;
+  int nDoc = 0;
 
+  /* If this is an xFilter() evaluation, create a segment-reader for each
+  ** phrase token. Or, if this is an xNext() or snippet/offsets/matchinfo
+  ** evaluation, only create segment-readers if there are no Fts3DeferredToken
+  ** objects attached to the phrase-tokens.
+  */
   for(ii=0; ii<pPhrase->nToken; ii++){
-    struct PhraseToken *pTok = &pPhrase->aToken[ii];
-    char *z = pTok->z;            /* Next token of the phrase */
-    int n = pTok->n;              /* Size of z in bytes */
-    int isPrefix = pTok->isPrefix;/* True if token is a prefix */
-    char *pList;                  /* Pointer to token doclist */
-    int nList;                    /* Size of buffer at pList */
-
-    rc = fts3TermSelect(p, iCol, z, n, isPrefix, isTermPos, &nList, &pList);
+    Fts3PhraseToken *pTok = &pPhrase->aToken[ii];
+    if( pTok->pArray==0 ){
+      if( (pCsr->eEvalmode==FTS3_EVAL_FILTER)
+       || (pCsr->eEvalmode==FTS3_EVAL_NEXT && pCsr->pDeferred==0) 
+       || (pCsr->eEvalmode==FTS3_EVAL_MATCHINFO && pTok->bFulltext) 
+      ){
+        rc = fts3TermSegReaderArray(
+            pCsr, pTok->z, pTok->n, pTok->isPrefix, &pTok->pArray
+        );
+        if( rc!=SQLITE_OK ) return rc;
+      }
+    }
+  }
+
+  for(ii=0; ii<pPhrase->nToken; ii++){
+    Fts3PhraseToken *pTok;        /* Token to find doclist for */
+    int iTok = 0;                 /* The token being queried this iteration */
+    char *pList = 0;              /* Pointer to token doclist */
+    int nList = 0;                /* Size of buffer at pList */
+
+    /* Select a token to process. If this is an xFilter() call, then tokens 
+    ** are processed in order from least to most costly. Otherwise, tokens 
+    ** are processed in the order in which they occur in the phrase.
+    */
+    if( pCsr->eEvalmode==FTS3_EVAL_MATCHINFO ){
+      assert( isReqPos );
+      iTok = ii;
+      pTok = &pPhrase->aToken[iTok];
+      if( pTok->bFulltext==0 ) continue;
+    }else if( pCsr->eEvalmode==FTS3_EVAL_NEXT || isReqPos ){
+      iTok = ii;
+      pTok = &pPhrase->aToken[iTok];
+    }else{
+      int nMinCost = 0x7FFFFFFF;
+      int jj;
+
+      /* Find the remaining token with the lowest cost. */
+      for(jj=0; jj<pPhrase->nToken; jj++){
+        Fts3SegReaderArray *pArray = pPhrase->aToken[jj].pArray;
+        if( pArray && pArray->nCost<nMinCost ){
+          iTok = jj;
+          nMinCost = pArray->nCost;
+        }
+      }
+      pTok = &pPhrase->aToken[iTok];
+
+      /* This branch is taken if it is determined that loading the doclist
+      ** for the next token would require more IO than loading all documents
+      ** currently identified by doclist pOut/nOut. No further doclists will
+      ** be loaded from the full-text index for this phrase.
+      */
+      if( nMinCost>nDoc && ii>0 ){
+        rc = fts3DeferExpression(pCsr, pCsr->pExpr);
+        break;
+      }
+    }
+
+    if( pCsr->eEvalmode==FTS3_EVAL_NEXT && pTok->pDeferred ){
+      rc = fts3DeferredTermSelect(pTok->pDeferred, isTermPos, &nList, &pList);
+    }else{
+      if( pTok->pArray ){
+        rc = fts3TermSelect(p, pTok, iCol, isTermPos, &nList, &pList);
+      }
+      pTok->bFulltext = 1;
+    }
+    assert( rc!=SQLITE_OK || pCsr->eEvalmode || pTok->pArray==0 );
     if( rc!=SQLITE_OK ) break;
 
-    if( ii==0 ){
+    if( isFirst ){
       pOut = pList;
       nOut = nList;
+      if( pCsr->eEvalmode==FTS3_EVAL_FILTER && pPhrase->nToken>1 ){
+        nDoc = fts3DoclistCountDocids(1, pOut, nOut);
+      }
+      isFirst = 0;
+      iPrevTok = iTok;
     }else{
-      /* Merge the new term list and the current output. If this is the
-      ** last term in the phrase, and positions are not required in the
-      ** output of this function, the positions can be dropped as part
-      ** of this merge. Either way, the result of this merge will be
-      ** smaller than nList bytes. The code in fts3DoclistMerge() is written
-      ** so that it is safe to use pList as the output as well as an input
-      ** in this case.
+      /* Merge the new term list and the current output. */
+      char *aLeft, *aRight;
+      int nLeft, nRight;
+      int nDist;
+      int mt;
+
+      /* If this is the final token of the phrase, and positions were not
+      ** requested by the caller, use MERGE_PHRASE instead of POS_PHRASE.
+      ** This drops the position information from the output list.
       */
-      int mergetype = MERGE_POS_PHRASE;
-      if( ii==pPhrase->nToken-1 && !isReqPos ){
-        mergetype = MERGE_PHRASE;
-      }
-      fts3DoclistMerge(mergetype, 0, 0, pList, &nOut, pOut, nOut, pList, nList);
-      sqlite3_free(pOut);
-      pOut = pList;
+      mt = MERGE_POS_PHRASE;
+      if( ii==pPhrase->nToken-1 && !isReqPos ) mt = MERGE_PHRASE;
+
+      assert( iPrevTok!=iTok );
+      if( iPrevTok<iTok ){
+        aLeft = pOut;
+        nLeft = nOut;
+        aRight = pList;
+        nRight = nList;
+        nDist = iTok-iPrevTok;
+        iPrevTok = iTok;
+      }else{
+        aRight = pOut;
+        nRight = nOut;
+        aLeft = pList;
+        nLeft = nList;
+        nDist = iPrevTok-iTok;
+      }
+      pOut = aRight;
+      fts3DoclistMerge(
+          mt, nDist, 0, pOut, &nOut, aLeft, nLeft, aRight, nRight, &nDoc
+      );
+      sqlite3_free(aLeft);
     }
     assert( nOut==0 || pOut!=0 );
   }
 
   if( rc==SQLITE_OK ){
+    if( ii!=pPhrase->nToken ){
+      assert( pCsr->eEvalmode==FTS3_EVAL_FILTER && isReqPos==0 );
+      fts3DoclistStripPositions(pOut, &nOut);
+    }
     *paOut = pOut;
     *pnOut = nOut;
   }else{
@@ -109390,6 +110571,14 @@ static int fts3PhraseSelect(
   return rc;
 }
 
+/*
+** This function merges two doclists according to the requirements of a
+** NEAR operator.
+**
+** Both input doclists must include position information. The output doclist 
+** includes position information if the first argument to this function
+** is MERGE_POS_NEAR, or does not if it is MERGE_NEAR.
+*/
 static int fts3NearMerge(
   int mergetype,                  /* MERGE_POS_NEAR or MERGE_NEAR */
   int nNear,                      /* Parameter to NEAR operator */
@@ -109402,8 +110591,8 @@ static int fts3NearMerge(
   char **paOut,                   /* OUT: Results of merge (malloced) */
   int *pnOut                      /* OUT: Sized of output buffer */
 ){
-  char *aOut;
-  int rc;
+  char *aOut;                     /* Buffer to write output doclist to */
+  int rc;                         /* Return code */
 
   assert( mergetype==MERGE_POS_NEAR || MERGE_NEAR );
 
@@ -109412,7 +110601,7 @@ static int fts3NearMerge(
     rc = SQLITE_NOMEM;
   }else{
     rc = fts3DoclistMerge(mergetype, nNear+nTokenRight, nNear+nTokenLeft, 
-      aOut, pnOut, aLeft, nLeft, aRight, nRight
+      aOut, pnOut, aLeft, nLeft, aRight, nRight, 0
     );
     if( rc!=SQLITE_OK ){
       sqlite3_free(aOut);
@@ -109424,8 +110613,23 @@ static int fts3NearMerge(
   return rc;
 }
 
+/*
+** This function is used as part of the processing for the snippet() and
+** offsets() functions.
+**
+** Both pLeft and pRight are expression nodes of type FTSQUERY_PHRASE. Both
+** have their respective doclists (including position information) loaded
+** in Fts3Expr.aDoclist/nDoclist. This function removes all entries from
+** each doclist that are not within nNear tokens of a corresponding entry
+** in the other doclist.
+*/
 SQLITE_PRIVATE int sqlite3Fts3ExprNearTrim(Fts3Expr *pLeft, Fts3Expr *pRight, int nNear){
-  int rc;
+  int rc;                         /* Return code */
+
+  assert( pLeft->eType==FTSQUERY_PHRASE );
+  assert( pRight->eType==FTSQUERY_PHRASE );
+  assert( pLeft->isLoaded && pRight->isLoaded );
+
   if( pLeft->aDoclist==0 || pRight->aDoclist==0 ){
     sqlite3_free(pLeft->aDoclist);
     sqlite3_free(pRight->aDoclist);
@@ -109433,8 +110637,8 @@ SQLITE_PRIVATE int sqlite3Fts3ExprNearTrim(Fts3Expr *pLeft, Fts3Expr *pRight, in
     pLeft->aDoclist = 0;
     rc = SQLITE_OK;
   }else{
-    char *aOut;
-    int nOut;
+    char *aOut;                   /* Buffer in which to assemble new doclist */
+    int nOut;                     /* Size of buffer aOut in bytes */
 
     rc = fts3NearMerge(MERGE_POS_NEAR, nNear, 
         pLeft->pPhrase->nToken, pLeft->aDoclist, pLeft->nDoclist,
@@ -109458,14 +110662,156 @@ SQLITE_PRIVATE int sqlite3Fts3ExprNearTrim(Fts3Expr *pLeft, Fts3Expr *pRight, in
   return rc;
 }
 
+
 /*
-** Evaluate the full-text expression pExpr against fts3 table pTab. Store
-** the resulting doclist in *paOut and *pnOut.  This routine mallocs for
-** the space needed to store the output.  The caller is responsible for
-** freeing the space when it has finished.
+** Allocate an Fts3SegReaderArray for each token in the expression pExpr. 
+** The allocated objects are stored in the Fts3PhraseToken.pArray member
+** variables of each token structure.
 */
-static int evalFts3Expr(
-  Fts3Table *p,                   /* Virtual table handle */
+static int fts3ExprAllocateSegReaders(
+  Fts3Cursor *pCsr,               /* FTS3 table */
+  Fts3Expr *pExpr,                /* Expression to create seg-readers for */
+  int *pnExpr                     /* OUT: Number of AND'd expressions */
+){
+  int rc = SQLITE_OK;             /* Return code */
+
+  assert( pCsr->eEvalmode==FTS3_EVAL_FILTER );
+  if( pnExpr && pExpr->eType!=FTSQUERY_AND ){
+    (*pnExpr)++;
+    pnExpr = 0;
+  }
+
+  if( pExpr->eType==FTSQUERY_PHRASE ){
+    Fts3Phrase *pPhrase = pExpr->pPhrase;
+    int ii;
+
+    for(ii=0; rc==SQLITE_OK && ii<pPhrase->nToken; ii++){
+      Fts3PhraseToken *pTok = &pPhrase->aToken[ii];
+      if( pTok->pArray==0 ){
+        rc = fts3TermSegReaderArray(
+            pCsr, pTok->z, pTok->n, pTok->isPrefix, &pTok->pArray
+        );
+      }
+    }
+  }else{ 
+    rc = fts3ExprAllocateSegReaders(pCsr, pExpr->pLeft, pnExpr);
+    if( rc==SQLITE_OK ){
+      rc = fts3ExprAllocateSegReaders(pCsr, pExpr->pRight, pnExpr);
+    }
+  }
+  return rc;
+}
+
+/*
+** Free the Fts3SegReaderArray objects associated with each token in the
+** expression pExpr. In other words, this function frees the resources
+** allocated by fts3ExprAllocateSegReaders().
+*/
+static void fts3ExprFreeSegReaders(Fts3Expr *pExpr){
+  if( pExpr ){
+    Fts3Phrase *pPhrase = pExpr->pPhrase;
+    if( pPhrase ){
+      int kk;
+      for(kk=0; kk<pPhrase->nToken; kk++){
+        fts3SegReaderArrayFree(pPhrase->aToken[kk].pArray);
+        pPhrase->aToken[kk].pArray = 0;
+      }
+    }
+    fts3ExprFreeSegReaders(pExpr->pLeft);
+    fts3ExprFreeSegReaders(pExpr->pRight);
+  }
+}
+
+/*
+** Return the sum of the costs of all tokens in the expression pExpr. This
+** function must be called after Fts3SegReaderArrays have been allocated
+** for all tokens using fts3ExprAllocateSegReaders().
+*/
+static int fts3ExprCost(Fts3Expr *pExpr){
+  int nCost;                      /* Return value */
+  if( pExpr->eType==FTSQUERY_PHRASE ){
+    Fts3Phrase *pPhrase = pExpr->pPhrase;
+    int ii;
+    nCost = 0;
+    for(ii=0; ii<pPhrase->nToken; ii++){
+      Fts3SegReaderArray *pArray = pPhrase->aToken[ii].pArray;
+      if( pArray ){
+        nCost += pPhrase->aToken[ii].pArray->nCost;
+      }
+    }
+  }else{
+    nCost = fts3ExprCost(pExpr->pLeft) + fts3ExprCost(pExpr->pRight);
+  }
+  return nCost;
+}
+
+/*
+** The following is a helper function (and type) for fts3EvalExpr(). It
+** must be called after Fts3SegReaders have been allocated for every token
+** in the expression. See the context it is called from in fts3EvalExpr()
+** for further explanation.
+*/
+typedef struct ExprAndCost ExprAndCost;
+struct ExprAndCost {
+  Fts3Expr *pExpr;
+  int nCost;
+};
+static void fts3ExprAssignCosts(
+  Fts3Expr *pExpr,                /* Expression to create seg-readers for */
+  ExprAndCost **ppExprCost        /* OUT: Write to *ppExprCost */
+){
+  if( pExpr->eType==FTSQUERY_AND ){
+    fts3ExprAssignCosts(pExpr->pLeft, ppExprCost);
+    fts3ExprAssignCosts(pExpr->pRight, ppExprCost);
+  }else{
+    (*ppExprCost)->pExpr = pExpr;
+    (*ppExprCost)->nCost = fts3ExprCost(pExpr);
+    (*ppExprCost)++;
+  }
+}
+
+/*
+** Evaluate the full-text expression pExpr against FTS3 table pTab. Store
+** the resulting doclist in *paOut and *pnOut. This routine mallocs for
+** the space needed to store the output. The caller is responsible for
+** freeing the space when it has finished.
+**
+** This function is called in two distinct contexts:
+**
+**   * From within the virtual table xFilter() method. In this case, the
+**     output doclist contains entries for all rows in the table, based on
+**     data read from the full-text index.
+**
+**     In this case, if the query expression contains one or more tokens that 
+**     are very common, then the returned doclist may contain a superset of 
+**     the documents that actually match the expression.
+**
+**   * From within the virtual table xNext() method. This call is only made
+**     if the call from within xFilter() found that there were very common 
+**     tokens in the query expression and did return a superset of the 
+**     matching documents. In this case the returned doclist contains only
+**     entries that correspond to the current row of the table. Instead of
+**     reading the data for each token from the full-text index, the data is
+**     already available in-memory in the Fts3PhraseToken.pDeferred structures.
+**     See fts3EvalDeferred() for how it gets there.
+**
+** In the first case above, Fts3Cursor.doDeferred==0. In the second (if it is
+** required) Fts3Cursor.doDeferred==1.
+**
+** If the SQLite invokes the snippet(), offsets() or matchinfo() function
+** as part of a SELECT on an FTS3 table, this function is called on each
+** individual phrase expression in the query. If there were very common tokens
+** found in the xFilter() call, then this function is called once for phrase
+** for each row visited, and the returned doclist contains entries for the
+** current row only. Otherwise, if there were no very common tokens, then this
+** function is called once only for each phrase in the query and the returned
+** doclist contains entries for all rows of the table.
+**
+** Fts3Cursor.doDeferred==1 when this function is called on phrases as a
+** result of a snippet(), offsets() or matchinfo() invocation.
+*/
+static int fts3EvalExpr(
+  Fts3Cursor *p,                  /* Virtual table cursor handle */
   Fts3Expr *pExpr,                /* Parsed fts3 expression */
   char **paOut,                   /* OUT: Pointer to malloc'd result buffer */
   int *pnOut,                     /* OUT: Size of buffer at *paOut */
@@ -109478,33 +110824,102 @@ static int evalFts3Expr(
   *pnOut = 0;
 
   if( pExpr ){
-    assert( pExpr->eType==FTSQUERY_PHRASE 
-         || pExpr->eType==FTSQUERY_NEAR 
-         || isReqPos==0
+    assert( pExpr->eType==FTSQUERY_NEAR   || pExpr->eType==FTSQUERY_OR     
+         || pExpr->eType==FTSQUERY_AND    || pExpr->eType==FTSQUERY_NOT
+         || pExpr->eType==FTSQUERY_PHRASE
     );
+    assert( pExpr->eType==FTSQUERY_PHRASE || isReqPos==0 );
+
     if( pExpr->eType==FTSQUERY_PHRASE ){
-      rc = fts3PhraseSelect(p, pExpr->pPhrase, 
+      rc = fts3PhraseSelect(p, pExpr->pPhrase,
           isReqPos || (pExpr->pParent && pExpr->pParent->eType==FTSQUERY_NEAR),
           paOut, pnOut
       );
+      fts3ExprFreeSegReaders(pExpr);
+    }else if( p->eEvalmode==FTS3_EVAL_FILTER && pExpr->eType==FTSQUERY_AND ){
+      ExprAndCost *aExpr = 0;     /* Array of AND'd expressions and costs */
+      int nExpr = 0;              /* Size of aExpr[] */
+      char *aRet = 0;             /* Doclist to return to caller */
+      int nRet = 0;               /* Length of aRet[] in bytes */
+      int nDoc = 0x7FFFFFFF;
+
+      assert( !isReqPos );
+
+      rc = fts3ExprAllocateSegReaders(p, pExpr, &nExpr);
+      if( rc==SQLITE_OK ){
+        assert( nExpr>1 );
+        aExpr = sqlite3_malloc(sizeof(ExprAndCost) * nExpr);
+        if( !aExpr ) rc = SQLITE_NOMEM;
+      }
+      if( rc==SQLITE_OK ){
+        int ii;                   /* Used to iterate through expressions */
+
+        fts3ExprAssignCosts(pExpr, &aExpr);
+        aExpr -= nExpr;
+        for(ii=0; ii<nExpr; ii++){
+          char *aNew;
+          int nNew;
+          int jj;
+          ExprAndCost *pBest = 0;
+  
+          for(jj=0; jj<nExpr; jj++){
+            ExprAndCost *pCand = &aExpr[jj];
+            if( pCand->pExpr && (pBest==0 || pCand->nCost<pBest->nCost) ){
+              pBest = pCand;
+            }
+          }
+  
+          if( pBest->nCost>nDoc ){
+            rc = fts3DeferExpression(p, p->pExpr);
+            break;
+          }else{
+            rc = fts3EvalExpr(p, pBest->pExpr, &aNew, &nNew, 0);
+            if( rc!=SQLITE_OK ) break;
+            pBest->pExpr = 0;
+            if( ii==0 ){
+              aRet = aNew;
+              nRet = nNew;
+              nDoc = fts3DoclistCountDocids(0, aRet, nRet);
+            }else{
+              fts3DoclistMerge(
+                  MERGE_AND, 0, 0, aRet, &nRet, aRet, nRet, aNew, nNew, &nDoc
+              );
+              sqlite3_free(aNew);
+            }
+          }
+        }
+      }
+
+      if( rc==SQLITE_OK ){
+        *paOut = aRet;
+        *pnOut = nRet;
+      }else{
+        assert( *paOut==0 );
+        sqlite3_free(aRet);
+      }
+      sqlite3_free(aExpr);
+      fts3ExprFreeSegReaders(pExpr);
+
     }else{
       char *aLeft;
       char *aRight;
       int nLeft;
       int nRight;
 
-      if( 0==(rc = evalFts3Expr(p, pExpr->pRight, &aRight, &nRight, isReqPos))
-       && 0==(rc = evalFts3Expr(p, pExpr->pLeft, &aLeft, &nLeft, isReqPos))
+      assert( pExpr->eType==FTSQUERY_NEAR 
+           || pExpr->eType==FTSQUERY_OR
+           || pExpr->eType==FTSQUERY_NOT
+           || (pExpr->eType==FTSQUERY_AND && p->eEvalmode==FTS3_EVAL_NEXT)
+      );
+
+      if( 0==(rc = fts3EvalExpr(p, pExpr->pRight, &aRight, &nRight, isReqPos))
+       && 0==(rc = fts3EvalExpr(p, pExpr->pLeft, &aLeft, &nLeft, isReqPos))
       ){
-        assert( pExpr->eType==FTSQUERY_NEAR || pExpr->eType==FTSQUERY_OR     
-            || pExpr->eType==FTSQUERY_AND  || pExpr->eType==FTSQUERY_NOT
-        );
         switch( pExpr->eType ){
           case FTSQUERY_NEAR: {
             Fts3Expr *pLeft;
             Fts3Expr *pRight;
-            int mergetype = isReqPos ? MERGE_POS_NEAR : MERGE_NEAR;
-           
+            int mergetype = MERGE_NEAR;
             if( pExpr->pParent && pExpr->pParent->eType==FTSQUERY_NEAR ){
               mergetype = MERGE_POS_NEAR;
             }
@@ -109533,7 +110948,7 @@ static int evalFts3Expr(
             */
             char *aBuffer = sqlite3_malloc(nRight+nLeft+1);
             rc = fts3DoclistMerge(MERGE_OR, 0, 0, aBuffer, pnOut,
-                aLeft, nLeft, aRight, nRight
+                aLeft, nLeft, aRight, nRight, 0
             );
             *paOut = aBuffer;
             sqlite3_free(aLeft);
@@ -109543,7 +110958,7 @@ static int evalFts3Expr(
           default: {
             assert( FTSQUERY_NOT==MERGE_NOT && FTSQUERY_AND==MERGE_AND );
             fts3DoclistMerge(pExpr->eType, 0, 0, aLeft, pnOut,
-                aLeft, nLeft, aRight, nRight
+                aLeft, nLeft, aRight, nRight, 0
             );
             *paOut = aLeft;
             break;
@@ -109554,6 +110969,89 @@ static int evalFts3Expr(
     }
   }
 
+  assert( rc==SQLITE_OK || *paOut==0 );
+  return rc;
+}
+
+/*
+** This function is called from within xNext() for each row visited by
+** an FTS3 query. If evaluating the FTS3 query expression within xFilter()
+** was able to determine the exact set of matching rows, this function sets
+** *pbRes to true and returns SQLITE_IO immediately.
+**
+** Otherwise, if evaluating the query expression within xFilter() returned a
+** superset of the matching documents instead of an exact set (this happens
+** when the query includes very common tokens and it is deemed too expensive to
+** load their doclists from disk), this function tests if the current row
+** really does match the FTS3 query.
+**
+** If an error occurs, an SQLite error code is returned. Otherwise, SQLITE_OK
+** is returned and *pbRes is set to true if the current row matches the
+** FTS3 query (and should be included in the results returned to SQLite), or
+** false otherwise.
+*/
+static int fts3EvalDeferred(
+  Fts3Cursor *pCsr,               /* FTS3 cursor pointing at row to test */
+  int *pbRes                      /* OUT: Set to true if row is a match */
+){
+  int rc = SQLITE_OK;
+  if( pCsr->pDeferred==0 ){
+    *pbRes = 1;
+  }else{
+    rc = fts3CursorSeek(0, pCsr);
+    if( rc==SQLITE_OK ){
+      sqlite3Fts3FreeDeferredDoclists(pCsr);
+      rc = sqlite3Fts3CacheDeferredDoclists(pCsr);
+    }
+    if( rc==SQLITE_OK ){
+      char *a = 0;
+      int n = 0;
+      rc = fts3EvalExpr(pCsr, pCsr->pExpr, &a, &n, 0);
+      assert( n>=0 );
+      *pbRes = (n>0);
+      sqlite3_free(a);
+    }
+  }
+  return rc;
+}
+
+/*
+** Advance the cursor to the next row in the %_content table that
+** matches the search criteria.  For a MATCH search, this will be
+** the next row that matches. For a full-table scan, this will be
+** simply the next row in the %_content table.  For a docid lookup,
+** this routine simply sets the EOF flag.
+**
+** Return SQLITE_OK if nothing goes wrong.  SQLITE_OK is returned
+** even if we reach end-of-file.  The fts3EofMethod() will be called
+** subsequently to determine whether or not an EOF was hit.
+*/
+static int fts3NextMethod(sqlite3_vtab_cursor *pCursor){
+  int res;
+  int rc = SQLITE_OK;             /* Return code */
+  Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
+
+  pCsr->eEvalmode = FTS3_EVAL_NEXT;
+  do {
+    if( pCsr->aDoclist==0 ){
+      if( SQLITE_ROW!=sqlite3_step(pCsr->pStmt) ){
+        pCsr->isEof = 1;
+        rc = sqlite3_reset(pCsr->pStmt);
+        break;
+      }
+      pCsr->iPrevId = sqlite3_column_int64(pCsr->pStmt, 0);
+    }else{
+      if( pCsr->pNextId>=&pCsr->aDoclist[pCsr->nDoclist] ){
+        pCsr->isEof = 1;
+        break;
+      }
+      sqlite3_reset(pCsr->pStmt);
+      fts3GetDeltaVarint(&pCsr->pNextId, &pCsr->iPrevId);
+      pCsr->isRequireSeek = 1;
+      pCsr->isMatchinfoNeeded = 1;
+    }
+  }while( SQLITE_OK==(rc = fts3EvalDeferred(pCsr, &res)) && res==0 );
+
   return rc;
 }
 
@@ -109573,11 +111071,6 @@ static int evalFts3Expr(
 ** number idxNum-FTS3_FULLTEXT_SEARCH, 0 indexed.  argv[0] is the right-hand
 ** side of the MATCH operator.
 */
-/* TODO(shess) Upgrade the cursor initialization and destruction to
-** account for fts3FilterMethod() being called multiple times on the
-** same cursor. The current solution is very fragile. Apply fix to
-** fts3 as appropriate.
-*/
 static int fts3FilterMethod(
   sqlite3_vtab_cursor *pCursor,   /* The cursor used for this query */
   int idxNum,                     /* Strategy index */
@@ -109600,6 +111093,7 @@ static int fts3FilterMethod(
   assert( idxNum>=0 && idxNum<=(FTS3_FULLTEXT_SEARCH+p->nColumn) );
   assert( nVal==0 || nVal==1 );
   assert( (nVal==0)==(idxNum==FTS3_FULLSCAN_SEARCH) );
+  assert( p->pSegments==0 );
 
   /* In case the cursor has been used before, clear it now. */
   sqlite3_finalize(pCsr->pStmt);
@@ -109607,24 +111101,7 @@ static int fts3FilterMethod(
   sqlite3Fts3ExprFree(pCsr->pExpr);
   memset(&pCursor[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor));
 
-  /* Compile a SELECT statement for this cursor. For a full-table-scan, the
-  ** statement loops through all rows of the %_content table. For a
-  ** full-text query or docid lookup, the statement retrieves a single
-  ** row by docid.
-  */
-  zSql = sqlite3_mprintf(azSql[idxNum==FTS3_FULLSCAN_SEARCH], p->zDb, p->zName);
-  if( !zSql ){
-    rc = SQLITE_NOMEM;
-  }else{
-    rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
-    sqlite3_free(zSql);
-  }
-  if( rc!=SQLITE_OK ) return rc;
-  pCsr->eSearch = (i16)idxNum;
-
-  if( idxNum==FTS3_DOCID_SEARCH ){
-    rc = sqlite3_bind_value(pCsr->pStmt, 1, apVal[0]);
-  }else if( idxNum!=FTS3_FULLSCAN_SEARCH ){
+  if( idxNum!=FTS3_DOCID_SEARCH && idxNum!=FTS3_FULLSCAN_SEARCH ){
     int iCol = idxNum-FTS3_FULLTEXT_SEARCH;
     const char *zQuery = (const char *)sqlite3_value_text(apVal[0]);
 
@@ -109646,11 +111123,30 @@ static int fts3FilterMethod(
     rc = sqlite3Fts3ReadLock(p);
     if( rc!=SQLITE_OK ) return rc;
 
-    rc = evalFts3Expr(p, pCsr->pExpr, &pCsr->aDoclist, &pCsr->nDoclist, 0);
+    rc = fts3EvalExpr(pCsr, pCsr->pExpr, &pCsr->aDoclist, &pCsr->nDoclist, 0);
+    sqlite3Fts3SegmentsClose(p);
+    if( rc!=SQLITE_OK ) return rc;
     pCsr->pNextId = pCsr->aDoclist;
     pCsr->iPrevId = 0;
   }
 
+  /* Compile a SELECT statement for this cursor. For a full-table-scan, the
+  ** statement loops through all rows of the %_content table. For a
+  ** full-text query or docid lookup, the statement retrieves a single
+  ** row by docid.
+  */
+  zSql = sqlite3_mprintf(azSql[idxNum==FTS3_FULLSCAN_SEARCH], p->zDb, p->zName);
+  if( !zSql ){
+    rc = SQLITE_NOMEM;
+  }else{
+    rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
+    sqlite3_free(zSql);
+  }
+  if( rc==SQLITE_OK && idxNum==FTS3_DOCID_SEARCH ){
+    rc = sqlite3_bind_value(pCsr->pStmt, 1, apVal[0]);
+  }
+  pCsr->eSearch = (i16)idxNum;
+
   if( rc!=SQLITE_OK ) return rc;
   return fts3NextMethod(pCursor);
 }
@@ -109674,6 +111170,11 @@ static int fts3RowidMethod(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){
   if( pCsr->aDoclist ){
     *pRowid = pCsr->iPrevId;
   }else{
+    /* This branch runs if the query is implemented using a full-table scan
+    ** (not using the full-text index). In this case grab the rowid from the
+    ** SELECT statement.
+    */
+    assert( pCsr->isRequireSeek==0 );
     *pRowid = sqlite3_column_int64(pCsr->pStmt, 0);
   }
   return SQLITE_OK;
@@ -109736,7 +111237,9 @@ static int fts3UpdateMethod(
 ** hash-table to the database.
 */
 static int fts3SyncMethod(sqlite3_vtab *pVtab){
-  return sqlite3Fts3PendingTermsFlush((Fts3Table *)pVtab);
+  int rc = sqlite3Fts3PendingTermsFlush((Fts3Table *)pVtab);
+  sqlite3Fts3SegmentsClose((Fts3Table *)pVtab);
+  return rc;
 }
 
 /*
@@ -109774,8 +111277,27 @@ static int fts3RollbackMethod(sqlite3_vtab *pVtab){
 ** This is used by the matchinfo(), snippet() and offsets() auxillary
 ** functions.
 */
-SQLITE_PRIVATE int sqlite3Fts3ExprLoadDoclist(Fts3Table *pTab, Fts3Expr *pExpr){
-  return evalFts3Expr(pTab, pExpr, &pExpr->aDoclist, &pExpr->nDoclist, 1);
+SQLITE_PRIVATE int sqlite3Fts3ExprLoadDoclist(Fts3Cursor *pCsr, Fts3Expr *pExpr){
+  int rc;
+  assert( pExpr->eType==FTSQUERY_PHRASE && pExpr->pPhrase );
+  assert( pCsr->eEvalmode==FTS3_EVAL_NEXT );
+  rc = fts3EvalExpr(pCsr, pExpr, &pExpr->aDoclist, &pExpr->nDoclist, 1);
+  return rc;
+}
+
+SQLITE_PRIVATE int sqlite3Fts3ExprLoadFtDoclist(
+  Fts3Cursor *pCsr, 
+  Fts3Expr *pExpr,
+  char **paDoclist,
+  int *pnDoclist
+){
+  int rc;
+  assert( pCsr->eEvalmode==FTS3_EVAL_NEXT );
+  assert( pExpr->eType==FTSQUERY_PHRASE && pExpr->pPhrase );
+  pCsr->eEvalmode = FTS3_EVAL_MATCHINFO;
+  rc = fts3EvalExpr(pCsr, pExpr, paDoclist, pnDoclist, 1);
+  pCsr->eEvalmode = FTS3_EVAL_NEXT;
+  return rc;
 }
 
 /*
@@ -109841,7 +111363,7 @@ static int fts3FunctionArg(
   sqlite3_context *pContext,      /* SQL function call context */
   const char *zFunc,              /* Function name */
   sqlite3_value *pVal,            /* argv[0] passed to function */
-  Fts3Cursor **ppCsr         /* OUT: Store cursor handle here */
+  Fts3Cursor **ppCsr              /* OUT: Store cursor handle here */
 ){
   Fts3Cursor *pRet;
   if( sqlite3_value_type(pVal)!=SQLITE_BLOB 
@@ -109967,15 +111489,13 @@ static void fts3MatchinfoFunc(
   sqlite3_value **apVal           /* Array of arguments */
 ){
   Fts3Cursor *pCsr;               /* Cursor handle passed through apVal[0] */
-
-  if( nVal!=1 ){
-    sqlite3_result_error(pContext,
-        "wrong number of arguments to function matchinfo()", -1);
-    return;
-  }
-
+  assert( nVal==1 || nVal==2 );
   if( SQLITE_OK==fts3FunctionArg(pContext, "matchinfo", apVal[0], &pCsr) ){
-    sqlite3Fts3Matchinfo(pContext, pCsr);
+    const char *zArg = 0;
+    if( nVal>1 ){
+      zArg = (const char *)sqlite3_value_text(apVal[1]);
+    }
+    sqlite3Fts3Matchinfo(pContext, pCsr, zArg);
   }
 }
 
@@ -110036,12 +111556,13 @@ static int fts3RenameMethod(
     "ALTER TABLE %Q.'%q_content'  RENAME TO '%q_content';",
     p->zDb, p->zName, zName
   );
-  if( rc==SQLITE_ERROR ) rc = SQLITE_OK;
   if( p->bHasDocsize ){
     fts3DbExec(&rc, db,
       "ALTER TABLE %Q.'%q_docsize'  RENAME TO '%q_docsize';",
       p->zDb, p->zName, zName
     );
+  }
+  if( p->bHasStat ){
     fts3DbExec(&rc, db,
       "ALTER TABLE %Q.'%q_stat'  RENAME TO '%q_stat';",
       p->zDb, p->zName, zName
@@ -110066,7 +111587,7 @@ static const sqlite3_module fts3Module = {
   /* xDisconnect   */ fts3DisconnectMethod,
   /* xDestroy      */ fts3DestroyMethod,
   /* xOpen         */ fts3OpenMethod,
-  /* xClose        */ fulltextClose,
+  /* xClose        */ fts3CloseMethod,
   /* xFilter       */ fts3FilterMethod,
   /* xNext         */ fts3NextMethod,
   /* xEof          */ fts3EofMethod,
@@ -110093,19 +111614,20 @@ static void hashDestroy(void *p){
 }
 
 /*
-** The fts3 built-in tokenizers - "simple" and "porter" - are implemented
-** in files fts3_tokenizer1.c and fts3_porter.c respectively. The following
-** two forward declarations are for functions declared in these files
-** used to retrieve the respective implementations.
+** The fts3 built-in tokenizers - "simple", "porter" and "icu"- are 
+** implemented in files fts3_tokenizer1.c, fts3_porter.c and fts3_icu.c
+** respectively. The following three forward declarations are for functions
+** declared in these files used to retrieve the respective implementations.
 **
 ** Calling sqlite3Fts3SimpleTokenizerModule() sets the value pointed
 ** to by the argument to point to the "simple" tokenizer implementation.
-** Function ...PorterTokenizerModule() sets *pModule to point to the
-** porter tokenizer/stemmer implementation.
+** And so on.
 */
 SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule);
 SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule);
+#ifdef SQLITE_ENABLE_ICU
 SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(sqlite3_tokenizer_module const**ppModule);
+#endif
 
 /*
 ** Initialise the fts3 extension. If this extension is built as part
@@ -110161,7 +111683,8 @@ SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){
    && SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "fts3_tokenizer"))
    && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
    && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
-   && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", -1))
+   && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
+   && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2))
    && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1))
   ){
     rc = sqlite3_create_module_v2(
@@ -110305,6 +111828,18 @@ static int fts3isspace(char c){
 }
 
 /*
+** Allocate nByte bytes of memory using sqlite3_malloc(). If successful,
+** zero the memory before returning a pointer to it. If unsuccessful, 
+** return NULL.
+*/
+static void *fts3MallocZero(int nByte){
+  void *pRet = sqlite3_malloc(nByte);
+  if( pRet ) memset(pRet, 0, nByte);
+  return pRet;
+}
+
+
+/*
 ** Extract the next token from buffer z (length n) using the tokenizer
 ** and other information (column names etc.) in pParse. Create an Fts3Expr
 ** structure of type FTSQUERY_PHRASE containing a phrase consisting of this
@@ -110341,11 +111876,10 @@ static int getNextToken(
 
     if( rc==SQLITE_OK ){
       nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase) + nToken;
-      pRet = (Fts3Expr *)sqlite3_malloc(nByte);
+      pRet = (Fts3Expr *)fts3MallocZero(nByte);
       if( !pRet ){
         rc = SQLITE_NOMEM;
       }else{
-        memset(pRet, 0, nByte);
         pRet->eType = FTSQUERY_PHRASE;
         pRet->pPhrase = (Fts3Phrase *)&pRet[1];
         pRet->pPhrase->nToken = 1;
@@ -110421,7 +111955,7 @@ static int getNextString(
       rc = pModule->xNext(pCursor, &zToken, &nToken, &iBegin, &iEnd, &iPos);
       if( rc==SQLITE_OK ){
         int nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase);
-        p = fts3ReallocOrFree(p, nByte+ii*sizeof(struct PhraseToken));
+        p = fts3ReallocOrFree(p, nByte+ii*sizeof(Fts3PhraseToken));
         zTemp = fts3ReallocOrFree(zTemp, nTemp + nToken);
         if( !p || !zTemp ){
           goto no_mem;
@@ -110431,6 +111965,7 @@ static int getNextString(
           p->pPhrase = (Fts3Phrase *)&p[1];
         }
         p->pPhrase = (Fts3Phrase *)&p[1];
+        memset(&p->pPhrase->aToken[ii], 0, sizeof(Fts3PhraseToken));
         p->pPhrase->nToken = ii+1;
         p->pPhrase->aToken[ii].n = nToken;
         memcpy(&zTemp[nTemp], zToken, nToken);
@@ -110452,7 +111987,7 @@ static int getNextString(
     char *zNew = NULL;
     int nNew = 0;
     int nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase);
-    nByte += (p?(p->pPhrase->nToken-1):0) * sizeof(struct PhraseToken);
+    nByte += (p?(p->pPhrase->nToken-1):0) * sizeof(Fts3PhraseToken);
     p = fts3ReallocOrFree(p, nByte + nTemp);
     if( !p ){
       goto no_mem;
@@ -110570,11 +112105,10 @@ static int getNextNode(
       if( fts3isspace(cNext) 
        || cNext=='"' || cNext=='(' || cNext==')' || cNext==0
       ){
-        pRet = (Fts3Expr *)sqlite3_malloc(sizeof(Fts3Expr));
+        pRet = (Fts3Expr *)fts3MallocZero(sizeof(Fts3Expr));
         if( !pRet ){
           return SQLITE_NOMEM;
         }
-        memset(pRet, 0, sizeof(Fts3Expr));
         pRet->eType = pKey->eType;
         pRet->nNear = nNear;
         *ppExpr = pRet;
@@ -110592,7 +112126,6 @@ static int getNextNode(
   if( sqlite3_fts3_enable_parentheses ){
     if( *zInput=='(' ){
       int nConsumed;
-      int rc;
       pParse->nNest++;
       rc = fts3ExprParse(pParse, &zInput[1], nInput-1, ppExpr, &nConsumed);
       if( rc==SQLITE_OK && !*ppExpr ){
@@ -110750,13 +112283,12 @@ static int fts3ExprParse(
        && p->eType==FTSQUERY_PHRASE && p->pPhrase->isNot 
       ){
         /* Create an implicit NOT operator. */
-        Fts3Expr *pNot = sqlite3_malloc(sizeof(Fts3Expr));
+        Fts3Expr *pNot = fts3MallocZero(sizeof(Fts3Expr));
         if( !pNot ){
           sqlite3Fts3ExprFree(p);
           rc = SQLITE_NOMEM;
           goto exprparse_out;
         }
-        memset(pNot, 0, sizeof(Fts3Expr));
         pNot->eType = FTSQUERY_NOT;
         pNot->pRight = p;
         if( pNotBranch ){
@@ -110784,13 +112316,12 @@ static int fts3ExprParse(
           /* Insert an implicit AND operator. */
           Fts3Expr *pAnd;
           assert( pRet && pPrev );
-          pAnd = sqlite3_malloc(sizeof(Fts3Expr));
+          pAnd = fts3MallocZero(sizeof(Fts3Expr));
           if( !pAnd ){
             sqlite3Fts3ExprFree(p);
             rc = SQLITE_NOMEM;
             goto exprparse_out;
           }
-          memset(pAnd, 0, sizeof(Fts3Expr));
           pAnd->eType = FTSQUERY_AND;
           insertBinaryOperator(&pRet, pPrev, pAnd);
           pPrev = pAnd;
@@ -110974,47 +112505,53 @@ static int queryTestTokenizer(
 }
 
 /*
-** This function is part of the test interface for the query parser. It
-** writes a text representation of the query expression pExpr into the
-** buffer pointed to by argument zBuf. It is assumed that zBuf is large 
-** enough to store the required text representation.
+** Return a pointer to a buffer containing a text representation of the
+** expression passed as the first argument. The buffer is obtained from
+** sqlite3_malloc(). It is the responsibility of the caller to use 
+** sqlite3_free() to release the memory. If an OOM condition is encountered,
+** NULL is returned.
+**
+** If the second argument is not NULL, then its contents are prepended to 
+** the returned expression text and then freed using sqlite3_free().
 */
-static void exprToString(Fts3Expr *pExpr, char *zBuf){
+static char *exprToString(Fts3Expr *pExpr, char *zBuf){
   switch( pExpr->eType ){
     case FTSQUERY_PHRASE: {
       Fts3Phrase *pPhrase = pExpr->pPhrase;
       int i;
-      zBuf += sprintf(zBuf, "PHRASE %d %d", pPhrase->iColumn, pPhrase->isNot);
-      for(i=0; i<pPhrase->nToken; i++){
-        zBuf += sprintf(zBuf," %.*s",pPhrase->aToken[i].n,pPhrase->aToken[i].z);
-        zBuf += sprintf(zBuf,"%s", (pPhrase->aToken[i].isPrefix?"+":""));
+      zBuf = sqlite3_mprintf(
+          "%zPHRASE %d %d", zBuf, pPhrase->iColumn, pPhrase->isNot);
+      for(i=0; zBuf && i<pPhrase->nToken; i++){
+        zBuf = sqlite3_mprintf("%z %.*s%s", zBuf, 
+            pPhrase->aToken[i].n, pPhrase->aToken[i].z,
+            (pPhrase->aToken[i].isPrefix?"+":"")
+        );
       }
-      return;
+      return zBuf;
     }
 
     case FTSQUERY_NEAR:
-      zBuf += sprintf(zBuf, "NEAR/%d ", pExpr->nNear);
+      zBuf = sqlite3_mprintf("%zNEAR/%d ", zBuf, pExpr->nNear);
       break;
     case FTSQUERY_NOT:
-      zBuf += sprintf(zBuf, "NOT ");
+      zBuf = sqlite3_mprintf("%zNOT ", zBuf);
       break;
     case FTSQUERY_AND:
-      zBuf += sprintf(zBuf, "AND ");
+      zBuf = sqlite3_mprintf("%zAND ", zBuf);
       break;
     case FTSQUERY_OR:
-      zBuf += sprintf(zBuf, "OR ");
+      zBuf = sqlite3_mprintf("%zOR ", zBuf);
       break;
   }
 
-  zBuf += sprintf(zBuf, "{");
-  exprToString(pExpr->pLeft, zBuf);
-  zBuf += strlen(zBuf);
-  zBuf += sprintf(zBuf, "} ");
+  if( zBuf ) zBuf = sqlite3_mprintf("%z{", zBuf);
+  if( zBuf ) zBuf = exprToString(pExpr->pLeft, zBuf);
+  if( zBuf ) zBuf = sqlite3_mprintf("%z} {", zBuf);
 
-  zBuf += sprintf(zBuf, "{");
-  exprToString(pExpr->pRight, zBuf);
-  zBuf += strlen(zBuf);
-  zBuf += sprintf(zBuf, "}");
+  if( zBuf ) zBuf = exprToString(pExpr->pRight, zBuf);
+  if( zBuf ) zBuf = sqlite3_mprintf("%z}", zBuf);
+
+  return zBuf;
 }
 
 /*
@@ -111045,6 +112582,7 @@ static void fts3ExprTest(
   int nCol;
   int ii;
   Fts3Expr *pExpr;
+  char *zBuf = 0;
   sqlite3 *db = sqlite3_context_db_handle(context);
 
   if( argc<3 ){
@@ -111087,18 +112625,17 @@ static void fts3ExprTest(
   rc = sqlite3Fts3ExprParse(
       pTokenizer, azCol, nCol, nCol, zExpr, nExpr, &pExpr
   );
-  if( rc==SQLITE_NOMEM ){
+  if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM ){
+    sqlite3_result_error(context, "Error parsing expression", -1);
+  }else if( rc==SQLITE_NOMEM || !(zBuf = exprToString(pExpr, 0)) ){
     sqlite3_result_error_nomem(context);
-    goto exprtest_out;
-  }else if( rc==SQLITE_OK ){
-    char zBuf[4096];
-    exprToString(pExpr, zBuf);
-    sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
-    sqlite3Fts3ExprFree(pExpr);
   }else{
-    sqlite3_result_error(context, "Error parsing expression", -1);
+    sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
+    sqlite3_free(zBuf);
   }
 
+  sqlite3Fts3ExprFree(pExpr);
+
 exprtest_out:
   if( pModule && pTokenizer ){
     rc = pModule->xDestroy(pTokenizer);
@@ -111841,7 +113378,7 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
   int i, j;
   char zReverse[28];
   char *z, *z2;
-  if( nIn<3 || nIn>=sizeof(zReverse)-7 ){
+  if( nIn<3 || nIn>=(int)sizeof(zReverse)-7 ){
     /* The word is too big or too small for the porter stemmer.
     ** Fallback to the copy stemmer */
     copy_stemmer(zIn, nIn, zOut, pnOut);
@@ -112240,7 +113777,7 @@ static void scalarFunc(
   sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);
 }
 
-static int fts3IsIdChar(char c){
+SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char c){
   static const char isFtsIdChar[] = {
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 0x */
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 1x */
@@ -112278,9 +113815,9 @@ SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *zStr, int *pn){
         break;
 
       default:
-        if( fts3IsIdChar(*z1) ){
+        if( sqlite3Fts3IsIdChar(*z1) ){
           z2 = &z1[1];
-          while( fts3IsIdChar(*z2) ) z2++;
+          while( sqlite3Fts3IsIdChar(*z2) ) z2++;
         }else{
           z1++;
         }
@@ -112293,9 +113830,8 @@ SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *zStr, int *pn){
 
 SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(
   Fts3Hash *pHash,                /* Tokenizer hash table */
-  const char *zArg,               /* Possible tokenizer specification */
+  const char *zArg,               /* Tokenizer name */
   sqlite3_tokenizer **ppTok,      /* OUT: Tokenizer (if applicable) */
-  const char **pzTokenizer,       /* OUT: Set to zArg if is tokenizer */
   char **pzErr                    /* OUT: Set to malloced error message */
 ){
   int rc;
@@ -112305,26 +113841,15 @@ SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(
   char *zEnd;                     /* Pointer to nul-term of zCopy */
   sqlite3_tokenizer_module *m;
 
-  if( !z ){
-    zCopy = sqlite3_mprintf("simple");
-  }else{
-    if( sqlite3_strnicmp(z, "tokenize", 8) || fts3IsIdChar(z[8])){
-      return SQLITE_OK;
-    }
-    zCopy = sqlite3_mprintf("%s", &z[8]);
-    *pzTokenizer = zArg;
-  }
-  if( !zCopy ){
-    return SQLITE_NOMEM;
-  }
-
+  zCopy = sqlite3_mprintf("%s", zArg);
+  if( !zCopy ) return SQLITE_NOMEM;
   zEnd = &zCopy[strlen(zCopy)];
 
   z = (char *)sqlite3Fts3NextToken(zCopy, &n);
   z[n] = '\0';
   sqlite3Fts3Dequote(z);
 
-  m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, z, (int)strlen(z)+1);
+  m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash,z,(int)strlen(z)+1);
   if( !m ){
     *pzErr = sqlite3_mprintf("unknown tokenizer: %s", z);
     rc = SQLITE_ERROR;
@@ -112618,15 +114143,23 @@ SQLITE_PRIVATE int sqlite3Fts3InitHashTable(
   }
 #endif
 
-  if( SQLITE_OK!=rc
-   || SQLITE_OK!=(rc = sqlite3_create_function(db, zName, 1, any, p, scalarFunc, 0, 0))
-   || SQLITE_OK!=(rc = sqlite3_create_function(db, zName, 2, any, p, scalarFunc, 0, 0))
+  if( SQLITE_OK==rc ){
+    rc = sqlite3_create_function(db, zName, 1, any, p, scalarFunc, 0, 0);
+  }
+  if( SQLITE_OK==rc ){
+    rc = sqlite3_create_function(db, zName, 2, any, p, scalarFunc, 0, 0);
+  }
 #ifdef SQLITE_TEST
-   || SQLITE_OK!=(rc = sqlite3_create_function(db, zTest, 2, any, p, testFunc, 0, 0))
-   || SQLITE_OK!=(rc = sqlite3_create_function(db, zTest, 3, any, p, testFunc, 0, 0))
-   || SQLITE_OK!=(rc = sqlite3_create_function(db, zTest2, 0, any, pdb, intTestFunc, 0, 0))
+  if( SQLITE_OK==rc ){
+    rc = sqlite3_create_function(db, zTest, 2, any, p, testFunc, 0, 0);
+  }
+  if( SQLITE_OK==rc ){
+    rc = sqlite3_create_function(db, zTest, 3, any, p, testFunc, 0, 0);
+  }
+  if( SQLITE_OK==rc ){
+    rc = sqlite3_create_function(db, zTest2, 0, any, pdb, intTestFunc, 0, 0);
+  }
 #endif
-   );
 
 #ifdef SQLITE_TEST
   sqlite3_free(zTest);
@@ -112893,6 +114426,18 @@ SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(
 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
 
 
+/*
+** When full-text index nodes are loaded from disk, the buffer that they
+** are loaded into has the following number of bytes of padding at the end 
+** of it. i.e. if a full-text index node is 900 bytes in size, then a buffer
+** of 920 bytes is allocated for it.
+**
+** This means that if we have a pointer into a buffer containing node data,
+** it is always safe to read up to two varints from it without risking an
+** overread, even if the node data is corrupted.
+*/
+#define FTS3_NODE_PADDING (FTS3_VARINT_MAX*2)
+
 typedef struct PendingList PendingList;
 typedef struct SegmentNode SegmentNode;
 typedef struct SegmentWriter SegmentWriter;
@@ -112911,6 +114456,17 @@ struct PendingList {
   sqlite3_int64 iLastPos;
 };
 
+
+/*
+** Each cursor has a (possibly empty) linked list of the following objects.
+*/
+struct Fts3DeferredToken {
+  Fts3PhraseToken *pToken;        /* Pointer to corresponding expr token */
+  int iCol;                       /* Column token must occur in */
+  Fts3DeferredToken *pNext;       /* Next in list of deferred tokens */
+  PendingList *pList;             /* Doclist is assembled here */
+};
+
 /*
 ** An instance of this structure is used to iterate through the terms on
 ** a contiguous set of segment b-tree leaf nodes. Although the details of
@@ -112920,6 +114476,7 @@ struct PendingList {
 **
 **   sqlite3Fts3SegReaderNew()
 **   sqlite3Fts3SegReaderFree()
+**   sqlite3Fts3SegReaderCost()
 **   sqlite3Fts3SegReaderIterate()
 **
 ** Methods used to manipulate Fts3SegReader structures:
@@ -112930,12 +114487,14 @@ struct PendingList {
 */
 struct Fts3SegReader {
   int iIdx;                       /* Index within level, or 0x7FFFFFFF for PT */
-  sqlite3_int64 iStartBlock;
-  sqlite3_int64 iEndBlock;
-  sqlite3_stmt *pStmt;            /* SQL Statement to access leaf nodes */
+
+  sqlite3_int64 iStartBlock;      /* Rowid of first leaf block to traverse */
+  sqlite3_int64 iLeafEndBlock;    /* Rowid of final leaf block to traverse */
+  sqlite3_int64 iEndBlock;        /* Rowid of final block in segment (or 0) */
+  sqlite3_int64 iCurrentBlock;    /* Current leaf block (or 0) */
+
   char *aNode;                    /* Pointer to node data (or NULL) */
   int nNode;                      /* Size of buffer at aNode (or 0) */
-  int nTermAlloc;                 /* Allocated size of zTerm buffer */
   Fts3HashElem **ppNextElem;
 
   /* Variables set by fts3SegReaderNext(). These may be read directly
@@ -112945,6 +114504,7 @@ struct Fts3SegReader {
   */
   int nTerm;                      /* Number of bytes in current term */
   char *zTerm;                    /* Pointer to current term */
+  int nTermAlloc;                 /* Allocated size of zTerm buffer */
   char *aDoclist;                 /* Pointer to doclist of current entry */
   int nDoclist;                   /* Size of doclist in current entry */
 
@@ -112954,6 +114514,7 @@ struct Fts3SegReader {
 };
 
 #define fts3SegReaderIsPending(p) ((p)->ppNextElem!=0)
+#define fts3SegReaderIsRootOnly(p) ((p)->aNode==(char *)&(p)[1])
 
 /*
 ** An instance of this structure is used to create a segment b-tree in the
@@ -113022,12 +114583,11 @@ struct SegmentNode {
 #define SQL_DELETE_SEGDIR_BY_LEVEL    16
 #define SQL_DELETE_SEGMENTS_RANGE     17
 #define SQL_CONTENT_INSERT            18
-#define SQL_GET_BLOCK                 19
-#define SQL_DELETE_DOCSIZE            20
-#define SQL_REPLACE_DOCSIZE           21
-#define SQL_SELECT_DOCSIZE            22
-#define SQL_SELECT_DOCTOTAL           23
-#define SQL_REPLACE_DOCTOTAL          24
+#define SQL_DELETE_DOCSIZE            19
+#define SQL_REPLACE_DOCSIZE           20
+#define SQL_SELECT_DOCSIZE            21
+#define SQL_SELECT_DOCTOTAL           22
+#define SQL_REPLACE_DOCTOTAL          23
 
 /*
 ** This function is used to obtain an SQLite prepared statement handle
@@ -113072,12 +114632,11 @@ static int fts3SqlStmt(
 /* 16 */  "DELETE FROM %Q.'%q_segdir' WHERE level = ?",
 /* 17 */  "DELETE FROM %Q.'%q_segments' WHERE blockid BETWEEN ? AND ?",
 /* 18 */  "INSERT INTO %Q.'%q_content' VALUES(%z)",
-/* 19 */  "SELECT block FROM %Q.'%q_segments' WHERE blockid = ?",
-/* 20 */  "DELETE FROM %Q.'%q_docsize' WHERE docid = ?",
-/* 21 */  "REPLACE INTO %Q.'%q_docsize' VALUES(?,?)",
-/* 22 */  "SELECT size FROM %Q.'%q_docsize' WHERE docid=?",
-/* 23 */  "SELECT value FROM %Q.'%q_stat' WHERE id=0",
-/* 24 */  "REPLACE INTO %Q.'%q_stat' VALUES(0,?)",
+/* 19 */  "DELETE FROM %Q.'%q_docsize' WHERE docid = ?",
+/* 20 */  "REPLACE INTO %Q.'%q_docsize' VALUES(?,?)",
+/* 21 */  "SELECT size FROM %Q.'%q_docsize' WHERE docid=?",
+/* 22 */  "SELECT value FROM %Q.'%q_stat' WHERE id=0",
+/* 23 */  "REPLACE INTO %Q.'%q_stat' VALUES(0,?)",
   };
   int rc = SQLITE_OK;
   sqlite3_stmt *pStmt;
@@ -113126,6 +114685,51 @@ static int fts3SqlStmt(
   return rc;
 }
 
+static int fts3SelectDocsize(
+  Fts3Table *pTab,                /* FTS3 table handle */
+  int eStmt,                      /* Either SQL_SELECT_DOCSIZE or DOCTOTAL */
+  sqlite3_int64 iDocid,           /* Docid to bind for SQL_SELECT_DOCSIZE */
+  sqlite3_stmt **ppStmt           /* OUT: Statement handle */
+){
+  sqlite3_stmt *pStmt = 0;        /* Statement requested from fts3SqlStmt() */
+  int rc;                         /* Return code */
+
+  assert( eStmt==SQL_SELECT_DOCSIZE || eStmt==SQL_SELECT_DOCTOTAL );
+
+  rc = fts3SqlStmt(pTab, eStmt, &pStmt, 0);
+  if( rc==SQLITE_OK ){
+    if( eStmt==SQL_SELECT_DOCSIZE ){
+      sqlite3_bind_int64(pStmt, 1, iDocid);
+    }
+    rc = sqlite3_step(pStmt);
+    if( rc!=SQLITE_ROW ){
+      rc = sqlite3_reset(pStmt);
+      if( rc==SQLITE_OK ) rc = SQLITE_CORRUPT;
+      pStmt = 0;
+    }else{
+      rc = SQLITE_OK;
+    }
+  }
+
+  *ppStmt = pStmt;
+  return rc;
+}
+
+SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(
+  Fts3Table *pTab,                /* Fts3 table handle */
+  sqlite3_stmt **ppStmt           /* OUT: Statement handle */
+){
+  return fts3SelectDocsize(pTab, SQL_SELECT_DOCTOTAL, 0, ppStmt);
+}
+
+SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(
+  Fts3Table *pTab,                /* Fts3 table handle */
+  sqlite3_int64 iDocid,           /* Docid to read size data for */
+  sqlite3_stmt **ppStmt           /* OUT: Statement handle */
+){
+  return fts3SelectDocsize(pTab, SQL_SELECT_DOCSIZE, iDocid, ppStmt);
+}
+
 /*
 ** Similar to fts3SqlStmt(). Except, after binding the parameters in
 ** array apVal[] to the SQL statement identified by eStmt, the statement
@@ -113153,45 +114757,6 @@ static void fts3SqlExec(
 
 
 /*
-** Read a single block from the %_segments table. If the specified block
-** does not exist, return SQLITE_CORRUPT. If some other error (malloc, IO 
-** etc.) occurs, return the appropriate SQLite error code.
-**
-** Otherwise, if successful, set *pzBlock to point to a buffer containing
-** the block read from the database, and *pnBlock to the size of the read
-** block in bytes.
-**
-** WARNING: The returned buffer is only valid until the next call to 
-** sqlite3Fts3ReadBlock().
-*/
-SQLITE_PRIVATE int sqlite3Fts3ReadBlock(
-  Fts3Table *p,
-  sqlite3_int64 iBlock,
-  char const **pzBlock,
-  int *pnBlock
-){
-  sqlite3_stmt *pStmt;
-  int rc = fts3SqlStmt(p, SQL_GET_BLOCK, &pStmt, 0);
-  if( rc!=SQLITE_OK ) return rc;
-  sqlite3_reset(pStmt);
-
-  if( pzBlock ){
-    sqlite3_bind_int64(pStmt, 1, iBlock);
-    rc = sqlite3_step(pStmt); 
-    if( rc!=SQLITE_ROW ){
-      return (rc==SQLITE_DONE ? SQLITE_CORRUPT : rc);
-    }
-  
-    *pnBlock = sqlite3_column_bytes(pStmt, 0);
-    *pzBlock = (char *)sqlite3_column_blob(pStmt, 0);
-    if( sqlite3_column_type(pStmt, 0)!=SQLITE_BLOB ){
-      return SQLITE_CORRUPT;
-    }
-  }
-  return SQLITE_OK;
-}
-
-/*
 ** This function ensures that the caller has obtained a shared-cache
 ** table-lock on the %_content table. This is required before reading
 ** data from the fts3 table. If this lock is not acquired first, then
@@ -113359,10 +114924,10 @@ static int fts3PendingListAppend(
 ** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code.
 */
 static int fts3PendingTermsAdd(
-  Fts3Table *p,          /* FTS table into which text will be inserted */
-  const char *zText,     /* Text of document to be inseted */
-  int iCol,              /* Column number into which text is inserted */
-  u32 *pnWord            /* OUT: Number of tokens inserted */
+  Fts3Table *p,                   /* Table into which text will be inserted */
+  const char *zText,              /* Text of document to be inserted */
+  int iCol,                       /* Column into which text is being inserted */
+  u32 *pnWord                     /* OUT: Number of tokens inserted */
 ){
   int rc;
   int iStart;
@@ -113447,6 +115012,9 @@ static int fts3PendingTermsDocid(Fts3Table *p, sqlite_int64 iDocid){
   return SQLITE_OK;
 }
 
+/*
+** Discard the contents of the pending-terms hash table. 
+*/
 SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *p){
   Fts3HashElem *pElem;
   for(pElem=fts3HashFirst(&p->pendingTerms); pElem; pElem=fts3HashNext(pElem)){
@@ -113474,6 +115042,7 @@ static int fts3InsertTerms(Fts3Table *p, sqlite3_value **apVal, u32 *aSz){
         return rc;
       }
     }
+    aSz[p->nColumn] += sqlite3_value_bytes(apVal[i]);
   }
   return SQLITE_OK;
 }
@@ -113561,6 +115130,8 @@ static int fts3DeleteAll(Fts3Table *p){
   fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGDIR, 0);
   if( p->bHasDocsize ){
     fts3SqlExec(&rc, p, SQL_DELETE_ALL_DOCSIZE, 0);
+  }
+  if( p->bHasStat ){
     fts3SqlExec(&rc, p, SQL_DELETE_ALL_STAT, 0);
   }
   return rc;
@@ -113571,7 +115142,7 @@ static int fts3DeleteAll(Fts3Table *p){
 ** (an integer) of a row about to be deleted. Remove all terms from the
 ** full-text index.
 */
-static void fts3DeleteTerms(
+static void fts3DeleteTerms( 
   int *pRC,               /* Result code */
   Fts3Table *p,           /* The FTS table to delete from */
   sqlite3_value **apVal,  /* apVal[] contains the docid to be deleted */
@@ -113593,6 +115164,7 @@ static void fts3DeleteTerms(
           *pRC = rc;
           return;
         }
+        aSz[p->nColumn] += sqlite3_column_bytes(pSelect, i);
       }
     }
     rc = sqlite3_reset(pSelect);
@@ -113656,11 +115228,92 @@ static int fts3AllocateSegdirIdx(Fts3Table *p, int iLevel, int *piIdx){
 }
 
 /*
+** The %_segments table is declared as follows:
+**
+**   CREATE TABLE %_segments(blockid INTEGER PRIMARY KEY, block BLOB)
+**
+** This function reads data from a single row of the %_segments table. The
+** specific row is identified by the iBlockid parameter. If paBlob is not
+** NULL, then a buffer is allocated using sqlite3_malloc() and populated
+** with the contents of the blob stored in the "block" column of the 
+** identified table row is. Whether or not paBlob is NULL, *pnBlob is set
+** to the size of the blob in bytes before returning.
+**
+** If an error occurs, or the table does not contain the specified row,
+** an SQLite error code is returned. Otherwise, SQLITE_OK is returned. If
+** paBlob is non-NULL, then it is the responsibility of the caller to
+** eventually free the returned buffer.
+**
+** This function may leave an open sqlite3_blob* handle in the
+** Fts3Table.pSegments variable. This handle is reused by subsequent calls
+** to this function. The handle may be closed by calling the
+** sqlite3Fts3SegmentsClose() function. Reusing a blob handle is a handy
+** performance improvement, but the blob handle should always be closed
+** before control is returned to the user (to prevent a lock being held
+** on the database file for longer than necessary). Thus, any virtual table
+** method (xFilter etc.) that may directly or indirectly call this function
+** must call sqlite3Fts3SegmentsClose() before returning.
+*/
+SQLITE_PRIVATE int sqlite3Fts3ReadBlock(
+  Fts3Table *p,                   /* FTS3 table handle */
+  sqlite3_int64 iBlockid,         /* Access the row with blockid=$iBlockid */
+  char **paBlob,                  /* OUT: Blob data in malloc'd buffer */
+  int *pnBlob                     /* OUT: Size of blob data */
+){
+  int rc;                         /* Return code */
+
+  /* pnBlob must be non-NULL. paBlob may be NULL or non-NULL. */
+  assert( pnBlob);
+
+  if( p->pSegments ){
+    rc = sqlite3_blob_reopen(p->pSegments, iBlockid);
+  }else{
+    if( 0==p->zSegmentsTbl ){
+      p->zSegmentsTbl = sqlite3_mprintf("%s_segments", p->zName);
+      if( 0==p->zSegmentsTbl ) return SQLITE_NOMEM;
+    }
+    rc = sqlite3_blob_open(
+       p->db, p->zDb, p->zSegmentsTbl, "block", iBlockid, 0, &p->pSegments
+    );
+  }
+
+  if( rc==SQLITE_OK ){
+    int nByte = sqlite3_blob_bytes(p->pSegments);
+    if( paBlob ){
+      char *aByte = sqlite3_malloc(nByte + FTS3_NODE_PADDING);
+      if( !aByte ){
+        rc = SQLITE_NOMEM;
+      }else{
+        rc = sqlite3_blob_read(p->pSegments, aByte, nByte, 0);
+        memset(&aByte[nByte], 0, FTS3_NODE_PADDING);
+        if( rc!=SQLITE_OK ){
+          sqlite3_free(aByte);
+          aByte = 0;
+        }
+      }
+      *paBlob = aByte;
+    }
+    *pnBlob = nByte;
+  }
+
+  return rc;
+}
+
+/*
+** Close the blob handle at p->pSegments, if it is open. See comments above
+** the sqlite3Fts3ReadBlock() function for details.
+*/
+SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *p){
+  sqlite3_blob_close(p->pSegments);
+  p->pSegments = 0;
+}
+
+/*
 ** Move the iterator passed as the first argument to the next term in the
 ** segment. If successful, SQLITE_OK is returned. If there is no next term,
 ** SQLITE_DONE. Otherwise, an SQLite error code.
 */
-static int fts3SegReaderNext(Fts3SegReader *pReader){
+static int fts3SegReaderNext(Fts3Table *p, Fts3SegReader *pReader){
   char *pNext;                    /* Cursor variable */
   int nPrefix;                    /* Number of bytes in term prefix */
   int nSuffix;                    /* Number of bytes in term suffix */
@@ -113672,7 +115325,8 @@ static int fts3SegReaderNext(Fts3SegReader *pReader){
   }
 
   if( !pNext || pNext>=&pReader->aNode[pReader->nNode] ){
-    int rc;
+    int rc;                       /* Return code from Fts3ReadBlock() */
+
     if( fts3SegReaderIsPending(pReader) ){
       Fts3HashElem *pElem = *(pReader->ppNextElem);
       if( pElem==0 ){
@@ -113688,22 +115342,36 @@ static int fts3SegReaderNext(Fts3SegReader *pReader){
       }
       return SQLITE_OK;
     }
-    if( !pReader->pStmt ){
-      pReader->aNode = 0;
-      return SQLITE_OK;
+
+    if( !fts3SegReaderIsRootOnly(pReader) ){
+      sqlite3_free(pReader->aNode);
     }
-    rc = sqlite3_step(pReader->pStmt);
-    if( rc!=SQLITE_ROW ){
-      pReader->aNode = 0;
-      return (rc==SQLITE_DONE ? SQLITE_OK : rc);
+    pReader->aNode = 0;
+
+    /* If iCurrentBlock>=iLeafEndBlock, this is an EOF condition. All leaf 
+    ** blocks have already been traversed.  */
+    assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock );
+    if( pReader->iCurrentBlock>=pReader->iLeafEndBlock ){
+      return SQLITE_OK;
     }
-    pReader->nNode = sqlite3_column_bytes(pReader->pStmt, 0);
-    pReader->aNode = (char *)sqlite3_column_blob(pReader->pStmt, 0);
+
+    rc = sqlite3Fts3ReadBlock(
+        p, ++pReader->iCurrentBlock, &pReader->aNode, &pReader->nNode
+    );
+    if( rc!=SQLITE_OK ) return rc;
     pNext = pReader->aNode;
   }
   
+  /* Because of the FTS3_NODE_PADDING bytes of padding, the following is 
+  ** safe (no risk of overread) even if the node data is corrupted.  
+  */
   pNext += sqlite3Fts3GetVarint32(pNext, &nPrefix);
   pNext += sqlite3Fts3GetVarint32(pNext, &nSuffix);
+  if( nPrefix<0 || nSuffix<=0 
+   || &pNext[nSuffix]>&pReader->aNode[pReader->nNode] 
+  ){
+    return SQLITE_CORRUPT;
+  }
 
   if( nPrefix+nSuffix>pReader->nTermAlloc ){
     int nNew = (nPrefix+nSuffix)*2;
@@ -113718,9 +115386,18 @@ static int fts3SegReaderNext(Fts3SegReader *pReader){
   pReader->nTerm = nPrefix+nSuffix;
   pNext += nSuffix;
   pNext += sqlite3Fts3GetVarint32(pNext, &pReader->nDoclist);
-  assert( pNext<&pReader->aNode[pReader->nNode] );
   pReader->aDoclist = pNext;
   pReader->pOffsetList = 0;
+
+  /* Check that the doclist does not appear to extend past the end of the
+  ** b-tree node. And that the final byte of the doclist is 0x00. If either 
+  ** of these statements is untrue, then the data structure is corrupt.
+  */
+  if( &pReader->aDoclist[pReader->nDoclist]>&pReader->aNode[pReader->nNode] 
+   || pReader->aDoclist[pReader->nDoclist-1]
+  ){
+    return SQLITE_CORRUPT;
+  }
   return SQLITE_OK;
 }
 
@@ -113784,31 +115461,105 @@ static void fts3SegReaderNextDocid(
 }
 
 /*
-** Free all allocations associated with the iterator passed as the 
-** second argument.
+** This function is called to estimate the amount of data that will be 
+** loaded from the disk If SegReaderIterate() is called on this seg-reader,
+** in units of average document size.
+** 
+** This can be used as follows: If the caller has a small doclist that 
+** contains references to N documents, and is considering merging it with
+** a large doclist (size X "average documents"), it may opt not to load
+** the large doclist if X>N.
 */
-SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3Table *p, Fts3SegReader *pReader){
-  if( pReader ){
-    if( pReader->pStmt ){
-      /* Move the leaf-range SELECT statement to the aLeavesStmt[] array,
-      ** so that it can be reused when required by another query.
+SQLITE_PRIVATE int sqlite3Fts3SegReaderCost(
+  Fts3Cursor *pCsr,               /* FTS3 cursor handle */
+  Fts3SegReader *pReader,         /* Segment-reader handle */
+  int *pnCost                     /* IN/OUT: Number of bytes read */
+){
+  Fts3Table *p = (Fts3Table*)pCsr->base.pVtab;
+  int rc = SQLITE_OK;             /* Return code */
+  int nCost = 0;                  /* Cost in bytes to return */
+  int pgsz = p->nPgsz;            /* Database page size */
+
+  /* If this seg-reader is reading the pending-terms table, or if all data
+  ** for the segment is stored on the root page of the b-tree, then the cost
+  ** is zero. In this case all required data is already in main memory.
+  */
+  if( p->bHasStat 
+   && !fts3SegReaderIsPending(pReader) 
+   && !fts3SegReaderIsRootOnly(pReader) 
+  ){
+    int nBlob = 0;
+    sqlite3_int64 iBlock;
+
+    if( pCsr->nRowAvg==0 ){
+      /* The average document size, which is required to calculate the cost
+      ** of each doclist, has not yet been determined. Read the required 
+      ** data from the %_stat table to calculate it.
+      **
+      ** Entry 0 of the %_stat table is a blob containing (nCol+1) FTS3 
+      ** varints, where nCol is the number of columns in the FTS3 table.
+      ** The first varint is the number of documents currently stored in
+      ** the table. The following nCol varints contain the total amount of
+      ** data stored in all rows of each column of the table, from left
+      ** to right.
       */
-      assert( p->nLeavesStmt<p->nLeavesTotal );
-      sqlite3_reset(pReader->pStmt);
-      p->aLeavesStmt[p->nLeavesStmt++] = pReader->pStmt;
+      sqlite3_stmt *pStmt;
+      rc = fts3SqlStmt(p, SQL_SELECT_DOCTOTAL, &pStmt, 0);
+      if( rc ) return rc;
+      if( sqlite3_step(pStmt)==SQLITE_ROW ){
+        sqlite3_int64 nDoc = 0;
+        sqlite3_int64 nByte = 0;
+        const char *a = sqlite3_column_blob(pStmt, 0);
+        if( a ){
+          const char *pEnd = &a[sqlite3_column_bytes(pStmt, 0)];
+          a += sqlite3Fts3GetVarint(a, &nDoc);
+          while( a<pEnd ){
+            a += sqlite3Fts3GetVarint(a, &nByte);
+          }
+        }
+
+        pCsr->nRowAvg = (int)(((nByte / nDoc) + pgsz - 1) / pgsz);
+      }
+      rc = sqlite3_reset(pStmt);
+      if( rc!=SQLITE_OK || pCsr->nRowAvg==0 ) return rc;
     }
-    if( !fts3SegReaderIsPending(pReader) ){
-      sqlite3_free(pReader->zTerm);
+
+    /* Assume that a blob flows over onto overflow pages if it is larger
+    ** than (pgsz-35) bytes in size (the file-format documentation
+    ** confirms this).
+    */
+    for(iBlock=pReader->iStartBlock; iBlock<=pReader->iLeafEndBlock; iBlock++){
+      rc = sqlite3Fts3ReadBlock(p, iBlock, 0, &nBlob);
+      if( rc!=SQLITE_OK ) break;
+      if( (nBlob+35)>pgsz ){
+        int nOvfl = (nBlob + 34)/pgsz;
+        nCost += ((nOvfl + pCsr->nRowAvg - 1)/pCsr->nRowAvg);
+      }
+    }
+  }
+
+  *pnCost += nCost;
+  return rc;
+}
+
+/*
+** Free all allocations associated with the iterator passed as the 
+** second argument.
+*/
+SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *pReader){
+  if( pReader && !fts3SegReaderIsPending(pReader) ){
+    sqlite3_free(pReader->zTerm);
+    if( !fts3SegReaderIsRootOnly(pReader) ){
+      sqlite3_free(pReader->aNode);
     }
-    sqlite3_free(pReader);
   }
+  sqlite3_free(pReader);
 }
 
 /*
 ** Allocate a new SegReader object.
 */
 SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(
-  Fts3Table *p,                   /* Virtual table handle */
   int iAge,                       /* Segment "age". */
   sqlite3_int64 iStartLeaf,       /* First leaf to traverse */
   sqlite3_int64 iEndLeaf,         /* Final leaf to traverse */
@@ -113821,8 +115572,9 @@ SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(
   Fts3SegReader *pReader;         /* Newly allocated SegReader object */
   int nExtra = 0;                 /* Bytes to allocate segment root node */
 
+  assert( iStartLeaf<=iEndLeaf );
   if( iStartLeaf==0 ){
-    nExtra = nRoot;
+    nExtra = nRoot + FTS3_NODE_PADDING;
   }
 
   pReader = (Fts3SegReader *)sqlite3_malloc(sizeof(Fts3SegReader) + nExtra);
@@ -113830,8 +115582,9 @@ SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(
     return SQLITE_NOMEM;
   }
   memset(pReader, 0, sizeof(Fts3SegReader));
-  pReader->iStartBlock = iStartLeaf;
   pReader->iIdx = iAge;
+  pReader->iStartBlock = iStartLeaf;
+  pReader->iLeafEndBlock = iEndLeaf;
   pReader->iEndBlock = iEndBlock;
 
   if( nExtra ){
@@ -113839,59 +115592,15 @@ SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(
     pReader->aNode = (char *)&pReader[1];
     pReader->nNode = nRoot;
     memcpy(pReader->aNode, zRoot, nRoot);
+    memset(&pReader->aNode[nRoot], 0, FTS3_NODE_PADDING);
   }else{
-    /* If the text of the SQL statement to iterate through a contiguous
-    ** set of entries in the %_segments table has not yet been composed,
-    ** compose it now.
-    */
-    if( !p->zSelectLeaves ){
-      p->zSelectLeaves = sqlite3_mprintf(
-          "SELECT block FROM %Q.'%q_segments' WHERE blockid BETWEEN ? AND ? "
-          "ORDER BY blockid", p->zDb, p->zName
-      );
-      if( !p->zSelectLeaves ){
-        rc = SQLITE_NOMEM;
-        goto finished;
-      }
-    }
-
-    /* If there are no free statements in the aLeavesStmt[] array, prepare
-    ** a new statement now. Otherwise, reuse a prepared statement from
-    ** aLeavesStmt[].
-    */
-    if( p->nLeavesStmt==0 ){
-      if( p->nLeavesTotal==p->nLeavesAlloc ){
-        int nNew = p->nLeavesAlloc + 16;
-        sqlite3_stmt **aNew = (sqlite3_stmt **)sqlite3_realloc(
-            p->aLeavesStmt, nNew*sizeof(sqlite3_stmt *)
-        );
-        if( !aNew ){
-          rc = SQLITE_NOMEM;
-          goto finished;
-        }
-        p->nLeavesAlloc = nNew;
-        p->aLeavesStmt = aNew;
-      }
-      rc = sqlite3_prepare_v2(p->db, p->zSelectLeaves, -1, &pReader->pStmt, 0);
-      if( rc!=SQLITE_OK ){
-        goto finished;
-      }
-      p->nLeavesTotal++;
-    }else{
-      pReader->pStmt = p->aLeavesStmt[--p->nLeavesStmt];
-    }
-
-    /* Bind the start and end leaf blockids to the prepared SQL statement. */
-    sqlite3_bind_int64(pReader->pStmt, 1, iStartLeaf);
-    sqlite3_bind_int64(pReader->pStmt, 2, iEndLeaf);
+    pReader->iCurrentBlock = iStartLeaf-1;
   }
-  rc = fts3SegReaderNext(pReader);
 
- finished:
   if( rc==SQLITE_OK ){
     *ppReader = pReader;
   }else{
-    sqlite3Fts3SegReaderFree(p, pReader);
+    sqlite3Fts3SegReaderFree(pReader);
   }
   return rc;
 }
@@ -113982,7 +115691,6 @@ SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(
       pReader->iIdx = 0x7FFFFFFF;
       pReader->ppNextElem = (Fts3HashElem **)&pReader[1];
       memcpy(pReader->ppNextElem, aElem, nElem*sizeof(Fts3HashElem *));
-      fts3SegReaderNext(pReader);
     }
   }
 
@@ -114015,12 +115723,11 @@ SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(
 ** code is returned.
 */
 static int fts3SegReaderNew(
-  Fts3Table *p,                   /* Virtual table handle */
   sqlite3_stmt *pStmt,            /* See above */
   int iAge,                       /* Segment "age". */
   Fts3SegReader **ppReader        /* OUT: Allocated Fts3SegReader */
 ){
-  return sqlite3Fts3SegReaderNew(p, iAge, 
+  return sqlite3Fts3SegReaderNew(iAge, 
       sqlite3_column_int64(pStmt, 1),
       sqlite3_column_int64(pStmt, 2),
       sqlite3_column_int64(pStmt, 3),
@@ -114224,7 +115931,7 @@ static int fts3PrefixCompress(
 ** (according to memcmp) than the previous term.
 */
 static int fts3NodeAddTerm(
-  Fts3Table *p,               /* Virtual table handle */
+  Fts3Table *p,                   /* Virtual table handle */
   SegmentNode **ppTree,           /* IN/OUT: SegmentNode handle */ 
   int isCopyTerm,                 /* True if zTerm/nTerm is transient */
   const char *zTerm,              /* Pointer to buffer containing term */
@@ -114854,15 +116561,14 @@ SQLITE_PRIVATE int sqlite3Fts3SegReaderIterate(
   ** unnecessary merge/sort operations for the case where single segment
   ** b-tree leaf nodes contain more than one term.
   */
-  if( pFilter->zTerm ){
+  for(i=0; i<nSegment; i++){
     int nTerm = pFilter->nTerm;
     const char *zTerm = pFilter->zTerm;
-    for(i=0; i<nSegment; i++){
-      Fts3SegReader *pSeg = apSegment[i];
-      while( fts3SegReaderTermCmp(pSeg, zTerm, nTerm)<0 ){
-        rc = fts3SegReaderNext(pSeg);
-        if( rc!=SQLITE_OK ) goto finished; }
-    }
+    Fts3SegReader *pSeg = apSegment[i];
+    do {
+      rc = fts3SegReaderNext(p, pSeg);
+      if( rc!=SQLITE_OK ) goto finished;
+    }while( zTerm && fts3SegReaderTermCmp(pSeg, zTerm, nTerm)<0 );
   }
 
   fts3SegReaderSort(apSegment, nSegment, nSegment, fts3SegReaderCmp);
@@ -114971,7 +116677,7 @@ SQLITE_PRIVATE int sqlite3Fts3SegReaderIterate(
     }
 
     for(i=0; i<nMerge; i++){
-      rc = fts3SegReaderNext(apSegment[i]);
+      rc = fts3SegReaderNext(p, apSegment[i]);
       if( rc!=SQLITE_OK ) goto finished;
     }
     fts3SegReaderSort(apSegment, nSegment, nMerge, fts3SegReaderCmp);
@@ -114997,7 +116703,7 @@ static int fts3SegmentMerge(Fts3Table *p, int iLevel){
   int i;                          /* Iterator variable */
   int rc;                         /* Return code */
   int iIdx;                       /* Index of new segment */
-  int iNewLevel;                  /* Level to create new segment at */
+  int iNewLevel = 0;              /* Level to create new segment at */
   sqlite3_stmt *pStmt = 0;
   SegmentWriter *pWriter = 0;
   int nSegment = 0;               /* Number of segments being merged */
@@ -115052,7 +116758,7 @@ static int fts3SegmentMerge(Fts3Table *p, int iLevel){
   if( rc!=SQLITE_OK ) goto finished;
   sqlite3_bind_int(pStmt, 1, iLevel);
   for(i=0; SQLITE_ROW==(sqlite3_step(pStmt)); i++){
-    rc = fts3SegReaderNew(p, pStmt, i, &apSegment[i]);
+    rc = fts3SegReaderNew(pStmt, i, &apSegment[i]);
     if( rc!=SQLITE_OK ){
       goto finished;
     }
@@ -115082,11 +116788,11 @@ static int fts3SegmentMerge(Fts3Table *p, int iLevel){
   fts3SegWriterFree(pWriter);
   if( apSegment ){
     for(i=0; i<nSegment; i++){
-      sqlite3Fts3SegReaderFree(p, apSegment[i]);
+      sqlite3Fts3SegReaderFree(apSegment[i]);
     }
     sqlite3_free(apSegment);
   }
-  sqlite3Fts3SegReaderFree(p, pPending);
+  sqlite3Fts3SegReaderFree(pPending);
   sqlite3_reset(pStmt);
   return rc;
 }
@@ -115139,7 +116845,7 @@ SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *p){
     rc = fts3SegWriterFlush(p, pWriter, 0, idx);
   }
   fts3SegWriterFree(pWriter);
-  sqlite3Fts3SegReaderFree(p, pReader);
+  sqlite3Fts3SegReaderFree(pReader);
 
   if( rc==SQLITE_OK ){
     sqlite3Fts3PendingTermsClear(p);
@@ -115183,75 +116889,6 @@ static void fts3DecodeIntArray(
 }
 
 /*
-** Fill in the document size auxiliary information for the matchinfo
-** structure.  The auxiliary information is:
-**
-**    N     Total number of documents in the full-text index
-**    a0    Average length of column 0 over the whole index
-**    n0    Length of column 0 on the matching row
-**    ...
-**    aM    Average length of column M over the whole index
-**    nM    Length of column M on the matching row
-**
-** The fts3MatchinfoDocsizeLocal() routine fills in the nX values.
-** The fts3MatchinfoDocsizeGlobal() routine fills in N and the aX values.
-*/
-SQLITE_PRIVATE int sqlite3Fts3MatchinfoDocsizeLocal(Fts3Cursor *pCur, u32 *a){
-  const char *pBlob;       /* The BLOB holding %_docsize info */
-  int nBlob;               /* Size of the BLOB */
-  sqlite3_stmt *pStmt;     /* Statement for reading and writing */
-  int i, j;                /* Loop counters */
-  sqlite3_int64 x;         /* Varint value */
-  int rc;                  /* Result code from subfunctions */
-  Fts3Table *p;            /* The FTS table */
-
-  p = (Fts3Table*)pCur->base.pVtab;
-  rc = fts3SqlStmt(p, SQL_SELECT_DOCSIZE, &pStmt, 0);
-  if( rc ){
-    return rc;
-  }
-  sqlite3_bind_int64(pStmt, 1, pCur->iPrevId);
-  if( sqlite3_step(pStmt)==SQLITE_ROW ){
-    nBlob = sqlite3_column_bytes(pStmt, 0);
-    pBlob = (const char*)sqlite3_column_blob(pStmt, 0);
-    for(i=j=0; i<p->nColumn && j<nBlob; i++){
-      j = sqlite3Fts3GetVarint(&pBlob[j], &x);
-      a[2+i*2] = (u32)(x & 0xffffffff);
-    }
-  }
-  sqlite3_reset(pStmt);
-  return SQLITE_OK; 
-}
-SQLITE_PRIVATE int sqlite3Fts3MatchinfoDocsizeGlobal(Fts3Cursor *pCur, u32 *a){
-  const char *pBlob;       /* The BLOB holding %_stat info */
-  int nBlob;               /* Size of the BLOB */
-  sqlite3_stmt *pStmt;     /* Statement for reading and writing */
-  int i, j;                /* Loop counters */
-  sqlite3_int64 x;         /* Varint value */
-  int nDoc;                /* Number of documents */
-  int rc;                  /* Result code from subfunctions */
-  Fts3Table *p;            /* The FTS table */
-
-  p = (Fts3Table*)pCur->base.pVtab;
-  rc = fts3SqlStmt(p, SQL_SELECT_DOCTOTAL, &pStmt, 0);
-  if( rc ){
-    return rc;
-  }
-  if( sqlite3_step(pStmt)==SQLITE_ROW ){
-    nBlob = sqlite3_column_bytes(pStmt, 0);
-    pBlob = (const char*)sqlite3_column_blob(pStmt, 0);
-    j = sqlite3Fts3GetVarint(pBlob, &x);
-    a[0] = nDoc = (u32)(x & 0xffffffff);
-    for(i=0; i<p->nColumn && j<nBlob; i++){
-      j = sqlite3Fts3GetVarint(&pBlob[j], &x);
-      a[1+i*2] = ((u32)(x & 0xffffffff) + nDoc/2)/nDoc;
-    }
-  }
-  sqlite3_reset(pStmt);
-  return SQLITE_OK; 
-}
-
-/*
 ** Insert the sizes (in tokens) for each column of the document
 ** with docid equal to p->iPrevDocid.  The sizes are encoded as
 ** a blob of varints.
@@ -115286,16 +116923,26 @@ static void fts3InsertDocsize(
 }
 
 /*
-** Update the 0 record of the %_stat table so that it holds a blob
-** which contains the document count followed by the cumulative
-** document sizes for all columns.
+** Record 0 of the %_stat table contains a blob consisting of N varints,
+** where N is the number of user defined columns in the fts3 table plus
+** two. If nCol is the number of user defined columns, then values of the 
+** varints are set as follows:
+**
+**   Varint 0:       Total number of rows in the table.
+**
+**   Varint 1..nCol: For each column, the total number of tokens stored in
+**                   the column for all rows of the table.
+**
+**   Varint 1+nCol:  The total size, in bytes, of all text values in all
+**                   columns of all rows of the table.
+**
 */
 static void fts3UpdateDocTotals(
-  int *pRC,       /* The result code */
-  Fts3Table *p,   /* Table being updated */
-  u32 *aSzIns,    /* Size increases */
-  u32 *aSzDel,    /* Size decreases */
-  int nChng       /* Change in the number of documents */
+  int *pRC,                       /* The result code */
+  Fts3Table *p,                   /* Table being updated */
+  u32 *aSzIns,                    /* Size increases */
+  u32 *aSzDel,                    /* Size decreases */
+  int nChng                       /* Change in the number of documents */
 ){
   char *pBlob;             /* Storage for BLOB written into %_stat */
   int nBlob;               /* Size of BLOB written into %_stat */
@@ -115304,13 +116951,15 @@ static void fts3UpdateDocTotals(
   int i;                   /* Loop counter */
   int rc;                  /* Result code from subfunctions */
 
+  const int nStat = p->nColumn+2;
+
   if( *pRC ) return;
-  a = sqlite3_malloc( (sizeof(u32)+10)*(p->nColumn+1) );
+  a = sqlite3_malloc( (sizeof(u32)+10)*nStat );
   if( a==0 ){
     *pRC = SQLITE_NOMEM;
     return;
   }
-  pBlob = (char*)&a[p->nColumn+1];
+  pBlob = (char*)&a[nStat];
   rc = fts3SqlStmt(p, SQL_SELECT_DOCTOTAL, &pStmt, 0);
   if( rc ){
     sqlite3_free(a);
@@ -115318,11 +116967,11 @@ static void fts3UpdateDocTotals(
     return;
   }
   if( sqlite3_step(pStmt)==SQLITE_ROW ){
-    fts3DecodeIntArray(p->nColumn+1, a,
+    fts3DecodeIntArray(nStat, a,
          sqlite3_column_blob(pStmt, 0),
          sqlite3_column_bytes(pStmt, 0));
   }else{
-    memset(a, 0, sizeof(u32)*(p->nColumn+1) );
+    memset(a, 0, sizeof(u32)*(nStat) );
   }
   sqlite3_reset(pStmt);
   if( nChng<0 && a[0]<(u32)(-nChng) ){
@@ -115330,7 +116979,7 @@ static void fts3UpdateDocTotals(
   }else{
     a[0] += nChng;
   }
-  for(i=0; i<p->nColumn; i++){
+  for(i=0; i<p->nColumn+1; i++){
     u32 x = a[i+1];
     if( x+aSzIns[i] < aSzDel[i] ){
       x = 0;
@@ -115339,7 +116988,7 @@ static void fts3UpdateDocTotals(
     }
     a[i+1] = x;
   }
-  fts3EncodeIntArray(p->nColumn+1, a, pBlob, &nBlob);
+  fts3EncodeIntArray(nStat, a, pBlob, &nBlob);
   rc = fts3SqlStmt(p, SQL_REPLACE_DOCTOTAL, &pStmt, 0);
   if( rc ){
     sqlite3_free(a);
@@ -115386,10 +117035,160 @@ static int fts3SpecialInsert(Fts3Table *p, sqlite3_value *pVal){
     rc = SQLITE_ERROR;
   }
 
+  sqlite3Fts3SegmentsClose(p);
   return rc;
 }
 
 /*
+** Return the deferred doclist associated with deferred token pDeferred.
+** This function assumes that sqlite3Fts3CacheDeferredDoclists() has already
+** been called to allocate and populate the doclist.
+*/
+SQLITE_PRIVATE char *sqlite3Fts3DeferredDoclist(Fts3DeferredToken *pDeferred, int *pnByte){
+  if( pDeferred->pList ){
+    *pnByte = pDeferred->pList->nData;
+    return pDeferred->pList->aData;
+  }
+  *pnByte = 0;
+  return 0;
+}
+
+/*
+** Helper fucntion for FreeDeferredDoclists(). This function removes all
+** references to deferred doclists from within the tree of Fts3Expr 
+** structures headed by 
+*/
+static void fts3DeferredDoclistClear(Fts3Expr *pExpr){
+  if( pExpr ){
+    fts3DeferredDoclistClear(pExpr->pLeft);
+    fts3DeferredDoclistClear(pExpr->pRight);
+    if( pExpr->isLoaded ){
+      sqlite3_free(pExpr->aDoclist);
+      pExpr->isLoaded = 0;
+      pExpr->aDoclist = 0;
+      pExpr->nDoclist = 0;
+      pExpr->pCurrent = 0;
+      pExpr->iCurrent = 0;
+    }
+  }
+}
+
+/*
+** Delete all cached deferred doclists. Deferred doclists are cached
+** (allocated) by the sqlite3Fts3CacheDeferredDoclists() function.
+*/
+SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *pCsr){
+  Fts3DeferredToken *pDef;
+  for(pDef=pCsr->pDeferred; pDef; pDef=pDef->pNext){
+    sqlite3_free(pDef->pList);
+    pDef->pList = 0;
+  }
+  if( pCsr->pDeferred ){
+    fts3DeferredDoclistClear(pCsr->pExpr);
+  }
+}
+
+/*
+** Free all entries in the pCsr->pDeffered list. Entries are added to 
+** this list using sqlite3Fts3DeferToken().
+*/
+SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *pCsr){
+  Fts3DeferredToken *pDef;
+  Fts3DeferredToken *pNext;
+  for(pDef=pCsr->pDeferred; pDef; pDef=pNext){
+    pNext = pDef->pNext;
+    sqlite3_free(pDef->pList);
+    sqlite3_free(pDef);
+  }
+  pCsr->pDeferred = 0;
+}
+
+/*
+** Generate deferred-doclists for all tokens in the pCsr->pDeferred list
+** based on the row that pCsr currently points to.
+**
+** A deferred-doclist is like any other doclist with position information
+** included, except that it only contains entries for a single row of the
+** table, not for all rows.
+*/
+SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *pCsr){
+  int rc = SQLITE_OK;             /* Return code */
+  if( pCsr->pDeferred ){
+    int i;                        /* Used to iterate through table columns */
+    sqlite3_int64 iDocid;         /* Docid of the row pCsr points to */
+    Fts3DeferredToken *pDef;      /* Used to iterate through deferred tokens */
+  
+    Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
+    sqlite3_tokenizer *pT = p->pTokenizer;
+    sqlite3_tokenizer_module const *pModule = pT->pModule;
+   
+    assert( pCsr->isRequireSeek==0 );
+    iDocid = sqlite3_column_int64(pCsr->pStmt, 0);
+  
+    for(i=0; i<p->nColumn && rc==SQLITE_OK; i++){
+      const char *zText = (const char *)sqlite3_column_text(pCsr->pStmt, i+1);
+      sqlite3_tokenizer_cursor *pTC = 0;
+  
+      rc = pModule->xOpen(pT, zText, -1, &pTC);
+      while( rc==SQLITE_OK ){
+        char const *zToken;       /* Buffer containing token */
+        int nToken;               /* Number of bytes in token */
+        int iDum1, iDum2;         /* Dummy variables */
+        int iPos;                 /* Position of token in zText */
+  
+        pTC->pTokenizer = pT;
+        rc = pModule->xNext(pTC, &zToken, &nToken, &iDum1, &iDum2, &iPos);
+        for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){
+          Fts3PhraseToken *pPT = pDef->pToken;
+          if( (pDef->iCol>=p->nColumn || pDef->iCol==i)
+           && (pPT->n==nToken || (pPT->isPrefix && pPT->n<nToken))
+           && (0==memcmp(zToken, pPT->z, pPT->n))
+          ){
+            fts3PendingListAppend(&pDef->pList, iDocid, i, iPos, &rc);
+          }
+        }
+      }
+      if( pTC ) pModule->xClose(pTC);
+      if( rc==SQLITE_DONE ) rc = SQLITE_OK;
+    }
+  
+    for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){
+      if( pDef->pList ){
+        rc = fts3PendingListAppendVarint(&pDef->pList, 0);
+      }
+    }
+  }
+
+  return rc;
+}
+
+/*
+** Add an entry for token pToken to the pCsr->pDeferred list.
+*/
+SQLITE_PRIVATE int sqlite3Fts3DeferToken(
+  Fts3Cursor *pCsr,               /* Fts3 table cursor */
+  Fts3PhraseToken *pToken,        /* Token to defer */
+  int iCol                        /* Column that token must appear in (or -1) */
+){
+  Fts3DeferredToken *pDeferred;
+  pDeferred = sqlite3_malloc(sizeof(*pDeferred));
+  if( !pDeferred ){
+    return SQLITE_NOMEM;
+  }
+  memset(pDeferred, 0, sizeof(*pDeferred));
+  pDeferred->pToken = pToken;
+  pDeferred->pNext = pCsr->pDeferred; 
+  pDeferred->iCol = iCol;
+  pCsr->pDeferred = pDeferred;
+
+  assert( pToken->pDeferred==0 );
+  pToken->pDeferred = pDeferred;
+
+  return SQLITE_OK;
+}
+
+
+/*
 ** This function does the work for the xUpdate method of FTS3 virtual
 ** tables.
 */
@@ -115407,16 +117206,17 @@ SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(
   u32 *aSzDel;                    /* Sizes of deleted documents */
   int nChng = 0;                  /* Net change in number of documents */
 
+  assert( p->pSegments==0 );
 
   /* Allocate space to hold the change in document sizes */
-  aSzIns = sqlite3_malloc( sizeof(aSzIns[0])*p->nColumn*2 );
+  aSzIns = sqlite3_malloc( sizeof(aSzIns[0])*(p->nColumn+1)*2 );
   if( aSzIns==0 ) return SQLITE_NOMEM;
-  aSzDel = &aSzIns[p->nColumn];
-  memset(aSzIns, 0, sizeof(aSzIns[0])*p->nColumn*2);
+  aSzDel = &aSzIns[p->nColumn+1];
+  memset(aSzIns, 0, sizeof(aSzIns[0])*(p->nColumn+1)*2);
 
   /* If this is a DELETE or UPDATE operation, remove the old record. */
   if( sqlite3_value_type(apVal[0])!=SQLITE_NULL ){
-    int isEmpty;
+    int isEmpty = 0;
     rc = fts3IsEmpty(p, apVal, &isEmpty);
     if( rc==SQLITE_OK ){
       if( isEmpty ){
@@ -115433,8 +117233,8 @@ SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(
         fts3SqlExec(&rc, p, SQL_DELETE_CONTENT, apVal);
         if( p->bHasDocsize ){
           fts3SqlExec(&rc, p, SQL_DELETE_DOCSIZE, apVal);
-          nChng--;
         }
+        nChng--;
       }
     }
   }else if( sqlite3_value_type(apVal[p->nColumn+2])!=SQLITE_NULL ){
@@ -115452,16 +117252,17 @@ SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(
       rc = fts3InsertTerms(p, apVal, aSzIns);
     }
     if( p->bHasDocsize ){
-      nChng++;
       fts3InsertDocsize(&rc, p, aSzIns);
     }
+    nChng++;
   }
 
-  if( p->bHasDocsize ){
+  if( p->bHasStat ){
     fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nChng);
   }
 
   sqlite3_free(aSzIns);
+  sqlite3Fts3SegmentsClose(p);
   return rc;
 }
 
@@ -115485,6 +117286,7 @@ SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *p){
       sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0);
     }
   }
+  sqlite3Fts3SegmentsClose(p);
   return rc;
 }
 
@@ -115508,6 +117310,22 @@ SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *p){
 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
 
 
+/*
+** Characters that may appear in the second argument to matchinfo().
+*/
+#define FTS3_MATCHINFO_NPHRASE   'p'        /* 1 value */
+#define FTS3_MATCHINFO_NCOL      'c'        /* 1 value */
+#define FTS3_MATCHINFO_NDOC      'n'        /* 1 value */
+#define FTS3_MATCHINFO_AVGLENGTH 'a'        /* nCol values */
+#define FTS3_MATCHINFO_LENGTH    'l'        /* nCol values */
+#define FTS3_MATCHINFO_LCS       's'        /* nCol values */
+#define FTS3_MATCHINFO_HITS      'x'        /* 3*nCol*nPhrase values */
+
+/*
+** The default value for the second argument to matchinfo(). 
+*/
+#define FTS3_MATCHINFO_DEFAULT   "pcx"
+
 
 /*
 ** Used as an fts3ExprIterate() context when loading phrase doclists to
@@ -115515,7 +117333,7 @@ SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *p){
 */
 typedef struct LoadDoclistCtx LoadDoclistCtx;
 struct LoadDoclistCtx {
-  Fts3Table *pTab;                /* FTS3 Table */
+  Fts3Cursor *pCsr;               /* FTS3 Cursor */
   int nPhrase;                    /* Number of phrases seen so far */
   int nToken;                     /* Number of tokens seen so far */
 };
@@ -115561,6 +117379,8 @@ typedef struct MatchInfo MatchInfo;
 struct MatchInfo {
   Fts3Cursor *pCursor;            /* FTS3 Cursor */
   int nCol;                       /* Number of columns in table */
+  int nPhrase;                    /* Number of matchable phrases in query */
+  sqlite3_int64 nDoc;             /* Number of docs in database */
   u32 *aMatchinfo;                /* Pre-allocated buffer */
 };
 
@@ -115709,7 +117529,7 @@ static int fts3ExprLoadDoclistsCb1(Fts3Expr *pExpr, int iPhrase, void *ctx){
   p->nToken += pExpr->pPhrase->nToken;
 
   if( pExpr->isLoaded==0 ){
-    rc = sqlite3Fts3ExprLoadDoclist(p->pTab, pExpr);
+    rc = sqlite3Fts3ExprLoadDoclist(p->pCsr, pExpr);
     pExpr->isLoaded = 1;
     if( rc==SQLITE_OK ){
       rc = fts3ExprNearTrim(pExpr);
@@ -115752,7 +117572,7 @@ static int fts3ExprLoadDoclists(
 ){
   int rc;                         /* Return Code */
   LoadDoclistCtx sCtx = {0,0,0};  /* Context for fts3ExprIterate() */
-  sCtx.pTab = (Fts3Table *)pCsr->base.pVtab;
+  sCtx.pCsr = pCsr;
   rc = fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb1, (void *)&sCtx);
   if( rc==SQLITE_OK ){
     (void)fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb2, 0);
@@ -115762,6 +117582,18 @@ static int fts3ExprLoadDoclists(
   return rc;
 }
 
+static int fts3ExprPhraseCountCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
+  (*(int *)ctx)++;
+  UNUSED_PARAMETER(pExpr);
+  UNUSED_PARAMETER(iPhrase);
+  return SQLITE_OK;
+}
+static int fts3ExprPhraseCount(Fts3Expr *pExpr){
+  int nPhrase = 0;
+  (void)fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase);
+  return nPhrase;
+}
+
 /*
 ** Advance the position list iterator specified by the first two 
 ** arguments so that it points to the first element with a value greater
@@ -116274,38 +118106,87 @@ static void fts3LoadColumnlistCounts(char **pp, u32 *aOut, int isGlobal){
 
 /*
 ** fts3ExprIterate() callback used to collect the "global" matchinfo stats
-** for a single query. The "global" stats are those elements of the matchinfo
-** array that are constant for all rows returned by the current query.
+** for a single query. 
+**
+** fts3ExprIterate() callback to load the 'global' elements of a
+** FTS3_MATCHINFO_HITS matchinfo array. The global stats are those elements 
+** of the matchinfo array that are constant for all rows returned by the 
+** current query.
+**
+** Argument pCtx is actually a pointer to a struct of type MatchInfo. This
+** function populates Matchinfo.aMatchinfo[] as follows:
+**
+**   for(iCol=0; iCol<nCol; iCol++){
+**     aMatchinfo[3*iPhrase*nCol + 3*iCol + 1] = X;
+**     aMatchinfo[3*iPhrase*nCol + 3*iCol + 2] = Y;
+**   }
+**
+** where X is the number of matches for phrase iPhrase is column iCol of all
+** rows of the table. Y is the number of rows for which column iCol contains
+** at least one instance of phrase iPhrase.
+**
+** If the phrase pExpr consists entirely of deferred tokens, then all X and
+** Y values are set to nDoc, where nDoc is the number of documents in the 
+** file system. This is done because the full-text index doclist is required
+** to calculate these values properly, and the full-text index doclist is
+** not available for deferred tokens.
 */
-static int fts3ExprGlobalMatchinfoCb(
+static int fts3ExprGlobalHitsCb(
   Fts3Expr *pExpr,                /* Phrase expression node */
   int iPhrase,                    /* Phrase number (numbered from zero) */
   void *pCtx                      /* Pointer to MatchInfo structure */
 ){
   MatchInfo *p = (MatchInfo *)pCtx;
-  char *pCsr;
+  Fts3Cursor *pCsr = p->pCursor;
+  char *pIter;
   char *pEnd;
-  const int iStart = 2 + (iPhrase * p->nCol * 3) + 1;
+  char *pFree = 0;
+  u32 *aOut = &p->aMatchinfo[3*iPhrase*p->nCol];
 
   assert( pExpr->isLoaded );
+  assert( pExpr->eType==FTSQUERY_PHRASE );
+
+  if( pCsr->pDeferred ){
+    Fts3Phrase *pPhrase = pExpr->pPhrase;
+    int ii;
+    for(ii=0; ii<pPhrase->nToken; ii++){
+      if( pPhrase->aToken[ii].bFulltext ) break;
+    }
+    if( ii<pPhrase->nToken ){
+      int nFree = 0;
+      int rc = sqlite3Fts3ExprLoadFtDoclist(pCsr, pExpr, &pFree, &nFree);
+      if( rc!=SQLITE_OK ) return rc;
+      pIter = pFree;
+      pEnd = &pFree[nFree];
+    }else{
+      int iCol;                   /* Column index */
+      for(iCol=0; iCol<p->nCol; iCol++){
+        aOut[iCol*3 + 1] = (u32)p->nDoc;
+        aOut[iCol*3 + 2] = (u32)p->nDoc;
+      }
+      return SQLITE_OK;
+    }
+  }else{
+    pIter = pExpr->aDoclist;
+    pEnd = &pExpr->aDoclist[pExpr->nDoclist];
+  }
 
   /* Fill in the global hit count matrix row for this phrase. */
-  pCsr = pExpr->aDoclist;
-  pEnd = &pExpr->aDoclist[pExpr->nDoclist];
-  while( pCsr<pEnd ){
-    while( *pCsr++ & 0x80 );      /* Skip past docid. */
-    fts3LoadColumnlistCounts(&pCsr, &p->aMatchinfo[iStart], 1);
+  while( pIter<pEnd ){
+    while( *pIter++ & 0x80 );      /* Skip past docid. */
+    fts3LoadColumnlistCounts(&pIter, &aOut[1], 1);
   }
 
+  sqlite3_free(pFree);
   return SQLITE_OK;
 }
 
 /*
-** fts3ExprIterate() callback used to collect the "local" matchinfo stats
-** for a single query. The "local" stats are those elements of the matchinfo
+** fts3ExprIterate() callback used to collect the "local" part of the
+** FTS3_MATCHINFO_HITS array. The local stats are those elements of the 
 ** array that are different for each row returned by the query.
 */
-static int fts3ExprLocalMatchinfoCb(
+static int fts3ExprLocalHitsCb(
   Fts3Expr *pExpr,                /* Phrase expression node */
   int iPhrase,                    /* Phrase number */
   void *pCtx                      /* Pointer to MatchInfo structure */
@@ -116314,7 +118195,7 @@ static int fts3ExprLocalMatchinfoCb(
 
   if( pExpr->aDoclist ){
     char *pCsr;
-    int iStart = 2 + (iPhrase * p->nCol * 3);
+    int iStart = iPhrase * p->nCol * 3;
     int i;
 
     for(i=0; i<p->nCol; i++) p->aMatchinfo[iStart+i*3] = 0;
@@ -116328,67 +118209,399 @@ static int fts3ExprLocalMatchinfoCb(
   return SQLITE_OK;
 }
 
+static int fts3MatchinfoCheck(
+  Fts3Table *pTab, 
+  char cArg,
+  char **pzErr
+){
+  if( (cArg==FTS3_MATCHINFO_NPHRASE)
+   || (cArg==FTS3_MATCHINFO_NCOL)
+   || (cArg==FTS3_MATCHINFO_NDOC && pTab->bHasStat)
+   || (cArg==FTS3_MATCHINFO_AVGLENGTH && pTab->bHasStat)
+   || (cArg==FTS3_MATCHINFO_LENGTH && pTab->bHasDocsize)
+   || (cArg==FTS3_MATCHINFO_LCS)
+   || (cArg==FTS3_MATCHINFO_HITS)
+  ){
+    return SQLITE_OK;
+  }
+  *pzErr = sqlite3_mprintf("unrecognized matchinfo request: %c", cArg);
+  return SQLITE_ERROR;
+}
+
+static int fts3MatchinfoSize(MatchInfo *pInfo, char cArg){
+  int nVal;                       /* Number of integers output by cArg */
+
+  switch( cArg ){
+    case FTS3_MATCHINFO_NDOC:
+    case FTS3_MATCHINFO_NPHRASE: 
+    case FTS3_MATCHINFO_NCOL: 
+      nVal = 1;
+      break;
+
+    case FTS3_MATCHINFO_AVGLENGTH:
+    case FTS3_MATCHINFO_LENGTH:
+    case FTS3_MATCHINFO_LCS:
+      nVal = pInfo->nCol;
+      break;
+
+    default:
+      assert( cArg==FTS3_MATCHINFO_HITS );
+      nVal = pInfo->nCol * pInfo->nPhrase * 3;
+      break;
+  }
+
+  return nVal;
+}
+
+static int fts3MatchinfoSelectDoctotal(
+  Fts3Table *pTab,
+  sqlite3_stmt **ppStmt,
+  sqlite3_int64 *pnDoc,
+  const char **paLen
+){
+  sqlite3_stmt *pStmt;
+  const char *a;
+  sqlite3_int64 nDoc;
+
+  if( !*ppStmt ){
+    int rc = sqlite3Fts3SelectDoctotal(pTab, ppStmt);
+    if( rc!=SQLITE_OK ) return rc;
+  }
+  pStmt = *ppStmt;
+
+  a = sqlite3_column_blob(pStmt, 0);
+  a += sqlite3Fts3GetVarint(a, &nDoc);
+  *pnDoc = (u32)nDoc;
+
+  if( paLen ) *paLen = a;
+  return SQLITE_OK;
+}
+
+/*
+** An instance of the following structure is used to store state while 
+** iterating through a multi-column position-list corresponding to the
+** hits for a single phrase on a single row in order to calculate the
+** values for a matchinfo() FTS3_MATCHINFO_LCS request.
+*/
+typedef struct LcsIterator LcsIterator;
+struct LcsIterator {
+  Fts3Expr *pExpr;                /* Pointer to phrase expression */
+  char *pRead;                    /* Cursor used to iterate through aDoclist */
+  int iPosOffset;                 /* Tokens count up to end of this phrase */
+  int iCol;                       /* Current column number */
+  int iPos;                       /* Current position */
+};
+
+/* 
+** If LcsIterator.iCol is set to the following value, the iterator has
+** finished iterating through all offsets for all columns.
+*/
+#define LCS_ITERATOR_FINISHED 0x7FFFFFFF;
+
+static int fts3MatchinfoLcsCb(
+  Fts3Expr *pExpr,                /* Phrase expression node */
+  int iPhrase,                    /* Phrase number (numbered from zero) */
+  void *pCtx                      /* Pointer to MatchInfo structure */
+){
+  LcsIterator *aIter = (LcsIterator *)pCtx;
+  aIter[iPhrase].pExpr = pExpr;
+  return SQLITE_OK;
+}
+
+/*
+** Advance the iterator passed as an argument to the next position. Return
+** 1 if the iterator is at EOF or if it now points to the start of the
+** position list for the next column.
+*/
+static int fts3LcsIteratorAdvance(LcsIterator *pIter){
+  char *pRead = pIter->pRead;
+  sqlite3_int64 iRead;
+  int rc = 0;
+
+  pRead += sqlite3Fts3GetVarint(pRead, &iRead);
+  if( iRead==0 ){
+    pIter->iCol = LCS_ITERATOR_FINISHED;
+    rc = 1;
+  }else{
+    if( iRead==1 ){
+      pRead += sqlite3Fts3GetVarint(pRead, &iRead);
+      pIter->iCol = (int)iRead;
+      pIter->iPos = pIter->iPosOffset;
+      pRead += sqlite3Fts3GetVarint(pRead, &iRead);
+      rc = 1;
+    }
+    pIter->iPos += (int)(iRead-2);
+  }
+
+  pIter->pRead = pRead;
+  return rc;
+}
+  
+/*
+** This function implements the FTS3_MATCHINFO_LCS matchinfo() flag. 
+**
+** If the call is successful, the longest-common-substring lengths for each
+** column are written into the first nCol elements of the pInfo->aMatchinfo[] 
+** array before returning. SQLITE_OK is returned in this case.
+**
+** Otherwise, if an error occurs, an SQLite error code is returned and the
+** data written to the first nCol elements of pInfo->aMatchinfo[] is 
+** undefined.
+*/
+static int fts3MatchinfoLcs(Fts3Cursor *pCsr, MatchInfo *pInfo){
+  LcsIterator *aIter;
+  int i;
+  int iCol;
+  int nToken = 0;
+
+  /* Allocate and populate the array of LcsIterator objects. The array
+  ** contains one element for each matchable phrase in the query.
+  **/
+  aIter = sqlite3_malloc(sizeof(LcsIterator) * pCsr->nPhrase);
+  if( !aIter ) return SQLITE_NOMEM;
+  memset(aIter, 0, sizeof(LcsIterator) * pCsr->nPhrase);
+  (void)fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter);
+  for(i=0; i<pInfo->nPhrase; i++){
+    LcsIterator *pIter = &aIter[i];
+    nToken -= pIter->pExpr->pPhrase->nToken;
+    pIter->iPosOffset = nToken;
+    pIter->pRead = sqlite3Fts3FindPositions(pIter->pExpr, pCsr->iPrevId, -1);
+    if( pIter->pRead ){
+      pIter->iPos = pIter->iPosOffset;
+      fts3LcsIteratorAdvance(&aIter[i]);
+    }else{
+      pIter->iCol = LCS_ITERATOR_FINISHED;
+    }
+  }
+
+  for(iCol=0; iCol<pInfo->nCol; iCol++){
+    int nLcs = 0;                 /* LCS value for this column */
+    int nLive = 0;                /* Number of iterators in aIter not at EOF */
+
+    /* Loop through the iterators in aIter[]. Set nLive to the number of
+    ** iterators that point to a position-list corresponding to column iCol.
+    */
+    for(i=0; i<pInfo->nPhrase; i++){
+      assert( aIter[i].iCol>=iCol );
+      if( aIter[i].iCol==iCol ) nLive++;
+    }
+
+    /* The following loop runs until all iterators in aIter[] have finished
+    ** iterating through positions in column iCol. Exactly one of the 
+    ** iterators is advanced each time the body of the loop is run.
+    */
+    while( nLive>0 ){
+      LcsIterator *pAdv = 0;      /* The iterator to advance by one position */
+      int nThisLcs = 0;           /* LCS for the current iterator positions */
+
+      for(i=0; i<pInfo->nPhrase; i++){
+        LcsIterator *pIter = &aIter[i];
+        if( iCol!=pIter->iCol ){  
+          /* This iterator is already at EOF for this column. */
+          nThisLcs = 0;
+        }else{
+          if( pAdv==0 || pIter->iPos<pAdv->iPos ){
+            pAdv = pIter;
+          }
+          if( nThisLcs==0 || pIter->iPos==pIter[-1].iPos ){
+            nThisLcs++;
+          }else{
+            nThisLcs = 1;
+          }
+          if( nThisLcs>nLcs ) nLcs = nThisLcs;
+        }
+      }
+      if( fts3LcsIteratorAdvance(pAdv) ) nLive--;
+    }
+
+    pInfo->aMatchinfo[iCol] = nLcs;
+  }
+
+  sqlite3_free(aIter);
+  return SQLITE_OK;
+}
+
+/*
+** Populate the buffer pInfo->aMatchinfo[] with an array of integers to
+** be returned by the matchinfo() function. Argument zArg contains the 
+** format string passed as the second argument to matchinfo (or the
+** default value "pcx" if no second argument was specified). The format
+** string has already been validated and the pInfo->aMatchinfo[] array
+** is guaranteed to be large enough for the output.
+**
+** If bGlobal is true, then populate all fields of the matchinfo() output.
+** If it is false, then assume that those fields that do not change between
+** rows (i.e. FTS3_MATCHINFO_NPHRASE, NCOL, NDOC, AVGLENGTH and part of HITS)
+** have already been populated.
+**
+** Return SQLITE_OK if successful, or an SQLite error code if an error 
+** occurs. If a value other than SQLITE_OK is returned, the state the
+** pInfo->aMatchinfo[] buffer is left in is undefined.
+*/
+static int fts3MatchinfoValues(
+  Fts3Cursor *pCsr,               /* FTS3 cursor object */
+  int bGlobal,                    /* True to grab the global stats */
+  MatchInfo *pInfo,               /* Matchinfo context object */
+  const char *zArg                /* Matchinfo format string */
+){
+  int rc = SQLITE_OK;
+  int i;
+  Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
+  sqlite3_stmt *pSelect = 0;
+
+  for(i=0; rc==SQLITE_OK && zArg[i]; i++){
+
+    switch( zArg[i] ){
+      case FTS3_MATCHINFO_NPHRASE:
+        if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nPhrase;
+        break;
+
+      case FTS3_MATCHINFO_NCOL:
+        if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nCol;
+        break;
+        
+      case FTS3_MATCHINFO_NDOC:
+        if( bGlobal ){
+          sqlite3_int64 nDoc;
+          rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, 0);
+          pInfo->aMatchinfo[0] = (u32)nDoc;
+        }
+        break;
+
+      case FTS3_MATCHINFO_AVGLENGTH: 
+        if( bGlobal ){
+          sqlite3_int64 nDoc;     /* Number of rows in table */
+          const char *a;          /* Aggregate column length array */
+
+          rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, &a);
+          if( rc==SQLITE_OK ){
+            int iCol;
+            for(iCol=0; iCol<pInfo->nCol; iCol++){
+              sqlite3_int64 nToken;
+              a += sqlite3Fts3GetVarint(a, &nToken);
+              pInfo->aMatchinfo[iCol] = (u32)(((u32)(nToken&0xffffffff)+nDoc/2)/nDoc);
+            }
+          }
+        }
+        break;
+
+      case FTS3_MATCHINFO_LENGTH: {
+        sqlite3_stmt *pSelectDocsize = 0;
+        rc = sqlite3Fts3SelectDocsize(pTab, pCsr->iPrevId, &pSelectDocsize);
+        if( rc==SQLITE_OK ){
+          int iCol;
+          const char *a = sqlite3_column_blob(pSelectDocsize, 0);
+          for(iCol=0; iCol<pInfo->nCol; iCol++){
+            sqlite3_int64 nToken;
+            a += sqlite3Fts3GetVarint(a, &nToken);
+            pInfo->aMatchinfo[iCol] = (u32)nToken;
+          }
+        }
+        sqlite3_reset(pSelectDocsize);
+        break;
+      }
+
+      case FTS3_MATCHINFO_LCS:
+        rc = fts3ExprLoadDoclists(pCsr, 0, 0);
+        if( rc==SQLITE_OK ){
+          rc = fts3MatchinfoLcs(pCsr, pInfo);
+        }
+        break;
+
+      default: {
+        Fts3Expr *pExpr;
+        assert( zArg[i]==FTS3_MATCHINFO_HITS );
+        pExpr = pCsr->pExpr;
+        rc = fts3ExprLoadDoclists(pCsr, 0, 0);
+        if( rc!=SQLITE_OK ) break;
+        if( bGlobal ){
+          if( pCsr->pDeferred ){
+            rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &pInfo->nDoc, 0);
+            if( rc!=SQLITE_OK ) break;
+          }
+          rc = fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo);
+          if( rc!=SQLITE_OK ) break;
+        }
+        (void)fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo);
+        break;
+      }
+    }
+
+    pInfo->aMatchinfo += fts3MatchinfoSize(pInfo, zArg[i]);
+  }
+
+  sqlite3_reset(pSelect);
+  return rc;
+}
+
+
 /*
 ** Populate pCsr->aMatchinfo[] with data for the current row. The 
 ** 'matchinfo' data is an array of 32-bit unsigned integers (C type u32).
 */
-static int fts3GetMatchinfo(Fts3Cursor *pCsr){
+static int fts3GetMatchinfo(
+  Fts3Cursor *pCsr,               /* FTS3 Cursor object */
+  const char *zArg                /* Second argument to matchinfo() function */
+){
   MatchInfo sInfo;
   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
   int rc = SQLITE_OK;
+  int bGlobal = 0;                /* Collect 'global' stats as well as local */
 
+  memset(&sInfo, 0, sizeof(MatchInfo));
   sInfo.pCursor = pCsr;
   sInfo.nCol = pTab->nColumn;
 
+  /* If there is cached matchinfo() data, but the format string for the 
+  ** cache does not match the format string for this request, discard 
+  ** the cached data. */
+  if( pCsr->zMatchinfo && strcmp(pCsr->zMatchinfo, zArg) ){
+    assert( pCsr->aMatchinfo );
+    sqlite3_free(pCsr->aMatchinfo);
+    pCsr->zMatchinfo = 0;
+    pCsr->aMatchinfo = 0;
+  }
+
+  /* If Fts3Cursor.aMatchinfo[] is NULL, then this is the first time the
+  ** matchinfo function has been called for this query. In this case 
+  ** allocate the array used to accumulate the matchinfo data and
+  ** initialize those elements that are constant for every row.
+  */
   if( pCsr->aMatchinfo==0 ){
-    /* If Fts3Cursor.aMatchinfo[] is NULL, then this is the first time the
-    ** matchinfo function has been called for this query. In this case 
-    ** allocate the array used to accumulate the matchinfo data and
-    ** initialize those elements that are constant for every row.
-    */
-    int nPhrase;                  /* Number of phrases */
-    int nMatchinfo;               /* Number of u32 elements in match-info */
+    int nMatchinfo = 0;           /* Number of u32 elements in match-info */
+    int nArg;                     /* Bytes in zArg */
+    int i;                        /* Used to iterate through zArg */
 
-    /* Load doclists for each phrase in the query. */
-    rc = fts3ExprLoadDoclists(pCsr, &nPhrase, 0);
-    if( rc!=SQLITE_OK ){
-      return rc;
-    }
-    nMatchinfo = 2 + 3*sInfo.nCol*nPhrase;
-    if( pTab->bHasDocsize ){
-      nMatchinfo += 1 + 2*pTab->nColumn;
-    }
+    /* Determine the number of phrases in the query */
+    pCsr->nPhrase = fts3ExprPhraseCount(pCsr->pExpr);
+    sInfo.nPhrase = pCsr->nPhrase;
 
-    sInfo.aMatchinfo = (u32 *)sqlite3_malloc(sizeof(u32)*nMatchinfo);
-    if( !sInfo.aMatchinfo ){ 
-      return SQLITE_NOMEM;
+    /* Determine the number of integers in the buffer returned by this call. */
+    for(i=0; zArg[i]; i++){
+      nMatchinfo += fts3MatchinfoSize(&sInfo, zArg[i]);
     }
-    memset(sInfo.aMatchinfo, 0, sizeof(u32)*nMatchinfo);
 
+    /* Allocate space for Fts3Cursor.aMatchinfo[] and Fts3Cursor.zMatchinfo. */
+    nArg = (int)strlen(zArg);
+    pCsr->aMatchinfo = (u32 *)sqlite3_malloc(sizeof(u32)*nMatchinfo + nArg + 1);
+    if( !pCsr->aMatchinfo ) return SQLITE_NOMEM;
 
-    /* First element of match-info is the number of phrases in the query */
-    sInfo.aMatchinfo[0] = nPhrase;
-    sInfo.aMatchinfo[1] = sInfo.nCol;
-    (void)fts3ExprIterate(pCsr->pExpr, fts3ExprGlobalMatchinfoCb,(void*)&sInfo);
-    if( pTab->bHasDocsize ){
-      int ofst = 2 + 3*sInfo.aMatchinfo[0]*sInfo.aMatchinfo[1];
-      rc = sqlite3Fts3MatchinfoDocsizeGlobal(pCsr, &sInfo.aMatchinfo[ofst]);
-    }
-    pCsr->aMatchinfo = sInfo.aMatchinfo;
+    pCsr->zMatchinfo = (char *)&pCsr->aMatchinfo[nMatchinfo];
+    pCsr->nMatchinfo = nMatchinfo;
+    memcpy(pCsr->zMatchinfo, zArg, nArg+1);
+    memset(pCsr->aMatchinfo, 0, sizeof(u32)*nMatchinfo);
     pCsr->isMatchinfoNeeded = 1;
+    bGlobal = 1;
   }
 
   sInfo.aMatchinfo = pCsr->aMatchinfo;
-  if( rc==SQLITE_OK && pCsr->isMatchinfoNeeded ){
-    (void)fts3ExprIterate(pCsr->pExpr, fts3ExprLocalMatchinfoCb, (void*)&sInfo);
-    if( pTab->bHasDocsize ){
-      int ofst = 2 + 3*sInfo.aMatchinfo[0]*sInfo.aMatchinfo[1];
-      rc = sqlite3Fts3MatchinfoDocsizeLocal(pCsr, &sInfo.aMatchinfo[ofst]);
-    }
+  sInfo.nPhrase = pCsr->nPhrase;
+  if( pCsr->isMatchinfoNeeded ){
+    rc = fts3MatchinfoValues(pCsr, bGlobal, &sInfo, zArg);
     pCsr->isMatchinfoNeeded = 0;
   }
 
-  return SQLITE_OK;
+  return rc;
 }
 
 /*
@@ -116449,7 +118662,7 @@ SQLITE_PRIVATE void sqlite3Fts3Snippet(
       ** columns of the FTS3 table. Otherwise, only column iCol is considered.
       */
       for(iRead=0; iRead<pTab->nColumn; iRead++){
-        SnippetFragment sF;
+        SnippetFragment sF = {0, 0, 0, 0};
         int iS;
         if( iCol>=0 && iRead!=iCol ) continue;
 
@@ -116483,6 +118696,7 @@ SQLITE_PRIVATE void sqlite3Fts3Snippet(
   }
 
  snippet_out:
+  sqlite3Fts3SegmentsClose(pTab);
   if( rc!=SQLITE_OK ){
     sqlite3_result_error_code(pCtx, rc);
     sqlite3_free(res.z);
@@ -116662,6 +118876,7 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets(
  offsets_out:
   sqlite3_free(sCtx.aTerm);
   assert( rc!=SQLITE_DONE );
+  sqlite3Fts3SegmentsClose(pTab);
   if( rc!=SQLITE_OK ){
     sqlite3_result_error_code(pCtx,  rc);
     sqlite3_free(res.z);
@@ -116674,21 +118889,43 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets(
 /*
 ** Implementation of matchinfo() function.
 */
-SQLITE_PRIVATE void sqlite3Fts3Matchinfo(sqlite3_context *pContext, Fts3Cursor *pCsr){
+SQLITE_PRIVATE void sqlite3Fts3Matchinfo(
+  sqlite3_context *pContext,      /* Function call context */
+  Fts3Cursor *pCsr,               /* FTS3 table cursor */
+  const char *zArg                /* Second arg to matchinfo() function */
+){
+  Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
   int rc;
+  int i;
+  const char *zFormat;
+
+  if( zArg ){
+    for(i=0; zArg[i]; i++){
+      char *zErr = 0;
+      if( fts3MatchinfoCheck(pTab, zArg[i], &zErr) ){
+        sqlite3_result_error(pContext, zErr, -1);
+        sqlite3_free(zErr);
+        return;
+      }
+    }
+    zFormat = zArg;
+  }else{
+    zFormat = FTS3_MATCHINFO_DEFAULT;
+  }
+
   if( !pCsr->pExpr ){
     sqlite3_result_blob(pContext, "", 0, SQLITE_STATIC);
     return;
   }
-  rc = fts3GetMatchinfo(pCsr);
+
+  /* Retrieve matchinfo() data. */
+  rc = fts3GetMatchinfo(pCsr, zFormat);
+  sqlite3Fts3SegmentsClose(pTab);
+
   if( rc!=SQLITE_OK ){
     sqlite3_result_error_code(pContext, rc);
   }else{
-    Fts3Table *pTab = (Fts3Table*)pCsr->base.pVtab;
-    int n = sizeof(u32)*(2+pCsr->aMatchinfo[0]*pCsr->aMatchinfo[1]*3);
-    if( pTab->bHasDocsize ){
-      n += sizeof(u32)*(1 + 2*pTab->nColumn);
-    }
+    int n = pCsr->nMatchinfo * sizeof(u32);
     sqlite3_result_blob(pContext, pCsr->aMatchinfo, n, SQLITE_TRANSIENT);
   }
 }
@@ -116808,6 +119045,12 @@ typedef unsigned char u8;
 typedef unsigned int u32;
 #endif
 
+/*  The following macro is used to suppress compiler warnings.
+*/
+#ifndef UNUSED_PARAMETER
+# define UNUSED_PARAMETER(x) (void)(x)
+#endif
+
 typedef struct Rtree Rtree;
 typedef struct RtreeCursor RtreeCursor;
 typedef struct RtreeNode RtreeNode;
@@ -117582,6 +119825,7 @@ static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
   RtreeCell cell;
   int ii;
   int bRes = 0;
+  int rc = SQLITE_OK;
 
   nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
   for(ii=0; bRes==0 && ii<pCursor->nConstraint; ii++){
@@ -117607,12 +119851,8 @@ static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
         break;
 
       default: {
-        int rc;
         assert( p->op==RTREE_MATCH );
         rc = testRtreeGeom(pRtree, p, &cell, &bRes);
-        if( rc!=SQLITE_OK ){
-          return rc;
-        }
         bRes = !bRes;
         break;
       }
@@ -117620,7 +119860,7 @@ static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
   }
 
   *pbEof = bRes;
-  return SQLITE_OK;
+  return rc;
 }
 
 /* 
@@ -117703,14 +119943,13 @@ static int descendToCell(
     rc = testRtreeCell(pRtree, pCursor, &isEof);
   }
   if( rc!=SQLITE_OK || isEof || iHeight==0 ){
-    *pEof = isEof;
-    return rc;
+    goto descend_to_cell_out;
   }
 
   iRowid = nodeGetRowid(pRtree, pCursor->pNode, pCursor->iCell);
   rc = nodeAcquire(pRtree, iRowid, pCursor->pNode, &pChild);
   if( rc!=SQLITE_OK ){
-    return rc;
+    goto descend_to_cell_out;
   }
 
   nodeRelease(pRtree, pCursor->pNode);
@@ -117720,7 +119959,7 @@ static int descendToCell(
     pCursor->iCell = ii;
     rc = descendToCell(pRtree, pCursor, iHeight-1, &isEof);
     if( rc!=SQLITE_OK ){
-      return rc;
+      goto descend_to_cell_out;
     }
   }
 
@@ -117732,8 +119971,9 @@ static int descendToCell(
     pCursor->iCell = iSavedCell;
   }
 
+descend_to_cell_out:
   *pEof = isEof;
-  return SQLITE_OK;
+  return rc;
 }
 
 /*
@@ -117889,7 +120129,7 @@ static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){
 
   /* Check that the blob is roughly the right size. */
   nBlob = sqlite3_value_bytes(pValue);
-  if( nBlob<sizeof(RtreeMatchArg) 
+  if( nBlob<(int)sizeof(RtreeMatchArg) 
    || ((nBlob-sizeof(RtreeMatchArg))%sizeof(double))!=0
   ){
     return SQLITE_ERROR;
@@ -117904,7 +120144,7 @@ static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){
 
   memcpy(p, sqlite3_value_blob(pValue), nBlob);
   if( p->magic!=RTREE_GEOMETRY_MAGIC 
-   || nBlob!=(sizeof(RtreeMatchArg) + (p->nParam-1)*sizeof(double))
+   || nBlob!=(int)(sizeof(RtreeMatchArg) + (p->nParam-1)*sizeof(double))
   ){
     sqlite3_free(pGeom);
     return SQLITE_ERROR;
@@ -118050,6 +120290,7 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
   int iIdx = 0;
   char zIdxStr[RTREE_MAX_DIMENSIONS*8+1];
   memset(zIdxStr, 0, sizeof(zIdxStr));
+  UNUSED_PARAMETER(tab);
 
   assert( pIdxInfo->idxStr==0 );
   for(ii=0; ii<pIdxInfo->nConstraint; ii++){
@@ -118223,6 +120464,7 @@ static float cellOverlap(
     if( ii!=iExclude )
 #else
     assert( iExclude==-1 );
+    UNUSED_PARAMETER(iExclude);
 #endif
     {
       int jj;
@@ -119344,16 +121586,6 @@ static int newRowid(Rtree *pRtree, i64 *piRowid){
   return rc;
 }
 
-#ifndef NDEBUG
-static int hashIsEmpty(Rtree *pRtree){
-  int ii;
-  for(ii=0; ii<HASHSIZE; ii++){
-    assert( !pRtree->aHash[ii] );
-  }
-  return 1;
-}
-#endif
-
 /*
 ** The xUpdate method for rtree module virtual tables.
 */
@@ -119819,6 +122051,7 @@ static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
   Rtree tree;
   int ii;
 
+  UNUSED_PARAMETER(nArg);
   memset(&node, 0, sizeof(RtreeNode));
   memset(&tree, 0, sizeof(Rtree));
   tree.nDim = sqlite3_value_int(apArg[0]);
@@ -119852,6 +122085,7 @@ static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
 }
 
 static void rtreedepth(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
+  UNUSED_PARAMETER(nArg);
   if( sqlite3_value_type(apArg[0])!=SQLITE_BLOB 
    || sqlite3_value_bytes(apArg[0])<2
   ){
@@ -119873,7 +122107,6 @@ SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db){
 
   rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0);
   if( rc==SQLITE_OK ){
-    int utf8 = SQLITE_UTF8;
     rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0);
   }
   if( rc==SQLITE_OK ){
@@ -119978,7 +122211,7 @@ SQLITE_API int sqlite3_extension_init(
 **    May you share freely, never taking more than you give.
 **
 *************************************************************************
-** $Id: sqlite3.c 304571 2010-10-20 19:27:34Z iliaa $
+** $Id: sqlite3.c 306223 2010-12-11 14:57:34Z iliaa $
 **
 ** This file implements an integration between the ICU library 
 ** ("International Components for Unicode", an open-source library 
@@ -120479,7 +122712,7 @@ SQLITE_API int sqlite3_extension_init(
 *************************************************************************
 ** This file implements a tokenizer for fts3 based on the ICU library.
 ** 
-** $Id: sqlite3.c 304571 2010-10-20 19:27:34Z iliaa $
+** $Id: sqlite3.c 306223 2010-12-11 14:57:34Z iliaa $
 */
 
 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
diff --git a/ext/sqlite3/libsqlite/sqlite3.h b/ext/sqlite3/libsqlite/sqlite3.h
index d78ae39..47ef256 100644
--- a/ext/sqlite3/libsqlite/sqlite3.h
+++ b/ext/sqlite3/libsqlite/sqlite3.h
@@ -107,9 +107,9 @@ extern "C" {
 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
 ** [sqlite_version()] and [sqlite_source_id()].
 */
-#define SQLITE_VERSION        "3.7.3"
-#define SQLITE_VERSION_NUMBER 3007003
-#define SQLITE_SOURCE_ID      "2010-10-08 02:34:02 2677848087c9c090efb17c1893e77d6136a9111d"
+#define SQLITE_VERSION        "3.7.4"
+#define SQLITE_VERSION_NUMBER 3007004
+#define SQLITE_SOURCE_ID      "2010-12-07 20:14:09 a586a4deeb25330037a49df295b36aaf624d0f45"
 
 /*
 ** CAPI3REF: Run-Time Library Version Numbers
@@ -542,6 +542,18 @@ SQLITE_API int sqlite3_exec(
 ** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
 ** If the lower four bits equal SQLITE_SYNC_FULL, that means
 ** to use Mac OS X style fullsync instead of fsync().
+**
+** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
+** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL
+** settings.  The [synchronous pragma] determines when calls to the
+** xSync VFS method occur and applies uniformly across all platforms.
+** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
+** energetic or rigorous or forceful the sync operations are and
+** only make a difference on Mac OSX for the default SQLite code.
+** (Third-party VFS implementations might also make the distinction
+** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
+** operating systems natively supported by SQLite, only Mac OSX
+** cares about the difference.)
 */
 #define SQLITE_SYNC_NORMAL        0x00002
 #define SQLITE_SYNC_FULL          0x00003
@@ -710,6 +722,8 @@ struct sqlite3_io_methods {
 #define SQLITE_LAST_ERRNO             4
 #define SQLITE_FCNTL_SIZE_HINT        5
 #define SQLITE_FCNTL_CHUNK_SIZE       6
+#define SQLITE_FCNTL_FILE_POINTER     7
+
 
 /*
 ** CAPI3REF: Mutex Handle
@@ -2634,6 +2648,20 @@ SQLITE_API int sqlite3_prepare16_v2(
 SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);
 
 /*
+** CAPI3REF: Determine If An SQL Statement Writes The Database
+**
+** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
+** the [prepared statement] X is [SELECT] statement and false (zero) if
+** X is an [INSERT], [UPDATE], [DELETE], CREATE, DROP, [ANALYZE],
+** [ALTER], or [REINDEX] statement.
+** If X is a NULL pointer or any other kind of statement, including but
+** not limited to [ATTACH], [DETACH], [COMMIT], [ROLLBACK], [RELEASE],
+** [SAVEPOINT], [PRAGMA], or [VACUUM] the result of sqlite3_stmt_readonly(X) is
+** undefined.
+*/
+SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
+
+/*
 ** CAPI3REF: Dynamically Typed Value Object
 ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value}
 **
@@ -2732,7 +2760,10 @@ typedef struct sqlite3_context sqlite3_context;
 **
 ** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and
 ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or
-** string after SQLite has finished with it. ^If the fifth argument is
+** string after SQLite has finished with it.  ^The destructor is called
+** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(),
+** sqlite3_bind_text(), or sqlite3_bind_text16() fails.  
+** ^If the fifth argument is
 ** the special value [SQLITE_STATIC], then SQLite assumes that the
 ** information is in static, unmanaged space and does not need to be freed.
 ** ^If the fifth argument has the value [SQLITE_TRANSIENT], then
@@ -3372,12 +3403,15 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
 ** SQL function or aggregate, pass NULL poiners for all three function
 ** callbacks.
 **
-** ^If the tenth parameter to sqlite3_create_function_v2() is not NULL,
-** then it is invoked when the function is deleted, either by being
-** overloaded or when the database connection closes.
-** ^When the destructure callback of the tenth parameter is invoked, it
-** is passed a single argument which is a copy of the pointer which was
-** the fifth parameter to sqlite3_create_function_v2().
+** ^(If the tenth parameter to sqlite3_create_function_v2() is not NULL,
+** then it is destructor for the application data pointer. 
+** The destructor is invoked when the function is deleted, either by being
+** overloaded or when the database connection closes.)^
+** ^The destructor is also invoked if the call to
+** sqlite3_create_function_v2() fails.
+** ^When the destructor callback of the tenth parameter is invoked, it
+** is passed a single argument which is a copy of the application data 
+** pointer which was the fifth parameter to sqlite3_create_function_v2().
 **
 ** ^It is permitted to register multiple implementations of the same
 ** functions with the same name but with either differing numbers of
@@ -3841,6 +3875,15 @@ SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n);
 ** calls to the collation creation functions or when the
 ** [database connection] is closed using [sqlite3_close()].
 **
+** ^The xDestroy callback is <u>not</u> called if the 
+** sqlite3_create_collation_v2() function fails.  Applications that invoke
+** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should 
+** check the return code and dispose of the application data pointer
+** themselves rather than expecting SQLite to deal with it for them.
+** This is different from every other SQLite interface.  The inconsistency 
+** is unfortunate but cannot be changed without breaking backwards 
+** compatibility.
+**
 ** See also:  [sqlite3_collation_needed()] and [sqlite3_collation_needed16()].
 */
 SQLITE_API int sqlite3_create_collation(
@@ -4595,7 +4638,9 @@ struct sqlite3_index_info {
 ** ^The sqlite3_create_module_v2() interface has a fifth parameter which
 ** is a pointer to a destructor for the pClientData.  ^SQLite will
 ** invoke the destructor function (if it is not NULL) when SQLite
-** no longer needs the pClientData pointer.  ^The sqlite3_create_module()
+** no longer needs the pClientData pointer.  ^The destructor will also
+** be invoked if the call to sqlite3_create_module_v2() fails.
+** ^The sqlite3_create_module()
 ** interface is equivalent to sqlite3_create_module_v2() with a NULL
 ** destructor.
 */
@@ -4779,6 +4824,30 @@ SQLITE_API int sqlite3_blob_open(
 );
 
 /*
+** CAPI3REF: Move a BLOB Handle to a New Row
+**
+** ^This function is used to move an existing blob handle so that it points
+** to a different row of the same database table. ^The new row is identified
+** by the rowid value passed as the second argument. Only the row can be
+** changed. ^The database, table and column on which the blob handle is open
+** remain the same. Moving an existing blob handle to a new row can be
+** faster than closing the existing handle and opening a new one.
+**
+** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] -
+** it must exist and there must be either a blob or text value stored in
+** the nominated column.)^ ^If the new row is not present in the table, or if
+** it does not contain a blob or text value, or if another error occurs, an
+** SQLite error code is returned and the blob handle is considered aborted.
+** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or
+** [sqlite3_blob_reopen()] on an aborted blob handle immediately return
+** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle
+** always returns zero.
+**
+** ^This function sets the database handle error code and message.
+*/
+SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
+
+/*
 ** CAPI3REF: Close A BLOB Handle
 **
 ** ^Closes an open [BLOB handle].
@@ -5185,7 +5254,7 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
 ** ^The [sqlite3_file_control()] interface makes a direct call to the
 ** xFileControl method for the [sqlite3_io_methods] object associated
 ** with a particular database identified by the second argument. ^The
-** name of the database "main" for the main database or "temp" for the
+** name of the database is "main" for the main database or "temp" for the
 ** TEMP database, or the name that appears after the AS keyword for
 ** databases that are added using the [ATTACH] SQL command.
 ** ^A NULL pointer can be used in place of "main" to refer to the
@@ -5195,6 +5264,12 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
 ** the xFileControl method.  ^The return value of the xFileControl
 ** method becomes the return value of this routine.
 **
+** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes
+** a pointer to the underlying [sqlite3_file] object to be written into
+** the space pointed to by the 4th parameter.  ^The SQLITE_FCNTL_FILE_POINTER
+** case is a short-circuit path which does not actually invoke the
+** underlying sqlite3_io_methods.xFileControl method.
+**
 ** ^If the second parameter (zDbName) does not match the name of any
 ** open database file, then SQLITE_ERROR is returned.  ^This error
 ** code is not remembered and will not be recalled by [sqlite3_errcode()]
diff --git a/ext/sqlite3/libsqlite/sqlite3ext.h b/ext/sqlite3/libsqlite/sqlite3ext.h
index 0d37bbe..e45e691 100644
--- a/ext/sqlite3/libsqlite/sqlite3ext.h
+++ b/ext/sqlite3/libsqlite/sqlite3ext.h
@@ -191,6 +191,27 @@ struct sqlite3_api_routines {
   sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*);
   const char *(*sql)(sqlite3_stmt*);
   int (*status)(int,int*,int*,int);
+  int (*backup_finish)(sqlite3_backup*);
+  sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*);
+  int (*backup_pagecount)(sqlite3_backup*);
+  int (*backup_remaining)(sqlite3_backup*);
+  int (*backup_step)(sqlite3_backup*,int);
+  const char *(*compileoption_get)(int);
+  int (*compileoption_used)(const char*);
+  int (*create_function_v2)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*),void(*xDestroy)(void*));
+  int (*db_config)(sqlite3*,int,...);
+  sqlite3_mutex *(*db_mutex)(sqlite3*);
+  int (*db_status)(sqlite3*,int,int*,int*,int);
+  int (*extended_errcode)(sqlite3*);
+  void (*log)(int,const char*,...);
+  sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64);
+  const char *(*sourceid)(void);
+  int (*stmt_status)(sqlite3_stmt*,int,int);
+  int (*strnicmp)(const char*,const char*,int);
+  int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*);
+  int (*wal_autocheckpoint)(sqlite3*,int);
+  int (*wal_checkpoint)(sqlite3*,const char*);
+  void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*);
 };
 
 /*
@@ -370,6 +391,27 @@ struct sqlite3_api_routines {
 #define sqlite3_next_stmt              sqlite3_api->next_stmt
 #define sqlite3_sql                    sqlite3_api->sql
 #define sqlite3_status                 sqlite3_api->status
+#define sqlite3_backup_finish          sqlite3_api->backup_finish
+#define sqlite3_backup_init            sqlite3_api->backup_init
+#define sqlite3_backup_pagecount       sqlite3_api->backup_pagecount
+#define sqlite3_backup_remaining       sqlite3_api->backup_remaining
+#define sqlite3_backup_step            sqlite3_api->backup_step
+#define sqlite3_compileoption_get      sqlite3_api->compileoption_get
+#define sqlite3_compileoption_used     sqlite3_api->compileoption_used
+#define sqlite3_create_function_v2     sqlite3_api->create_function_v2
+#define sqlite3_db_config              sqlite3_api->db_config
+#define sqlite3_db_mutex               sqlite3_api->db_mutex
+#define sqlite3_db_status              sqlite3_api->db_status
+#define sqlite3_extended_errcode       sqlite3_api->extended_errcode
+#define sqlite3_log                    sqlite3_api->log
+#define sqlite3_soft_heap_limit64      sqlite3_api->soft_heap_limit64
+#define sqlite3_sourceid               sqlite3_api->sourceid
+#define sqlite3_stmt_status            sqlite3_api->stmt_status
+#define sqlite3_strnicmp               sqlite3_api->strnicmp
+#define sqlite3_unlock_notify          sqlite3_api->unlock_notify
+#define sqlite3_wal_autocheckpoint     sqlite3_api->wal_autocheckpoint
+#define sqlite3_wal_checkpoint         sqlite3_api->wal_checkpoint
+#define sqlite3_wal_hook               sqlite3_api->wal_hook
 #endif /* SQLITE_CORE */
 
 #define SQLITE_EXTENSION_INIT1     const sqlite3_api_routines *sqlite3_api = 0;
diff --git a/ext/sqlite3/php_sqlite3.h b/ext/sqlite3/php_sqlite3.h
index ea81809..db063bc 100644
--- a/ext/sqlite3/php_sqlite3.h
+++ b/ext/sqlite3/php_sqlite3.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_sqlite3.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_sqlite3.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SQLITE3_H
 #define PHP_SQLITE3_H
diff --git a/ext/sqlite3/php_sqlite3_structs.h b/ext/sqlite3/php_sqlite3_structs.h
index 3488361..d08c31d 100644
--- a/ext/sqlite3/php_sqlite3_structs.h
+++ b/ext/sqlite3/php_sqlite3_structs.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_sqlite3_structs.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_sqlite3_structs.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SQLITE_STRUCTS_H
 #define PHP_SQLITE_STRUCTS_H
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index dc8dd8a..059f560 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: sqlite3.c 305954 2010-12-03 21:05:44Z felipe $ */
+/* $Id: sqlite3.c 307203 2011-01-07 01:11:16Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -40,7 +40,7 @@ ZEND_DECLARE_MODULE_GLOBALS(sqlite3)
 static PHP_GINIT_FUNCTION(sqlite3);
 static int php_sqlite3_authorizer(void *autharg, int access_type, const char *arg3, const char *arg4, const char *arg5, const char *arg6);
 static void sqlite3_param_dtor(void *data);
-static int php_sqlite3_compare_stmt_zval_free( php_sqlite3_free_list **free_list, zval *statement );
+static int php_sqlite3_compare_stmt_zval_free(php_sqlite3_free_list **free_list, zval *statement);
 
 /* {{{ Error Handler
 */
@@ -152,8 +152,6 @@ PHP_METHOD(sqlite3, open)
 		return;
 	}
 
-	db_obj->initialised = 1;
-
 #if SQLITE_HAS_CODEC
 	if (encryption_key_len > 0) {
 		if (sqlite3_key(db_obj->db, encryption_key, encryption_key_len) != SQLITE_OK) {
@@ -163,6 +161,8 @@ PHP_METHOD(sqlite3, open)
 	}
 #endif
 
+	db_obj->initialised = 1;
+
 #if PHP_API_VERSION < 20100412
 	if (PG(safe_mode) || (PG(open_basedir) && *PG(open_basedir))) {
 #else
@@ -1081,10 +1081,9 @@ static int php_sqlite3_stream_cast(php_stream *stream, int castas, void **ret TS
 
 static int php_sqlite3_stream_stat(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC)
 {
-	/* TODO: fill in details based on Data: and Content-Length: headers, and/or data
-	 * from curl_easy_getinfo().
-	 * For now, return -1 to indicate that it doesn't make sense to stat this stream */
-	return -1;
+	php_stream_sqlite3_data *sqlite3_stream = (php_stream_sqlite3_data *) stream->abstract;
+	ssb->sb.st_size = sqlite3_stream->size;
+	return 0;
 }
 
 static php_stream_ops php_stream_sqlite3_ops = {
@@ -1234,6 +1233,27 @@ PHP_METHOD(sqlite3stmt, clear)
 }
 /* }}} */
 
+/* {{{ proto bool SQLite3Stmt::readOnly()
+   Returns true if a statement is definitely read only */
+PHP_METHOD(sqlite3stmt, readOnly)
+{
+	php_sqlite3_stmt *stmt_obj;
+	zval *object = getThis();
+	stmt_obj = (php_sqlite3_stmt *)zend_object_store_get_object(object TSRMLS_CC);
+
+	if (zend_parse_parameters_none() == FAILURE) {
+		return;
+	}
+
+#if SQLITE_VERSION_NUMBER >= 3007004
+	if (sqlite3_stmt_readonly(stmt_obj->stmt)) {
+		RETURN_TRUE;
+	}
+#endif
+	RETURN_FALSE;
+}
+/* }}} */
+
 static int register_bound_parameter_to_sqlite(struct php_sqlite3_bound_param *param, php_sqlite3_stmt *stmt TSRMLS_DC) /* {{{ */
 {
 	HashTable *hash;
@@ -1565,6 +1585,10 @@ PHP_METHOD(sqlite3result, columnType)
 		return;
 	}
 
+	if (result_obj->complete) {
+		RETURN_FALSE;
+	}
+
 	RETURN_LONG(sqlite3_column_type(result_obj->stmt_obj->stmt, column));
 }
 /* }}} */
@@ -1614,6 +1638,7 @@ PHP_METHOD(sqlite3result, fetchArray)
 			break;
 
 		case SQLITE_DONE:
+			result_obj->complete = 1;
 			RETURN_FALSE;
 			break;
 
@@ -1804,6 +1829,7 @@ static zend_function_entry php_sqlite3_stmt_class_methods[] = {
 	PHP_ME(sqlite3stmt, execute,	arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
 	PHP_ME(sqlite3stmt, bindParam,	arginfo_sqlite3stmt_bindparam, ZEND_ACC_PUBLIC)
 	PHP_ME(sqlite3stmt, bindValue,	arginfo_sqlite3stmt_bindvalue, ZEND_ACC_PUBLIC)
+	PHP_ME(sqlite3stmt, readOnly,	arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
 	PHP_ME(sqlite3stmt, __construct, arginfo_sqlite3stmt_construct, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR)
 	{NULL, NULL, NULL}
 };
@@ -1938,7 +1964,7 @@ static void php_sqlite3_stmt_object_free_storage(void *object TSRMLS_DC) /* {{{
 	}
 
 	if (intern->db_obj_zval) {
-		Z_DELREF_P(intern->db_obj_zval);
+		zval_ptr_dtor(&intern->db_obj_zval);
 	}
 
 	zend_object_std_dtor(&intern->zo TSRMLS_CC);
diff --git a/ext/sqlite3/tests/sqlite3_35_stmt_readonly.phpt b/ext/sqlite3/tests/sqlite3_35_stmt_readonly.phpt
new file mode 100644
index 0000000..0c542a1
--- /dev/null
+++ b/ext/sqlite3/tests/sqlite3_35_stmt_readonly.phpt
@@ -0,0 +1,53 @@
+--TEST--
+SQLite3_stmt::readOnly check
+--SKIPIF--
+<?php require_once(dirname(__FILE__) . '/skipif.inc');
+$version = SQLite3::version();
+if ($version['versionNumber'] < 3007004) {
+  die("skip");
+}
+?>
+--FILE--
+<?php
+
+require_once(dirname(__FILE__) . '/new_db.inc');
+define('TIMENOW', time());
+
+echo "Creating Table\n";
+var_dump($db->exec('CREATE TABLE test (time INTEGER, id STRING)'));
+
+echo "INSERT into table\n";
+var_dump($db->exec("INSERT INTO test (time, id) VALUES (" . TIMENOW . ", 'a')"));
+var_dump($db->exec("INSERT INTO test (time, id) VALUES (" . TIMENOW . ", 'b')"));
+
+echo "Checking select statement\n";
+$stmt = $db->prepare("SELECT * FROM test WHERE id = ? ORDER BY id ASC");
+var_dump($stmt->readOnly());
+
+echo "Checking update statement\n";
+$stmt = $db->prepare("UPDATE test SET id = 'c' WHERE id = ?");
+var_dump($stmt->readOnly());
+
+echo "Checking delete statement\n";
+$stmt = $db->prepare("DELETE FROM test");
+var_dump($stmt->readOnly());
+
+echo "Closing database\n";
+var_dump($db->close());
+echo "Done\n";
+?>
+--EXPECTF--
+Creating Table
+bool(true)
+INSERT into table
+bool(true)
+bool(true)
+Checking select statement
+bool(true)
+Checking update statement
+bool(false)
+Checking delete statement
+bool(false)
+Closing database
+bool(true)
+Done
diff --git a/ext/sqlite3/tests/sqlite3_prepare_001.phpt b/ext/sqlite3/tests/sqlite3_prepare_001.phpt
new file mode 100644
index 0000000..7cd4e4c
--- /dev/null
+++ b/ext/sqlite3/tests/sqlite3_prepare_001.phpt
@@ -0,0 +1,17 @@
+--TEST--
+SQLite3 - memory leak on SQLite3Result and SQLite3Stmt
+--FILE--
+<?php
+
+function test(&$x) {
+	$class = new SQLite3(':memory:');
+	$x = $class->prepare('SELECT 1');
+}
+
+test($foo);
+
+echo "done\n";
+
+?>
+--EXPECTF--
+done
diff --git a/ext/standard/array.c b/ext/standard/array.c
index b477b87..030bb0e 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c 305570 2010-11-19 22:06:44Z felipe $ */
+/* $Id: array.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -4048,10 +4048,10 @@ PHP_FUNCTION(array_product)
 		return;
 	}
 
+	ZVAL_LONG(return_value, 1);
 	if (!zend_hash_num_elements(Z_ARRVAL_P(input))) {
-		RETURN_LONG(0);
+		return;
 	}
-	ZVAL_LONG(return_value, 1);
 
 	for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(input), &pos);
 		zend_hash_get_current_data_ex(Z_ARRVAL_P(input), (void **)&entry, &pos) == SUCCESS;
diff --git a/ext/standard/assert.c b/ext/standard/assert.c
index 1730e41..7786286 100644
--- a/ext/standard/assert.c
+++ b/ext/standard/assert.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: assert.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: assert.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* {{{ includes */
 #include "php.h"
diff --git a/ext/standard/base64.c b/ext/standard/base64.c
index f0b7a3e..7cd108b 100644
--- a/ext/standard/base64.c
+++ b/ext/standard/base64.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Jim Winstead <jimw at php.net>                                  |
    +----------------------------------------------------------------------+
  */
-/* $Id: base64.c 305780 2010-11-26 21:00:03Z iliaa $ */
+/* $Id: base64.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <string.h>
 
diff --git a/ext/standard/base64.h b/ext/standard/base64.h
index 8976095..33ce1cb 100644
--- a/ext/standard/base64.h
+++ b/ext/standard/base64.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: base64.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: base64.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef BASE64_H
 #define BASE64_H
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index f7c82dd..de8a2ce 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: basic_functions.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: basic_functions.c 308127 2011-02-08 16:29:34Z cataphract $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -1233,6 +1233,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_fgetcsv, 0, 0, 1)
 	ZEND_ARG_INFO(0, length)
 	ZEND_ARG_INFO(0, delimiter)
 	ZEND_ARG_INFO(0, enclosure)
+	ZEND_ARG_INFO(0, escape)
 ZEND_END_ARG_INFO()
 
 #if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
@@ -3648,7 +3649,9 @@ PHP_MINIT_FUNCTION(basic) /* {{{ */
 
 	php_register_url_stream_wrapper("php", &php_stream_php_wrapper TSRMLS_CC);
 	php_register_url_stream_wrapper("file", &php_plain_files_wrapper TSRMLS_CC);
+#ifdef HAVE_GLOB
 	php_register_url_stream_wrapper("glob", &php_glob_stream_wrapper TSRMLS_CC);
+#endif
 	php_register_url_stream_wrapper("data", &php_stream_rfc2397_wrapper TSRMLS_CC);
 #ifndef PHP_CURL_URL_WRAPPERS
 	php_register_url_stream_wrapper("http", &php_stream_http_wrapper TSRMLS_CC);
diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h
index acd17e5..337b003 100644
--- a/ext/standard/basic_functions.h
+++ b/ext/standard/basic_functions.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: basic_functions.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: basic_functions.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef BASIC_FUNCTIONS_H
 #define BASIC_FUNCTIONS_H
diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c
index 9106727..9a3672d 100644
--- a/ext/standard/browscap.c
+++ b/ext/standard/browscap.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: browscap.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: browscap.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_browscap.h"
diff --git a/ext/standard/config.w32 b/ext/standard/config.w32
index 44dea72..fc90d12 100644
--- a/ext/standard/config.w32
+++ b/ext/standard/config.w32
@@ -1,5 +1,5 @@
 // vim:ft=javascript
-// $Id: config.w32 291899 2009-12-09 00:20:14Z pajoye $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 
 ARG_WITH("config-file-scan-dir", "Dir to check for additional php ini files", "");
 
@@ -21,7 +21,8 @@ EXTENSION("standard", "array.c base64.c basic_functions.c browscap.c \
 	php_fopen_wrapper.c credits.c css.c var_unserializer.c ftok.c sha1.c \
 	user_filters.c uuencode.c filters.c proc_open.c \
 	streamsfuncs.c http.c flock_compat.c", false /* never shared */);
-
+	PHP_INSTALL_HEADERS("", "ext/standard");
 if (PHP_MBREGEX != "no") {
 	CHECK_HEADER_ADD_INCLUDE("oniguruma.h", "CFLAGS_STANDARD", PHP_MBREGEX + ";ext\\mbstring\\oniguruma")   
 }
+PHP_INSTALL_HEADERS("", "ext/standard");
diff --git a/ext/standard/crc32.c b/ext/standard/crc32.c
index 1504dab..4390c42 100644
--- a/ext/standard/crc32.c
+++ b/ext/standard/crc32.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: crc32.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: crc32.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "basic_functions.h"
diff --git a/ext/standard/crc32.h b/ext/standard/crc32.h
index 50ac116..48eb22e 100644
--- a/ext/standard/crc32.h
+++ b/ext/standard/crc32.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: crc32.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: crc32.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
  * This code implements the AUTODIN II polynomial
diff --git a/ext/standard/credits.c b/ext/standard/credits.c
index 1e684f0..21272ed 100644
--- a/ext/standard/credits.c
+++ b/ext/standard/credits.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: credits.c 305420 2010-11-16 23:02:00Z felipe $ */
+/* $Id: credits.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "info.h"
diff --git a/ext/standard/credits.h b/ext/standard/credits.h
index 2451c77..2aa2f8c 100644
--- a/ext/standard/credits.h
+++ b/ext/standard/credits.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: credits.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: credits.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef CREDITS_H
 #define CREDITS_H
diff --git a/ext/standard/credits_ext.h b/ext/standard/credits_ext.h
index 0560282..ec233a2 100644
--- a/ext/standard/credits_ext.h
+++ b/ext/standard/credits_ext.h
@@ -59,7 +59,7 @@ CREDIT_LINE("PostgreSQL driver for PDO", "Edin Kadribasic, Ilia Alshanetsky");
 CREDIT_LINE("PostgreSQL", "Jouni Ahto, Zeev Suraski, Yasuo Ohgaki, Chris Kings-Lynne");
 CREDIT_LINE("Pspell", "Vlad Krupin");
 CREDIT_LINE("Readline", "Thies C. Arntzen");
-CREDIT_LINE("Recode", "Kristian Köhntopp");
+CREDIT_LINE("Recode", "Kristian Koehntopp");
 CREDIT_LINE("Reflection", "Marcus Boerger, Timm Friebe, George Schlossnagle, Andrei Zmievski, Johannes Schlueter");
 CREDIT_LINE("Sessions", "Sascha Schumann, Andrei Zmievski");
 CREDIT_LINE("Shared Memory Operations", "Slava Poliakov, Ilia Alshanetsky");
@@ -68,7 +68,7 @@ CREDIT_LINE("SNMP", "Rasmus Lerdorf, Harrie Hazewinkel, Mike Jackson, Steven Law
 CREDIT_LINE("SOAP", "Brad Lafountain, Shane Caraveo, Dmitry Stogov");
 CREDIT_LINE("Sockets", "Chris Vandomelen, Sterling Hughes, Daniel Beulshausen, Jason Greene");
 CREDIT_LINE("SPL", "Marcus Boerger, Etienne Kneuss");
-CREDIT_LINE("SQLite3", "Scott MacVicar");
+CREDIT_LINE("SQLite3", "Scott MacVicar, Ilia Alshanetsky");
 CREDIT_LINE("SQLite 3.x driver for PDO", "Wez Furlong");
 CREDIT_LINE("SQLite", "Wez Furlong, Tal Peer, Marcus Boerger, Ilia Alshanetsky");
 CREDIT_LINE("Sybase-CT", "Zeev Suraski, Tom May, Timm Friebe");
diff --git a/ext/standard/crypt.c b/ext/standard/crypt.c
index d2476ce..77e459d 100644
--- a/ext/standard/crypt.c
+++ b/ext/standard/crypt.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: crypt.c 300429 2010-06-14 09:56:50Z pajoye $ */
+/* $Id: crypt.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdlib.h>
 
diff --git a/ext/standard/css.c b/ext/standard/css.c
index d417953..ad2b2d6 100644
--- a/ext/standard/css.c
+++ b/ext/standard/css.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: css.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: css.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "info.h"
diff --git a/ext/standard/css.h b/ext/standard/css.h
index d7cc796..8ac13a6 100644
--- a/ext/standard/css.h
+++ b/ext/standard/css.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: css.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: css.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef CSS_H
 #define CSS_H
diff --git a/ext/standard/cyr_convert.c b/ext/standard/cyr_convert.c
index be11cd0..7547aab 100644
--- a/ext/standard/cyr_convert.c
+++ b/ext/standard/cyr_convert.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: cyr_convert.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: cyr_convert.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdlib.h>
 
diff --git a/ext/standard/cyr_convert.h b/ext/standard/cyr_convert.h
index 3ff5c59..fbe514a 100644
--- a/ext/standard/cyr_convert.h
+++ b/ext/standard/cyr_convert.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: cyr_convert.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: cyr_convert.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef CYR_CONVERT_H
 #define CYR_CONVERT_H
diff --git a/ext/standard/datetime.c b/ext/standard/datetime.c
index 87fd1b6..9881df1 100644
--- a/ext/standard/datetime.c
+++ b/ext/standard/datetime.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: datetime.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: datetime.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "zend_operators.h"
diff --git a/ext/standard/datetime.h b/ext/standard/datetime.h
index 0ac21ea..fae5a93 100644
--- a/ext/standard/datetime.h
+++ b/ext/standard/datetime.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: datetime.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: datetime.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef DATETIME_H
 #define DATETIME_H
diff --git a/ext/standard/dir.c b/ext/standard/dir.c
index 4acd891..6c93a19 100644
--- a/ext/standard/dir.c
+++ b/ext/standard/dir.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dir.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: dir.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* {{{ includes/startup/misc */
 
diff --git a/ext/standard/dl.c b/ext/standard/dl.c
index 0499007..79d0d20 100644
--- a/ext/standard/dl.c
+++ b/ext/standard/dl.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dl.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dl.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "dl.h"
diff --git a/ext/standard/dl.h b/ext/standard/dl.h
index 6eb3fb6..c605504 100644
--- a/ext/standard/dl.h
+++ b/ext/standard/dl.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dl.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: dl.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef DL_H
 #define DL_H
diff --git a/ext/standard/dns.c b/ext/standard/dns.c
index 685eb77..0db3480 100644
--- a/ext/standard/dns.c
+++ b/ext/standard/dns.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dns.c 304301 2010-10-11 03:07:03Z cataphract $ */
+/* $Id: dns.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* {{{ includes */
 #include "php.h"
diff --git a/ext/standard/exec.c b/ext/standard/exec.c
index 713a8a0..efe18e7 100644
--- a/ext/standard/exec.c
+++ b/ext/standard/exec.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    |         Ilia Alshanetsky <iliaa at php.net>                             |
    +----------------------------------------------------------------------+
  */
-/* $Id: exec.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: exec.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 #include "php.h"
diff --git a/ext/standard/exec.h b/ext/standard/exec.h
index 18ba008..a8e809d 100644
--- a/ext/standard/exec.h
+++ b/ext/standard/exec.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: exec.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: exec.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef EXEC_H
 #define EXEC_H
diff --git a/ext/standard/file.c b/ext/standard/file.c
index d4ccdf2..3bf1c47 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: file.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: file.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
 
diff --git a/ext/standard/file.h b/ext/standard/file.h
index 8a6b4ed..b4c0e62 100644
--- a/ext/standard/file.h
+++ b/ext/standard/file.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: file.h 305495 2010-11-18 12:10:17Z cataphract $ */
+/* $Id: file.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Synced with php 3.0 revision 1.30 1999-06-16 [ssb] */
 
diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c
index 841c4c7..d961f0e 100644
--- a/ext/standard/filestat.c
+++ b/ext/standard/filestat.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: filestat.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: filestat.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "safe_mode.h"
diff --git a/ext/standard/filters.c b/ext/standard/filters.c
index 13ce8bf..4ffda5d 100644
--- a/ext/standard/filters.c
+++ b/ext/standard/filters.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: filters.c 298700 2010-04-28 14:10:01Z pajoye $ */
+/* $Id: filters.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_globals.h"
diff --git a/ext/standard/flock_compat.c b/ext/standard/flock_compat.c
index 696e972..2c9bcdb 100644
--- a/ext/standard/flock_compat.c
+++ b/ext/standard/flock_compat.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: flock_compat.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: flock_compat.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include <errno.h>
diff --git a/ext/standard/flock_compat.h b/ext/standard/flock_compat.h
index c7265fc..4d2ac3b 100644
--- a/ext/standard/flock_compat.h
+++ b/ext/standard/flock_compat.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: flock_compat.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: flock_compat.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef FLOCK_COMPAT_H
 #define FLOCK_COMPAT_H
diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c
index f253f8d..78663bc 100644
--- a/ext/standard/formatted_print.c
+++ b/ext/standard/formatted_print.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: formatted_print.c 305561 2010-11-19 16:36:10Z iliaa $ */
+/* $Id: formatted_print.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <math.h>				/* modf() */
 #include "php.h"
diff --git a/ext/standard/fsock.c b/ext/standard/fsock.c
index 87e3e52..a7b8c84 100644
--- a/ext/standard/fsock.c
+++ b/ext/standard/fsock.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: fsock.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: fsock.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_globals.h"
diff --git a/ext/standard/fsock.h b/ext/standard/fsock.h
index 3776613..08422c1 100644
--- a/ext/standard/fsock.h
+++ b/ext/standard/fsock.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: fsock.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: fsock.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Synced with php 3.0 revision 1.24 1999-06-18 [ssb] */
 
diff --git a/ext/standard/ftok.c b/ext/standard/ftok.c
index 13e80a2..27eb839 100644
--- a/ext/standard/ftok.c
+++ b/ext/standard/ftok.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: ftok.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: ftok.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c
index f5885de..b8f3fe1 100644
--- a/ext/standard/ftp_fopen_wrapper.c
+++ b/ext/standard/ftp_fopen_wrapper.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    |          Sara Golemon <pollita at php.net>                              |
    +----------------------------------------------------------------------+
  */
-/* $Id: ftp_fopen_wrapper.c 305495 2010-11-18 12:10:17Z cataphract $ */
+/* $Id: ftp_fopen_wrapper.c 308734 2011-02-27 20:23:54Z cataphract $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -72,6 +72,12 @@
 #define FTPS_ENCRYPT_DATA 1
 #define GET_FTP_RESULT(stream)	get_ftp_result((stream), tmp_line, sizeof(tmp_line) TSRMLS_CC)
 
+typedef struct _php_ftp_dirstream_data {
+	php_stream *datastream;
+	php_stream *controlstream;
+	php_stream *dirstream;
+} php_ftp_dirstream_data;
+
 /* {{{ get_ftp_result
  */
 static inline int get_ftp_result(php_stream *stream, char *buffer, size_t buffer_size TSRMLS_DC)
@@ -97,14 +103,28 @@ static int php_stream_ftp_stream_stat(php_stream_wrapper *wrapper, php_stream *s
  */
 static int php_stream_ftp_stream_close(php_stream_wrapper *wrapper, php_stream *stream TSRMLS_DC)
 {
-	php_stream *controlstream = (php_stream *)stream->wrapperdata;
+	php_stream *controlstream = stream->wrapperthis;
+	int ret = 0;
 	
 	if (controlstream) {
+		if (strpbrk(stream->mode, "wa+")) {
+			char tmp_line[512];
+			int result;
+
+			/* For write modes close data stream first to signal EOF to server */
+			result = GET_FTP_RESULT(controlstream);
+			if (result != 226 && result != 250) {
+				php_error_docref(NULL TSRMLS_CC, E_WARNING, "FTP server error %d:%s", result, tmp_line);
+				ret = EOF;
+			}
+		}
+
 		php_stream_write_string(controlstream, "QUIT\r\n");
 		php_stream_close(controlstream);
-		stream->wrapperdata = NULL;
+		stream->wrapperthis = NULL;
 	}
-	return 0;
+
+	return ret;
 }
 /* }}} */
 
@@ -513,7 +533,7 @@ php_stream * php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, char *path, ch
 			php_stream_printf(stream TSRMLS_CC, "REST %ld\r\n", Z_LVAL_PP(tmpzval));
 			result = GET_FTP_RESULT(stream);
 			if (result < 300 || result > 399) {			
-				php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Unable to resume from offset %d", Z_LVAL_PP(tmpzval));
+				php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Unable to resume from offset %ld", Z_LVAL_PP(tmpzval));
 				goto errexit;
 			}
 		}
@@ -564,7 +584,7 @@ php_stream * php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, char *path, ch
 	}
 
 	/* remember control stream */	
-	datastream->wrapperdata = (zval *)stream;
+	datastream->wrapperthis = stream;
 
 	php_url_free(resource);
 	return datastream;
@@ -588,11 +608,13 @@ errexit:
 static size_t php_ftp_dirstream_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
 {
 	php_stream_dirent *ent = (php_stream_dirent *)buf;
-	php_stream *innerstream = (php_stream *)stream->abstract;
+	php_stream *innerstream;
 	size_t tmp_len;
 	char *basename;
 	size_t basename_len;
 
+	innerstream =  ((php_ftp_dirstream_data *)stream->abstract)->datastream;
+
 	if (count != sizeof(php_stream_dirent)) {
 		return 0;
 	}
@@ -636,13 +658,18 @@ static size_t php_ftp_dirstream_read(php_stream *stream, char *buf, size_t count
  */
 static int php_ftp_dirstream_close(php_stream *stream, int close_handle TSRMLS_DC)
 {
-	php_stream *innerstream = (php_stream *)stream->abstract;
+	php_ftp_dirstream_data *data = stream->abstract;
 
-	if (innerstream->wrapperdata) {
-		php_stream_close((php_stream *)innerstream->wrapperdata);
-		innerstream->wrapperdata = NULL;
+	/* close control connection */
+	if (data->controlstream) {
+		php_stream_close(data->controlstream);
+		data->controlstream = NULL;
 	}
-	php_stream_close((php_stream *)stream->abstract);
+	/* close data connection */
+	php_stream_close(data->datastream);
+	data->datastream = NULL;
+	
+	efree(data);
 	stream->abstract = NULL;
 
 	return 0;
@@ -668,6 +695,7 @@ static php_stream_ops php_ftp_dirstream_ops = {
 php_stream * php_stream_ftp_opendir(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
 {
 	php_stream *stream, *reuseid, *datastream = NULL;
+	php_ftp_dirstream_data *dirsdata;
 	php_url *resource = NULL;
 	int result = 0, use_ssl, use_ssl_on_data = 0;
 	char *hoststart = NULL, tmp_line[512];
@@ -727,11 +755,14 @@ php_stream * php_stream_ftp_opendir(php_stream_wrapper *wrapper, char *path, cha
 		goto opendir_errexit;
 	}
 
-	/* remember control stream */	
-	datastream->wrapperdata = (zval *)stream;
-
 	php_url_free(resource);
-	return php_stream_alloc(&php_ftp_dirstream_ops, datastream, 0, mode);
+
+	dirsdata = emalloc(sizeof *dirsdata);
+	dirsdata->datastream = datastream;
+	dirsdata->controlstream = stream;
+	dirsdata->dirstream = php_stream_alloc(&php_ftp_dirstream_ops, dirsdata, 0, mode);
+
+	return dirsdata->dirstream;
 
 opendir_errexit:
 	if (resource) {
diff --git a/ext/standard/head.c b/ext/standard/head.c
index 01dbe57..c29e954 100644
--- a/ext/standard/head.c
+++ b/ext/standard/head.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Rasmus Lerdorf <rasmus at lerdorf.on.ca>                        |
    +----------------------------------------------------------------------+
  */
-/* $Id: head.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: head.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 #include "php.h"
diff --git a/ext/standard/head.h b/ext/standard/head.h
index 7d7f6ca..5458e02 100644
--- a/ext/standard/head.h
+++ b/ext/standard/head.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: head.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: head.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef HEAD_H
 #define HEAD_H
diff --git a/ext/standard/html.c b/ext/standard/html.c
index e5bb013..a65456b 100644
--- a/ext/standard/html.c
+++ b/ext/standard/html.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: html.c 304404 2010-10-14 19:14:06Z cataphract $ */
+/* $Id: html.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
  * HTML entity resources:
diff --git a/ext/standard/html.h b/ext/standard/html.h
index 86bae2d..20256a3 100644
--- a/ext/standard/html.h
+++ b/ext/standard/html.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: html.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: html.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef HTML_H
 #define HTML_H
diff --git a/ext/standard/http.c b/ext/standard/http.c
index 3f57bbe..5ddfbf0 100644
--- a/ext/standard/http.c
+++ b/ext/standard/http.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: http.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: http.c 307432 2011-01-13 07:27:46Z stas $ */
 
 #include "php_http.h"
 #include "php_ini.h"
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
index 69b8bfa..678e711 100644
--- a/ext/standard/http_fopen_wrapper.c
+++ b/ext/standard/http_fopen_wrapper.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    |          Sara Golemon <pollita at php.net>                              |
    +----------------------------------------------------------------------+
  */
-/* $Id: http_fopen_wrapper.c 305495 2010-11-18 12:10:17Z cataphract $ */ 
+/* $Id: http_fopen_wrapper.c 307815 2011-01-28 10:33:47Z dmitry $ */ 
 
 #include "php.h"
 #include "php_globals.h"
@@ -202,7 +202,70 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 		smart_str_appends(&header, resource->host);
 		smart_str_appendc(&header, ':');
 		smart_str_append_unsigned(&header, resource->port);
-		smart_str_appendl(&header, " HTTP/1.0\r\n\r\n", sizeof(" HTTP/1.0\r\n\r\n")-1);
+		smart_str_appendl(&header, " HTTP/1.0\r\n", sizeof(" HTTP/1.0\r\n")-1);
+
+	    /* check if we have Proxy-Authorization header */
+		if (context && php_stream_context_get_option(context, "http", "header", &tmpzval) == SUCCESS) {
+			char *s, *p;
+
+			if (Z_TYPE_PP(tmpzval) == IS_ARRAY) {
+				HashPosition pos;
+				zval **tmpheader = NULL;
+
+				for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(tmpzval), &pos);
+					SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(tmpzval), (void *)&tmpheader, &pos);
+					zend_hash_move_forward_ex(Z_ARRVAL_PP(tmpzval), &pos)) {
+					if (Z_TYPE_PP(tmpheader) == IS_STRING) {
+						s = Z_STRVAL_PP(tmpheader);
+						do {
+							while (*s == ' ' || *s == '\t') s++;
+							p = s;
+							while (*p != 0 && *p != ':' && *p != '\r' && *p !='\n') p++;
+							if (*p == ':') {
+								p++;
+								if (p - s == sizeof("Proxy-Authorization:") - 1 &&
+								    zend_binary_strcasecmp(s, sizeof("Proxy-Authorization:") - 1,
+								        "Proxy-Authorization:", sizeof("Proxy-Authorization:") - 1) == 0) {
+									while (*p != 0 && *p != '\r' && *p !='\n') p++;
+									smart_str_appendl(&header, s, p - s);
+									smart_str_appendl(&header, "\r\n", sizeof("\r\n")-1);
+									goto finish;
+								} else {
+									while (*p != 0 && *p != '\r' && *p !='\n') p++;
+								}
+							}
+							s = p;
+							while (*s == '\r' || *s == '\n') s++;
+						} while (*s != 0);
+					}
+				}
+			} else if (Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval)) {
+				s = Z_STRVAL_PP(tmpzval);
+				do {
+					while (*s == ' ' || *s == '\t') s++;
+					p = s;
+					while (*p != 0 && *p != ':' && *p != '\r' && *p !='\n') p++;
+					if (*p == ':') {
+						p++;
+						if (p - s == sizeof("Proxy-Authorization:") - 1 &&
+						    zend_binary_strcasecmp(s, sizeof("Proxy-Authorization:") - 1,
+						        "Proxy-Authorization:", sizeof("Proxy-Authorization:") - 1) == 0) {
+							while (*p != 0 && *p != '\r' && *p !='\n') p++;
+							smart_str_appendl(&header, s, p - s);
+							smart_str_appendl(&header, "\r\n", sizeof("\r\n")-1);
+							goto finish;
+						} else {
+							while (*p != 0 && *p != '\r' && *p !='\n') p++;
+						}
+					}
+					s = p;
+					while (*s == '\r' || *s == '\n') s++;
+				} while (*s != 0);
+			}
+		}
+finish:
+		smart_str_appendl(&header, "\r\n", sizeof("\r\n")-1);
+
 		if (php_stream_write(stream, header.c, header.len) != header.len) {
 			php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Cannot connect to HTTPS server through proxy");
 			php_stream_close(stream);
@@ -288,12 +351,12 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 	if (!request_fulluri &&
 		context &&
 		php_stream_context_get_option(context, "http", "request_fulluri", &tmpzval) == SUCCESS) {
-		zval tmp = **tmpzval;
+		zval ztmp = **tmpzval;
 
-		zval_copy_ctor(&tmp);
-		convert_to_boolean(&tmp);
-		request_fulluri = Z_BVAL(tmp) ? 1 : 0;
-		zval_dtor(&tmp);
+		zval_copy_ctor(&ztmp);
+		convert_to_boolean(&ztmp);
+		request_fulluri = Z_BVAL(ztmp) ? 1 : 0;
+		zval_dtor(&ztmp);
 	}
 
 	if (request_fulluri) {
@@ -359,9 +422,11 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 			tmp = php_trim(Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval), NULL, 0, NULL, 3 TSRMLS_CC);
 		}
 		if (tmp && strlen(tmp) > 0) {
+			char *s;
+
 			if (!header_init) { /* Remove post headers for redirects */
 				int l = strlen(tmp);
-				char *s, *s2, *tmp_c = estrdup(tmp);
+				char *s2, *tmp_c = estrdup(tmp);
 				
 				php_strtolower(tmp_c, l);
 				if ((s = strstr(tmp_c, "content-length:"))) {
@@ -382,6 +447,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 						tmp[s - tmp_c] = '\0';
 					}
 				}
+
 				efree(tmp_c);
 				tmp_c = php_trim(tmp, strlen(tmp), NULL, 0, NULL, 3 TSRMLS_CC);
 				efree(tmp);
@@ -392,24 +458,58 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 
 			/* Make lowercase for easy comparison against 'standard' headers */
 			php_strtolower(tmp, strlen(tmp));
-			if (strstr(tmp, "user-agent:")) {
+			if ((s = strstr(tmp, "user-agent:")) && 
+			    (s == tmp || *(s-1) == '\r' || *(s-1) == '\n' || 
+			                 *(s-1) == '\t' || *(s-1) == ' ')) {
 				 have_header |= HTTP_HEADER_USER_AGENT;
 			}
-			if (strstr(tmp, "host:")) {
+			if ((s = strstr(tmp, "host:")) &&
+			    (s == tmp || *(s-1) == '\r' || *(s-1) == '\n' || 
+			                 *(s-1) == '\t' || *(s-1) == ' ')) {
 				 have_header |= HTTP_HEADER_HOST;
 			}
-			if (strstr(tmp, "from:")) {
+			if ((s = strstr(tmp, "from:")) &&
+			    (s == tmp || *(s-1) == '\r' || *(s-1) == '\n' || 
+			                 *(s-1) == '\t' || *(s-1) == ' ')) {
 				 have_header |= HTTP_HEADER_FROM;
 				}
-			if (strstr(tmp, "authorization:")) {
+			if ((s = strstr(tmp, "authorization:")) &&
+			    (s == tmp || *(s-1) == '\r' || *(s-1) == '\n' || 
+			                 *(s-1) == '\t' || *(s-1) == ' ')) {
 				 have_header |= HTTP_HEADER_AUTH;
 			}
-			if (strstr(tmp, "content-length:")) {
+			if ((s = strstr(tmp, "content-length:")) &&
+			    (s == tmp || *(s-1) == '\r' || *(s-1) == '\n' || 
+			                 *(s-1) == '\t' || *(s-1) == ' ')) {
 				 have_header |= HTTP_HEADER_CONTENT_LENGTH;
 			}
-			if (strstr(tmp, "content-type:")) {
+			if ((s = strstr(tmp, "content-type:")) &&
+			    (s == tmp || *(s-1) == '\r' || *(s-1) == '\n' || 
+			                 *(s-1) == '\t' || *(s-1) == ' ')) {
 				 have_header |= HTTP_HEADER_TYPE;
 			}
+			/* remove Proxy-Authorization header */
+			if (use_proxy && use_ssl && (s = strstr(tmp, "proxy-authorization:")) &&
+			    (s == tmp || *(s-1) == '\r' || *(s-1) == '\n' || 
+			                 *(s-1) == '\t' || *(s-1) == ' ')) {
+				char *p = s + sizeof("proxy-authorization:") - 1;
+				
+				while (s > tmp && (*(s-1) == ' ' || *(s-1) == '\t')) s--;
+				while (*p != 0 && *p != '\r' && *p != '\n') p++;
+				while (*p == '\r' || *p == '\n') p++;
+				if (*p == 0) {
+					if (s == tmp) {
+						efree(user_headers);
+						user_headers = NULL;
+					} else {
+						while (s > tmp && (*(s-1) == '\r' || *(s-1) == '\n')) s--;
+						user_headers[s - tmp] = 0;
+					}
+				} else {
+					memmove(user_headers + (s - tmp), user_headers + (p - tmp), strlen(p) + 1);
+				}
+			}
+
 		}
 		if (tmp) {
 			efree(tmp);
@@ -543,10 +643,10 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 	}
 
 	if (header_init) {
-		zval *tmp;
-		MAKE_STD_ZVAL(tmp);
-		array_init(tmp);
-		ZEND_SET_SYMBOL(EG(active_symbol_table), "http_response_header", tmp);
+		zval *ztmp;
+		MAKE_STD_ZVAL(ztmp);
+		array_init(ztmp);
+		ZEND_SET_SYMBOL(EG(active_symbol_table), "http_response_header", ztmp);
 	}
 
 	{
diff --git a/ext/standard/image.c b/ext/standard/image.c
index 85b5cd0..9654ed7 100644
--- a/ext/standard/image.c
+++ b/ext/standard/image.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: image.c 300881 2010-06-30 12:21:35Z iliaa $ */
+/* $Id: image.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include <stdio.h>
diff --git a/ext/standard/incomplete_class.c b/ext/standard/incomplete_class.c
index e64365f..9e45e49 100644
--- a/ext/standard/incomplete_class.c
+++ b/ext/standard/incomplete_class.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: incomplete_class.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: incomplete_class.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "basic_functions.h"
diff --git a/ext/standard/info.c b/ext/standard/info.c
index 631ab34..f33e537 100644
--- a/ext/standard/info.c
+++ b/ext/standard/info.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: info.c 299960 2010-05-30 07:46:45Z pajoye $ */
+/* $Id: info.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_ini.h"
diff --git a/ext/standard/info.h b/ext/standard/info.h
index 4eaf06e..977e305 100644
--- a/ext/standard/info.h
+++ b/ext/standard/info.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: info.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: info.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef INFO_H
 #define INFO_H
diff --git a/ext/standard/iptc.c b/ext/standard/iptc.c
index 5c11a42..dafbfa5 100644
--- a/ext/standard/iptc.c
+++ b/ext/standard/iptc.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: iptc.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: iptc.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
  * Functions to parse & compse IPTC data.
diff --git a/ext/standard/lcg.c b/ext/standard/lcg.c
index 9a48ff2..6db3f6f 100644
--- a/ext/standard/lcg.c
+++ b/ext/standard/lcg.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: lcg.c 293253 2010-01-08 09:43:14Z rasmus $ */
+/* $Id: lcg.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_lcg.h"
diff --git a/ext/standard/levenshtein.c b/ext/standard/levenshtein.c
index 8a3b747..a84b155 100644
--- a/ext/standard/levenshtein.c
+++ b/ext/standard/levenshtein.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Hartmut Holzgraefe <hholzgra at php.net>                        |
    +----------------------------------------------------------------------+
  */
-/* $Id: levenshtein.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: levenshtein.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include <stdlib.h>
diff --git a/ext/standard/link.c b/ext/standard/link.c
index cb152ef..1f8be4c 100644
--- a/ext/standard/link.c
+++ b/ext/standard/link.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: link.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: link.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_filestat.h"
diff --git a/ext/standard/link_win32.c b/ext/standard/link_win32.c
index faf256c..143b5be 100644
--- a/ext/standard/link_win32.c
+++ b/ext/standard/link_win32.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: link_win32.c 303500 2010-09-18 14:54:40Z pajoye $ */
+/* $Id: link_win32.c 306939 2011-01-01 02:19:59Z felipe $ */
 #ifdef PHP_WIN32
 
 #include "php.h"
diff --git a/ext/standard/mail.c b/ext/standard/mail.c
index 57f6991..984b84e 100644
--- a/ext/standard/mail.c
+++ b/ext/standard/mail.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mail.c 301396 2010-07-19 13:38:53Z aharvey $ */
+/* $Id: mail.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdlib.h>
 #include <ctype.h>
diff --git a/ext/standard/math.c b/ext/standard/math.c
index 2376730..8333fe7 100644
--- a/ext/standard/math.c
+++ b/ext/standard/math.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: math.c 301991 2010-08-08 15:45:02Z iliaa $ */
+/* $Id: math.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_math.h"
diff --git a/ext/standard/md5.c b/ext/standard/md5.c
index e84fe4b..b9c9b3a 100644
--- a/ext/standard/md5.c
+++ b/ext/standard/md5.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: md5.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: md5.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "md5.h"
diff --git a/ext/standard/md5.h b/ext/standard/md5.h
index b976752..6ffbc2f 100644
--- a/ext/standard/md5.h
+++ b/ext/standard/md5.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: md5.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: md5.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MD5_H
 #define MD5_H
diff --git a/ext/standard/metaphone.c b/ext/standard/metaphone.c
index bf10671..468f267 100644
--- a/ext/standard/metaphone.c
+++ b/ext/standard/metaphone.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: metaphone.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: metaphone.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
 	Based on CPANs "Text-Metaphone-1.96" by Michael G Schwern <schwern at pobox.com> 
diff --git a/ext/standard/microtime.c b/ext/standard/microtime.c
index 116fb02..92248a2 100644
--- a/ext/standard/microtime.c
+++ b/ext/standard/microtime.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: microtime.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: microtime.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/standard/microtime.h b/ext/standard/microtime.h
index 419150d..b0019db 100644
--- a/ext/standard/microtime.h
+++ b/ext/standard/microtime.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: microtime.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: microtime.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MICROTIME_H
 #define MICROTIME_H
diff --git a/ext/standard/pack.c b/ext/standard/pack.c
index 602d298..9eca312 100644
--- a/ext/standard/pack.c
+++ b/ext/standard/pack.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Chris Schneider <cschneid at relog.ch>                          |
    +----------------------------------------------------------------------+
  */
-/* $Id: pack.c 299279 2010-05-12 11:04:57Z dmitry $ */
+/* $Id: pack.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/standard/pack.h b/ext/standard/pack.h
index ba58997..81c96dc 100644
--- a/ext/standard/pack.h
+++ b/ext/standard/pack.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: pack.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pack.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PACK_H
 #define PACK_H
diff --git a/ext/standard/pageinfo.c b/ext/standard/pageinfo.c
index a1b323b..09182dd 100644
--- a/ext/standard/pageinfo.c
+++ b/ext/standard/pageinfo.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: pageinfo.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pageinfo.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "pageinfo.h"
diff --git a/ext/standard/pageinfo.h b/ext/standard/pageinfo.h
index 0405de2..6721795 100644
--- a/ext/standard/pageinfo.h
+++ b/ext/standard/pageinfo.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: pageinfo.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pageinfo.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PAGEINFO_H
 #define PAGEINFO_H
diff --git a/ext/standard/php_array.h b/ext/standard/php_array.h
index 92a4f22..ddd2670 100644
--- a/ext/standard/php_array.h
+++ b/ext/standard/php_array.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_array.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_array.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_ARRAY_H
 #define PHP_ARRAY_H
diff --git a/ext/standard/php_assert.h b/ext/standard/php_assert.h
index bf4de1a..6cc5d76 100644
--- a/ext/standard/php_assert.h
+++ b/ext/standard/php_assert.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_assert.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_assert.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_ASSERT_H
 #define PHP_ASSERT_H
diff --git a/ext/standard/php_browscap.h b/ext/standard/php_browscap.h
index c26098a..523b2de 100644
--- a/ext/standard/php_browscap.h
+++ b/ext/standard/php_browscap.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_browscap.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_browscap.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_BROWSCAP_H
 #define PHP_BROWSCAP_H
diff --git a/ext/standard/php_crypt.h b/ext/standard/php_crypt.h
index c0dafe6..02c6d56 100644
--- a/ext/standard/php_crypt.h
+++ b/ext/standard/php_crypt.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_crypt.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_crypt.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_CRYPT_H
 #define PHP_CRYPT_H
diff --git a/ext/standard/php_crypt_r.c b/ext/standard/php_crypt_r.c
index 5e2d851..08c713f 100644
--- a/ext/standard/php_crypt_r.c
+++ b/ext/standard/php_crypt_r.c
@@ -1,9 +1,9 @@
-/* $Id: php_crypt_r.c 300511 2010-06-17 10:22:03Z pajoye $ */
+/* $Id: php_crypt_r.c 306939 2011-01-01 02:19:59Z felipe $ */
 /*
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -94,7 +94,7 @@ void _crypt_extended_init_r(void)
 	if (!initialized) {
 #ifdef PHP_WIN32
 		InterlockedIncrement(&initialized);
-#elif (defined(__GNUC__) && (__GNUC__ >= 4 && __GNUC_MINOR >= 2))
+#elif (defined(__GNUC__) && (__GNUC__ >= 4 && __GNUC_MINOR__ >= 2))
 		__sync_fetch_and_add(&initialized, 1);
 #elif defined(HAVE_ATOMIC_H) /* Solaris 10 defines atomic API within */
 		membar_producer();
diff --git a/ext/standard/php_crypt_r.h b/ext/standard/php_crypt_r.h
index e5fbf26..7c73718 100644
--- a/ext/standard/php_crypt_r.h
+++ b/ext/standard/php_crypt_r.h
@@ -1,9 +1,9 @@
-/* $Id: php_crypt_r.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_crypt_r.h 306939 2011-01-01 02:19:59Z felipe $ */
 /*
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/standard/php_dir.h b/ext/standard/php_dir.h
index 5e80f3e..a766153 100644
--- a/ext/standard/php_dir.h
+++ b/ext/standard/php_dir.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_dir.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_dir.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_DIR_H
 #define PHP_DIR_H
diff --git a/ext/standard/php_dns.h b/ext/standard/php_dns.h
index c5b8427..e24caf5 100644
--- a/ext/standard/php_dns.h
+++ b/ext/standard/php_dns.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_dns.h 293211 2010-01-07 11:02:39Z sebastian $ */
+/* $Id: php_dns.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_DNS_H
 #define PHP_DNS_H
diff --git a/ext/standard/php_ext_syslog.h b/ext/standard/php_ext_syslog.h
index 353c24e..cf69759 100644
--- a/ext/standard/php_ext_syslog.h
+++ b/ext/standard/php_ext_syslog.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_ext_syslog.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_ext_syslog.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_EXT_SYSLOG_H
 #define PHP_EXT_SYSLOG_H
diff --git a/ext/standard/php_filestat.h b/ext/standard/php_filestat.h
index 7eee0fa..6103f2c 100644
--- a/ext/standard/php_filestat.h
+++ b/ext/standard/php_filestat.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_filestat.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_filestat.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_FILESTAT_H
 #define PHP_FILESTAT_H
diff --git a/ext/standard/php_fopen_wrapper.c b/ext/standard/php_fopen_wrapper.c
index 808a973..1360bab 100644
--- a/ext/standard/php_fopen_wrapper.c
+++ b/ext/standard/php_fopen_wrapper.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    |          Hartmut Holzgraefe <hholzgra at php.net>                       |
    +----------------------------------------------------------------------+
  */
-/* $Id: php_fopen_wrapper.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_fopen_wrapper.c 307536 2011-01-17 13:44:54Z iliaa $ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -257,6 +257,39 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, ch
 		} else {
 			fd = dup(STDERR_FILENO);
 		}
+	} else if (!strncasecmp(path, "fd/", 3)) {
+		char	   *start,
+				   *end;
+		long	   fildes_ori;
+		int		   dtablesize;
+
+		start = &path[3];
+		fildes_ori = strtol(start, &end, 10);
+		if (end == start || *end != '\0') {
+			php_stream_wrapper_log_error(wrapper, options TSRMLS_CC,
+				"php://fd/ stream must be specified in the form php://fd/<orig fd>");
+			return NULL;
+		}
+
+#if HAVE_UNISTD_H
+		dtablesize = getdtablesize();
+#else
+		dtablesize = INT_MAX;
+#endif
+
+		if (fildes_ori < 0 || fildes_ori >= dtablesize) {
+			php_stream_wrapper_log_error(wrapper, options TSRMLS_CC,
+				"The file descriptors must be non-negative numbers smaller than %d", dtablesize);
+			return NULL;
+		}
+		
+		fd = dup(fildes_ori);
+		if (fd == -1) {
+			php_stream_wrapper_log_error(wrapper, options TSRMLS_CC,
+				"Error duping file descriptor %ld; possibly it doesn't exist: "
+				"[%d]: %s", fildes_ori, errno, strerror(errno));
+			return NULL;
+		}
 	} else if (!strncasecmp(path, "filter/", 7)) {
 		/* Save time/memory when chain isn't specified */
 		if (strchr(mode, 'r') || strchr(mode, '+')) {
diff --git a/ext/standard/php_fopen_wrappers.h b/ext/standard/php_fopen_wrappers.h
index d9dee94..96beaea 100644
--- a/ext/standard/php_fopen_wrappers.h
+++ b/ext/standard/php_fopen_wrappers.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_fopen_wrappers.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_fopen_wrappers.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_FOPEN_WRAPPERS_H
 #define PHP_FOPEN_WRAPPERS_H
diff --git a/ext/standard/php_ftok.h b/ext/standard/php_ftok.h
index ac023b7..51860c8 100644
--- a/ext/standard/php_ftok.h
+++ b/ext/standard/php_ftok.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_ftok.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_ftok.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_FTOK_H
 #define PHP_FTOK_H
diff --git a/ext/standard/php_http.h b/ext/standard/php_http.h
index f0ed15f..7330248 100644
--- a/ext/standard/php_http.h
+++ b/ext/standard/php_http.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_http.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_http.h 307432 2011-01-13 07:27:46Z stas $ */
 
 #ifndef PHP_HTTP_H
 #define PHP_HTTP_H
diff --git a/ext/standard/php_image.h b/ext/standard/php_image.h
index 093980a..ed52ec9 100644
--- a/ext/standard/php_image.h
+++ b/ext/standard/php_image.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_image.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_image.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_IMAGE_H
 #define PHP_IMAGE_H
diff --git a/ext/standard/php_incomplete_class.h b/ext/standard/php_incomplete_class.h
index 3ec93c7..ed52210 100644
--- a/ext/standard/php_incomplete_class.h
+++ b/ext/standard/php_incomplete_class.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_incomplete_class.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_incomplete_class.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_INCOMPLETE_CLASS_H
 #define PHP_INCOMPLETE_CLASS_H
diff --git a/ext/standard/php_iptc.h b/ext/standard/php_iptc.h
index e47753c..859ad68 100644
--- a/ext/standard/php_iptc.h
+++ b/ext/standard/php_iptc.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_iptc.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_iptc.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_IPTC_H
 #define PHP_IPTC_H
diff --git a/ext/standard/php_lcg.h b/ext/standard/php_lcg.h
index 8ccd218..7d57d69 100644
--- a/ext/standard/php_lcg.h
+++ b/ext/standard/php_lcg.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_lcg.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_lcg.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_LCG_H
 #define PHP_LCG_H
diff --git a/ext/standard/php_link.h b/ext/standard/php_link.h
index 916029d..8126a63 100644
--- a/ext/standard/php_link.h
+++ b/ext/standard/php_link.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_link.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_link.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_LINK_H
 #define PHP_LINK_H
diff --git a/ext/standard/php_mail.h b/ext/standard/php_mail.h
index e8d3875..8164af8 100644
--- a/ext/standard/php_mail.h
+++ b/ext/standard/php_mail.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_mail.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_mail.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_MAIL_H
 #define PHP_MAIL_H
diff --git a/ext/standard/php_math.h b/ext/standard/php_math.h
index 1d124f0..77fe654 100644
--- a/ext/standard/php_math.h
+++ b/ext/standard/php_math.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_math.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_math.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_MATH_H
 #define PHP_MATH_H
diff --git a/ext/standard/php_metaphone.h b/ext/standard/php_metaphone.h
index da8c67b..1067e8b 100644
--- a/ext/standard/php_metaphone.h
+++ b/ext/standard/php_metaphone.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: php_metaphone.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_metaphone.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_METAPHONE_H
 #define PHP_METAPHONE_H
diff --git a/ext/standard/php_rand.h b/ext/standard/php_rand.h
index 887ac70..9a0dcef 100644
--- a/ext/standard/php_rand.h
+++ b/ext/standard/php_rand.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -20,7 +20,7 @@
    | Based on code from: Shawn Cokus <Cokus at math.washington.edu>          |
    +----------------------------------------------------------------------+
  */
-/* $Id: php_rand.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_rand.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_RAND_H
 #define	PHP_RAND_H
diff --git a/ext/standard/php_smart_str.h b/ext/standard/php_smart_str.h
index 8dd9647..6b4c1a9 100644
--- a/ext/standard/php_smart_str.h
+++ b/ext/standard/php_smart_str.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_smart_str.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_smart_str.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SMART_STR_H
 #define PHP_SMART_STR_H
diff --git a/ext/standard/php_smart_str_public.h b/ext/standard/php_smart_str_public.h
index c851fac..98da8b5 100644
--- a/ext/standard/php_smart_str_public.h
+++ b/ext/standard/php_smart_str_public.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_smart_str_public.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_smart_str_public.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SMART_STR_PUBLIC_H
 #define PHP_SMART_STR_PUBLIC_H
diff --git a/ext/standard/php_standard.h b/ext/standard/php_standard.h
index 447f6d7..7595d45 100644
--- a/ext/standard/php_standard.h
+++ b/ext/standard/php_standard.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_standard.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_standard.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "basic_functions.h"
 #include "php_math.h"
diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h
index fd3c8b5..0901ec4 100644
--- a/ext/standard/php_string.h
+++ b/ext/standard/php_string.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_string.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_string.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Synced with php 3.0 revision 1.43 1999-06-16 [ssb] */
 
diff --git a/ext/standard/php_type.h b/ext/standard/php_type.h
index 550d4d5..c2e5aa9 100644
--- a/ext/standard/php_type.h
+++ b/ext/standard/php_type.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_type.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_type.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_TYPE_H
 #define PHP_TYPE_H
diff --git a/ext/standard/php_uuencode.h b/ext/standard/php_uuencode.h
index d6432a6..7514ced 100644
--- a/ext/standard/php_uuencode.h
+++ b/ext/standard/php_uuencode.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_uuencode.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_uuencode.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_UUENCODE_H
 #define PHP_UUENCODE_H
diff --git a/ext/standard/php_var.h b/ext/standard/php_var.h
index 3dc23e1..9493418 100644
--- a/ext/standard/php_var.h
+++ b/ext/standard/php_var.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_var.h 301144 2010-07-09 21:19:27Z scottmac $ */
+/* $Id: php_var.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_VAR_H
 #define PHP_VAR_H
diff --git a/ext/standard/php_versioning.h b/ext/standard/php_versioning.h
index 6a91e61..d3e9aee 100644
--- a/ext/standard/php_versioning.h
+++ b/ext/standard/php_versioning.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_versioning.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_versioning.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_VERSIONING_H
 #define PHP_VERSIONING_H
diff --git a/ext/standard/proc_open.c b/ext/standard/proc_open.c
index 1aeea77..ecf5e35 100644
--- a/ext/standard/proc_open.c
+++ b/ext/standard/proc_open.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Wez Furlong <wez at thebrainroom.com>                           |
    +----------------------------------------------------------------------+
  */
-/* $Id: proc_open.c 303163 2010-09-08 08:34:57Z pajoye $ */
+/* $Id: proc_open.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #if 0 && (defined(__linux__) || defined(sun) || defined(__IRIX__))
 # define _BSD_SOURCE 		/* linux wants this when XOPEN mode is on */
diff --git a/ext/standard/proc_open.h b/ext/standard/proc_open.h
index 40249f2..3ff92eb 100644
--- a/ext/standard/proc_open.h
+++ b/ext/standard/proc_open.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Wez Furlong <wez at thebrainroom.com>                           |
    +----------------------------------------------------------------------+
  */
-/* $Id: proc_open.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: proc_open.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef PHP_WIN32
 typedef HANDLE php_file_descriptor_t;
diff --git a/ext/standard/quot_print.c b/ext/standard/quot_print.c
index 056b2a4..e4caaa4 100644
--- a/ext/standard/quot_print.c
+++ b/ext/standard/quot_print.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: quot_print.c 305759 2010-11-25 21:38:06Z iliaa $ */
+/* $Id: quot_print.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdlib.h>
 
diff --git a/ext/standard/quot_print.h b/ext/standard/quot_print.h
index 4a769e0..acbe736 100644
--- a/ext/standard/quot_print.h
+++ b/ext/standard/quot_print.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: quot_print.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: quot_print.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef QUOT_PRINT_H
 #define QUOT_PRINT_H
diff --git a/ext/standard/rand.c b/ext/standard/rand.c
index 7660ada..2be9320 100644
--- a/ext/standard/rand.c
+++ b/ext/standard/rand.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -23,7 +23,7 @@
    |                     Shawn Cokus <Cokus at math.washington.edu>          |
    +----------------------------------------------------------------------+
  */
-/* $Id: rand.c 305754 2010-11-25 16:44:20Z cataphract $ */
+/* $Id: rand.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdlib.h>
 
diff --git a/ext/standard/scanf.c b/ext/standard/scanf.c
index dbfe83d..161fd6d 100644
--- a/ext/standard/scanf.c
+++ b/ext/standard/scanf.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: scanf.c 299484 2010-05-19 11:28:08Z mike $ */
+/* $Id: scanf.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
 	scanf.c --
diff --git a/ext/standard/scanf.h b/ext/standard/scanf.h
index 46243bd..0d58587 100644
--- a/ext/standard/scanf.h
+++ b/ext/standard/scanf.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: scanf.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: scanf.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef  SCANF_H
 #define  SCANF_H
diff --git a/ext/standard/sha1.c b/ext/standard/sha1.c
index 084de7f..0a94479 100644
--- a/ext/standard/sha1.c
+++ b/ext/standard/sha1.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: sha1.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: sha1.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/standard/sha1.h b/ext/standard/sha1.h
index cd7e631..9cfef1e 100644
--- a/ext/standard/sha1.h
+++ b/ext/standard/sha1.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: sha1.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: sha1.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SHA1_H
 #define SHA1_H
diff --git a/ext/standard/soundex.c b/ext/standard/soundex.c
index d22d361..0096a71 100644
--- a/ext/standard/soundex.c
+++ b/ext/standard/soundex.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Bjørn Borud - Guardian Networks AS <borud at guardian.no>       |
    +----------------------------------------------------------------------+
  */
-/* $Id: soundex.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: soundex.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include <stdlib.h>
diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c
index 049af57..3a90b88 100644
--- a/ext/standard/streamsfuncs.c
+++ b/ext/standard/streamsfuncs.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: streamsfuncs.c 304384 2010-10-14 03:15:15Z cataphract $ */
+/* $Id: streamsfuncs.c 307922 2011-02-01 18:10:35Z cataphract $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -413,29 +413,36 @@ PHP_FUNCTION(stream_socket_recvfrom)
    Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string. */
 PHP_FUNCTION(stream_get_contents)
 {
-	php_stream *stream;
-	zval *zsrc;
-	long maxlen = PHP_STREAM_COPY_ALL, pos = -1L;
-	int len, newlen;
-	char *contents = NULL;
-
-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|ll", &zsrc, &maxlen, &pos) == FAILURE) {
+	php_stream	*stream;
+	zval		*zsrc;
+	long		maxlen		= PHP_STREAM_COPY_ALL,
+				desiredpos	= -1L;
+	int			len,
+				newlen;
+	char		*contents	= NULL;
+
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|ll", &zsrc, &maxlen, &desiredpos) == FAILURE) {
 		RETURN_FALSE;
 	}
 
 	php_stream_from_zval(stream, &zsrc);
 
-	if (pos >= 0) {
-		int seek_res = 0;
-		if (pos > stream->position) {
+	if (desiredpos >= 0) {
+		int		seek_res = 0;
+		off_t	position;
+
+		position = php_stream_tell(stream);
+		if (position >= 0 && desiredpos > position) {
 			/* use SEEK_CUR to allow emulation in streams that don't support seeking */
-			seek_res = php_stream_seek(stream, pos - stream->position, SEEK_CUR);
-		} else if (pos < stream->position)  {
-			seek_res = php_stream_seek(stream, pos, SEEK_SET);
+			seek_res = php_stream_seek(stream, desiredpos - position, SEEK_CUR);
+		} else if (desiredpos < position)  {
+			/* desired position before position or error on tell */
+			seek_res = php_stream_seek(stream, desiredpos, SEEK_SET);
 		}
 
 		if (seek_res != 0) {
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to seek to position %ld in the stream", pos);
+			php_error_docref(NULL TSRMLS_CC, E_WARNING,
+				"Failed to seek to position %ld in the stream", desiredpos);
 			RETURN_FALSE;
 		}
 	}
@@ -627,7 +634,7 @@ static int stream_array_to_fd_set(zval *stream_array, fd_set *fds, php_socket_t
 		 * when casting.  It is only used here so that the buffered data warning
 		 * is not displayed.
 		 * */
-		if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&this_fd, 1) && this_fd >= 0) {
+		if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&this_fd, 1) && this_fd != -1) {
 
 			PHP_SAFE_FD_SET(this_fd, fds);
 
@@ -667,7 +674,7 @@ static int stream_array_from_fd_set(zval *stream_array, fd_set *fds TSRMLS_DC)
 		 * when casting.  It is only used here so that the buffered data warning
 		 * is not displayed.
 		 */
-		if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&this_fd, 1) && this_fd >= 0) {
+		if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&this_fd, 1) && this_fd != -1) {
 			if (PHP_SAFE_FD_ISSET(this_fd, fds)) {
 				zend_hash_next_index_insert(new_hash, (void *)elem, sizeof(zval *), (void **)&dest_elem);
 				if (dest_elem) {
diff --git a/ext/standard/streamsfuncs.h b/ext/standard/streamsfuncs.h
index 912efb3..804501e 100644
--- a/ext/standard/streamsfuncs.h
+++ b/ext/standard/streamsfuncs.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: streamsfuncs.h 297895 2010-04-12 13:10:05Z pajoye $ */
+/* $Id: streamsfuncs.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Flags for stream_socket_client */
 #define PHP_STREAM_CLIENT_PERSISTENT	1
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 6c6f35a..a3a3c84 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: string.c 305418 2010-11-16 22:16:44Z felipe $ */
+/* $Id: string.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
 
diff --git a/ext/standard/syslog.c b/ext/standard/syslog.c
index 8208319..4cd54d6 100644
--- a/ext/standard/syslog.c
+++ b/ext/standard/syslog.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: syslog.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: syslog.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/standard/tests/array/bug35014.phpt b/ext/standard/tests/array/bug35014.phpt
index 3a6cf21..9250c03 100644
--- a/ext/standard/tests/array/bug35014.phpt
+++ b/ext/standard/tests/array/bug35014.phpt
@@ -25,7 +25,7 @@ foreach ($tests as $v) {
 --EXPECTF--	
 Warning: array_product() expects parameter 1 to be array, string given in %s on line %d
 NULL
-int(0)
+int(1)
 int(0)
 int(3)
 int(9)
diff --git a/ext/standard/tests/array/bug35014_64bit.phpt b/ext/standard/tests/array/bug35014_64bit.phpt
index 1c325b3..efd791a 100644
--- a/ext/standard/tests/array/bug35014_64bit.phpt
+++ b/ext/standard/tests/array/bug35014_64bit.phpt
@@ -25,7 +25,7 @@ foreach ($tests as $v) {
 --EXPECTF--	
 Warning: array_product() expects parameter 1 to be array, string given in %s on line %d
 NULL
-int(0)
+int(1)
 int(0)
 int(3)
 int(9)
diff --git a/ext/standard/tests/array/bug48484.phpt b/ext/standard/tests/array/bug48484.phpt
new file mode 100644
index 0000000..006c3cc
--- /dev/null
+++ b/ext/standard/tests/array/bug48484.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug 48484 (array_product() always returns 0 for an empty array)
+--FILE--
+<?php
+var_dump(array_product(array()));
+?>
+--EXPECT--	
+int(1)
+--TEST--
+Bug 48484 (array_product() always returns 0 for an empty array)
+--FILE--
+<?php
+var_dump(array_product(array()));
+?>
+--EXPECT--	
+int(1)
diff --git a/ext/standard/tests/file/php_fd_wrapper_01.phpt b/ext/standard/tests/file/php_fd_wrapper_01.phpt
new file mode 100644
index 0000000..037edd7
--- /dev/null
+++ b/ext/standard/tests/file/php_fd_wrapper_01.phpt
@@ -0,0 +1,11 @@
+--TEST--
+php://fd wrapper: basic test
+--FILE--
+<?php
+$f = fopen("php://fd/1", "wb");
+fwrite($f, "hi!");
+
+echo "\nDone.\n";
+--EXPECT--
+hi!
+Done.
diff --git a/ext/standard/tests/file/php_fd_wrapper_02.phpt b/ext/standard/tests/file/php_fd_wrapper_02.phpt
new file mode 100644
index 0000000..6d40dc9
--- /dev/null
+++ b/ext/standard/tests/file/php_fd_wrapper_02.phpt
@@ -0,0 +1,11 @@
+--TEST--
+php://fd wrapper: mode is ignored
+--FILE--
+<?php
+$f = fopen("php://fd/1", "rkkk");
+fwrite($f, "hi!");
+
+echo "\nDone.\n";
+--EXPECT--
+hi!
+Done.
diff --git a/ext/standard/tests/file/php_fd_wrapper_03.phpt b/ext/standard/tests/file/php_fd_wrapper_03.phpt
new file mode 100644
index 0000000..c004a43
--- /dev/null
+++ b/ext/standard/tests/file/php_fd_wrapper_03.phpt
@@ -0,0 +1,22 @@
+--TEST--
+php://fd wrapper: bad syntax
+--FILE--
+<?php
+fopen("php://fd", "w");
+fopen("php://fd/", "w");
+fopen("php://fd/-2", "w");
+fopen("php://fd/1/", "w");
+
+echo "\nDone.\n";
+--EXPECTF--
+Warning: fopen(): Invalid php:// URL specified in %s on line %d
+
+Warning: fopen(php://fd): failed to open stream: operation failed in %s on line 2
+
+Warning: fopen(php://fd/): failed to open stream: php://fd/ stream must be specified in the form php://fd/<orig fd> in %s on line %d
+
+Warning: fopen(php://fd/-2): failed to open stream: The file descriptors must be non-negative numbers smaller than %d in %s on line %d
+
+Warning: fopen(php://fd/1/): failed to open stream: php://fd/ stream must be specified in the form php://fd/<orig fd> in %s on line %d
+
+Done.
diff --git a/ext/standard/tests/file/php_fd_wrapper_04.phpt b/ext/standard/tests/file/php_fd_wrapper_04.phpt
new file mode 100644
index 0000000..51f4d9f
--- /dev/null
+++ b/ext/standard/tests/file/php_fd_wrapper_04.phpt
@@ -0,0 +1,20 @@
+--TEST--
+php://fd wrapper: invalid file descriptor
+--SKIPIF--
+<?php include('skipif.inc'); 
+if(substr(PHP_OS, 0, 3) == "WIN")
+	die("skip Not for Windows");
+
+//we'd need a release and a test variation for windows, because in debug builds we get this message:
+//Warning: Invalid parameter detected in CRT function '_dup' (f:\dd\vctools\crt_bld\self_x86\crt\src\dup.c:52)
+//I greped the CRT sources and found no function capable of validating a file descriptor
+
+--FILE--
+<?php
+fopen("php://fd/12", "w");
+
+echo "\nDone.\n";
+--EXPECTF--
+Warning: fopen(php://fd/12): failed to open stream: Error duping file descriptor 12; possibly it doesn't exist: [9]: %s in %s on line %d
+
+Done.
diff --git a/ext/standard/tests/serialize/precision.phpt b/ext/standard/tests/serialize/precision.phpt
new file mode 100644
index 0000000..142b2ce
--- /dev/null
+++ b/ext/standard/tests/serialize/precision.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Default precision is sufficient to serialize all the information in floats
+--SKIPIF--
+<?php
+if (pack('s', 1) != "\x01\x00")
+	die("skip test for little-endian architectures");
+--FILE--
+<?php
+
+$numbers = array(
+	"0000000000000000", //0
+	"2d431cebe2362a3f", //.0002
+	"2e431cebe2362a3f", //.0002 + 10^-Accuracy[.0002]*1.01
+	"0000000000001000", //2^-1022. (minimum normal double)
+	"0100000000001000", //2^-1022. + 10^-Accuracy[2^-1022.]*1.01
+	"ffffffffffffef7f", //2^1024. (maximum normal double)
+	"feffffffffffef7f", //2^1024. - 10^-Accuracy[2^1024.]
+	"0100000000000000", //minumum subnormal double
+	"0200000000000000", //2nd minumum subnormal double
+	"fffffffffffff000", //maximum subnormal double
+	"fefffffffffff000", //2nd maximum subnormal double
+	"0000000000000f7f", //+inf
+	"0000000000000fff", //-inf
+);
+
+foreach ($numbers as $ns) {
+	$num = unpack("d", pack("H*", $ns)); $num = reset($num);
+	echo "number: ", sprintf("%.17e", $num), "... ";
+	$num2 = unserialize(serialize($num));
+	$repr = unpack("H*", pack("d", $num2)); $repr = reset($repr);
+	if ($repr == $ns)
+		echo "OK\n";
+	else
+		echo "mismatch\n\twas:    $ns\n\tbecame: $repr\n";
+}
+--EXPECT--
+number: 0.00000000000000000e+0... OK
+number: 2.00000000000000010e-4... OK
+number: 2.00000000000000037e-4... OK
+number: 2.22507385850720138e-308... OK
+number: 2.22507385850720188e-308... OK
+number: 1.79769313486231571e+308... OK
+number: 1.79769313486231551e+308... OK
+number: 4.94065645841246544e-324... OK
+number: 9.88131291682493088e-324... OK
+number: 3.87340857288933536e-304... OK
+number: 3.87340857288933455e-304... OK
+number: 1.06293653832877718e+304... OK
+number: -1.06293653832877718e+304... OK
diff --git a/ext/standard/tests/streams/bug53903.phpt b/ext/standard/tests/streams/bug53903.phpt
new file mode 100644
index 0000000..3b61635
--- /dev/null
+++ b/ext/standard/tests/streams/bug53903.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Bug #53903 streamwrapper/stream_stat causes problems
+--FILE--
+<?php
+
+class sw {
+
+    public function stream_open($path, $mode, $options, &$opened_path) {
+        return true;
+    }
+
+	public function stream_stat() {
+		return array(
+            'atime' => $this->undefined,
+        );
+	}
+
+}
+stream_wrapper_register('sx', 'sw') or die('failed');
+
+fstat(fopen('sx://test', 'r'));
+
+$s[] = 1; //  Cannot use a scalar value as an array
+
+print_r($s);
+--EXPECTF--
+Notice: Undefined property: sw::$undefined in %s on line %d
+Array
+(
+    [0] => 1
+)
+
diff --git a/ext/standard/tests/strings/bug54055.phpt b/ext/standard/tests/strings/bug54055.phpt
new file mode 100644
index 0000000..7124c46
--- /dev/null
+++ b/ext/standard/tests/strings/bug54055.phpt
@@ -0,0 +1,589 @@
+--TEST--
+Bug #54055: PHP crashes when executing strval when precision setting is very high
+--FILE--
+<?php
+for($i = 495; $i <= 1074; $i++) {
+  ini_set('precision', $i);
+  echo "$i: len=", strlen(strval(-1 * pow(2, -1074))), "\n";
+}
+--EXPECT--
+495: len=502
+496: len=503
+497: len=504
+498: len=505
+499: len=506
+500: len=507
+501: len=507
+502: len=507
+503: len=507
+504: len=507
+505: len=507
+506: len=507
+507: len=507
+508: len=507
+509: len=507
+510: len=507
+511: len=507
+512: len=507
+513: len=507
+514: len=507
+515: len=507
+516: len=507
+517: len=507
+518: len=507
+519: len=507
+520: len=507
+521: len=507
+522: len=507
+523: len=507
+524: len=507
+525: len=507
+526: len=507
+527: len=507
+528: len=507
+529: len=507
+530: len=507
+531: len=507
+532: len=507
+533: len=507
+534: len=507
+535: len=507
+536: len=507
+537: len=507
+538: len=507
+539: len=507
+540: len=507
+541: len=507
+542: len=507
+543: len=507
+544: len=507
+545: len=507
+546: len=507
+547: len=507
+548: len=507
+549: len=507
+550: len=507
+551: len=507
+552: len=507
+553: len=507
+554: len=507
+555: len=507
+556: len=507
+557: len=507
+558: len=507
+559: len=507
+560: len=507
+561: len=507
+562: len=507
+563: len=507
+564: len=507
+565: len=507
+566: len=507
+567: len=507
+568: len=507
+569: len=507
+570: len=507
+571: len=507
+572: len=507
+573: len=507
+574: len=507
+575: len=507
+576: len=507
+577: len=507
+578: len=507
+579: len=507
+580: len=507
+581: len=507
+582: len=507
+583: len=507
+584: len=507
+585: len=507
+586: len=507
+587: len=507
+588: len=507
+589: len=507
+590: len=507
+591: len=507
+592: len=507
+593: len=507
+594: len=507
+595: len=507
+596: len=507
+597: len=507
+598: len=507
+599: len=507
+600: len=507
+601: len=507
+602: len=507
+603: len=507
+604: len=507
+605: len=507
+606: len=507
+607: len=507
+608: len=507
+609: len=507
+610: len=507
+611: len=507
+612: len=507
+613: len=507
+614: len=507
+615: len=507
+616: len=507
+617: len=507
+618: len=507
+619: len=507
+620: len=507
+621: len=507
+622: len=507
+623: len=507
+624: len=507
+625: len=507
+626: len=507
+627: len=507
+628: len=507
+629: len=507
+630: len=507
+631: len=507
+632: len=507
+633: len=507
+634: len=507
+635: len=507
+636: len=507
+637: len=507
+638: len=507
+639: len=507
+640: len=507
+641: len=507
+642: len=507
+643: len=507
+644: len=507
+645: len=507
+646: len=507
+647: len=507
+648: len=507
+649: len=507
+650: len=507
+651: len=507
+652: len=507
+653: len=507
+654: len=507
+655: len=507
+656: len=507
+657: len=507
+658: len=507
+659: len=507
+660: len=507
+661: len=507
+662: len=507
+663: len=507
+664: len=507
+665: len=507
+666: len=507
+667: len=507
+668: len=507
+669: len=507
+670: len=507
+671: len=507
+672: len=507
+673: len=507
+674: len=507
+675: len=507
+676: len=507
+677: len=507
+678: len=507
+679: len=507
+680: len=507
+681: len=507
+682: len=507
+683: len=507
+684: len=507
+685: len=507
+686: len=507
+687: len=507
+688: len=507
+689: len=507
+690: len=507
+691: len=507
+692: len=507
+693: len=507
+694: len=507
+695: len=507
+696: len=507
+697: len=507
+698: len=507
+699: len=507
+700: len=507
+701: len=507
+702: len=507
+703: len=507
+704: len=507
+705: len=507
+706: len=507
+707: len=507
+708: len=507
+709: len=507
+710: len=507
+711: len=507
+712: len=507
+713: len=507
+714: len=507
+715: len=507
+716: len=507
+717: len=507
+718: len=507
+719: len=507
+720: len=507
+721: len=507
+722: len=507
+723: len=507
+724: len=507
+725: len=507
+726: len=507
+727: len=507
+728: len=507
+729: len=507
+730: len=507
+731: len=507
+732: len=507
+733: len=507
+734: len=507
+735: len=507
+736: len=507
+737: len=507
+738: len=507
+739: len=507
+740: len=507
+741: len=507
+742: len=507
+743: len=507
+744: len=507
+745: len=507
+746: len=507
+747: len=507
+748: len=507
+749: len=507
+750: len=507
+751: len=507
+752: len=507
+753: len=507
+754: len=507
+755: len=507
+756: len=507
+757: len=507
+758: len=507
+759: len=507
+760: len=507
+761: len=507
+762: len=507
+763: len=507
+764: len=507
+765: len=507
+766: len=507
+767: len=507
+768: len=507
+769: len=507
+770: len=507
+771: len=507
+772: len=507
+773: len=507
+774: len=507
+775: len=507
+776: len=507
+777: len=507
+778: len=507
+779: len=507
+780: len=507
+781: len=507
+782: len=507
+783: len=507
+784: len=507
+785: len=507
+786: len=507
+787: len=507
+788: len=507
+789: len=507
+790: len=507
+791: len=507
+792: len=507
+793: len=507
+794: len=507
+795: len=507
+796: len=507
+797: len=507
+798: len=507
+799: len=507
+800: len=507
+801: len=507
+802: len=507
+803: len=507
+804: len=507
+805: len=507
+806: len=507
+807: len=507
+808: len=507
+809: len=507
+810: len=507
+811: len=507
+812: len=507
+813: len=507
+814: len=507
+815: len=507
+816: len=507
+817: len=507
+818: len=507
+819: len=507
+820: len=507
+821: len=507
+822: len=507
+823: len=507
+824: len=507
+825: len=507
+826: len=507
+827: len=507
+828: len=507
+829: len=507
+830: len=507
+831: len=507
+832: len=507
+833: len=507
+834: len=507
+835: len=507
+836: len=507
+837: len=507
+838: len=507
+839: len=507
+840: len=507
+841: len=507
+842: len=507
+843: len=507
+844: len=507
+845: len=507
+846: len=507
+847: len=507
+848: len=507
+849: len=507
+850: len=507
+851: len=507
+852: len=507
+853: len=507
+854: len=507
+855: len=507
+856: len=507
+857: len=507
+858: len=507
+859: len=507
+860: len=507
+861: len=507
+862: len=507
+863: len=507
+864: len=507
+865: len=507
+866: len=507
+867: len=507
+868: len=507
+869: len=507
+870: len=507
+871: len=507
+872: len=507
+873: len=507
+874: len=507
+875: len=507
+876: len=507
+877: len=507
+878: len=507
+879: len=507
+880: len=507
+881: len=507
+882: len=507
+883: len=507
+884: len=507
+885: len=507
+886: len=507
+887: len=507
+888: len=507
+889: len=507
+890: len=507
+891: len=507
+892: len=507
+893: len=507
+894: len=507
+895: len=507
+896: len=507
+897: len=507
+898: len=507
+899: len=507
+900: len=507
+901: len=507
+902: len=507
+903: len=507
+904: len=507
+905: len=507
+906: len=507
+907: len=507
+908: len=507
+909: len=507
+910: len=507
+911: len=507
+912: len=507
+913: len=507
+914: len=507
+915: len=507
+916: len=507
+917: len=507
+918: len=507
+919: len=507
+920: len=507
+921: len=507
+922: len=507
+923: len=507
+924: len=507
+925: len=507
+926: len=507
+927: len=507
+928: len=507
+929: len=507
+930: len=507
+931: len=507
+932: len=507
+933: len=507
+934: len=507
+935: len=507
+936: len=507
+937: len=507
+938: len=507
+939: len=507
+940: len=507
+941: len=507
+942: len=507
+943: len=507
+944: len=507
+945: len=507
+946: len=507
+947: len=507
+948: len=507
+949: len=507
+950: len=507
+951: len=507
+952: len=507
+953: len=507
+954: len=507
+955: len=507
+956: len=507
+957: len=507
+958: len=507
+959: len=507
+960: len=507
+961: len=507
+962: len=507
+963: len=507
+964: len=507
+965: len=507
+966: len=507
+967: len=507
+968: len=507
+969: len=507
+970: len=507
+971: len=507
+972: len=507
+973: len=507
+974: len=507
+975: len=507
+976: len=507
+977: len=507
+978: len=507
+979: len=507
+980: len=507
+981: len=507
+982: len=507
+983: len=507
+984: len=507
+985: len=507
+986: len=507
+987: len=507
+988: len=507
+989: len=507
+990: len=507
+991: len=507
+992: len=507
+993: len=507
+994: len=507
+995: len=507
+996: len=507
+997: len=507
+998: len=507
+999: len=507
+1000: len=507
+1001: len=507
+1002: len=507
+1003: len=507
+1004: len=507
+1005: len=507
+1006: len=507
+1007: len=507
+1008: len=507
+1009: len=507
+1010: len=507
+1011: len=507
+1012: len=507
+1013: len=507
+1014: len=507
+1015: len=507
+1016: len=507
+1017: len=507
+1018: len=507
+1019: len=507
+1020: len=507
+1021: len=507
+1022: len=507
+1023: len=507
+1024: len=507
+1025: len=507
+1026: len=507
+1027: len=507
+1028: len=507
+1029: len=507
+1030: len=507
+1031: len=507
+1032: len=507
+1033: len=507
+1034: len=507
+1035: len=507
+1036: len=507
+1037: len=507
+1038: len=507
+1039: len=507
+1040: len=507
+1041: len=507
+1042: len=507
+1043: len=507
+1044: len=507
+1045: len=507
+1046: len=507
+1047: len=507
+1048: len=507
+1049: len=507
+1050: len=507
+1051: len=507
+1052: len=507
+1053: len=507
+1054: len=507
+1055: len=507
+1056: len=507
+1057: len=507
+1058: len=507
+1059: len=507
+1060: len=507
+1061: len=507
+1062: len=507
+1063: len=507
+1064: len=507
+1065: len=507
+1066: len=507
+1067: len=507
+1068: len=507
+1069: len=507
+1070: len=507
+1071: len=507
+1072: len=507
+1073: len=507
+1074: len=507
diff --git a/ext/standard/tests/strings/printf.phpt b/ext/standard/tests/strings/printf.phpt
index b2ec7b3..d989d6a 100755
--- a/ext/standard/tests/strings/printf.phpt
+++ b/ext/standard/tests/strings/printf.phpt
@@ -670,8 +670,8 @@ Array
 
 *** Output for precision value more than maximum ***
 
-Notice: printf(): Requested precision of 988 digits was truncated to PHP maximum of 40 digits in %s on line %d
-12345678900.0000000000000000000000000000000000000000
+Notice: printf(): Requested precision of 988 digits was truncated to PHP maximum of 53 digits in %s on line %d
+12345678900.00000000000000000000000000000000000000000000000000000
 
 *** Output for invalid width(-15) specifier ***
 15s
diff --git a/ext/standard/tests/strings/sprintf_variation52.phpt b/ext/standard/tests/strings/sprintf_variation52.phpt
index 6155c9e..996434f 100644
--- a/ext/standard/tests/strings/sprintf_variation52.phpt
+++ b/ext/standard/tests/strings/sprintf_variation52.phpt
@@ -48,7 +48,7 @@ string(1) "%"
 -- Testing for precision value more than maximum --
 
 Notice: sprintf(): Requested precision of 988 digits was truncated to PHP maximum of %d digits in %s on line %d
-string(52) "12345678900.0000000000000000000000000000000000000000"
+string(65) "12345678900.00000000000000000000000000000000000000000000000000000"
 
 -- Testing for invalid width(-15) specifier --
 string(3) "15s"
diff --git a/ext/standard/tests/url/parse_url_basic_001.phpt b/ext/standard/tests/url/parse_url_basic_001.phpt
index 7b9d513..1edc32e 100644
--- a/ext/standard/tests/url/parse_url_basic_001.phpt
+++ b/ext/standard/tests/url/parse_url_basic_001.phpt
@@ -734,14 +734,7 @@ echo "Done";
   string(9) "/blah.com"
 }
 
---> x://::abc/?: array(3) {
-  ["scheme"]=>
-  string(1) "x"
-  ["host"]=>
-  string(1) ":"
-  ["path"]=>
-  string(1) "/"
-}
+--> x://::abc/?: bool(false)
 
 --> http://::?: array(2) {
   ["scheme"]=>
diff --git a/ext/standard/tests/url/parse_url_basic_002.phpt b/ext/standard/tests/url/parse_url_basic_002.phpt
index f3ac770..464e977 100644
--- a/ext/standard/tests/url/parse_url_basic_002.phpt
+++ b/ext/standard/tests/url/parse_url_basic_002.phpt
@@ -94,7 +94,7 @@ echo "Done";
 --> http://x:?   : string(4) "http"
 --> x:blah.com   : string(1) "x"
 --> x:/blah.com   : string(1) "x"
---> x://::abc/?   : string(1) "x"
+--> x://::abc/?   : bool(false)
 --> http://::?   : string(4) "http"
 --> x://::6.5   : string(1) "x"
 --> http://?:/   : string(4) "http"
diff --git a/ext/standard/tests/url/parse_url_basic_003.phpt b/ext/standard/tests/url/parse_url_basic_003.phpt
index dbd9208..57f182b 100644
--- a/ext/standard/tests/url/parse_url_basic_003.phpt
+++ b/ext/standard/tests/url/parse_url_basic_003.phpt
@@ -93,7 +93,7 @@ echo "Done";
 --> http://x:?   : string(1) "x"
 --> x:blah.com   : NULL
 --> x:/blah.com   : NULL
---> x://::abc/?   : string(1) ":"
+--> x://::abc/?   : bool(false)
 --> http://::?   : string(1) ":"
 --> x://::6.5   : string(1) ":"
 --> http://?:/   : string(1) "?"
diff --git a/ext/standard/tests/url/parse_url_basic_004.phpt b/ext/standard/tests/url/parse_url_basic_004.phpt
index 387907f..6abf4ed 100644
--- a/ext/standard/tests/url/parse_url_basic_004.phpt
+++ b/ext/standard/tests/url/parse_url_basic_004.phpt
@@ -93,7 +93,7 @@ echo "Done";
 --> http://x:?   : NULL
 --> x:blah.com   : NULL
 --> x:/blah.com   : NULL
---> x://::abc/?   : NULL
+--> x://::abc/?   : bool(false)
 --> http://::?   : NULL
 --> x://::6.5   : int(6)
 --> http://?:/   : NULL
diff --git a/ext/standard/tests/url/parse_url_basic_005.phpt b/ext/standard/tests/url/parse_url_basic_005.phpt
index d44dcfe..3bcc891 100644
--- a/ext/standard/tests/url/parse_url_basic_005.phpt
+++ b/ext/standard/tests/url/parse_url_basic_005.phpt
@@ -93,7 +93,7 @@ echo "Done";
 --> http://x:?   : NULL
 --> x:blah.com   : NULL
 --> x:/blah.com   : NULL
---> x://::abc/?   : NULL
+--> x://::abc/?   : bool(false)
 --> http://::?   : NULL
 --> x://::6.5   : NULL
 --> http://?:/   : NULL
diff --git a/ext/standard/tests/url/parse_url_basic_006.phpt b/ext/standard/tests/url/parse_url_basic_006.phpt
index bd6d03e..741a424 100644
--- a/ext/standard/tests/url/parse_url_basic_006.phpt
+++ b/ext/standard/tests/url/parse_url_basic_006.phpt
@@ -93,7 +93,7 @@ echo "Done";
 --> http://x:?   : NULL
 --> x:blah.com   : NULL
 --> x:/blah.com   : NULL
---> x://::abc/?   : NULL
+--> x://::abc/?   : bool(false)
 --> http://::?   : NULL
 --> x://::6.5   : NULL
 --> http://?:/   : NULL
diff --git a/ext/standard/tests/url/parse_url_basic_007.phpt b/ext/standard/tests/url/parse_url_basic_007.phpt
index aa9f88b..bf8f980 100644
--- a/ext/standard/tests/url/parse_url_basic_007.phpt
+++ b/ext/standard/tests/url/parse_url_basic_007.phpt
@@ -93,7 +93,7 @@ echo "Done";
 --> http://x:?   : NULL
 --> x:blah.com   : string(8) "blah.com"
 --> x:/blah.com   : string(9) "/blah.com"
---> x://::abc/?   : string(1) "/"
+--> x://::abc/?   : bool(false)
 --> http://::?   : NULL
 --> x://::6.5   : NULL
 --> http://?:/   : string(1) "/"
diff --git a/ext/standard/tests/url/parse_url_basic_008.phpt b/ext/standard/tests/url/parse_url_basic_008.phpt
index 7b16612..a61fd06 100644
--- a/ext/standard/tests/url/parse_url_basic_008.phpt
+++ b/ext/standard/tests/url/parse_url_basic_008.phpt
@@ -93,7 +93,7 @@ echo "Done";
 --> http://x:?   : NULL
 --> x:blah.com   : NULL
 --> x:/blah.com   : NULL
---> x://::abc/?   : NULL
+--> x://::abc/?   : bool(false)
 --> http://::?   : NULL
 --> x://::6.5   : NULL
 --> http://?:/   : NULL
diff --git a/ext/standard/tests/url/parse_url_basic_009.phpt b/ext/standard/tests/url/parse_url_basic_009.phpt
index a814546..5302388 100644
--- a/ext/standard/tests/url/parse_url_basic_009.phpt
+++ b/ext/standard/tests/url/parse_url_basic_009.phpt
@@ -93,7 +93,7 @@ echo "Done";
 --> http://x:?   : NULL
 --> x:blah.com   : NULL
 --> x:/blah.com   : NULL
---> x://::abc/?   : NULL
+--> x://::abc/?   : bool(false)
 --> http://::?   : NULL
 --> x://::6.5   : NULL
 --> http://?:/   : NULL
diff --git a/ext/standard/type.c b/ext/standard/type.c
index 8b84662..9f28c28 100644
--- a/ext/standard/type.c
+++ b/ext/standard/type.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: type.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: type.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_incomplete_class.h"
diff --git a/ext/standard/uniqid.c b/ext/standard/uniqid.c
index ef25240..5c969fb 100644
--- a/ext/standard/uniqid.c
+++ b/ext/standard/uniqid.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: uniqid.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: uniqid.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/standard/uniqid.h b/ext/standard/uniqid.h
index da98a8f..e783083 100644
--- a/ext/standard/uniqid.h
+++ b/ext/standard/uniqid.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: uniqid.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: uniqid.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef UNIQID_H
 #define UNIQID_H
diff --git a/ext/standard/url.c b/ext/standard/url.c
index 63e302d..5446c87 100644
--- a/ext/standard/url.c
+++ b/ext/standard/url.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Jim Winstead <jimw at php.net>                                  |
    +----------------------------------------------------------------------+
  */
-/* $Id: url.c 305159 2010-11-07 12:59:22Z felipe $ */
+/* $Id: url.c 309175 2011-03-13 17:14:18Z pierrick $ */
 
 #include <stdlib.h>
 #include <string.h>
@@ -176,19 +176,27 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
 				}	
 			}
 		}	
-	} else if (e) { /* no scheme, look for port */
+	} else if (e) { /* no scheme; starts with colon: look for port */
 		parse_port:
 		p = e + 1;
 		pp = p;
-		
+
 		while (pp-p < 6 && isdigit(*pp)) {
 			pp++;
 		}
-		
-		if (pp-p < 6 && (*pp == '/' || *pp == '\0')) {
-			memcpy(port_buf, p, (pp-p));
-			port_buf[pp-p] = '\0';
-			ret->port = atoi(port_buf);
+
+		if (pp - p > 0 && pp - p < 6 && (*pp == '/' || *pp == '\0')) {
+			long port;
+			memcpy(port_buf, p, (pp - p));
+			port_buf[pp - p] = '\0';
+			port = strtol(port_buf, NULL, 10);
+			if (port > 0 && port <= 65535) {
+				ret->port = (unsigned short) port;
+			} else {
+				STR_FREE(ret->scheme);
+				efree(ret);
+				return NULL;
+			}
 		} else {
 			goto just_path;
 		}
@@ -264,9 +272,19 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
 				efree(ret);
 				return NULL;
 			} else if (e - p > 0) {
-				memcpy(port_buf, p, (e-p));
-				port_buf[e-p] = '\0';
-				ret->port = atoi(port_buf);
+				long port;
+				memcpy(port_buf, p, (e - p));
+				port_buf[e - p] = '\0';
+				port = strtol(port_buf, NULL, 10);
+				if (port > 0 && port <= 65535) {
+					ret->port = (unsigned short)port;
+				} else {
+					STR_FREE(ret->scheme);
+					STR_FREE(ret->user);
+					STR_FREE(ret->pass);
+					efree(ret);
+					return NULL;
+				}
 			}
 			p--;
 		}	
diff --git a/ext/standard/url.h b/ext/standard/url.h
index a9c2e03..9a2bcfa 100644
--- a/ext/standard/url.h
+++ b/ext/standard/url.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Jim Winstead <jimw at php.net>                                  |
    +----------------------------------------------------------------------+
  */
-/* $Id: url.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: url.h 307432 2011-01-13 07:27:46Z stas $ */
 
 #ifndef URL_H
 #define URL_H
diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c
index 7c2731d..cd4ca9e 100644
--- a/ext/standard/url_scanner_ex.c
+++ b/ext/standard/url_scanner_ex.c
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Mon Jul 27 02:20:40 2009 */
+/* Generated by re2c 0.13.5 on Fri Dec 31 23:52:51 2010 */
 /*
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: url_scanner_ex.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: url_scanner_ex.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/standard/url_scanner_ex.c.orig b/ext/standard/url_scanner_ex.c.orig
index 57f273d..cbc3f57 100644
--- a/ext/standard/url_scanner_ex.c.orig
+++ b/ext/standard/url_scanner_ex.c.orig
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Mon Jul 27 02:20:40 2009 */
+/* Generated by re2c 0.13.5 on Fri Dec 31 23:52:51 2010 */
 #line 1 "ext/standard/url_scanner_ex.re"
 /*
   +----------------------------------------------------------------------+
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: url_scanner_ex.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: url_scanner_ex.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/ext/standard/url_scanner_ex.h b/ext/standard/url_scanner_ex.h
index f454d9f..692f05a 100644
--- a/ext/standard/url_scanner_ex.h
+++ b/ext/standard/url_scanner_ex.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: url_scanner_ex.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: url_scanner_ex.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef URL_SCANNER_EX_H
 #define URL_SCANNER_EX_H
diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c
index 3922fc5..acd4142 100644
--- a/ext/standard/user_filters.c
+++ b/ext/standard/user_filters.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: user_filters.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: user_filters.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_globals.h"
diff --git a/ext/standard/uuencode.c b/ext/standard/uuencode.c
index 0ef1fd4..cdd73aa 100644
--- a/ext/standard/uuencode.c
+++ b/ext/standard/uuencode.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: uuencode.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: uuencode.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
  * Portions of this code are based on Berkeley's uuencode/uudecode
diff --git a/ext/standard/var.c b/ext/standard/var.c
index e71e594..633b568 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: var.c 303330 2010-09-13 20:14:18Z kalle $ */
+/* $Id: var.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* {{{ includes
 */
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c
index b88cab0..015f92d 100644
--- a/ext/standard/var_unserializer.c
+++ b/ext/standard/var_unserializer.c
@@ -1,9 +1,9 @@
-/* Generated by re2c 0.13.5 on Fri Aug  6 19:14:17 2010 */
+/* Generated by re2c 0.13.5 on Fri Dec 31 23:52:55 2010 */
 /*
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: var_unserializer.c 301949 2010-08-06 22:23:10Z felipe $ */
+/* $Id: var_unserializer.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "ext/standard/php_var.h"
diff --git a/ext/standard/var_unserializer.c.orig b/ext/standard/var_unserializer.c.orig
index 586eedb..ad7823e 100644
--- a/ext/standard/var_unserializer.c.orig
+++ b/ext/standard/var_unserializer.c.orig
@@ -1,10 +1,10 @@
-/* Generated by re2c 0.13.5 on Fri Aug  6 19:14:17 2010 */
+/* Generated by re2c 0.13.5 on Fri Dec 31 23:52:55 2010 */
 #line 1 "ext/standard/var_unserializer.re"
 /*
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: var_unserializer.c 301949 2010-08-06 22:23:10Z felipe $ */
+/* $Id: var_unserializer.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "ext/standard/php_var.h"
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
index 5d4a379..500025d 100644
--- a/ext/standard/var_unserializer.re
+++ b/ext/standard/var_unserializer.re
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: var_unserializer.re 301935 2010-08-06 18:20:41Z rasmus $ */
+/* $Id: var_unserializer.re 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "ext/standard/php_var.h"
diff --git a/ext/standard/versioning.c b/ext/standard/versioning.c
index 0ab2472..759cbb8 100644
--- a/ext/standard/versioning.c
+++ b/ext/standard/versioning.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: versioning.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: versioning.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 #include <sys/types.h>
diff --git a/ext/sybase_ct/php_sybase_ct.c b/ext/sybase_ct/php_sybase_ct.c
index 8382a0e..d881f62 100644
--- a/ext/sybase_ct/php_sybase_ct.c
+++ b/ext/sybase_ct/php_sybase_ct.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_sybase_ct.c 300764 2010-06-26 16:03:39Z felipe $ */
+/* $Id: php_sybase_ct.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 #ifdef HAVE_CONFIG_H
diff --git a/ext/sybase_ct/php_sybase_ct.h b/ext/sybase_ct/php_sybase_ct.h
index 9add20c..0e01bc4 100644
--- a/ext/sybase_ct/php_sybase_ct.h
+++ b/ext/sybase_ct/php_sybase_ct.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_sybase_ct.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_sybase_ct.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SYBASE_CT_H
 #define PHP_SYBASE_CT_H
diff --git a/ext/sysvmsg/php_sysvmsg.h b/ext/sysvmsg/php_sysvmsg.h
index f424756..226bbc7 100644
--- a/ext/sysvmsg/php_sysvmsg.h
+++ b/ext/sysvmsg/php_sysvmsg.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_sysvmsg.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_sysvmsg.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SYSVMSG_H
 #define PHP_SYSVMSG_H
diff --git a/ext/sysvmsg/sysvmsg.c b/ext/sysvmsg/sysvmsg.c
index a2747fc..f45b135 100644
--- a/ext/sysvmsg/sysvmsg.c
+++ b/ext/sysvmsg/sysvmsg.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: sysvmsg.c 303429 2010-09-16 19:15:26Z pajoye $ */
+/* $Id: sysvmsg.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -145,7 +145,7 @@ PHP_MINFO_FUNCTION(sysvmsg)
 {
 	php_info_print_table_start();
 	php_info_print_table_row(2, "sysvmsg support", "enabled");
-	php_info_print_table_row(2, "Revision", "$Revision: 303429 $");
+	php_info_print_table_row(2, "Revision", "$Revision: 306939 $");
 	php_info_print_table_end();
 }
 /* }}} */
diff --git a/ext/sysvsem/php_sysvsem.h b/ext/sysvsem/php_sysvsem.h
index acafae5..ea40fd8 100644
--- a/ext/sysvsem/php_sysvsem.h
+++ b/ext/sysvsem/php_sysvsem.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_sysvsem.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_sysvsem.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SYSVSEM_H
 #define PHP_SYSVSEM_H
diff --git a/ext/sysvsem/sysvsem.c b/ext/sysvsem/sysvsem.c
index 768af1c..31d88c6 100644
--- a/ext/sysvsem/sysvsem.c
+++ b/ext/sysvsem/sysvsem.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: sysvsem.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: sysvsem.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Latest update build anc tested on Linux 2.2.14
  *
diff --git a/ext/sysvshm/php_sysvshm.h b/ext/sysvshm/php_sysvshm.h
index c313044..3c84aa1 100644
--- a/ext/sysvshm/php_sysvshm.h
+++ b/ext/sysvshm/php_sysvshm.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_sysvshm.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_sysvshm.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SYSVSHM_H
 #define PHP_SYSVSHM_H
diff --git a/ext/sysvshm/sysvshm.c b/ext/sysvshm/sysvshm.c
index f13490a..d91ec29 100644
--- a/ext/sysvshm/sysvshm.c
+++ b/ext/sysvshm/sysvshm.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: sysvshm.c 299328 2010-05-13 08:34:06Z dmitry $ */
+/* $Id: sysvshm.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* This has been built and tested on Linux 2.2.14 
  *
diff --git a/ext/tidy/php_tidy.h b/ext/tidy/php_tidy.h
index e9f715a..9c1a73e 100644
--- a/ext/tidy/php_tidy.h
+++ b/ext/tidy/php_tidy.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_tidy.h 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: php_tidy.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_TIDY_H
 #define PHP_TIDY_H
diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c
index c4a79a6..ddc009e 100644
--- a/ext/tidy/tidy.c
+++ b/ext/tidy/tidy.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: tidy.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: tidy.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1088,7 +1088,7 @@ static PHP_MINFO_FUNCTION(tidy)
 	php_info_print_table_start();
 	php_info_print_table_header(2, "Tidy support", "enabled");
 	php_info_print_table_row(2, "libTidy Release", (char *)tidyReleaseDate());
-	php_info_print_table_row(2, "Extension Version", PHP_TIDY_MODULE_VERSION " ($Id: tidy.c 305507 2010-11-18 15:22:22Z pajoye $)");
+	php_info_print_table_row(2, "Extension Version", PHP_TIDY_MODULE_VERSION " ($Id: tidy.c 306939 2011-01-01 02:19:59Z felipe $)");
 	php_info_print_table_end();
 
 	DISPLAY_INI_ENTRIES();
diff --git a/ext/tokenizer/php_tokenizer.h b/ext/tokenizer/php_tokenizer.h
index 29e985b..2cba9a7 100644
--- a/ext/tokenizer/php_tokenizer.h
+++ b/ext/tokenizer/php_tokenizer.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_tokenizer.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_tokenizer.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_TOKENIZER_H
 #define PHP_TOKENIZER_H
diff --git a/ext/tokenizer/tests/bug54089.phpt b/ext/tokenizer/tests/bug54089.phpt
new file mode 100644
index 0000000..e1f6d79
--- /dev/null
+++ b/ext/tokenizer/tests/bug54089.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Bug #54089 (token_get_all() does not stop after __halt_compiler)
+--SKIPIF--
+<?php if (!extension_loaded("tokenizer")) print "skip"; ?>
+--FILE--
+<?php
+$code = "<?php __halt_compiler();\x01?>\x02";
+$tokens = token_get_all($code);
+
+var_dump($tokens);
+
+$code = '';
+foreach ($tokens as $t)
+{
+	$code .= isset($t[1]) ? $t[1] : $t;
+}
+var_dump($code);
+?>
+--EXPECTF--
+array(2) {
+  [0]=>
+  array(3) {
+    [0]=>
+    int(%d)
+    [1]=>
+    string(6) "<?php "
+    [2]=>
+    int(1)
+  }
+  [1]=>
+  array(3) {
+    [0]=>
+    int(%d)
+    [1]=>
+    string(15) "__halt_compiler"
+    [2]=>
+    int(1)
+  }
+}
+string(21) "<?php __halt_compiler"
diff --git a/ext/tokenizer/tests/token_get_all_variation16.phpt b/ext/tokenizer/tests/token_get_all_variation16.phpt
index 55241ce..4ae694e 100644
--- a/ext/tokenizer/tests/token_get_all_variation16.phpt
+++ b/ext/tokenizer/tests/token_get_all_variation16.phpt
@@ -55,11 +55,11 @@ echo "Done"
 ?>
 --EXPECTF--
 *** Testing token_get_all() : with different function constructs ***
-array(142) {
+array(135) {
   [0]=>
   array(3) {
     [0]=>
-    int(368)
+    int(%d)
     [1]=>
     string(6) "<?php
 "
@@ -69,7 +69,7 @@ array(142) {
   [1]=>
   array(3) {
     [0]=>
-    int(324)
+    int(%d)
     [1]=>
     string(7) "declare"
     [2]=>
@@ -80,7 +80,7 @@ array(142) {
   [3]=>
   array(3) {
     [0]=>
-    int(307)
+    int(%d)
     [1]=>
     string(5) "VALUE"
     [2]=>
@@ -91,7 +91,7 @@ array(142) {
   [5]=>
   array(3) {
     [0]=>
-    int(305)
+    int(%d)
     [1]=>
     string(3) "100"
     [2]=>
@@ -104,7 +104,7 @@ array(142) {
   [8]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) "
 "
@@ -114,7 +114,7 @@ array(142) {
   [9]=>
   array(3) {
     [0]=>
-    int(262)
+    int(%d)
     [1]=>
     string(7) "include"
     [2]=>
@@ -125,7 +125,7 @@ array(142) {
   [11]=>
   array(3) {
     [0]=>
-    int(315)
+    int(%d)
     [1]=>
     string(13) ""addfile.php""
     [2]=>
@@ -138,7 +138,7 @@ array(142) {
   [14]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) "
 "
@@ -148,7 +148,7 @@ array(142) {
   [15]=>
   array(3) {
     [0]=>
-    int(259)
+    int(%d)
     [1]=>
     string(7) "require"
     [2]=>
@@ -159,7 +159,7 @@ array(142) {
   [17]=>
   array(3) {
     [0]=>
-    int(315)
+    int(%d)
     [1]=>
     string(13) ""sumfile.php""
     [2]=>
@@ -172,7 +172,7 @@ array(142) {
   [20]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(2) "
 
@@ -183,7 +183,7 @@ array(142) {
   [21]=>
   array(3) {
     [0]=>
-    int(334)
+    int(%d)
     [1]=>
     string(8) "function"
     [2]=>
@@ -192,7 +192,7 @@ array(142) {
   [22]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -201,7 +201,7 @@ array(142) {
   [23]=>
   array(3) {
     [0]=>
-    int(307)
+    int(%d)
     [1]=>
     string(10) "myFunction"
     [2]=>
@@ -212,7 +212,7 @@ array(142) {
   [25]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(2) "$a"
     [2]=>
@@ -223,7 +223,7 @@ array(142) {
   [27]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) "
 "
@@ -235,7 +235,7 @@ array(142) {
   [29]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(3) "
   "
@@ -245,7 +245,7 @@ array(142) {
   [30]=>
   array(3) {
     [0]=>
-    int(301)
+    int(%d)
     [1]=>
     string(2) "if"
     [2]=>
@@ -256,7 +256,7 @@ array(142) {
   [32]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(2) "$a"
     [2]=>
@@ -265,7 +265,7 @@ array(142) {
   [33]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -276,7 +276,7 @@ array(142) {
   [35]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -285,7 +285,7 @@ array(142) {
   [36]=>
   array(3) {
     [0]=>
-    int(305)
+    int(%d)
     [1]=>
     string(1) "2"
     [2]=>
@@ -296,7 +296,7 @@ array(142) {
   [38]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(5) "
     "
@@ -306,7 +306,7 @@ array(142) {
   [39]=>
   array(3) {
     [0]=>
-    int(336)
+    int(%d)
     [1]=>
     string(6) "return"
     [2]=>
@@ -315,7 +315,7 @@ array(142) {
   [40]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -324,7 +324,7 @@ array(142) {
   [41]=>
   array(3) {
     [0]=>
-    int(305)
+    int(%d)
     [1]=>
     string(1) "1"
     [2]=>
@@ -335,7 +335,7 @@ array(142) {
   [43]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(3) "
   "
@@ -345,7 +345,7 @@ array(142) {
   [44]=>
   array(3) {
     [0]=>
-    int(303)
+    int(%d)
     [1]=>
     string(4) "else"
     [2]=>
@@ -354,7 +354,7 @@ array(142) {
   [45]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(5) "
     "
@@ -364,7 +364,7 @@ array(142) {
   [46]=>
   array(3) {
     [0]=>
-    int(300)
+    int(%d)
     [1]=>
     string(4) "exit"
     [2]=>
@@ -375,7 +375,7 @@ array(142) {
   [48]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) "
 "
@@ -387,7 +387,7 @@ array(142) {
   [50]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(2) "
 
@@ -398,7 +398,7 @@ array(142) {
   [51]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(2) "$a"
     [2]=>
@@ -407,7 +407,7 @@ array(142) {
   [52]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -418,7 +418,7 @@ array(142) {
   [54]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -427,7 +427,7 @@ array(142) {
   [55]=>
   array(3) {
     [0]=>
-    int(307)
+    int(%d)
     [1]=>
     string(5) "VALUE"
     [2]=>
@@ -438,7 +438,7 @@ array(142) {
   [57]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) "
 "
@@ -448,7 +448,7 @@ array(142) {
   [58]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(2) "$b"
     [2]=>
@@ -457,7 +457,7 @@ array(142) {
   [59]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -468,7 +468,7 @@ array(142) {
   [61]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -477,7 +477,7 @@ array(142) {
   [62]=>
   array(3) {
     [0]=>
-    int(305)
+    int(%d)
     [1]=>
     string(2) "20"
     [2]=>
@@ -488,7 +488,7 @@ array(142) {
   [64]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) "
 "
@@ -498,7 +498,7 @@ array(142) {
   [65]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(2) "$c"
     [2]=>
@@ -507,7 +507,7 @@ array(142) {
   [66]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -518,7 +518,7 @@ array(142) {
   [68]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -527,7 +527,7 @@ array(142) {
   [69]=>
   array(3) {
     [0]=>
-    int(360)
+    int(%d)
     [1]=>
     string(5) "array"
     [2]=>
@@ -538,7 +538,7 @@ array(142) {
   [71]=>
   array(3) {
     [0]=>
-    int(305)
+    int(%d)
     [1]=>
     string(1) "1"
     [2]=>
@@ -549,7 +549,7 @@ array(142) {
   [73]=>
   array(3) {
     [0]=>
-    int(305)
+    int(%d)
     [1]=>
     string(1) "2"
     [2]=>
@@ -562,7 +562,7 @@ array(142) {
   [76]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) "
 "
@@ -572,7 +572,7 @@ array(142) {
   [77]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(2) "$b"
     [2]=>
@@ -581,7 +581,7 @@ array(142) {
   [78]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -590,7 +590,7 @@ array(142) {
   [79]=>
   array(3) {
     [0]=>
-    int(267)
+    int(%d)
     [1]=>
     string(3) ">>="
     [2]=>
@@ -599,7 +599,7 @@ array(142) {
   [80]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -608,7 +608,7 @@ array(142) {
   [81]=>
   array(3) {
     [0]=>
-    int(305)
+    int(%d)
     [1]=>
     string(1) "2"
     [2]=>
@@ -619,7 +619,7 @@ array(142) {
   [83]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(2) "
 
@@ -630,7 +630,7 @@ array(142) {
   [84]=>
   array(3) {
     [0]=>
-    int(301)
+    int(%d)
     [1]=>
     string(2) "if"
     [2]=>
@@ -641,7 +641,7 @@ array(142) {
   [86]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(2) "$b"
     [2]=>
@@ -650,7 +650,7 @@ array(142) {
   [87]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -659,7 +659,7 @@ array(142) {
   [88]=>
   array(3) {
     [0]=>
-    int(285)
+    int(%d)
     [1]=>
     string(2) "<="
     [2]=>
@@ -668,7 +668,7 @@ array(142) {
   [89]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -677,7 +677,7 @@ array(142) {
   [90]=>
   array(3) {
     [0]=>
-    int(305)
+    int(%d)
     [1]=>
     string(1) "0"
     [2]=>
@@ -688,7 +688,7 @@ array(142) {
   [92]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(3) "
   "
@@ -698,7 +698,7 @@ array(142) {
   [93]=>
   array(3) {
     [0]=>
-    int(300)
+    int(%d)
     [1]=>
     string(3) "die"
     [2]=>
@@ -709,7 +709,7 @@ array(142) {
   [95]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) "
 "
@@ -719,7 +719,7 @@ array(142) {
   [96]=>
   array(3) {
     [0]=>
-    int(303)
+    int(%d)
     [1]=>
     string(4) "else"
     [2]=>
@@ -728,7 +728,7 @@ array(142) {
   [97]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(3) "
   "
@@ -738,7 +738,7 @@ array(142) {
   [98]=>
   array(3) {
     [0]=>
-    int(266)
+    int(%d)
     [1]=>
     string(5) "print"
     [2]=>
@@ -749,7 +749,7 @@ array(142) {
   [100]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(2) "$b"
     [2]=>
@@ -762,7 +762,7 @@ array(142) {
   [103]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(2) "
 
@@ -773,7 +773,7 @@ array(142) {
   [104]=>
   array(3) {
     [0]=>
-    int(359)
+    int(%d)
     [1]=>
     string(4) "list"
     [2]=>
@@ -784,7 +784,7 @@ array(142) {
   [106]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(7) "$value1"
     [2]=>
@@ -795,7 +795,7 @@ array(142) {
   [108]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(7) "$value2"
     [2]=>
@@ -806,7 +806,7 @@ array(142) {
   [110]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -817,7 +817,7 @@ array(142) {
   [112]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -826,7 +826,7 @@ array(142) {
   [113]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(2) "$c"
     [2]=>
@@ -837,7 +837,7 @@ array(142) {
   [115]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) "
 "
@@ -847,7 +847,7 @@ array(142) {
   [116]=>
   array(3) {
     [0]=>
-    int(301)
+    int(%d)
     [1]=>
     string(2) "if"
     [2]=>
@@ -858,7 +858,7 @@ array(142) {
   [118]=>
   array(3) {
     [0]=>
-    int(351)
+    int(%d)
     [1]=>
     string(5) "empty"
     [2]=>
@@ -869,7 +869,7 @@ array(142) {
   [120]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(7) "$value1"
     [2]=>
@@ -880,7 +880,7 @@ array(142) {
   [122]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -889,7 +889,7 @@ array(142) {
   [123]=>
   array(3) {
     [0]=>
-    int(279)
+    int(%d)
     [1]=>
     string(2) "&&"
     [2]=>
@@ -898,7 +898,7 @@ array(142) {
   [124]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -909,7 +909,7 @@ array(142) {
   [126]=>
   array(3) {
     [0]=>
-    int(350)
+    int(%d)
     [1]=>
     string(5) "isset"
     [2]=>
@@ -920,7 +920,7 @@ array(142) {
   [128]=>
   array(3) {
     [0]=>
-    int(309)
+    int(%d)
     [1]=>
     string(7) "$value1"
     [2]=>
@@ -933,7 +933,7 @@ array(142) {
   [131]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(1) " "
     [2]=>
@@ -944,7 +944,7 @@ array(142) {
   [133]=>
   array(3) {
     [0]=>
-    int(371)
+    int(%d)
     [1]=>
     string(3) "
   "
@@ -954,48 +954,11 @@ array(142) {
   [134]=>
   array(3) {
     [0]=>
-    int(352)
+    int(%d)
     [1]=>
     string(15) "__halt_compiler"
     [2]=>
     int(26)
   }
-  [135]=>
-  string(1) "("
-  [136]=>
-  string(1) ")"
-  [137]=>
-  string(1) ";"
-  [138]=>
-  array(3) {
-    [0]=>
-    int(371)
-    [1]=>
-    string(1) "
-"
-    [2]=>
-    int(26)
-  }
-  [139]=>
-  string(1) "}"
-  [140]=>
-  array(3) {
-    [0]=>
-    int(371)
-    [1]=>
-    string(1) "
-"
-    [2]=>
-    int(27)
-  }
-  [141]=>
-  array(3) {
-    [0]=>
-    int(370)
-    [1]=>
-    string(2) "?>"
-    [2]=>
-    int(28)
-  }
 }
 Done
diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c
index fa597f6..1a072ee 100644
--- a/ext/tokenizer/tokenizer.c
+++ b/ext/tokenizer/tokenizer.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: tokenizer.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: tokenizer.c 308761 2011-02-28 15:18:27Z iliaa $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -151,6 +151,10 @@ static void tokenize(zval *return_value TSRMLS_DC)
 		ZVAL_NULL(&token);
 
 		token_line = CG(zend_lineno);
+
+		if (token_type == T_HALT_COMPILER) {
+			break;
+		}
 	}
 }
 
diff --git a/ext/tokenizer/tokenizer_data.c b/ext/tokenizer/tokenizer_data.c
index 38f4dde..f1738fd 100644
--- a/ext/tokenizer/tokenizer_data.c
+++ b/ext/tokenizer/tokenizer_data.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: tokenizer_data.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: tokenizer_data.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
    DO NOT EDIT THIS FILE!
diff --git a/ext/tokenizer/tokenizer_data_gen.sh b/ext/tokenizer/tokenizer_data_gen.sh
index 169530c..5cd148b 100755
--- a/ext/tokenizer/tokenizer_data_gen.sh
+++ b/ext/tokenizer/tokenizer_data_gen.sh
@@ -16,7 +16,7 @@ echo '/*
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2008 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -35,7 +35,7 @@ echo '/*
 /*
    DO NOT EDIT THIS FILE!
    This file is generated using tokenizer_data_gen.sh
-*/ 
+*/
 
 #include "php.h"
 #include "zend.h"
diff --git a/ext/wddx/php_wddx.h b/ext/wddx/php_wddx.h
index 7b816ff..4627a15 100644
--- a/ext/wddx/php_wddx.h
+++ b/ext/wddx/php_wddx.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_wddx.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_wddx.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_WDDX_H
 #define PHP_WDDX_H
diff --git a/ext/wddx/php_wddx_api.h b/ext/wddx/php_wddx_api.h
index db732bd..bcf4ec9 100644
--- a/ext/wddx/php_wddx_api.h
+++ b/ext/wddx/php_wddx_api.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_wddx_api.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_wddx_api.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_WDDX_API_H
 #define PHP_WDDX_API_H
diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c
index cacf36e..8bb7d62 100644
--- a/ext/wddx/wddx.c
+++ b/ext/wddx/wddx.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: wddx.c 301765 2010-08-01 17:34:09Z felipe $ */
+/* $Id: wddx.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/xml/compat.c b/ext/xml/compat.c
index 9c8761b..72b29d0 100644
--- a/ext/xml/compat.c
+++ b/ext/xml/compat.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/ext/xml/config.w32 b/ext/xml/config.w32
index 5c4ac0a..6a720f5 100644
--- a/ext/xml/config.w32
+++ b/ext/xml/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32 261548 2008-06-23 18:40:29Z pajoye $
+// $Id: config.w32 306344 2010-12-13 18:43:10Z pajoye $
 // vim:ft=javascript
 
 ARG_WITH("xml", "XML support", "yes");
@@ -11,6 +11,7 @@ if (PHP_XML == "yes") {
 		if (!PHP_XML_SHARED) {
 			ADD_FLAG("CFLAGS_XML", "/D LIBXML_STATIC ");
 		}
+		PHP_INSTALL_HEADERS("", "ext/xml");
 	} else {
 		WARNING("xml support can't be enabled, libraries or headers are missing")
 		PHP_ZLIB = "no"
diff --git a/ext/xml/expat_compat.h b/ext/xml/expat_compat.h
index 7b4bc40..56a77e6 100644
--- a/ext/xml/expat_compat.h
+++ b/ext/xml/expat_compat.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: expat_compat.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: expat_compat.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_EXPAT_COMPAT_H
 #define PHP_EXPAT_COMPAT_H
diff --git a/ext/xml/php_xml.h b/ext/xml/php_xml.h
index cd6ebec..eabfb60 100644
--- a/ext/xml/php_xml.h
+++ b/ext/xml/php_xml.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_xml.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_xml.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_XML_H
 #define PHP_XML_H
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
index 936710a..c2ef494 100644
--- a/ext/xml/xml.c
+++ b/ext/xml/xml.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: xml.c 304959 2010-10-27 18:13:25Z cataphract $ */
+/* $Id: xml.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define IS_EXT_MODULE
 
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index ad9c206..705dfd6 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_xmlreader.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_xmlreader.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/xmlreader/php_xmlreader.h b/ext/xmlreader/php_xmlreader.h
index 3d510a0..ab90ea1 100644
--- a/ext/xmlreader/php_xmlreader.h
+++ b/ext/xmlreader/php_xmlreader.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_xmlreader.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_xmlreader.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_XMLREADER_H
 #define PHP_XMLREADER_H
diff --git a/ext/xmlrpc/php_xmlrpc.h b/ext/xmlrpc/php_xmlrpc.h
index d1bc19c..754fabf 100644
--- a/ext/xmlrpc/php_xmlrpc.h
+++ b/ext/xmlrpc/php_xmlrpc.h
@@ -37,7 +37,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -51,7 +51,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_xmlrpc.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_xmlrpc.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef _PHP_XMLRPC_H
 #define _PHP_XMLRPC_H
diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c
index d81eb8a..1013bc9 100644
--- a/ext/xmlrpc/xmlrpc-epi-php.c
+++ b/ext/xmlrpc/xmlrpc-epi-php.c
@@ -37,7 +37,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -51,7 +51,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: xmlrpc-epi-php.c 296153 2010-03-13 20:26:51Z felipe $ */
+/* $Id: xmlrpc-epi-php.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /**********************************************************************
 * BUGS:                                                               *
@@ -67,6 +67,7 @@
 
 #include "php.h"
 #include "ext/standard/info.h"
+#include "ext/standard/php_string.h"
 #include "ext/date/php_date.h"
 #include "php_ini.h"
 #include "php_xmlrpc.h"
diff --git a/ext/xmlwriter/php_xmlwriter.c b/ext/xmlwriter/php_xmlwriter.c
index 3443bd7..676d7bc 100644
--- a/ext/xmlwriter/php_xmlwriter.c
+++ b/ext/xmlwriter/php_xmlwriter.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_xmlwriter.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_xmlwriter.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/xmlwriter/php_xmlwriter.h b/ext/xmlwriter/php_xmlwriter.h
index a62b4fe..5552a17 100644
--- a/ext/xmlwriter/php_xmlwriter.h
+++ b/ext/xmlwriter/php_xmlwriter.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_xmlwriter.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_xmlwriter.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_XMLWRITER_H
 #define PHP_XMLWRITER_H
diff --git a/ext/xsl/php_xsl.c b/ext/xsl/php_xsl.c
index 5839230..2d473f4 100644
--- a/ext/xsl/php_xsl.c
+++ b/ext/xsl/php_xsl.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_xsl.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_xsl.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/xsl/php_xsl.h b/ext/xsl/php_xsl.h
index ce8d975..09238b2 100644
--- a/ext/xsl/php_xsl.h
+++ b/ext/xsl/php_xsl.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_xsl.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_xsl.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_XSL_H
 #define PHP_XSL_H
diff --git a/ext/xsl/xsl_fe.h b/ext/xsl/xsl_fe.h
index 48377ca..a02292e 100644
--- a/ext/xsl/xsl_fe.h
+++ b/ext/xsl/xsl_fe.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: xsl_fe.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: xsl_fe.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef XSL_FE_H
 #define XSL_FE_H
diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c
index 531c8d3..ef3cc38 100644
--- a/ext/xsl/xsltprocessor.c
+++ b/ext/xsl/xsltprocessor.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: xsltprocessor.c 305507 2010-11-18 15:22:22Z pajoye $ */
+/* $Id: xsltprocessor.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -643,6 +643,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_uri)
 	ret = -1;
 	if (newdocp) {
 		if (strlen(uri) != uri_len) {
+			xmlFreeDoc(newdocp);
 			RETURN_FALSE;
 		}
 		ret = xsltSaveResultToFilename(uri, newdocp, sheetp, 0);
diff --git a/ext/zip/lib/zip_dirent.c b/ext/zip/lib/zip_dirent.c
index 39fcb6f..59f8ab0 100644
--- a/ext/zip/lib/zip_dirent.c
+++ b/ext/zip/lib/zip_dirent.c
@@ -473,10 +473,8 @@ _zip_dirent_write(struct zip_dirent *zde, FILE *fp, int localp,
 static time_t
 _zip_d2u_time(int dtime, int ddate)
 {
-    struct tm tm;
+    struct tm tm = {0};
 
-    memset(&tm, sizeof(tm), 0);
-    
     /* let mktime decide if DST is in effect */
     tm.tm_isdst = -1;
     
diff --git a/ext/zip/lib/zip_name_locate.c b/ext/zip/lib/zip_name_locate.c
index e8b35ff..96c4f93 100644
--- a/ext/zip/lib/zip_name_locate.c
+++ b/ext/zip/lib/zip_name_locate.c
@@ -60,6 +60,10 @@ _zip_name_locate(struct zip *za, const char *fname, int flags,
 	return -1;
     }
 
+    if((flags & ZIP_FL_UNCHANGED)  && !za->cdir) {
+    	return -1;
+    }
+
     cmp = (flags & ZIP_FL_NOCASE) ? strcmpi : strcmp;
 
     n = (flags & ZIP_FL_UNCHANGED) ? za->cdir->nentry : za->nentry;
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index de35143..fdbe582 100644
--- a/ext/zip/php_zip.c
+++ b/ext/zip/php_zip.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_zip.c 305848 2010-11-30 11:04:06Z pajoye $ */
+/* $Id: php_zip.c 308107 2011-02-07 16:20:16Z pajoye $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -196,7 +196,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, int fil
 	}
 
 	/* let see if the path already exists */
-	if (php_stream_stat_path(file_dirname_fullpath, &ssb) < 0) {
+	if (php_stream_stat_path_ex(file_dirname_fullpath, PHP_STREAM_URL_STAT_QUIET, &ssb, NULL) < 0) {
 
 #if defined(PHP_WIN32) && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION == 1)
 		char *e;
@@ -232,9 +232,14 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, int fil
 		efree(file_dirname_fullpath);
 		efree(file_basename);
 		free(new_state.cwd);
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot build full extract path");
 		return 0;
 	} else if (len > MAXPATHLEN) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN);
+		efree(file_dirname_fullpath);
+		efree(file_basename);
+		free(new_state.cwd);
+		return 0;
 	}
 
 	/* check again the full path, not sure if it
@@ -249,27 +254,42 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, int fil
 		return 0;
 	}
 
+#if PHP_API_VERSION < 20100412
+	stream = php_stream_open_wrapper(fullpath, "w+b", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL);
+#else
+	stream = php_stream_open_wrapper(fullpath, "w+b", REPORT_ERRORS, NULL);
+#endif
+
+	if (stream == NULL) {
+		n = -1;
+		goto done;
+	}
+
 	zf = zip_fopen(za, file, 0);
 	if (zf == NULL) {
+		n = -1;
+		php_stream_close(stream);
+		goto done;
+	}
+
+	n = 0;
+	if (stream == NULL) {
+		int ret = zip_fclose(zf);
 		efree(fullpath);
-		efree(file_dirname_fullpath);
 		efree(file_basename);
+		efree(file_dirname_fullpath);
 		free(new_state.cwd);
 		return 0;
 	}
 
-#if PHP_API_VERSION < 20100412
-	stream = php_stream_open_wrapper(fullpath, "w+b", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL);
-#else
-	stream = php_stream_open_wrapper(fullpath, "w+b", REPORT_ERRORS, NULL);
-#endif
-	n = 0;
-	if (stream) {
-		while ((n=zip_fread(zf, b, sizeof(b))) > 0) php_stream_write(stream, b, n);
-		php_stream_close(stream);
+	while ((n=zip_fread(zf, b, sizeof(b))) > 0) {
+		php_stream_write(stream, b, n);
 	}
+
+	php_stream_close(stream);
 	n = zip_fclose(zf);
 
+done:
 	efree(fullpath);
 	efree(file_basename);
 	efree(file_dirname_fullpath);
@@ -473,10 +493,12 @@ static char * php_zipobj_get_zip_comment(struct zip *za, int *len TSRMLS_DC) /*
 #define GLOB_FLAGMASK (~GLOB_ONLYDIR)
 #else
 #define GLOB_FLAGMASK (~0)
+#endif
 #endif /* }}} */
 
 int php_zip_glob(char *pattern, int pattern_len, long flags, zval *return_value TSRMLS_DC) /* {{{ */
 {
+#ifdef HAVE_GLOB
 	char cwd[MAXPATHLEN];
 	int cwd_skip = 0;
 #ifdef ZTS
@@ -563,6 +585,10 @@ int php_zip_glob(char *pattern, int pattern_len, long flags, zval *return_value
 
 	globfree(&globbuf);
 	return globbuf.gl_pathc;
+#else
+	php_error_docref(NULL TSRMLS_CC, E_ERROR, "Glob support is not available");
+	return 0;
+#endif  /* HAVE_GLOB */
 }
 /* }}} */
 
@@ -664,7 +690,6 @@ int php_zip_pcre(char *regexp, int regexp_len, char *path, int path_len, zval *r
 	return files_cnt;
 }
 /* }}} */
-#endif 
 
 #endif
 
@@ -1688,7 +1713,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*
 }
 /* }}} */
 
-/* {{{ proto bool addGlob(string pattern[,int flags [, array options]])
+/* {{{ proto bool ZipArchive::addGlob(string pattern[,int flags [, array options]])
 Add files matching the glob pattern. See php's glob for the pattern syntax. */
 static ZIPARCHIVE_METHOD(addGlob)
 {
@@ -1696,7 +1721,7 @@ static ZIPARCHIVE_METHOD(addGlob)
 }
 /* }}} */
 
-/* {{{ proto bool addPattern(string pattern[, string path [, array options]])
+/* {{{ proto bool ZipArchive::addPattern(string pattern[, string path [, array options]])
 Add files matching the pcre pattern. See php's pcre for the pattern syntax. */
 static ZIPARCHIVE_METHOD(addPattern)
 {
@@ -1925,7 +1950,7 @@ static ZIPARCHIVE_METHOD(getNameIndex)
 }
 /* }}} */
 
-/* {{{ proto bool ZipArchive::setArchiveComment(string name, string comment)
+/* {{{ proto bool ZipArchive::setArchiveComment(string comment)
 Set or remove (NULL/'') the comment of the archive */
 static ZIPARCHIVE_METHOD(setArchiveComment)
 {
@@ -1951,7 +1976,7 @@ static ZIPARCHIVE_METHOD(setArchiveComment)
 }
 /* }}} */
 
-/* {{{ proto string ZipArchive::getArchiveComment()
+/* {{{ proto string ZipArchive::getArchiveComment([int flags])
 Returns the comment of an entry using its index */
 static ZIPARCHIVE_METHOD(getArchiveComment)
 {
@@ -2039,7 +2064,7 @@ static ZIPARCHIVE_METHOD(setCommentIndex)
 }
 /* }}} */
 
-/* {{{ proto string ZipArchive::getCommentName(string name)
+/* {{{ proto string ZipArchive::getCommentName(string name[, int flags])
 Returns the comment of an entry using its name */
 static ZIPARCHIVE_METHOD(getCommentName)
 {
@@ -2076,7 +2101,7 @@ static ZIPARCHIVE_METHOD(getCommentName)
 }
 /* }}} */
 
-/* {{{ proto string ZipArchive::getCommentIndex(int index)
+/* {{{ proto string ZipArchive::getCommentIndex(int index[, int flags])
 Returns the comment of an entry using its index */
 static ZIPARCHIVE_METHOD(getCommentIndex)
 {
@@ -2378,7 +2403,7 @@ static ZIPARCHIVE_METHOD(extractTo)
 		RETURN_FALSE;
 	}
 
-	if (php_stream_stat_path(pathto, &ssb) < 0) {
+	if (php_stream_stat_path_ex(pathto, PHP_STREAM_URL_STAT_QUIET, &ssb, NULL) < 0) {
 		ret = php_stream_mkdir(pathto, 0777,  PHP_STREAM_MKDIR_RECURSIVE, NULL);
 		if (!ret) {
 			RETURN_FALSE;
@@ -2418,21 +2443,21 @@ static ZIPARCHIVE_METHOD(extractTo)
 				break;
 		}
 	} else {
-        /* Extract all files */
-        int filecount = zip_get_num_files(intern);
-
-        if (filecount == -1) {
-            php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal archive");
-            RETURN_FALSE;
-        }
-
-        for (i = 0; i < filecount; i++) {
-			char *file = (char*)zip_get_name(intern, i, ZIP_FL_UNCHANGED);
-            if (!php_zip_extract_file(intern, pathto, file, strlen(file) TSRMLS_CC)) {
-                RETURN_FALSE;
-            }
-        }
-    }
+				/* Extract all files */
+				int filecount = zip_get_num_files(intern);
+
+				if (filecount == -1) {
+						php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal archive");
+						RETURN_FALSE;
+				}
+
+				for (i = 0; i < filecount; i++) {
+						char *file = (char*)zip_get_name(intern, i, ZIP_FL_UNCHANGED);
+						if (!php_zip_extract_file(intern, pathto, file, strlen(file) TSRMLS_CC)) {
+							RETURN_FALSE;
+						}
+				}
+		}
 	RETURN_TRUE;
 }
 /* }}} */
@@ -2559,7 +2584,7 @@ static ZIPARCHIVE_METHOD(getStream)
 
 /* {{{ arginfo */
 ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_open, 0, 0, 1)
-	ZEND_ARG_INFO(0, source)
+	ZEND_ARG_INFO(0, filename)
 	ZEND_ARG_INFO(0, flags)
 ZEND_END_ARG_INFO()
 
@@ -2604,8 +2629,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_statindex, 0, 0, 1)
 	ZEND_ARG_INFO(0, flags)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setarchivecomment, 0, 0, 2)
-	ZEND_ARG_INFO(0, name)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setarchivecomment, 0, 0, 1)
 	ZEND_ARG_INFO(0, comment)
 ZEND_END_ARG_INFO()
 
@@ -2616,10 +2640,12 @@ ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getcommentname, 0, 0, 1)
 	ZEND_ARG_INFO(0, name)
+	ZEND_ARG_INFO(0, flags)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getcommentindex, 0, 0, 1)
 	ZEND_ARG_INFO(0, index)
+	ZEND_ARG_INFO(0, flags)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_renameindex, 0, 0, 2)
@@ -2657,6 +2683,15 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getfromindex, 0, 0, 1)
 	ZEND_ARG_INFO(0, flags)
 ZEND_END_ARG_INFO()
 
+ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getarchivecomment, 0, 0, 0)
+	ZEND_ARG_INFO(0, flags)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setcommentname, 0, 0, 2)
+	ZEND_ARG_INFO(0, name)
+	ZEND_ARG_INFO(0, comment)
+ZEND_END_ARG_INFO()
+
 ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getstream, 0, 0, 1)
 	ZEND_ARG_INFO(0, entryname)
 ZEND_END_ARG_INFO()
@@ -2675,21 +2710,21 @@ static const zend_function_entry zip_class_functions[] = {
 	ZIPARCHIVE_ME(renameIndex,			arginfo_ziparchive_renameindex, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(renameName,			arginfo_ziparchive_renamename, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(setArchiveComment,	arginfo_ziparchive_setarchivecomment, ZEND_ACC_PUBLIC)
-	ZIPARCHIVE_ME(getArchiveComment,	arginfo_ziparchive__void, ZEND_ACC_PUBLIC)
+	ZIPARCHIVE_ME(getArchiveComment,	arginfo_ziparchive_getarchivecomment, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(setCommentIndex,		arginfo_ziparchive_setcommentindex, ZEND_ACC_PUBLIC)
-	ZIPARCHIVE_ME(setCommentName,		arginfo_ziparchive_setarchivecomment, ZEND_ACC_PUBLIC)
+	ZIPARCHIVE_ME(setCommentName,		arginfo_ziparchive_setcommentname, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(getCommentIndex,		arginfo_ziparchive_getcommentindex, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(getCommentName,		arginfo_ziparchive_getcommentname, ZEND_ACC_PUBLIC)
-	ZIPARCHIVE_ME(deleteIndex,			arginfo_ziparchive_getcommentindex, ZEND_ACC_PUBLIC)
-	ZIPARCHIVE_ME(deleteName,			arginfo_ziparchive_getcommentname, ZEND_ACC_PUBLIC)
+	ZIPARCHIVE_ME(deleteIndex,			arginfo_ziparchive_unchangeindex, ZEND_ACC_PUBLIC)
+	ZIPARCHIVE_ME(deleteName,			arginfo_ziparchive_unchangename, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(statName,				arginfo_ziparchive_statname, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(statIndex,			arginfo_ziparchive_statindex, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(locateName,			arginfo_ziparchive_statname, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(getNameIndex,			arginfo_ziparchive_statindex, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(unchangeArchive,		arginfo_ziparchive__void, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(unchangeAll,			arginfo_ziparchive__void, ZEND_ACC_PUBLIC)
-	ZIPARCHIVE_ME(unchangeIndex,		arginfo_ziparchive_getcommentindex, ZEND_ACC_PUBLIC)
-	ZIPARCHIVE_ME(unchangeName,			arginfo_ziparchive_getcommentname, ZEND_ACC_PUBLIC)
+	ZIPARCHIVE_ME(unchangeIndex,		arginfo_ziparchive_unchangeindex, ZEND_ACC_PUBLIC)
+	ZIPARCHIVE_ME(unchangeName,			arginfo_ziparchive_unchangename, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(extractTo,			arginfo_ziparchive_extractto, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(getFromName,			arginfo_ziparchive_getfromname, ZEND_ACC_PUBLIC)
 	ZIPARCHIVE_ME(getFromIndex,			arginfo_ziparchive_getfromindex, ZEND_ACC_PUBLIC)
@@ -2744,6 +2779,12 @@ static PHP_MINIT_FUNCTION(zip)
 	REGISTER_ZIP_CLASS_CONST_LONG("CM_DEFLATE", ZIP_CM_DEFLATE);
 	REGISTER_ZIP_CLASS_CONST_LONG("CM_DEFLATE64", ZIP_CM_DEFLATE64);
 	REGISTER_ZIP_CLASS_CONST_LONG("CM_PKWARE_IMPLODE", ZIP_CM_PKWARE_IMPLODE);
+	REGISTER_ZIP_CLASS_CONST_LONG("CM_BZIP2", ZIP_CM_BZIP2);
+	REGISTER_ZIP_CLASS_CONST_LONG("CM_LZMA", ZIP_CM_LZMA);
+	REGISTER_ZIP_CLASS_CONST_LONG("CM_TERSE", ZIP_CM_TERSE);
+	REGISTER_ZIP_CLASS_CONST_LONG("CM_LZ77", ZIP_CM_LZ77);
+	REGISTER_ZIP_CLASS_CONST_LONG("CM_WAVPACK", ZIP_CM_WAVPACK);
+	REGISTER_ZIP_CLASS_CONST_LONG("CM_PPMD", ZIP_CM_PPMD);
 
 	/* Error code */
 	REGISTER_ZIP_CLASS_CONST_LONG("ER_OK",			ZIP_ER_OK);			/* N No error */
@@ -2800,7 +2841,7 @@ static PHP_MINFO_FUNCTION(zip)
 	php_info_print_table_start();
 
 	php_info_print_table_row(2, "Zip", "enabled");
-	php_info_print_table_row(2, "Extension Version","$Id: php_zip.c 305848 2010-11-30 11:04:06Z pajoye $");
+	php_info_print_table_row(2, "Extension Version","$Id: php_zip.c 308107 2011-02-07 16:20:16Z pajoye $");
 	php_info_print_table_row(2, "Zip version", PHP_ZIP_VERSION_STRING);
 	php_info_print_table_row(2, "Libzip version", "0.9.0");
 
diff --git a/ext/zip/php_zip.h b/ext/zip/php_zip.h
index 2eaf568..beaae7f 100644
--- a/ext/zip/php_zip.h
+++ b/ext/zip/php_zip.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_zip.h 298626 2010-04-26 23:55:03Z kalle $ */
+/* $Id: php_zip.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_ZIP_H
 #define PHP_ZIP_H
diff --git a/ext/zip/tests/bug53579.phpt b/ext/zip/tests/bug53579.phpt
new file mode 100644
index 0000000..1d53330
--- /dev/null
+++ b/ext/zip/tests/bug53579.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Bug #53579 (stream_get_contents() segfaults on ziparchive streams)
+--SKIPIF--
+<?php
+/* $Id: oo_stream.phpt 260091 2008-05-21 09:27:41Z pajoye $ */
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+$dirname = dirname(__FILE__) . '/';
+$file = $dirname . 'test_with_comment.zip';
+include $dirname . 'utils.inc';
+$zip = new ZipArchive;
+if (!$zip->open($file)) {
+	exit('failed');
+}
+$fp = $zip->getStream('foo');
+
+var_dump($fp);
+if(!$fp) exit("\n");
+$contents = stream_get_contents($fp);
+
+fclose($fp);
+$zip->close();
+var_dump($contents);
+
+
+$fp = fopen('zip://' . dirname(__FILE__) . '/test_with_comment.zip#foo', 'rb');
+if (!$fp) {
+  exit("cannot open\n");
+}
+$contents = stream_get_contents($fp);
+var_dump($contents);
+fclose($fp);
+
+?>
+--EXPECTF--
+resource(%d) of type (stream)
+string(5) "foo
+
+"
+string(5) "foo
+
+"
diff --git a/ext/zip/tests/bug53603.phpt b/ext/zip/tests/bug53603.phpt
new file mode 100644
index 0000000..f8ff1b4
--- /dev/null
+++ b/ext/zip/tests/bug53603.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Bug #53603 (ZipArchive should quiet stat errors)
+--SKIPIF--
+<?php
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+
+class TestStream {
+	function url_stat($path, $flags) {
+		if (!($flags & STREAM_URL_STAT_QUIET))
+			trigger_error("not quiet");
+		return array();
+	}
+}
+
+stream_wrapper_register("teststream", "TestStream");
+
+$dirname = dirname(__FILE__) . '/';
+$file = $dirname . 'test_with_comment.zip';
+$zip = new ZipArchive;
+if ($zip->open($file) !== TRUE) {
+	echo "open failed.\n";
+	exit('failed');
+}
+
+$a = $zip->extractTo('teststream://test');
+var_dump($a);
+
+--EXPECTF--
+
+Warning: ZipArchive::extractTo(teststream://test/foo): failed to open stream: "TestStream::stream_open" call failed in %s on line %d
+bool(false)
+
diff --git a/ext/zip/tests/bug53854.phpt b/ext/zip/tests/bug53854.phpt
new file mode 100644
index 0000000..cd8ae7e
--- /dev/null
+++ b/ext/zip/tests/bug53854.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Bug #53854 (Missing constants for compression type)
+--SKIPIF--
+<?php
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+
+var_dump(ZipArchive::CM_DEFAULT);
+var_dump(ZipArchive::CM_STORE);
+var_dump(ZipArchive::CM_SHRINK);
+var_dump(ZipArchive::CM_REDUCE_1);
+var_dump(ZipArchive::CM_REDUCE_2);
+var_dump(ZipArchive::CM_REDUCE_3);
+var_dump(ZipArchive::CM_REDUCE_4);
+var_dump(ZipArchive::CM_IMPLODE);
+var_dump(ZipArchive::CM_DEFLATE);
+var_dump(ZipArchive::CM_DEFLATE64);
+var_dump(ZipArchive::CM_PKWARE_IMPLODE);
+var_dump(ZipArchive::CM_BZIP2);
+var_dump(ZipArchive::CM_LZMA);
+var_dump(ZipArchive::CM_TERSE);
+var_dump(ZipArchive::CM_LZ77);
+var_dump(ZipArchive::CM_WAVPACK);
+var_dump(ZipArchive::CM_PPMD);
+--EXPECT--
+int(-1)
+int(0)
+int(1)
+int(2)
+int(3)
+int(4)
+int(5)
+int(6)
+int(8)
+int(9)
+int(10)
+int(12)
+int(14)
+int(18)
+int(19)
+int(97)
+int(98)
diff --git a/ext/zip/tests/bug53885.phpt b/ext/zip/tests/bug53885.phpt
new file mode 100644
index 0000000..d59bf8f
--- /dev/null
+++ b/ext/zip/tests/bug53885.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive)
+--SKIPIF--
+<?php
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+$fname = dirname(__FILE__)."/test53885.zip";
+if(file_exists($fname)) unlink($fname);
+touch($fname);
+$nx=new ZipArchive();
+$nx->open($fname);
+$nx->locateName("a",ZIPARCHIVE::FL_UNCHANGED);
+$nx->statName("a",ZIPARCHIVE::FL_UNCHANGED);
+?>
+==DONE==
+--EXPECTF--
+==DONE==
diff --git a/ext/zip/tests/stream_meta_data.phpt b/ext/zip/tests/stream_meta_data.phpt
new file mode 100644
index 0000000..bd08098
--- /dev/null
+++ b/ext/zip/tests/stream_meta_data.phpt
@@ -0,0 +1,74 @@
+--TEST--
+stream_get_meta_data() on zip stream
+--SKIPIF--
+<?php
+/* $Id: oo_stream.phpt 260091 2008-05-21 09:27:41Z pajoye $ */
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+$dirname = dirname(__FILE__) . '/';
+$file = $dirname . 'test_with_comment.zip';
+include $dirname . 'utils.inc';
+$zip = new ZipArchive;
+if (!$zip->open($file)) {
+	exit('failed');
+}
+$fp = $zip->getStream('foo');
+
+if(!$fp) exit("\n");
+
+var_dump(stream_get_meta_data($fp));
+
+fclose($fp);
+$zip->close();
+
+
+$fp = fopen('zip://' . dirname(__FILE__) . '/test_with_comment.zip#foo', 'rb');
+if (!$fp) {
+  exit("cannot open\n");
+}
+
+var_dump(stream_get_meta_data($fp));
+fclose($fp);
+
+?>
+--EXPECTF--
+array(8) {
+  ["stream_type"]=>
+  string(3) "zip"
+  ["mode"]=>
+  string(2) "rb"
+  ["unread_bytes"]=>
+  int(0)
+  ["seekable"]=>
+  bool(false)
+  ["uri"]=>
+  string(3) "foo"
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
+}
+array(9) {
+  ["wrapper_type"]=>
+  string(11) "zip wrapper"
+  ["stream_type"]=>
+  string(3) "zip"
+  ["mode"]=>
+  string(2) "rb"
+  ["unread_bytes"]=>
+  int(0)
+  ["seekable"]=>
+  bool(false)
+  ["uri"]=>
+  string(%d) "zip://%stest_with_comment.zip#foo"
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
+}
diff --git a/ext/zip/zip_stream.c b/ext/zip/zip_stream.c
index ef05b95..c11e01c 100644
--- a/ext/zip/zip_stream.c
+++ b/ext/zip/zip_stream.c
@@ -1,4 +1,4 @@
-/* $Id: zip_stream.c 305467 2010-11-17 17:55:18Z pierrick $ */
+/* $Id: zip_stream.c 307917 2011-02-01 14:44:29Z cataphract $ */
 #ifdef HAVE_CONFIG_H
 #   include "config.h"
 #endif
@@ -30,11 +30,11 @@ struct php_zip_stream_data_t {
 /* {{{ php_zip_ops_read */
 static size_t php_zip_ops_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
 {
-	size_t n = 0;
+	ssize_t n = 0;
 	STREAM_DATA_FROM_STREAM();
 
 	if (self->za && self->zf) {
-		n = (size_t)zip_fread(self->zf, buf, (int)count);
+		n = zip_fread(self->zf, buf, count);
 		if (n < 0) {
 			int ze, se;
 			zip_file_error_get(self->zf, &ze, &se);
@@ -42,13 +42,15 @@ static size_t php_zip_ops_read(php_stream *stream, char *buf, size_t count TSRML
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Zip stream error: %s", zip_file_strerror(self->zf));
 			return 0;
 		}
-		if (n == 0 || n < count) {
+		/* cast count to signed value to avoid possibly negative n
+		 * being cast to unsigned value */
+		if (n == 0 || n < (ssize_t)count) {
 			stream->eof = 1;
 		} else {
 			self->cursor += n;
 		}
 	}
-	return (n < 1 ? 0 : n);
+	return (n < 1 ? 0 : (size_t)n);
 }
 /* }}} */
 
@@ -216,6 +218,7 @@ php_stream *php_stream_zip_open(char *filename, char *path, char *mode STREAMS_D
 			self->stream = NULL;
 			self->cursor = 0;
 			stream = php_stream_alloc(&php_stream_zipio_ops, self, NULL, mode);
+			stream->orig_path = estrdup(path);
 		} else {
 			zip_close(stream_za);
 		}
diff --git a/ext/zlib/php_zlib.h b/ext/zlib/php_zlib.h
index 127220b..6f2a1ed 100644
--- a/ext/zlib/php_zlib.h
+++ b/ext/zlib/php_zlib.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_zlib.h 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: php_zlib.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_ZLIB_H
 #define PHP_ZLIB_H
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
index c127f18..137477a 100644
--- a/ext/zlib/zlib.c
+++ b/ext/zlib/zlib.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: zlib.c 300764 2010-06-26 16:03:39Z felipe $ */
+/* $Id: zlib.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/ext/zlib/zlib_filter.c b/ext/zlib/zlib_filter.c
index 0192909..b39aa6b 100644
--- a/ext/zlib/zlib_filter.c
+++ b/ext/zlib/zlib_filter.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zlib_filter.c 303878 2010-09-29 18:58:58Z cataphract $ */
+/* $Id: zlib_filter.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_zlib.h"
diff --git a/ext/zlib/zlib_fopen_wrapper.c b/ext/zlib/zlib_fopen_wrapper.c
index 5253964..01315d3 100644
--- a/ext/zlib/zlib_fopen_wrapper.c
+++ b/ext/zlib/zlib_fopen_wrapper.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: zlib_fopen_wrapper.c 303772 2010-09-26 20:46:54Z pajoye $ */
+/* $Id: zlib_fopen_wrapper.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define _GNU_SOURCE
 
diff --git a/main/SAPI.c b/main/SAPI.c
index 1681a41..1cbacff 100644
--- a/main/SAPI.c
+++ b/main/SAPI.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: SAPI.c 305481 2010-11-18 04:09:02Z cataphract $ */
+/* $Id: SAPI.c 309319 2011-03-16 23:54:14Z pajoye $ */
 
 #include <ctype.h>
 #include <sys/stat.h>
@@ -78,6 +78,9 @@ SAPI_API void sapi_startup(sapi_module_struct *sf)
 
 #ifdef ZTS
 	ts_allocate_id(&sapi_globals_id, sizeof(sapi_globals_struct), (ts_allocate_ctor) sapi_globals_ctor, (ts_allocate_dtor) sapi_globals_dtor);
+# ifdef PHP_WIN32
+	_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
+# endif
 #else
 	sapi_globals_ctor(&sapi_globals);
 #endif
diff --git a/main/SAPI.h b/main/SAPI.h
index 020c6f1..d1f4433 100644
--- a/main/SAPI.h
+++ b/main/SAPI.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: SAPI.h 296362 2010-03-18 22:37:25Z andrei $ */
+/* $Id: SAPI.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SAPI_H
 #define SAPI_H
diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c
index d171ea9..6bbb648 100644
--- a/main/fopen_wrappers.c
+++ b/main/fopen_wrappers.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: fopen_wrappers.c 305698 2010-11-23 22:14:54Z pajoye $ */
+/* $Id: fopen_wrappers.c 307563 2011-01-18 22:20:09Z pajoye $ */
 
 /* {{{ includes
  */
@@ -229,7 +229,11 @@ PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path
 	if (expand_filepath(local_open_basedir, resolved_basedir TSRMLS_CC) != NULL) {
 		/* Handler for basedirs that end with a / */
 		resolved_basedir_len = strlen(resolved_basedir);
+#if defined(PHP_WIN32) || defined(NETWARE)
+		if (basedir[strlen(basedir) - 1] == PHP_DIR_SEPARATOR || basedir[strlen(basedir) - 1] == '/') {
+#else
 		if (basedir[strlen(basedir) - 1] == PHP_DIR_SEPARATOR) {
+#endif
 			if (resolved_basedir[resolved_basedir_len - 1] != PHP_DIR_SEPARATOR) {
 				resolved_basedir[resolved_basedir_len] = PHP_DIR_SEPARATOR;
 				resolved_basedir[++resolved_basedir_len] = '\0';
diff --git a/main/fopen_wrappers.h b/main/fopen_wrappers.h
index a9b1911..967ce35 100644
--- a/main/fopen_wrappers.h
+++ b/main/fopen_wrappers.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: fopen_wrappers.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: fopen_wrappers.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef FOPEN_WRAPPERS_H
 #define FOPEN_WRAPPERS_H
diff --git a/main/getopt.c b/main/getopt.c
index 87e694a..2f08f9e 100644
--- a/main/getopt.c
+++ b/main/getopt.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: getopt.c 298026 2010-04-15 11:50:43Z tony2001 $ */
+/* $Id: getopt.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 #include <string.h>
diff --git a/main/internal_functions_nw.c b/main/internal_functions_nw.c
index a508df7..ce83445 100644
--- a/main/internal_functions_nw.c
+++ b/main/internal_functions_nw.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: internal_functions_nw.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: internal_functions_nw.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* {{{ includes
  */
diff --git a/main/internal_functions_win32.c b/main/internal_functions_win32.c
index ff531ac..5c14919 100644
--- a/main/internal_functions_win32.c
+++ b/main/internal_functions_win32.c
@@ -2,7 +2,7 @@
 	+----------------------------------------------------------------------+
 	| PHP Version 5                                                        |
 	+----------------------------------------------------------------------+
-	| Copyright (c) 1997-2010 The PHP Group                                |
+	| Copyright (c) 1997-2011 The PHP Group                                |
 	+----------------------------------------------------------------------+
 	| This source file is subject to version 3.01 of the PHP license,      |
 	| that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
 	+----------------------------------------------------------------------+
 */
 
-/* $Id: internal_functions_win32.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: internal_functions_win32.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* {{{ includes
  */
diff --git a/main/logos.h b/main/logos.h
index 04202da..9fa9d27 100644
--- a/main/logos.h
+++ b/main/logos.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: logos.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: logos.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define CONTEXT_TYPE_IMAGE_GIF "Content-Type: image/gif"
 
diff --git a/main/main.c b/main/main.c
index 4b52195..cc76f80 100644
--- a/main/main.c
+++ b/main/main.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: main.c 305266 2010-11-11 01:43:53Z kalle $ */
+/* $Id: main.c 308150 2011-02-08 21:40:51Z cataphract $ */
 
 /* {{{ includes
  */
@@ -179,7 +179,9 @@ static void php_disable_functions(TSRMLS_D)
 	}
 
 	e = PG(disable_functions) = strdup(INI_STR("disable_functions"));
-
+	if (e == NULL) {
+		return;
+	}
 	while (*e) {
 		switch (*e) {
 			case ' ':
@@ -475,7 +477,7 @@ PHP_INI_BEGIN()
 	STD_PHP_INI_BOOLEAN("y2k_compliance",		"1",		PHP_INI_ALL,		OnUpdateBool,			y2k_compliance,			php_core_globals,	core_globals)
 
 	STD_PHP_INI_ENTRY("unserialize_callback_func",	NULL,	PHP_INI_ALL,		OnUpdateString,			unserialize_callback_func,	php_core_globals,	core_globals)
-	STD_PHP_INI_ENTRY("serialize_precision",	"100",	PHP_INI_ALL,		OnUpdateLongGEZero,			serialize_precision,	php_core_globals,	core_globals)
+	STD_PHP_INI_ENTRY("serialize_precision",	"17",	PHP_INI_ALL,		OnUpdateLongGEZero,			serialize_precision,	php_core_globals,	core_globals)
 	STD_PHP_INI_ENTRY("arg_separator.output",	"&",		PHP_INI_ALL,		OnUpdateStringUnempty,	arg_separator.output,	php_core_globals,	core_globals)
 	STD_PHP_INI_ENTRY("arg_separator.input",	"&",		PHP_INI_SYSTEM|PHP_INI_PERDIR,	OnUpdateStringUnempty,	arg_separator.input,	php_core_globals,	core_globals)
 
@@ -1672,8 +1674,9 @@ PHPAPI void php_com_initialize(TSRMLS_D)
 {
 #ifdef PHP_WIN32
 	if (!PG(com_initialized)) {
-		CoInitialize(NULL);
-		PG(com_initialized) = 1;
+		if (CoInitialize(NULL) == S_OK) {
+			PG(com_initialized) = 1;
+		}
 	}
 #endif
 }
diff --git a/main/network.c b/main/network.c
index 4e2ce7c..cf46474 100644
--- a/main/network.c
+++ b/main/network.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: network.c 303958 2010-10-02 18:32:20Z cataphract $ */
+/* $Id: network.c 307922 2011-02-01 18:10:35Z cataphract $ */
 
 /*#define DEBUG_MAIN_NETWORK 1*/
 
@@ -1133,7 +1133,8 @@ PHPAPI int php_poll2(php_pollfd *ufds, unsigned int nfds, int timeout)
 {
 	fd_set rset, wset, eset;
 	php_socket_t max_fd = SOCK_ERR;
-	unsigned int i, n;
+	unsigned int i;
+	int n;
 	struct timeval tv;
 
 	/* check the highest numbered descriptor */
diff --git a/main/output.c b/main/output.c
index 681e4ce..deea88f 100644
--- a/main/output.c
+++ b/main/output.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: output.c 305950 2010-12-03 16:04:24Z jani $ */
+/* $Id: output.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "ext/standard/head.h"
diff --git a/main/php.h b/main/php.h
index d0d0d42..e19c16b 100644
--- a/main/php.h
+++ b/main/php.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php.h 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: php.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_H
 #define PHP_H
diff --git a/main/php3_compat.h b/main/php3_compat.h
index 7373929..3520999 100644
--- a/main/php3_compat.h
+++ b/main/php3_compat.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php3_compat.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php3_compat.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP3_COMPAT_H
 #define PHP3_COMPAT_H
diff --git a/main/php_compat.h b/main/php_compat.h
index 5381aa3..5fbf278 100644
--- a/main/php_compat.h
+++ b/main/php_compat.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_compat.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_compat.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_COMPAT_H
 #define PHP_COMPAT_H
diff --git a/main/php_config.h.in b/main/php_config.h.in
index ff2e503..68d3290 100644
--- a/main/php_config.h.in
+++ b/main/php_config.h.in
@@ -4,7 +4,7 @@
    +----------------------------------------------------------------------+
    | Zend Engine                                                          |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1998-2010 Zend Technologies Ltd. (http://www.zend.com) |
+   | Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: acconfig.h 293155 2010-01-05 20:46:53Z sebastian $ */
+/* $Id: acconfig.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #if defined(__GNUC__) && __GNUC__ >= 4
 # define ZEND_API __attribute__ ((visibility("default")))
diff --git a/main/php_content_types.c b/main/php_content_types.c
index e38a4c5..7633c6d 100644
--- a/main/php_content_types.c
+++ b/main/php_content_types.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_content_types.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_content_types.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "SAPI.h"
diff --git a/main/php_content_types.h b/main/php_content_types.h
index 7547a29..b69887c 100644
--- a/main/php_content_types.h
+++ b/main/php_content_types.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_content_types.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_content_types.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_CONTENT_TYPES_H
 #define PHP_CONTENT_TYPES_H
diff --git a/main/php_getopt.h b/main/php_getopt.h
index fab8bc7..f863946 100644
--- a/main/php_getopt.h
+++ b/main/php_getopt.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_getopt.h 293721 2010-01-19 10:44:36Z johannes $ */
+/* $Id: php_getopt.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_GETOPT_H
 #define PHP_GETOPT_H
diff --git a/main/php_globals.h b/main/php_globals.h
index dda28f2..5dbeeaa 100644
--- a/main/php_globals.h
+++ b/main/php_globals.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_globals.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_globals.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_GLOBALS_H
 #define PHP_GLOBALS_H
diff --git a/main/php_ini.c b/main/php_ini.c
index ff7adaf..c975b9d 100644
--- a/main/php_ini.c
+++ b/main/php_ini.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_ini.c 303199 2010-09-09 05:11:05Z aharvey $ */
+/* $Id: php_ini.c 307587 2011-01-19 14:21:46Z pajoye $ */
 
 #include "php.h"
 #include "ext/standard/info.h"
@@ -650,14 +650,14 @@ int php_init_config(TSRMLS_D)
 		struct stat sb;
 		char ini_file[MAXPATHLEN];
 		char *p;
-		zend_file_handle fh;
+		zend_file_handle fh2;
 		zend_llist scanned_ini_list;
 		zend_llist_element *element;
 		int l, total_l = 0;
 
 		if ((ndir = php_scandir(php_ini_scanned_path, &namelist, 0, php_alphasort)) > 0) {
 			zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
-			memset(&fh, 0, sizeof(fh));
+			memset(&fh2, 0, sizeof(fh2));
 
 			for (i = 0; i < ndir; i++) {
 
@@ -676,11 +676,11 @@ int php_init_config(TSRMLS_D)
 				}
 				if (VCWD_STAT(ini_file, &sb) == 0) {
 					if (S_ISREG(sb.st_mode)) {
-						if ((fh.handle.fp = VCWD_FOPEN(ini_file, "r"))) {
-							fh.filename = ini_file;
-							fh.type = ZEND_HANDLE_FP;
+						if ((fh2.handle.fp = VCWD_FOPEN(ini_file, "r"))) {
+							fh2.filename = ini_file;
+							fh2.type = ZEND_HANDLE_FP;
 
-							if (zend_parse_ini_file(&fh, 1, ZEND_INI_SCANNER_NORMAL, (zend_ini_parser_cb_t) php_ini_parser_cb, &configuration_hash TSRMLS_CC) == SUCCESS) {
+							if (zend_parse_ini_file(&fh2, 1, ZEND_INI_SCANNER_NORMAL, (zend_ini_parser_cb_t) php_ini_parser_cb, &configuration_hash TSRMLS_CC) == SUCCESS) {
 								/* Here, add it to the list of ini files read */
 								l = strlen(ini_file);
 								total_l += l + 2;
@@ -819,13 +819,20 @@ PHPAPI int php_ini_has_per_dir_config(void)
  */
 PHPAPI void php_ini_activate_per_dir_config(char *path, uint path_len TSRMLS_DC)
 {
-	zval *tmp;
+	zval *tmp2;
 	char *ptr;
 
 #if PHP_WIN32
 	char path_bak[MAXPATHLEN];
+#endif
+
+	if (path_len > MAXPATHLEN) {
+		return;
+	}
+
+#if PHP_WIN32
 	memcpy(path_bak, path, path_len);
-	path_bak[path_len] = 0;
+	path_bak[path_len - 1] = 0;
 	TRANSLATE_SLASHES_LOWER(path_bak);
 	path = path_bak;
 #endif
@@ -836,8 +843,8 @@ PHPAPI void php_ini_activate_per_dir_config(char *path, uint path_len TSRMLS_DC)
 		while ((ptr = strchr(ptr, '/')) != NULL) {
 			*ptr = 0;
 			/* Search for source array matching the path from configuration_hash */
-			if (zend_hash_find(&configuration_hash, path, strlen(path) + 1, (void **) &tmp) == SUCCESS) {
-				php_ini_activate_config(Z_ARRVAL_P(tmp), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE TSRMLS_CC);
+			if (zend_hash_find(&configuration_hash, path, strlen(path) + 1, (void **) &tmp2) == SUCCESS) {
+				php_ini_activate_config(Z_ARRVAL_P(tmp2), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE TSRMLS_CC);
 			}
 			*ptr = '/';
 			ptr++;
diff --git a/main/php_ini.h b/main/php_ini.h
index 6440688..09d8ee8 100644
--- a/main/php_ini.h
+++ b/main/php_ini.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_ini.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_ini.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_INI_H
 #define PHP_INI_H
diff --git a/main/php_logos.c b/main/php_logos.c
index 2a76cd7..2b57199 100644
--- a/main/php_logos.c
+++ b/main/php_logos.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_logos.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: php_logos.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "logos.h"
diff --git a/main/php_logos.h b/main/php_logos.h
index 42c5012..9d7c962 100644
--- a/main/php_logos.h
+++ b/main/php_logos.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_logos.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_logos.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 #ifndef _PHP_LOGOS_H
diff --git a/main/php_main.h b/main/php_main.h
index 64a5150..89a197f 100644
--- a/main/php_main.h
+++ b/main/php_main.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_main.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_main.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_MAIN_H
 #define PHP_MAIN_H
diff --git a/main/php_memory_streams.h b/main/php_memory_streams.h
index d53cb64..838c58c 100644
--- a/main/php_memory_streams.h
+++ b/main/php_memory_streams.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_memory_streams.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_memory_streams.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_MEMORY_STREAM_H
 #define PHP_MEMORY_STREAM_H
diff --git a/main/php_network.h b/main/php_network.h
index 0c35af8..e1240eb 100644
--- a/main/php_network.h
+++ b/main/php_network.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_network.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_network.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef _PHP_NETWORK_H
 #define _PHP_NETWORK_H
diff --git a/main/php_open_temporary_file.c b/main/php_open_temporary_file.c
index 15bc1b0..27959b3 100644
--- a/main/php_open_temporary_file.c
+++ b/main/php_open_temporary_file.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_open_temporary_file.c 294724 2010-02-07 20:15:58Z pajoye $ */
+/* $Id: php_open_temporary_file.c 307375 2011-01-11 12:57:19Z iliaa $ */
 
 #include "php.h"
 
@@ -149,7 +149,11 @@ static int php_do_open_temporary_file(const char *path, const char *pfx, char **
 	if (GetTempFileName(new_state.cwd, pfx, 0, opened_path)) {
 		/* Some versions of windows set the temp file to be read-only,
 		 * which means that opening it will fail... */
-		VCWD_CHMOD(opened_path, 0600);
+		if (VCWD_CHMOD(opened_path, 0600)) {
+			efree(opened_path);
+			free(new_state.cwd);
+			return -1;
+		}
 		fd = VCWD_OPEN_MODE(opened_path, open_flags, 0600);
 	}
 
diff --git a/main/php_open_temporary_file.h b/main/php_open_temporary_file.h
index c60e452..e9d1d9e 100644
--- a/main/php_open_temporary_file.h
+++ b/main/php_open_temporary_file.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_open_temporary_file.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_open_temporary_file.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_OPEN_TEMPORARY_FILE_H
 #define PHP_OPEN_TEMPORARY_FILE_H
diff --git a/main/php_output.h b/main/php_output.h
index 9489ee1..56d6c31 100644
--- a/main/php_output.h
+++ b/main/php_output.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_output.h 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: php_output.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_OUTPUT_H
 #define PHP_OUTPUT_H
diff --git a/main/php_reentrancy.h b/main/php_reentrancy.h
index bf2f838..242bc14 100644
--- a/main/php_reentrancy.h
+++ b/main/php_reentrancy.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_reentrancy.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_reentrancy.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_REENTRANCY_H
 #define PHP_REENTRANCY_H
diff --git a/main/php_scandir.c b/main/php_scandir.c
index c48cda8..ab21e26 100644
--- a/main/php_scandir.c
+++ b/main/php_scandir.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_scandir.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_scandir.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_scandir.h"
diff --git a/main/php_scandir.h b/main/php_scandir.h
index f7e6327..b15cef1 100644
--- a/main/php_scandir.h
+++ b/main/php_scandir.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_scandir.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_scandir.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SCANDIR_H
 #define PHP_SCANDIR_H
diff --git a/main/php_sprintf.c b/main/php_sprintf.c
index 5cb2ee0..0aba78c 100644
--- a/main/php_sprintf.c
+++ b/main/php_sprintf.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_sprintf.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_sprintf.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 #include <stdarg.h>
diff --git a/main/php_streams.h b/main/php_streams.h
index c496781..31c0d97 100755
--- a/main/php_streams.h
+++ b/main/php_streams.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_streams.h 305108 2010-11-05 18:53:48Z cataphract $ */
+/* $Id: php_streams.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_STREAMS_H
 #define PHP_STREAMS_H
@@ -292,7 +292,12 @@ PHPAPI size_t _php_stream_write(php_stream *stream, const char *buf, size_t coun
 #define php_stream_write_string(stream, str)	_php_stream_write(stream, str, strlen(str) TSRMLS_CC)
 #define php_stream_write(stream, buf, count)	_php_stream_write(stream, (buf), (count) TSRMLS_CC)
 
-PHPAPI size_t _php_stream_printf(php_stream *stream TSRMLS_DC, const char *fmt, ...);
+#ifdef ZTS
+PHPAPI size_t _php_stream_printf(php_stream *stream TSRMLS_DC, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
+#else
+PHPAPI size_t _php_stream_printf(php_stream *stream TSRMLS_DC, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3);
+#endif
+
 /* php_stream_printf macro & function require TSRMLS_CC */
 #define php_stream_printf _php_stream_printf
 
@@ -548,8 +553,11 @@ PHPAPI char *php_stream_locate_eol(php_stream *stream, char *buf, size_t buf_len
 			php_stream_open_wrapper_ex(Z_STRVAL_PP((zstream)), (mode), (options), (opened), (context)) : NULL
 
 /* pushes an error message onto the stack for a wrapper instance */
-PHPAPI void php_stream_wrapper_log_error(php_stream_wrapper *wrapper, int options TSRMLS_DC, const char *fmt, ...);
-
+#ifdef ZTS
+PHPAPI void php_stream_wrapper_log_error(php_stream_wrapper *wrapper, int options TSRMLS_DC, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 4, 5);
+#else
+PHPAPI void php_stream_wrapper_log_error(php_stream_wrapper *wrapper, int options TSRMLS_DC, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
+#endif
 
 #define PHP_STREAM_UNCHANGED	0 /* orig stream was seekable anyway */
 #define PHP_STREAM_RELEASED		1 /* newstream should be used; origstream is no longer valid */
diff --git a/main/php_syslog.h b/main/php_syslog.h
index 971c0fc..929553f 100644
--- a/main/php_syslog.h
+++ b/main/php_syslog.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_syslog.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_syslog.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_SYSLOG_H
 #define PHP_SYSLOG_H
diff --git a/main/php_ticks.c b/main/php_ticks.c
index b0b68e0..24e2828 100644
--- a/main/php_ticks.c
+++ b/main/php_ticks.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_ticks.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_ticks.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_ticks.h"
diff --git a/main/php_ticks.h b/main/php_ticks.h
index a23ac06..50043ea 100644
--- a/main/php_ticks.h
+++ b/main/php_ticks.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_ticks.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_ticks.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_TICKS_H
 #define PHP_TICKS_H
diff --git a/main/php_variables.c b/main/php_variables.c
index de80b09..b6f28c2 100644
--- a/main/php_variables.c
+++ b/main/php_variables.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_variables.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_variables.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <stdio.h>
 #include "php.h"
diff --git a/main/php_variables.h b/main/php_variables.h
index 040082b..cfd1736 100644
--- a/main/php_variables.h
+++ b/main/php_variables.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_variables.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_variables.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_VARIABLES_H
 #define PHP_VARIABLES_H
diff --git a/main/php_version.h b/main/php_version.h
index 75b2a8d..00bd6fa 100644
--- a/main/php_version.h
+++ b/main/php_version.h
@@ -2,7 +2,7 @@
 /* edit configure.in to change version number */
 #define PHP_MAJOR_VERSION 5
 #define PHP_MINOR_VERSION 3
-#define PHP_RELEASE_VERSION 5
+#define PHP_RELEASE_VERSION 6
 #define PHP_EXTRA_VERSION ""
-#define PHP_VERSION "5.3.5"
-#define PHP_VERSION_ID 50305
+#define PHP_VERSION "5.3.6"
+#define PHP_VERSION_ID 50306
diff --git a/main/reentrancy.c b/main/reentrancy.c
index 1ecf3ba..4710f13 100644
--- a/main/reentrancy.c
+++ b/main/reentrancy.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: reentrancy.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: reentrancy.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <sys/types.h>
 #include <string.h>
diff --git a/main/rfc1867.c b/main/rfc1867.c
index f10395d..3e1161b 100644
--- a/main/rfc1867.c
+++ b/main/rfc1867.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: rfc1867.c 303970 2010-10-04 01:27:33Z cataphract $ */
+/* $Id: rfc1867.c 307583 2011-01-19 13:09:05Z iliaa $ */
 
 /*
  *  This product includes software developed by the Apache Group
@@ -989,8 +989,8 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler) /* {{{ */
 
 			/* New Rule: never repair potential malicious user input */
 			if (!skip_upload) {
-				char *tmp = param;
 				long c = 0;
+				tmp = param;
 
 				while (*tmp) {
 					if (*tmp == '[') {
diff --git a/main/rfc1867.h b/main/rfc1867.h
index b7f2c92..77e68de 100644
--- a/main/rfc1867.h
+++ b/main/rfc1867.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: rfc1867.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: rfc1867.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef RFC1867_H
 #define RFC1867_H
diff --git a/main/safe_mode.c b/main/safe_mode.c
index 9d628d1..339653a 100644
--- a/main/safe_mode.c
+++ b/main/safe_mode.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: safe_mode.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: safe_mode.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/main/safe_mode.h b/main/safe_mode.h
index 263b83e..39ca656 100644
--- a/main/safe_mode.h
+++ b/main/safe_mode.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: safe_mode.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: safe_mode.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SAFE_MODE_H
 #define SAFE_MODE_H
diff --git a/main/snprintf.c b/main/snprintf.c
index b0ce203..47d1215 100644
--- a/main/snprintf.c
+++ b/main/snprintf.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: snprintf.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: snprintf.c 308525 2011-02-21 06:53:24Z cataphract $ */
 
 
 #include "php.h"
@@ -677,10 +677,6 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
 
 				/*
 				 * Check if a precision was specified
-				 *
-				 * XXX: an unreasonable amount of precision may be specified
-				 * resulting in overflow of num_buf. Currently we
-				 * ignore this possibility.
 				 */
 				if (*fmt == '.') {
 					adjust_precision = YES;
@@ -694,6 +690,10 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
 							precision = 0;
 					} else
 						precision = 0;
+					
+					if (precision > FORMAT_CONV_MAX_PRECISION) {
+						precision = FORMAT_CONV_MAX_PRECISION;
+					}
 				} else
 					adjust_precision = NO;
 			} else
diff --git a/main/snprintf.h b/main/snprintf.h
index 11e7a59..ded7e70 100644
--- a/main/snprintf.h
+++ b/main/snprintf.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -12,12 +12,12 @@
    | obtain it through the world-wide-web, please send a note to          |
    | license at php.net so we can mail you a copy immediately.               |
    +----------------------------------------------------------------------+
-   | Author: Stig Sæther Bakken <ssb at php.net>                             |
+   | Author: Stig Sæther Bakken <ssb at php.net>                             |
    |         Marcus Boerger <helly at php.net>                               |
    +----------------------------------------------------------------------+
 */
 
-/* $Id: snprintf.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: snprintf.h 308525 2011-02-21 06:53:24Z cataphract $ */
 
 /*
 
@@ -158,6 +158,17 @@ extern char * ap_php_conv_10(register wide_int num, register bool_int is_unsigne
 extern char * ap_php_conv_p2(register u_wide_int num, register int nbits,
 		 char format, char *buf_end, register int *len);
 
+/* The maximum precision that's allowed for float conversion. Does not include
+ * decimal separator, exponent, sign, terminator. Currently does not affect
+ * the modes e/f, only g/k/H, as those have a different limit enforced at
+ * another level (see NDIG in php_conv_fp()).
+ * Applies to the formatting functions of both spprintf.c and snprintf.c, which
+ * use equally sized buffers of MAX_BUF_SIZE = 512 to hold the result of the
+ * call to php_gcvt().
+ * This should be reasonably smaller than MAX_BUF_SIZE (I think MAX_BUF_SIZE - 9
+ * should be enough, but let's give some more space) */
+#define FORMAT_CONV_MAX_PRECISION 500
+
 #endif /* SNPRINTF_H */
 
 /*
diff --git a/main/spprintf.c b/main/spprintf.c
index c6af477..6b15216 100644
--- a/main/spprintf.c
+++ b/main/spprintf.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: spprintf.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spprintf.c 308525 2011-02-21 06:53:24Z cataphract $ */
 
 /* This is the spprintf implementation.
  * It has emerged from apache snprintf. See original header:
@@ -285,10 +285,6 @@ static void xbuf_format_converter(smart_str *xbuf, const char *fmt, va_list ap)
 
 				/*
 				 * Check if a precision was specified
-				 *
-				 * XXX: an unreasonable amount of precision may be specified
-				 * resulting in overflow of num_buf. Currently we
-				 * ignore this possibility.
 				 */
 				if (*fmt == '.') {
 					adjust_precision = YES;
@@ -302,6 +298,10 @@ static void xbuf_format_converter(smart_str *xbuf, const char *fmt, va_list ap)
 							precision = 0;
 					} else
 						precision = 0;
+					
+					if (precision > FORMAT_CONV_MAX_PRECISION) {
+						precision = FORMAT_CONV_MAX_PRECISION;
+					}
 				} else
 					adjust_precision = NO;
 			} else
diff --git a/main/spprintf.h b/main/spprintf.h
index 78e3be1..a63dfee 100644
--- a/main/spprintf.h
+++ b/main/spprintf.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spprintf.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: spprintf.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
 
diff --git a/main/streams/cast.c b/main/streams/cast.c
index 85136f0..1dcfba0 100644
--- a/main/streams/cast.c
+++ b/main/streams/cast.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: cast.c 305108 2010-11-05 18:53:48Z cataphract $ */
+/* $Id: cast.c 307611 2011-01-20 06:32:59Z pajoye $ */
 
 #define _GNU_SOURCE
 #include "php.h"
@@ -271,7 +271,7 @@ PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show
 
 			newstream = php_stream_fopen_tmpfile();
 			if (newstream) {
-				int ret = php_stream_copy_to_stream_ex(stream, newstream, PHP_STREAM_COPY_ALL, NULL);
+				int retval = php_stream_copy_to_stream_ex(stream, newstream, PHP_STREAM_COPY_ALL, NULL);
 
 				if (ret != SUCCESS) {
 					php_stream_close(newstream);
@@ -279,7 +279,7 @@ PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show
 					int retcode = php_stream_cast(newstream, castas | flags, (void **)ret, show_err);
 
 					if (retcode == SUCCESS) {
-						rewind(*(FILE**)ret);
+						rewind(*(FILE**)retval);
 					}
 
 					/* do some specialized cleanup */
@@ -366,8 +366,9 @@ PHPAPI FILE * _php_stream_open_wrapper_as_file(char *path, char *mode, int optio
 /* {{{ php_stream_make_seekable */
 PHPAPI int _php_stream_make_seekable(php_stream *origstream, php_stream **newstream, int flags STREAMS_DC TSRMLS_DC)
 {
-	assert(newstream != NULL);
-
+	if (newstream == NULL) {
+		return PHP_STREAM_FAILED;
+	}
 	*newstream = NULL;
 
 	if (((flags & PHP_STREAM_FORCE_CONVERSION) == 0) && origstream->ops->seek != NULL) {
diff --git a/main/streams/filter.c b/main/streams/filter.c
index 02aaf64..f276011 100644
--- a/main/streams/filter.c
+++ b/main/streams/filter.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: filter.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: filter.c 307922 2011-02-01 18:10:35Z cataphract $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -360,7 +360,7 @@ PHPAPI int php_stream_filter_append_ex(php_stream_filter_chain *chain, php_strea
 		php_stream_bucket_append(brig_inp, bucket TSRMLS_CC);
 		status = filter->fops->filter(stream, filter, brig_inp, brig_outp, &consumed, PSFS_FLAG_NORMAL TSRMLS_CC);
 
-		if (stream->readpos + consumed > (uint)stream->writepos || consumed < 0) {
+		if (stream->readpos + consumed > (uint)stream->writepos) {
 			/* No behaving filter should cause this. */
 			status = PSFS_ERR_FATAL;
 		}
diff --git a/main/streams/glob_wrapper.c b/main/streams/glob_wrapper.c
index e3c31ad..67bceb2 100755
--- a/main/streams/glob_wrapper.c
+++ b/main/streams/glob_wrapper.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: glob_wrapper.c 303265 2010-09-10 21:33:50Z felipe $ */
+/* $Id: glob_wrapper.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_streams_int.h"
diff --git a/main/streams/memory.c b/main/streams/memory.c
index 0991947..aa338da 100644
--- a/main/streams/memory.c
+++ b/main/streams/memory.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: memory.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: memory.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define _GNU_SOURCE
 #include "php.h"
diff --git a/main/streams/mmap.c b/main/streams/mmap.c
index 2e75aad..de8a3d2 100644
--- a/main/streams/mmap.c
+++ b/main/streams/mmap.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mmap.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mmap.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Memory Mapping interface for streams */
 #include "php.h"
diff --git a/main/streams/php_stream_context.h b/main/streams/php_stream_context.h
index fb24426..b984360 100644
--- a/main/streams/php_stream_context.h
+++ b/main/streams/php_stream_context.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_stream_context.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_stream_context.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Stream context and status notification related definitions */
 
diff --git a/main/streams/php_stream_filter_api.h b/main/streams/php_stream_filter_api.h
index 7eb3693..d56fb06 100644
--- a/main/streams/php_stream_filter_api.h
+++ b/main/streams/php_stream_filter_api.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_stream_filter_api.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_stream_filter_api.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* The filter API works on the principle of "Bucket-Brigades".  This is
  * partially inspired by the Apache 2 method of doing things, although
diff --git a/main/streams/php_stream_glob_wrapper.h b/main/streams/php_stream_glob_wrapper.h
index 67fd2dd..f55245b 100755
--- a/main/streams/php_stream_glob_wrapper.h
+++ b/main/streams/php_stream_glob_wrapper.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_stream_glob_wrapper.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_stream_glob_wrapper.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 PHPAPI extern php_stream_wrapper  php_glob_stream_wrapper;
 PHPAPI extern php_stream_ops      php_glob_stream_ops;
diff --git a/main/streams/php_stream_mmap.h b/main/streams/php_stream_mmap.h
index 625eae0..242b43e 100644
--- a/main/streams/php_stream_mmap.h
+++ b/main/streams/php_stream_mmap.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_stream_mmap.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_stream_mmap.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Memory Mapping interface for streams.
  * The intention is to provide a uniform interface over the most common
diff --git a/main/streams/php_stream_plain_wrapper.h b/main/streams/php_stream_plain_wrapper.h
index a653287..2d64fec 100644
--- a/main/streams/php_stream_plain_wrapper.h
+++ b/main/streams/php_stream_plain_wrapper.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_stream_plain_wrapper.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_stream_plain_wrapper.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* definitions for the plain files wrapper */
 
diff --git a/main/streams/php_stream_transport.h b/main/streams/php_stream_transport.h
index 1cc3786..e14ac10 100644
--- a/main/streams/php_stream_transport.h
+++ b/main/streams/php_stream_transport.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_stream_transport.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_stream_transport.h 306939 2011-01-01 02:19:59Z felipe $ */
 #ifdef PHP_WIN32
 #include "config.w32.h"
 #include <Ws2tcpip.h>
diff --git a/main/streams/php_stream_userspace.h b/main/streams/php_stream_userspace.h
index 7147a4b..08a66e5 100644
--- a/main/streams/php_stream_userspace.h
+++ b/main/streams/php_stream_userspace.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_stream_userspace.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_stream_userspace.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 /* for user-space streams */
diff --git a/main/streams/php_streams_int.h b/main/streams/php_streams_int.h
index e972477..168614e 100644
--- a/main/streams/php_streams_int.h
+++ b/main/streams/php_streams_int.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_streams_int.h 305108 2010-11-05 18:53:48Z cataphract $ */
+/* $Id: php_streams_int.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 #if ZEND_DEBUG
diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c
index 6cd8559..01fb711 100644
--- a/main/streams/plain_wrapper.c
+++ b/main/streams/plain_wrapper.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: plain_wrapper.c 305108 2010-11-05 18:53:48Z cataphract $ */
+/* $Id: plain_wrapper.c 308011 2011-02-04 10:47:41Z aharvey $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -713,6 +713,8 @@ static int php_stdiop_set_option(php_stream *stream, int option, int value, void
 								acc = FILE_MAP_READ | FILE_MAP_WRITE;
 								/* TODO: we should assign a name for the mapping */
 								break;
+							default:
+								return PHP_STREAM_OPTION_RETURN_ERR;
 						}
 
 						/* create a mapping capable of viewing the whole file (this costs no real resources) */
@@ -853,9 +855,11 @@ static php_stream *php_plain_files_dir_opener(php_stream_wrapper *wrapper, char
 	DIR *dir = NULL;
 	php_stream *stream = NULL;
 
+#ifdef HAVE_GLOB
 	if (options & STREAM_USE_GLOB_DIR_OPEN) {
 		return php_glob_stream_wrapper.wops->dir_opener(&php_glob_stream_wrapper, path, mode, options, opened_path, context STREAMS_REL_CC TSRMLS_CC);
 	}
+#endif
 
 	if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(path TSRMLS_CC)) {
 		return NULL;
diff --git a/main/streams/streams.c b/main/streams/streams.c
index e194306..a88400c 100755
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: streams.c 305379 2010-11-15 18:22:52Z cataphract $ */
+/* $Id: streams.c 307922 2011-02-01 18:10:35Z cataphract $ */
 
 #define _GNU_SOURCE
 #include "php.h"
@@ -869,6 +869,7 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re
 
 	len = stream->writepos - stream->readpos;
 
+	/* make sure the stream read buffer has maxlen bytes */
 	while (len < maxlen) {
 
 		size_t just_read;
@@ -879,6 +880,8 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re
 		just_read = (stream->writepos - stream->readpos) - len;
 		len += just_read;
 
+		/* read operation have less data than request; assume the stream is
+		 * temporarily or permanently out of data */
 		if (just_read < toread) {
 			break;
 		}
@@ -889,6 +892,7 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re
 	} else {
 		size_t seek_len;
 
+		/* set the maximum number of bytes we're allowed to read from buffer */
 		seek_len = stream->writepos - stream->readpos;
 		if (seek_len > maxlen) {
 			seek_len = maxlen;
@@ -901,12 +905,17 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re
 		}
 
 		if (!e) {
+			/* return with error if the delimiter string was not found, we
+			 * could not completely fill the read buffer with maxlen bytes
+			 * and we don't know we've reached end of file. Added with
+			 * non-blocking streams in mind, where this situation is frequent */
 			if (seek_len < maxlen && !stream->eof) {
 				return NULL;
 			}
 			toread = maxlen;
 		} else {
 			toread = e - (char *) stream->readbuf - stream->readpos;
+			/* we found the delimiter, so advance the read pointer past it */
 			skip = 1;
 		}
 	}
@@ -918,17 +927,12 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re
 	buf = emalloc(toread + 1);
 	*returned_len = php_stream_read(stream, buf, toread);
 
-	if (*returned_len >= 0) {
-		if (skip) {
-			stream->readpos += delim_len;
-			stream->position += delim_len;
-		}
-		buf[*returned_len] = '\0';
-		return buf;
-	} else {
-		efree(buf);
-		return NULL;
+	if (skip) {
+		stream->readpos += delim_len;
+		stream->position += delim_len;
 	}
+	buf[*returned_len] = '\0';
+	return buf;
 }
 
 /* Writes a buffer directly to a stream, using multiple of the chunk size */
diff --git a/main/streams/transports.c b/main/streams/transports.c
index 9e99907..3c75bde 100644
--- a/main/streams/transports.c
+++ b/main/streams/transports.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: transports.c 296079 2010-03-11 16:37:24Z mike $ */
+/* $Id: transports.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_streams_int.h"
diff --git a/main/streams/userspace.c b/main/streams/userspace.c
index 106cfe6..98371ea 100644
--- a/main/streams/userspace.c
+++ b/main/streams/userspace.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: userspace.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: userspace.c 307934 2011-02-01 22:55:17Z cataphract $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -856,6 +856,7 @@ static int statbuf_from_array(zval *array, php_stream_statbuf *ssb TSRMLS_DC)
 
 #define STAT_PROP_ENTRY_EX(name, name2)                        \
 	if (SUCCESS == zend_hash_find(Z_ARRVAL_P(array), #name, sizeof(#name), (void**)&elem)) {     \
+		SEPARATE_ZVAL(elem);																	 \
 		convert_to_long(*elem);                                                                   \
 		ssb->sb.st_##name2 = Z_LVAL_PP(elem);                                                      \
 	}
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
index 21bf0b3..9d0859d 100644
--- a/main/streams/xp_socket.c
+++ b/main/streams/xp_socket.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: xp_socket.c 296079 2010-03-11 16:37:24Z mike $ */
+/* $Id: xp_socket.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "ext/standard/file.h"
diff --git a/main/strlcat.c b/main/strlcat.c
index 38218dd..d684703 100644
--- a/main/strlcat.c
+++ b/main/strlcat.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: strlcat.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: strlcat.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/main/strlcpy.c b/main/strlcpy.c
index 6faa21a..b60e7fa 100644
--- a/main/strlcpy.c
+++ b/main/strlcpy.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: strlcpy.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: strlcpy.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/main/win32_internal_function_disabled.h b/main/win32_internal_function_disabled.h
index a2cd16e..ce93026 100644
--- a/main/win32_internal_function_disabled.h
+++ b/main/win32_internal_function_disabled.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: win32_internal_function_disabled.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: win32_internal_function_disabled.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* 5 means the min version is 5 (XP/2000), 6 (2k8/vista), etc. */
 
diff --git a/main/win95nt.h b/main/win95nt.h
index bfca2d5..4db5ce9 100644
--- a/main/win95nt.h
+++ b/main/win95nt.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: win95nt.h 305778 2010-11-26 18:25:13Z pajoye $ */
+/* $Id: win95nt.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Defines and types for Windows 95/NT */
 #define HAVE_DECLARED_TIMEZONE
diff --git a/pear/install-pear-nozlib.phar b/pear/install-pear-nozlib.phar
index 59b7cfe..9cf5bb4 100644
--- a/pear/install-pear-nozlib.phar
+++ b/pear/install-pear-nozlib.phar
@@ -1234,13 +1234,12 @@ if (extension_loaded('phar')) {if (isset($_SERVER) && isset($_SERVER['REQUEST_UR
 
 
 require_once 'phar://install-pear-nozlib.phar/index.php';
-__HALT_COMPILER();ÿ
  F          install-pear-nozlib.phar       Archive/Tar.phpqû   |ýKqû  ®Hxm         Archive_Tar-1.3.7.tar p  |ýK p º•Àm         Console/Getopt.php_2   |ýK_2  ó<wÅm         Console_Getopt-1.2.3.tar F   |ýK F  ÆYxÕm      	   index.php7&   |ýK7&  NY„m         OS/Guess.phpÁ)   |ýKÁ)  ïúŠMm         PEAR-1.9.1.tar b  |ýK b ëKË2m         PEAR.php³„   |ýK³„  >¯]lm         PEAR/ChannelFile.phpîÇ   |ýKîÇ  SSL2m         PEAR/ChannelFile/Parser.php<   |ýK<  ‰ŒÂm         PEAR/Command.php
-2   |ýK
-2  N¸Ám         PEAR/Command/Common.php‰    |ýK‰   ÷ë*>m         PEAR/Command/Install.phpÇ   |ýKÇ  ˆõ-m         PEAR/Command/Install.xml~!   |ýK~!  2¡Vm         PEAR/Common.phpf   |ýKf  „áºm         PEAR/Config.php-
-  |ýK-
- »ò”Œm         PEAR/Dependency2.phpÆ   |ýKÆ  w°3rm         PEAR/DependencyDB.phpø^   |ýKø^  ‘íym         PEAR/Downloader.php)  |ýK)  ­Nm         PEAR/Downloader/Package.php|-  |ýK|- íÒm         PEAR/ErrorStack.php΄   |ýK΄  0…½Gm         PEAR/Frontend.phpd   |ýKd  ?˜\m         PEAR/Frontend/CLI.php‡b   |ýK‡b  HÆ°m         PEAR/Installer.php?  |ýK? 5^em         PEAR/Installer/Role.php£   |ýK£  ¸‚m         PEAR/Installer/Role/Common.php›   |ýK›  ã#•m         PEAR/Installer/Role/Data.phpS   |ýKS  ¾Ó¤Ôm         PEAR/Installer/Role/Data.xml’   |ýK’  fszm         PEAR/Installer/Role/Doc.phpP   |ýKP  b-?m         PEAR/Installer/Role/Doc.xml‘   |ýK‘  h&P*m         PEAR/Installer/Role/Php.phpP   |ýKP  öÒî÷m         PEAR/Installer/Role/Php.xml­   |ýK­  zqm         PEAR/Installer/Role/Script.phpY   |ýKY  Ï34­m         PEAR/Installer/Role/Script.xml°   |ýK°  @v§Ðm         PEAR/Installer/Role/Test.phpS   |ýKS  Ž©¡m         PEAR/Installer/Role/Test.xml’   |ýK’  B] m         PEAR/PackageFile.phpï?   |ýKï?  Éènm      !   PEAR/PackageFile/Generator/v1.phpvÅ   |ýKvÅ  ã.Rm      !   PEAR/PackageFile/Generator/v2.php_ƒ   |ýK_ƒ  ­êŒ+m         PEAR/PackageFile/Parser/v1.phpì@   |ýKì@  5á*0m         PEAR/PackageFile/Parser/v2.phpÒ   |ýKÒ  ¢×+m         PEAR/PackageFile/v1.php_È   |ýK_È  cÝÎîm         PEAR/PackageFile/v2.php¢  |ýK¢ $Ƨm      !   PEAR/PackageFile/v2/Validator.php!P  |ýK!P 3}³m         PEAR/Registry.php8+  |ýK8+ "ªim      
   PEAR/REST.php<   |ýK<  q”Ä$m         PEAR/REST/10.phpô   |ýKô  µ9Q¿m         PEAR/Start.phpÍ7   |ýKÍ7   ø}#m         PEAR/Start/CLI.phpmR   |ýKmR  ãFÆm         PEAR/Task/Common.php   |ýK  ‘#,~m         PEAR/Task/Postinstallscript.phpœ8   |ýKœ8  ò§‘m      "   PEAR/Task/Postinstallscript/rw.phpî   |ýKî  ÒØÑ!m         PEAR/Task/Replace.php¿   |ýK¿  JR†Sm         PEAR/Task/Replace/rw.phpr   |ýKr  ;õÅöm         PEAR/Task/Unixeol.php	   |ýK	  QnÈm         PEAR/Task/Unixeol/rw.php‚   |ýK‚  §‹×m         PEAR/Task/Windowseol.php	   |ýK	  X«e.m         PEAR/Task/Windowseol/rw.php—   |ýK—  È»Cÿm         PEAR/Validate.phpwV   |ýKwV  öô]m         PEAR/Validator/PECL.php¢   |ýK¢  {?¿m         PEAR/XMLParser.phpK   |ýKK  GíóÃm      	   PEAR5.php?   |ýK?  ßxÊm         Structures/Graph.php½   |ýK½  rÀ*m      ,   Structures/Graph/Manipulator/AcyclicTest.phpß   |ýKß  1sÏm      2   Structures/Graph/Manipulator/TopologicalSorter.phpº   |ýKº  ¥Eûm         Structures/Graph/Node.phpr+   |ýKr+  ûD_m         Structures_Graph-1.0.3.tar ,  |ýK , 
-ŸA˜m      
-   System.phpIN   |ýKIN  nÒÇm         XML/Util.phpÄv   |ýKÄv  ²s3m         XML_Util-1.2.1.tar â  |ýK â 7l \m      <?php
+__HALT_COMPILER();-  G          install-pear-nozlib.phar       Archive/Tar.phpü  àkMü  ) 
Qm         Archive_Tar-1.3.7.tar p àkM p º•Àm         Console/Getopt.phpÂ4  àkMÂ4  èÌl1m         Console_Getopt-1.3.0.tar R  àkM R  tä…Þm      	   index.phpO&  àkMO&  ©ùRåm         OS/Guess.phpÇ)  àkMÇ)  L³m         PEAR-1.9.2.tar € àkM € ¹ºðým         PEAR.php¿„  àkM¿„  ó™±Dm         PEAR/ChannelFile.phpôÇ  àkMôÇ  =^ñ¹m         PEAR/ChannelFile/Parser.phpB  àkMB  ¾K,m         PEAR/Command.php2  àkM2  †9¬¦m         PEAR/Command/Common.php   àkM   ¼8>m         PEAR/Command/Install.php0Ç  àkM0Ç  ´4¡Úm         PEAR/Command/Install.xml~!  àkM~!  2¡Vm         PEAR/Common.php%f  àkM%f  Í,‘
+m         PEAR/Config.php3
+ àkM3
+ #ÒM?m         PEAR/Dependency2.phpÆ  àkMÆ  맋m         PEAR/DependencyDB.phpþ^  àkMþ^  ÝíåBm         PEAR/Downloader.php! àkM! wW
m         PEAR/Downloader/Package.php¯* àkM¯* ÝÑm         PEAR/ErrorStack.phpÔ„  àkMÔ„  q)m         PEAR/Exception.phpÐ6  àkMÐ6  Ü´' m         PEAR/Frontend.phpj  àkMj  ºõµÜm         PEAR/Frontend/CLI.php¹d  àkM¹d  lF
+¾m         PEAR/Installer.php( àkM( $~¦Ùm         PEAR/Installer/Role.php©  àkM©  com         PEAR/Installer/Role/Common.php¡  àkM¡  p²Üm         PEAR/Installer/Role/Data.phpY  àkMY  å\š6m         PEAR/Installer/Role/Data.xml’  àkM’  fszm         PEAR/Installer/Role/Doc.phpV  àkMV  Ox²Üm         PEAR/Installer/Role/Doc.xml‘  àkM‘  h&P*m         PEAR/Installer/Role/Php.phpV  àkMV  rº£m         PEAR/Installer/Role/Php.xml­  àkM­  zqm         PEAR/Installer/Role/Script.php_  àkM_  VÁm         PEAR/Installer/Role/Script.xml°  àkM°  @v§Ðm         PEAR/Installer/Role/Test.phpY  àkMY  	›Ì)m         PEAR/Installer/Role/Test.xml’  àkM’  B] m         PEAR/PackageFile.phpÙ>  àkMÙ>  •ö­ïm      !   PEAR/PackageFile/Generator/v1.phpˆÅ  àkMˆÅ  âï©m      !   PEAR/PackageFile/Generator/v2.phpqƒ  àkMqƒ  ­Š4¨m         PEAR/PackageFile/Parser/v1.phpò@  àkMò@  ]¦}m         PEAR/PackageFile/Parser/v2.phpØ  àkMØ  ®cÆm         PEAR/PackageFile/v1.phpeÈ  àkMeÈ  yk3(m         PEAR/PackageFile/v2.php¨ àkM¨ Qù¦m      !   PEAR/PackageFile/v2/Validator.phpP àkMP –΄m         PEAR/Registry.php>+ àkM>+ '²ß*m      
   PEAR/REST.phpð@  àkMð@  »ªm         PEAR/REST/10.phpú  àkMú  uíAm         PEAR/Start.phpÍ7  àkMÍ7   ø}#m         PEAR/Start/CLI.phpnR  àkMnR  è:³m         PEAR/Task/Common.php	  àkM	  3å–Óm         PEAR/Task/Postinstallscript.php¢8  àkM¢8  …,•†m      "   PEAR/Task/Postinstallscript/rw.phpô  àkMô  ɱFm         PEAR/Task/Replace.phpÅ  àkMÅ  ,ÊÖƒm         PEAR/Task/Replace/rw.phpx  àkMx  è—om         PEAR/Task/Unixeol.php	  àkM	  “:º”m         PEAR/Task/Unixeol/rw.phpˆ  àkMˆ  ¹¨3øm         PEAR/Task/Windowseol.php	  àkM	  Û€¹Hm         PEAR/Task/Windowseol/rw.php  àkM  MÂ"¾m         PEAR/Validate.php}V  àkM}V  žDm         PEAR/Validator/PECL.php¨  àkM¨  Ž“S„m         PEAR/XMLParser.phpQ  àkMQ  Å ±m      	   PEAR5.php?  àkM?  ßxÊm         Structures/Graph.php½  àkM½  rÀ*m      ,   Structures/Graph/Manipulator/AcyclicTest.phpß  àkMß  1sÏm      2   Structures/Graph/Manipulator/TopologicalSorter.phpº  àkMº  ¥Eûm         Structures/Graph/Node.phpr+  àkMr+  ûD_m         Structures_Graph-1.0.4.tar , àkM , ‰”f‘m      
+   System.phpON  àkMON  Í¥ºm         XML/Util.phpÄv  àkMÄv  ²s3m         XML_Util-1.2.1.tar â àkM â 7l \m      <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
@@ -1272,29 +1271,27 @@ __HALT_COMPILER();
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- *
- * @category    File_Formats
- * @package     Archive_Tar
- * @author      Vincent Blavet <vincent at phpconcept.net>
- * @copyright   1997-2008 The Authors
- * @license     http://www.opensource.org/licenses/bsd-license.php New BSD License
- * @version     CVS: $Id: Tar.php 295988 2010-03-09 08:39:37Z mrook $
- * @link        http://pear.php.net/package/Archive_Tar
+ * @category  File_Formats
+ * @package   Archive_Tar
+ * @author    Vincent Blavet <vincent at phpconcept.net>
+ * @copyright 1997-2010 The Authors
+ * @license   http://www.opensource.org/licenses/bsd-license.php New BSD License
+ * @version   CVS: $Id: Tar.php 304123 2010-10-05 19:36:38Z mrook $
+ * @link      http://pear.php.net/package/Archive_Tar
  */
 
 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
 
-
-define ('ARCHIVE_TAR_ATT_SEPARATOR', 90001);
-define ('ARCHIVE_TAR_END_BLOCK', pack("a512", ''));
+define('ARCHIVE_TAR_ATT_SEPARATOR', 90001);
+define('ARCHIVE_TAR_END_BLOCK', pack("a512", ''));
 
 /**
 * Creates a (compressed) Tar archive
 *
-* @author   Vincent Blavet <vincent at phpconcept.net>
-* @version  $Revision: 295988 $
-* @license  http://www.opensource.org/licenses/bsd-license.php New BSD License
-* @package  Archive_Tar
+* @package Archive_Tar
+* @author  Vincent Blavet <vincent at phpconcept.net>
+* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
+* @version $Revision: 304123 $
 */
 class Archive_Tar extends PEAR
 {
@@ -1333,6 +1330,11 @@ class Archive_Tar extends PEAR
     */
     var $_ignore_regexp='';
 
+    /**
+     * @var object PEAR_Error object
+     */
+    var $error_object=null; 
+
     // {{{ constructor
     /**
     * Archive_Tar Class constructor. This flavour of the constructor only
@@ -1341,11 +1343,12 @@ class Archive_Tar extends PEAR
     * If the compress argument is set the tar will be read or created as a
     * gzip or bz2 compressed TAR file.
     *
-    * @param    string  $p_tarname  The name of the tar archive to create
-    * @param    string  $p_compress can be null, 'gz' or 'bz2'. This
-    *                   parameter indicates if gzip or bz2 compression
-    *                   is required.  For compatibility reason the
-    *                   boolean value 'true' means 'gz'.
+    * @param string $p_tarname  The name of the tar archive to create
+    * @param string $p_compress can be null, 'gz' or 'bz2'. This
+    *               parameter indicates if gzip or bz2 compression
+    *               is required.  For compatibility reason the
+    *               boolean value 'true' means 'gz'.
+    *
     * @access public
     */
     function Archive_Tar($p_tarname, $p_compress = null)
@@ -1362,7 +1365,7 @@ class Archive_Tar extends PEAR
                     if ($data == "\37\213") {
                         $this->_compress = true;
                         $this->_compress_type = 'gz';
-                    // No sure it's enought for a magic code ....
+                        // No sure it's enought for a magic code ....
                     } elseif ($data == "BZ") {
                         $this->_compress = true;
                         $this->_compress_type = 'bz2';
@@ -1439,11 +1442,12 @@ class Archive_Tar extends PEAR
     * sub-directories are also added.
     * See also createModify() method for more details.
     *
-    * @param array  $p_filelist An array of filenames and directory names, or a
-	*                           single string with names separated by a single
-	*                           blank space.
-    * @return                   true on success, false on error.
-    * @see createModify()
+    * @param array $p_filelist An array of filenames and directory names, or a
+    *              single string with names separated by a single
+    *              blank space.
+    *
+    * @return true on success, false on error.
+    * @see    createModify()
     * @access public
     */
     function create($p_filelist)
@@ -1461,11 +1465,12 @@ class Archive_Tar extends PEAR
     * even if a file with the same name is already archived.
     * See also createModify() method for more details.
     *
-    * @param array  $p_filelist An array of filenames and directory names, or a
-	*                           single string with names separated by a single
-	*                           blank space.
-    * @return                   true on success, false on error.
-    * @see createModify()
+    * @param array $p_filelist An array of filenames and directory names, or a
+    *              single string with names separated by a single
+    *              blank space.
+    *
+    * @return true on success, false on error.
+    * @see    createModify()
     * @access public
     */
     function add($p_filelist)
@@ -1521,16 +1526,17 @@ class Archive_Tar extends PEAR
     * for extraction in a different path than the origin files are.
     * See also addModify() method for file adding properties.
     *
-    * @param array  $p_filelist     An array of filenames and directory names,
-	*                               or a single string with names separated by
-	*                               a single blank space.
-    * @param string $p_add_dir      A string which contains a path to be added
-	*                               to the memorized path of each element in
-	*                               the list.
-    * @param string $p_remove_dir   A string which contains a path to be
-	*                               removed from the memorized path of each
-	*                               element in the list, when relevant.
-    * @return boolean               true on success, false on error.
+    * @param array  $p_filelist   An array of filenames and directory names,
+    *                             or a single string with names separated by
+    *                             a single blank space.
+    * @param string $p_add_dir    A string which contains a path to be added
+    *                             to the memorized path of each element in
+    *                             the list.
+    * @param string $p_remove_dir A string which contains a path to be
+    *                             removed from the memorized path of each
+    *                             element in the list, when relevant.
+    *
+    * @return boolean true on success, false on error.
     * @access public
     * @see addModify()
     */
@@ -1593,17 +1599,18 @@ class Archive_Tar extends PEAR
     * If a file/dir is not readable the file/dir is ignored. However an
     * error text is send to PEAR error.
     *
-    * @param array      $p_filelist     An array of filenames and directory
-	*                                   names, or a single string with names
-	*                                   separated by a single blank space.
-    * @param string     $p_add_dir      A string which contains a path to be
-	*                                   added to the memorized path of each
-	*                                   element in the list.
-    * @param string     $p_remove_dir   A string which contains a path to be
-	*                                   removed from the memorized path of
-	*                                   each element in the list, when
-    *                                   relevant.
-    * @return                           true on success, false on error.
+    * @param array  $p_filelist   An array of filenames and directory
+    *                             names, or a single string with names
+    *                             separated by a single blank space.
+    * @param string $p_add_dir    A string which contains a path to be
+    *                             added to the memorized path of each
+    *                             element in the list.
+    * @param string $p_remove_dir A string which contains a path to be
+    *                             removed from the memorized path of
+    *                             each element in the list, when
+    *                             relevant.
+    *
+    * @return true on success, false on error.
     * @access public
     */
     function addModify($p_filelist, $p_add_dir, $p_remove_dir='')
@@ -1612,7 +1619,7 @@ class Archive_Tar extends PEAR
 
         if (!$this->_isArchive())
             $v_result = $this->createModify($p_filelist, $p_add_dir,
-			                                $p_remove_dir);
+                                            $p_remove_dir);
         else {
             if (is_array($p_filelist))
                 $v_list = $p_filelist;
@@ -1636,12 +1643,13 @@ class Archive_Tar extends PEAR
     * end of the existing archive. If the archive does not yet exists it
     * is created.
     *
-    * @param string     $p_filename     A string which contains the full
-	*                                   filename path that will be associated
-	*                                   with the string.
-    * @param string     $p_string       The content of the file added in
-	*                                   the archive.
-    * @return                           true on success, false on error.
+    * @param string $p_filename A string which contains the full
+    *                           filename path that will be associated
+    *                           with the string.
+    * @param string $p_string   The content of the file added in
+    *                           the archive.
+    *
+    * @return true on success, false on error.
     * @access public
     */
     function addString($p_filename, $p_string)
@@ -1694,14 +1702,15 @@ class Archive_Tar extends PEAR
     * is returned. However the result can be a partial extraction that may
     * need to be manually cleaned.
     *
-    * @param string $p_path         The path of the directory where the
-	*                               files/dir need to by extracted.
-    * @param string $p_remove_path  Part of the memorized path that can be
-	*                               removed if present at the beginning of
-	*                               the file/dir path.
-    * @return boolean               true on success, false on error.
+    * @param string $p_path        The path of the directory where the
+    *                              files/dir need to by extracted.
+    * @param string $p_remove_path Part of the memorized path that can be
+    *                              removed if present at the beginning of
+    *                              the file/dir path.
+    *
+    * @return boolean true on success, false on error.
     * @access public
-    * @see extractList()
+    * @see    extractList()
     */
     function extractModify($p_path, $p_remove_path)
     {
@@ -1722,8 +1731,10 @@ class Archive_Tar extends PEAR
     /**
     * This method extract from the archive one file identified by $p_filename.
     * The return value is a string with the file content, or NULL on error.
-    * @param string $p_filename     The path of the file to extract in a string.
-    * @return                       a string with the file content or NULL.
+    *
+    * @param string $p_filename The path of the file to extract in a string.
+    *
+    * @return a string with the file content or NULL.
     * @access public
     */
     function extractInString($p_filename)
@@ -1732,7 +1743,7 @@ class Archive_Tar extends PEAR
             $v_result = $this->_extractInString($p_filename);
             $this->_close();
         } else {
-            $v_result = NULL;
+            $v_result = null;
         }
 
         return $v_result;
@@ -1746,17 +1757,19 @@ class Archive_Tar extends PEAR
     * in the directory indicated by the optional $p_path parameter.
     * If indicated the $p_remove_path can be used in the same way as it is
     * used in extractModify() method.
-    * @param array  $p_filelist     An array of filenames and directory names,
-	*                               or a single string with names separated
-	*                               by a single blank space.
-    * @param string $p_path         The path of the directory where the
-	*                               files/dir need to by extracted.
-    * @param string $p_remove_path  Part of the memorized path that can be
-	*                               removed if present at the beginning of
-	*                               the file/dir path.
-    * @return                       true on success, false on error.
+    *
+    * @param array  $p_filelist    An array of filenames and directory names,
+    *                              or a single string with names separated
+    *                              by a single blank space.
+    * @param string $p_path        The path of the directory where the
+    *                              files/dir need to by extracted.
+    * @param string $p_remove_path Part of the memorized path that can be
+    *                              removed if present at the beginning of
+    *                              the file/dir path.
+    *
+    * @return true on success, false on error.
     * @access public
-    * @see extractModify()
+    * @see    extractModify()
     */
     function extractList($p_filelist, $p_path='', $p_remove_path='')
     {
@@ -1787,8 +1800,10 @@ class Archive_Tar extends PEAR
     * This method set specific attributes of the archive. It uses a variable
     * list of parameters, in the format attribute code + attribute values :
     * $arch->setAttribute(ARCHIVE_TAR_ATT_SEPARATOR, ',');
-    * @param mixed $argv            variable list of attributes and values
-    * @return                       true on success, false on error.
+    *
+    * @param mixed $argv variable list of attributes and values
+    *
+    * @return true on success, false on error.
     * @access public
     */
     function setAttribute()
@@ -1841,7 +1856,9 @@ class Archive_Tar extends PEAR
     * This method sets the regular expression for ignoring files and directories
     * at import, for example:
     * $arch->setIgnoreRegexp("#CVS|\.svn#");
-    * @param string $regexp         regular expression defining which files or directories to ignore
+    *
+    * @param string $regexp regular expression defining which files or directories to ignore
+    *
     * @access public
     */
     function setIgnoreRegexp($regexp)
@@ -1855,7 +1872,9 @@ class Archive_Tar extends PEAR
     * This method sets the regular expression for ignoring all files and directories
     * matching the filenames in the array list at import, for example:
     * $arch->setIgnoreList(array('CVS', '.svn', 'bin/tool'));
-    * @param array $list         a list of file or directory names to ignore
+    *
+    * @param array $list a list of file or directory names to ignore
+    *
     * @access public
     */
     function setIgnoreList($list)
@@ -1869,23 +1888,21 @@ class Archive_Tar extends PEAR
     // {{{ _error()
     function _error($p_message)
     {
-        // ----- To be completed
-        $this->raiseError($p_message);
+        $this->error_object = &$this->raiseError($p_message); 
     }
     // }}}
 
     // {{{ _warning()
     function _warning($p_message)
     {
-        // ----- To be completed
-        $this->raiseError($p_message);
+        $this->error_object = &$this->raiseError($p_message); 
     }
     // }}}
 
     // {{{ _isArchive()
-    function _isArchive($p_filename=NULL)
+    function _isArchive($p_filename=null)
     {
-        if ($p_filename == NULL) {
+        if ($p_filename == null) {
             $p_filename = $this->_tarname;
         }
         clearstatcache();
@@ -2620,6 +2637,7 @@ class Archive_Tar extends PEAR
      * Detect and report a malicious file name
      *
      * @param string $file
+     *
      * @return bool
      * @access private
      */
@@ -2670,9 +2688,11 @@ class Archive_Tar extends PEAR
     // {{{ _extractInString()
     /**
     * This method extract from the archive one file identified by $p_filename.
-    * The return value is a string with the file content, or NULL on error.
-    * @param string $p_filename     The path of the file to extract in a string.
-    * @return                       a string with the file content or NULL.
+    * The return value is a string with the file content, or null on error.
+    *
+    * @param string $p_filename The path of the file to extract in a string.
+    *
+    * @return a string with the file content or null.
     * @access private
     */
     function _extractInString($p_filename)
@@ -2682,7 +2702,7 @@ class Archive_Tar extends PEAR
         While (strlen($v_binary_data = $this->_readBlock()) != 0)
         {
           if (!$this->_readHeader($v_binary_data, $v_header))
-            return NULL;
+            return null;
 
           if ($v_header['filename'] == '')
             continue;
@@ -2690,14 +2710,14 @@ class Archive_Tar extends PEAR
           // ----- Look for long filename
           if ($v_header['typeflag'] == 'L') {
             if (!$this->_readLongHeader($v_header))
-              return NULL;
+              return null;
           }
 
           if ($v_header['filename'] == $p_filename) {
               if ($v_header['typeflag'] == "5") {
                   $this->_error('Unable to extract in string a directory '
 				                .'entry {'.$v_header['filename'].'}');
-                  return NULL;
+                  return null;
               } else {
                   $n = floor($v_header['size']/512);
                   for ($i=0; $i<$n; $i++) {
@@ -2715,7 +2735,7 @@ class Archive_Tar extends PEAR
           }
         }
 
-        return NULL;
+        return null;
     }
     // }}}
 
@@ -2742,16 +2762,16 @@ class Archive_Tar extends PEAR
 
     switch ($p_mode) {
       case "complete" :
-        $v_extract_all = TRUE;
-        $v_listing = FALSE;
+        $v_extract_all = true;
+        $v_listing = false;
       break;
       case "partial" :
-          $v_extract_all = FALSE;
-          $v_listing = FALSE;
+          $v_extract_all = false;
+          $v_listing = false;
       break;
       case "list" :
-          $v_extract_all = FALSE;
-          $v_listing = TRUE;
+          $v_extract_all = false;
+          $v_listing = true;
       break;
       default :
         $this->_error('Invalid extract mode ('.$p_mode.')');
@@ -2789,19 +2809,19 @@ class Archive_Tar extends PEAR
             if ((strlen($v_header['filename']) > strlen($p_file_list[$i]))
 			    && (substr($v_header['filename'], 0, strlen($p_file_list[$i]))
 				    == $p_file_list[$i])) {
-              $v_extract_file = TRUE;
+              $v_extract_file = true;
               break;
             }
           }
 
           // ----- It is a file, so compare the file names
           elseif ($p_file_list[$i] == $v_header['filename']) {
-            $v_extract_file = TRUE;
+            $v_extract_file = true;
             break;
           }
         }
       } else {
-        $v_extract_file = TRUE;
+        $v_extract_file = true;
       }
 
       // ----- Look if this file need to be extracted
@@ -2900,12 +2920,19 @@ class Archive_Tar extends PEAR
 
           // ----- Check the file size
           clearstatcache();
-          if (filesize($v_header['filename']) != $v_header['size']) {
+          if (!is_file($v_header['filename'])) {
               $this->_error('Extracted file '.$v_header['filename']
-			                .' does not have the correct file size \''
-							.filesize($v_header['filename'])
-							.'\' ('.$v_header['size']
-							.' expected). Archive may be corrupted.');
+                            .'does not exist. Archive may be corrupted.');
+              return false;
+          }
+          
+          $filesize = filesize($v_header['filename']);
+          if ($filesize != $v_header['size']) {
+              $this->_error('Extracted file '.$v_header['filename']
+                            .' does not have the correct file size \''
+                            .$filesize
+                            .'\' ('.$v_header['size']
+                            .' expected). Archive may be corrupted.');
               return false;
           }
           }
@@ -3054,7 +3081,7 @@ class Archive_Tar extends PEAR
      *
      * @param string $p_dir directory to check
      *
-     * @return bool TRUE if the directory exists or was created
+     * @return bool true if the directory exists or was created
      */
     function _dirCheck($p_dir)
     {
@@ -5840,25 +5867,23 @@ How it works :
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4: */
 /**
- * Color.php
+ * PHP Version 5
  *
- * PHP Version 5  
- * 
  * Copyright (c) 1997-2004 The PHP Group
  *
- * This source file is subject to version 3.0 of the PHP license,       
- * that is bundled with this package in the file LICENSE, and is        
- * available through the world-wide-web at the following url:           
- * http://www.php.net/license/3_0.txt.                                  
- * If you did not receive a copy of the PHP license and are unable to   
- * obtain it through the world-wide-web, please send a note to          
- * license at php.net so we can mail you a copy immediately.               
+ * This source file is subject to version 3.0 of the PHP license,
+ * that is bundled with this package in the file LICENSE, and is
+ * available through the world-wide-web at the following url:
+ * http://www.php.net/license/3_0.txt.
+ * If you did not receive a copy of the PHP license and are unable to
+ * obtain it through the world-wide-web, please send a note to
+ * license at php.net so we can mail you a copy immediately.
  *
  * @category Console
  * @package  Console_Getopt
  * @author   Andrei Zmievski <andrei at php.net>
  * @license  http://www.php.net/license/3_0.txt PHP 3.0
- * @version  CVS: $Id: Getopt.php 267328 2008-10-14 18:53:25Z andrei $
+ * @version  CVS: $Id: Getopt.php 306067 2010-12-08 00:13:31Z dufuz $
  * @link     http://pear.php.net/package/Console_Getopt
  */
 
@@ -5905,14 +5930,15 @@ class Console_Getopt
      * @param array  $args          an array of command-line arguments
      * @param string $short_options specifies the list of allowed short options
      * @param array  $long_options  specifies the list of allowed long options
+     * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option
      *
      * @return array two-element array containing the list of parsed options and
      * the non-option arguments
      * @access public
      */
-    function getopt2($args, $short_options, $long_options = null)
+    function getopt2($args, $short_options, $long_options = null, $skip_unknown = false)
     {
-        return Console_Getopt::doGetopt(2, $args, $short_options, $long_options);
+        return Console_Getopt::doGetopt(2, $args, $short_options, $long_options, $skip_unknown);
     }
 
     /**
@@ -5926,10 +5952,10 @@ class Console_Getopt
      * @see getopt2()
      * @return array two-element array containing the list of parsed options and
      * the non-option arguments
-     */    
-    function getopt($args, $short_options, $long_options = null)
+     */
+    function getopt($args, $short_options, $long_options = null, $skip_unknown = false)
     {
-        return Console_Getopt::doGetopt(1, $args, $short_options, $long_options);
+        return Console_Getopt::doGetopt(1, $args, $short_options, $long_options, $skip_unknown);
     }
 
     /**
@@ -5939,20 +5965,22 @@ class Console_Getopt
      * @param array  $args          an array of command-line arguments
      * @param string $short_options specifies the list of allowed short options
      * @param array  $long_options  specifies the list of allowed long options
+     * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option
      *
      * @return array
      */
-    function doGetopt($version, $args, $short_options, $long_options = null)
+    function doGetopt($version, $args, $short_options, $long_options = null, $skip_unknown = false)
     {
         // in case you pass directly readPHPArgv() as the first arg
         if (PEAR::isError($args)) {
             return $args;
         }
+
         if (empty($args)) {
             return array(array(), array());
         }
-        $opts     = array();
-        $non_opts = array();
+
+        $non_opts = $opts = array();
 
         settype($args, 'array');
 
@@ -5972,7 +6000,6 @@ class Console_Getopt
 
         reset($args);
         while (list($i, $arg) = each($args)) {
-
             /* The special element '--' means explicit end of
                options. Treat the rest of the arguments as non-options
                and end the loop. */
@@ -5981,14 +6008,15 @@ class Console_Getopt
                 break;
             }
 
-            if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' 
-                                    && !$long_options)) {
+            if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) {
                 $non_opts = array_merge($non_opts, array_slice($args, $i));
                 break;
             } elseif (strlen($arg) > 1 && $arg{1} == '-') {
-                $error = Console_Getopt::_parseLongOption(substr($arg, 2), 
-                                                          $long_options, $opts,
-                                                          $args);
+                $error = Console_Getopt::_parseLongOption(substr($arg, 2),
+                                                          $long_options,
+                                                          $opts,
+                                                          $args,
+                                                          $skip_unknown);
                 if (PEAR::isError($error)) {
                     return $error;
                 }
@@ -5998,8 +6026,10 @@ class Console_Getopt
                 break;
             } else {
                 $error = Console_Getopt::_parseShortOption(substr($arg, 1),
-                                                           $short_options, $opts,
-                                                           $args);
+                                                           $short_options,
+                                                           $opts,
+                                                           $args,
+                                                           $skip_unknown);
                 if (PEAR::isError($error)) {
                     return $error;
                 }
@@ -6016,19 +6046,23 @@ class Console_Getopt
      * @param string[]   $short_options Available short options
      * @param string[][] &$opts
      * @param string[]   &$args
+     * @param boolean    $skip_unknown suppresses Console_Getopt: unrecognized option
      *
      * @access private
      * @return void
      */
-    function _parseShortOption($arg, $short_options, &$opts, &$args)
+    function _parseShortOption($arg, $short_options, &$opts, &$args, $skip_unknown)
     {
         for ($i = 0; $i < strlen($arg); $i++) {
             $opt     = $arg{$i};
             $opt_arg = null;
 
             /* Try to find the short option in the specifier string. */
-            if (($spec = strstr($short_options, $opt)) === false 
-                || $arg{$i} == ':') {
+            if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':') {
+                if ($skip_unknown === true) {
+                    break;
+                }
+
                 $msg = "Console_Getopt: unrecognized option -- $opt";
                 return PEAR::raiseError($msg);
             }
@@ -6049,7 +6083,7 @@ class Console_Getopt
                         break;
                     } else if (list(, $opt_arg) = each($args)) {
                         /* Else use the next argument. */;
-                        if (Console_Getopt::_isShortOpt($opt_arg) 
+                        if (Console_Getopt::_isShortOpt($opt_arg)
                             || Console_Getopt::_isLongOpt($opt_arg)) {
                             $msg = "option requires an argument --$opt";
                             return PEAR::raiseError("Console_Getopt:" . $msg);
@@ -6075,7 +6109,7 @@ class Console_Getopt
      */
     function _isShortOpt($arg)
     {
-        return strlen($arg) == 2 && $arg[0] == '-' 
+        return strlen($arg) == 2 && $arg[0] == '-'
                && preg_match('/[a-zA-Z]/', $arg[1]);
     }
 
@@ -6104,7 +6138,7 @@ class Console_Getopt
      * @access private
      * @return void|PEAR_Error
      */
-    function _parseLongOption($arg, $long_options, &$opts, &$args)
+    function _parseLongOption($arg, $long_options, &$opts, &$args, $skip_unknown)
     {
         @list($opt, $opt_arg) = explode('=', $arg, 2);
 
@@ -6150,7 +6184,7 @@ class Console_Getopt
                         return PEAR::raiseError($msg);
                     }
 
-                    if (Console_Getopt::_isShortOpt($opt_arg) 
+                    if (Console_Getopt::_isShortOpt($opt_arg)
                         || Console_Getopt::_isLongOpt($opt_arg)) {
                         $msg = "Console_Getopt: option requires an argument --$opt";
                         return PEAR::raiseError($msg);
@@ -6165,6 +6199,10 @@ class Console_Getopt
             return;
         }
 
+        if ($skip_unknown === true) {
+            return;
+        }
+
         return PEAR::raiseError("Console_Getopt: unrecognized option --$opt");
     }
 
@@ -6191,11 +6229,8 @@ class Console_Getopt
         return $argv;
     }
 
-}
-
-?>
-package.xml                                                                                         100644    1750    1750        10425 10633574607   6452                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="UTF-8"?>
-<package packagerversion="1.6.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
+}package.xml                                                                                         0000644 0000765 0000024 00000011325 11500756375 012161  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.9.2" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
  <name>Console_Getopt</name>
  <channel>pear.php.net</channel>
  <summary>Command-line option parser</summary>
@@ -6219,28 +6254,30 @@ short and long options.</description>
   <email>cellog at php.net</email>
   <active>yes</active>
  </helper>
- <date>2007-06-12</date>
- <time>14:52:39</time>
+ <date>2010-12-11</date>
+ <time>20:20:13</time>
  <version>
-  <release>1.2.3</release>
-  <api>1.2.1</api>
+  <release>1.3.0</release>
+  <api>1.3.0</api>
  </version>
  <stability>
   <release>stable</release>
   <api>stable</api>
  </stability>
  <license uri="http://www.php.net/license">PHP License</license>
- <notes>* fix Bug #11068: No way to read plain "-" option [cardoe]</notes>
+ <notes>
+* Implement Request #13140: [PATCH] to skip unknown parameters. [patch by rquadling, improved on by dufuz]
+ </notes>
  <contents>
   <dir name="/">
-   <file md5sum="f2175a45c5e5bc7c97e174bdae55b671" name="Console/Getopt.php" role="php" />
+   <file md5sum="ed666da6b1c5d01c3ecbf1f588a70a60" name="Console/Getopt.php" role="php" />
   </dir>
  </contents>
  <compatible>
   <name>PEAR</name>
   <channel>pear.php.net</channel>
   <min>1.4.0</min>
-  <max>1.6.0</max>
+  <max>1.10.0</max>
  </compatible>
  <dependencies>
   <required>
@@ -6248,13 +6285,28 @@ short and long options.</description>
     <min>4.3.0</min>
    </php>
    <pearinstaller>
-    <min>1.4.3</min>
+    <min>1.9.1</min>
    </pearinstaller>
   </required>
  </dependencies>
  <phprelease />
  <changelog>
   <release>
+   <date>2007-06-12</date>
+   <version>
+    <release>1.2.3</release>
+    <api>1.2.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>
+* fix Bug #11068: No way to read plain "-" option [cardoe]
+   </notes>
+  </release>
+  <release>
    <version>
     <release>1.2.2</release>
     <api>1.2.1</api>
@@ -6265,8 +6317,10 @@ short and long options.</description>
    </stability>
    <date>2007-02-17</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>* fix Bug #4475: An ambiguous error occurred when specifying similar longoption name.
-* fix Bug #10055: Not failing properly on short options missing required values</notes>
+   <notes>
+* fix Bug #4475: An ambiguous error occurred when specifying similar longoption name.
+* fix Bug #10055: Not failing properly on short options missing required values
+   </notes>
   </release>
   <release>
    <version>
@@ -6279,7 +6333,9 @@ short and long options.</description>
    </stability>
    <date>2006-12-08</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Fixed bugs #4448 (Long parameter values truncated with longoption parameter) and #7444 (Trailing spaces after php closing tag)</notes>
+   <notes>
+Fixed bugs #4448 (Long parameter values truncated with longoption parameter) and #7444 (Trailing spaces after php closing tag)
+   </notes>
   </release>
   <release>
    <version>
@@ -6292,7 +6348,9 @@ short and long options.</description>
    </stability>
    <date>2003-12-11</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Fix to preserve BC with 1.0 and allow correct behaviour for new users</notes>
+   <notes>
+Fix to preserve BC with 1.0 and allow correct behaviour for new users
+   </notes>
   </release>
   <release>
    <version>
@@ -6305,7 +6363,9 @@ short and long options.</description>
    </stability>
    <date>2002-09-13</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Stable release</notes>
+   <notes>
+Stable release
+   </notes>
   </release>
   <release>
    <version>
@@ -6318,8 +6378,10 @@ short and long options.</description>
    </stability>
    <date>2002-05-26</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>POSIX getopt compatibility fix: treat first element of args
-        array as command name</notes>
+   <notes>
+POSIX getopt compatibility fix: treat first element of args
+        array as command name
+   </notes>
   </release>
   <release>
    <version>
@@ -6332,7 +6394,9 @@ short and long options.</description>
    </stability>
    <date>2002-05-12</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Packaging fix</notes>
+   <notes>
+Packaging fix
+   </notes>
   </release>
   <release>
    <version>
@@ -6345,39 +6409,49 @@ short and long options.</description>
    </stability>
    <date>2002-05-12</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Initial release</notes>
+   <notes>
+Initial release
+   </notes>
   </release>
  </changelog>
 </package>
-                                                                                                                                                                                                                                           Console_Getopt-1.2.3/Console/Getopt.php                                                             100644    1750    1750        25332 10633574607  13300                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                                                                                                                                                                                                           Console_Getopt-1.3.0/Console/Getopt.php                                                             0000644 0000765 0000024 00000032235 11500756375 017005  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license at php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Andrei Zmievski <andrei at php.net>                             |
-// +----------------------------------------------------------------------+
-//
-// $Id: Getopt.php,v 1.4 2007/06/12 14:58:56 cellog Exp $
+/**
+ * PHP Version 5
+ *
+ * Copyright (c) 1997-2004 The PHP Group
+ *
+ * This source file is subject to version 3.0 of the PHP license,
+ * that is bundled with this package in the file LICENSE, and is
+ * available through the world-wide-web at the following url:
+ * http://www.php.net/license/3_0.txt.
+ * If you did not receive a copy of the PHP license and are unable to
+ * obtain it through the world-wide-web, please send a note to
+ * license at php.net so we can mail you a copy immediately.
+ *
+ * @category Console
+ * @package  Console_Getopt
+ * @author   Andrei Zmievski <andrei at php.net>
+ * @license  http://www.php.net/license/3_0.txt PHP 3.0
+ * @version  CVS: $Id: Getopt.php 306067 2010-12-08 00:13:31Z dufuz $
+ * @link     http://pear.php.net/package/Console_Getopt
+ */
 
 require_once 'PEAR.php';
 
 /**
  * Command-line options parsing class.
  *
- * @author Andrei Zmievski <andrei at php.net>
- *
+ * @category Console
+ * @package  Console_Getopt
+ * @author   Andrei Zmievski <andrei at php.net>
+ * @license  http://www.php.net/license/3_0.txt PHP 3.0
+ * @link     http://pear.php.net/package/Console_Getopt
  */
-class Console_Getopt {
+class Console_Getopt
+{
+
     /**
      * Parses the command-line options.
      *
@@ -6404,45 +6478,60 @@ class Console_Getopt {
      *
      * Most of the semantics of this function are based on GNU getopt_long().
      *
-     * @param array  $args           an array of command-line arguments
-     * @param string $short_options  specifies the list of allowed short options
-     * @param array  $long_options   specifies the list of allowed long options
+     * @param array  $args          an array of command-line arguments
+     * @param string $short_options specifies the list of allowed short options
+     * @param array  $long_options  specifies the list of allowed long options
+     * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option
      *
      * @return array two-element array containing the list of parsed options and
      * the non-option arguments
-     *
      * @access public
-     *
      */
-    function getopt2($args, $short_options, $long_options = null)
+    function getopt2($args, $short_options, $long_options = null, $skip_unknown = false)
     {
-        return Console_Getopt::doGetopt(2, $args, $short_options, $long_options);
+        return Console_Getopt::doGetopt(2, $args, $short_options, $long_options, $skip_unknown);
     }
 
     /**
      * This function expects $args to start with the script name (POSIX-style).
      * Preserved for backwards compatibility.
+     *
+     * @param array  $args          an array of command-line arguments
+     * @param string $short_options specifies the list of allowed short options
+     * @param array  $long_options  specifies the list of allowed long options
+     *
      * @see getopt2()
-     */    
-    function getopt($args, $short_options, $long_options = null)
+     * @return array two-element array containing the list of parsed options and
+     * the non-option arguments
+     */
+    function getopt($args, $short_options, $long_options = null, $skip_unknown = false)
     {
-        return Console_Getopt::doGetopt(1, $args, $short_options, $long_options);
+        return Console_Getopt::doGetopt(1, $args, $short_options, $long_options, $skip_unknown);
     }
 
     /**
      * The actual implementation of the argument parsing code.
+     *
+     * @param int    $version       Version to use
+     * @param array  $args          an array of command-line arguments
+     * @param string $short_options specifies the list of allowed short options
+     * @param array  $long_options  specifies the list of allowed long options
+     * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option
+     *
+     * @return array
      */
-    function doGetopt($version, $args, $short_options, $long_options = null)
+    function doGetopt($version, $args, $short_options, $long_options = null, $skip_unknown = false)
     {
         // in case you pass directly readPHPArgv() as the first arg
         if (PEAR::isError($args)) {
             return $args;
         }
+
         if (empty($args)) {
             return array(array(), array());
         }
-        $opts     = array();
-        $non_opts = array();
+
+        $non_opts = $opts = array();
 
         settype($args, 'array');
 
@@ -6462,7 +6551,6 @@ class Console_Getopt {
 
         reset($args);
         while (list($i, $arg) = each($args)) {
-
             /* The special element '--' means explicit end of
                options. Treat the rest of the arguments as non-options
                and end the loop. */
@@ -6475,17 +6563,27 @@ class Console_Getopt {
                 $non_opts = array_merge($non_opts, array_slice($args, $i));
                 break;
             } elseif (strlen($arg) > 1 && $arg{1} == '-') {
-                $error = Console_Getopt::_parseLongOption(substr($arg, 2), $long_options, $opts, $args);
-                if (PEAR::isError($error))
+                $error = Console_Getopt::_parseLongOption(substr($arg, 2),
+                                                          $long_options,
+                                                          $opts,
+                                                          $args,
+                                                          $skip_unknown);
+                if (PEAR::isError($error)) {
                     return $error;
+                }
             } elseif ($arg == '-') {
                 // - is stdin
                 $non_opts = array_merge($non_opts, array_slice($args, $i));
                 break;
             } else {
-                $error = Console_Getopt::_parseShortOption(substr($arg, 1), $short_options, $opts, $args);
-                if (PEAR::isError($error))
+                $error = Console_Getopt::_parseShortOption(substr($arg, 1),
+                                                           $short_options,
+                                                           $opts,
+                                                           $args,
+                                                           $skip_unknown);
+                if (PEAR::isError($error)) {
                     return $error;
+                }
             }
         }
 
@@ -6493,19 +6591,31 @@ class Console_Getopt {
     }
 
     /**
-     * @access private
+     * Parse short option
      *
+     * @param string     $arg           Argument
+     * @param string[]   $short_options Available short options
+     * @param string[][] &$opts
+     * @param string[]   &$args
+     * @param boolean    $skip_unknown suppresses Console_Getopt: unrecognized option
+     *
+     * @access private
+     * @return void
      */
-    function _parseShortOption($arg, $short_options, &$opts, &$args)
+    function _parseShortOption($arg, $short_options, &$opts, &$args, $skip_unknown)
     {
         for ($i = 0; $i < strlen($arg); $i++) {
-            $opt = $arg{$i};
+            $opt     = $arg{$i};
             $opt_arg = null;
 
             /* Try to find the short option in the specifier string. */
-            if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':')
-            {
-                return PEAR::raiseError("Console_Getopt: unrecognized option -- $opt");
+            if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':') {
+                if ($skip_unknown === true) {
+                    break;
+                }
+
+                $msg = "Console_Getopt: unrecognized option -- $opt";
+                return PEAR::raiseError($msg);
             }
 
             if (strlen($spec) > 1 && $spec{1} == ':') {
@@ -6524,11 +6634,14 @@ class Console_Getopt {
                         break;
                     } else if (list(, $opt_arg) = each($args)) {
                         /* Else use the next argument. */;
-                        if (Console_Getopt::_isShortOpt($opt_arg) || Console_Getopt::_isLongOpt($opt_arg)) {
-                            return PEAR::raiseError("Console_Getopt: option requires an argument -- $opt");
+                        if (Console_Getopt::_isShortOpt($opt_arg)
+                            || Console_Getopt::_isLongOpt($opt_arg)) {
+                            $msg = "option requires an argument --$opt";
+                            return PEAR::raiseError("Console_Getopt:" . $msg);
                         }
                     } else {
-                        return PEAR::raiseError("Console_Getopt: option requires an argument -- $opt");
+                        $msg = "option requires an argument --$opt";
+                        return PEAR::raiseError("Console_Getopt:" . $msg);
                     }
                 }
             }
@@ -6538,36 +6651,54 @@ class Console_Getopt {
     }
 
     /**
-     * @access private
+     * Checks if an argument is a short option
      *
+     * @param string $arg Argument to check
+     *
+     * @access private
+     * @return bool
      */
     function _isShortOpt($arg)
     {
-        return strlen($arg) == 2 && $arg[0] == '-' && preg_match('/[a-zA-Z]/', $arg[1]);
+        return strlen($arg) == 2 && $arg[0] == '-'
+               && preg_match('/[a-zA-Z]/', $arg[1]);
     }
 
     /**
-     * @access private
+     * Checks if an argument is a long option
      *
+     * @param string $arg Argument to check
+     *
+     * @access private
+     * @return bool
      */
     function _isLongOpt($arg)
     {
         return strlen($arg) > 2 && $arg[0] == '-' && $arg[1] == '-' &&
-            preg_match('/[a-zA-Z]+$/', substr($arg, 2));
+               preg_match('/[a-zA-Z]+$/', substr($arg, 2));
     }
 
     /**
-     * @access private
+     * Parse long option
      *
+     * @param string     $arg          Argument
+     * @param string[]   $long_options Available long options
+     * @param string[][] &$opts
+     * @param string[]   &$args
+     *
+     * @access private
+     * @return void|PEAR_Error
      */
-    function _parseLongOption($arg, $long_options, &$opts, &$args)
+    function _parseLongOption($arg, $long_options, &$opts, &$args, $skip_unknown)
     {
         @list($opt, $opt_arg) = explode('=', $arg, 2);
+
         $opt_len = strlen($opt);
 
         for ($i = 0; $i < count($long_options); $i++) {
             $long_opt  = $long_options[$i];
             $opt_start = substr($long_opt, 0, $opt_len);
+
             $long_opt_name = str_replace('=', '', $long_opt);
 
             /* Option doesn't match. Go on to the next one. */
@@ -6575,7 +6706,7 @@ class Console_Getopt {
                 continue;
             }
 
-            $opt_rest  = substr($long_opt, $opt_len);
+            $opt_rest = substr($long_opt, $opt_len);
 
             /* Check that the options uniquely matches one of the allowed
                options. */
@@ -6584,12 +6715,15 @@ class Console_Getopt {
             } else {
                 $next_option_rest = '';
             }
+
             if ($opt_rest != '' && $opt{0} != '=' &&
                 $i + 1 < count($long_options) &&
                 $opt == substr($long_options[$i+1], 0, $opt_len) &&
                 $next_option_rest != '' &&
                 $next_option_rest{0} != '=') {
-                return PEAR::raiseError("Console_Getopt: option --$opt is ambiguous");
+
+                $msg = "Console_Getopt: option --$opt is ambiguous";
+                return PEAR::raiseError($msg);
             }
 
             if (substr($long_opt, -1) == '=') {
@@ -6597,37 +6731,47 @@ class Console_Getopt {
                     /* Long option requires an argument.
                        Take the next argument if one wasn't specified. */;
                     if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) {
-                        return PEAR::raiseError("Console_Getopt: option --$opt requires an argument");
+                        $msg = "Console_Getopt: option requires an argument --$opt";
+                        return PEAR::raiseError($msg);
                     }
-                    if (Console_Getopt::_isShortOpt($opt_arg) || Console_Getopt::_isLongOpt($opt_arg)) {
-                        return PEAR::raiseError("Console_Getopt: option requires an argument --$opt");
+
+                    if (Console_Getopt::_isShortOpt($opt_arg)
+                        || Console_Getopt::_isLongOpt($opt_arg)) {
+                        $msg = "Console_Getopt: option requires an argument --$opt";
+                        return PEAR::raiseError($msg);
                     }
                 }
             } else if ($opt_arg) {
-                return PEAR::raiseError("Console_Getopt: option --$opt doesn't allow an argument");
+                $msg = "Console_Getopt: option --$opt doesn't allow an argument";
+                return PEAR::raiseError($msg);
             }
 
             $opts[] = array('--' . $opt, $opt_arg);
             return;
         }
 
+        if ($skip_unknown === true) {
+            return;
+        }
+
         return PEAR::raiseError("Console_Getopt: unrecognized option --$opt");
     }
 
     /**
-    * Safely read the $argv PHP array across different PHP configurations.
-    * Will take care on register_globals and register_argc_argv ini directives
-    *
-    * @access public
-    * @return mixed the $argv PHP array or PEAR error if not registered
-    */
+     * Safely read the $argv PHP array across different PHP configurations.
+     * Will take care on register_globals and register_argc_argv ini directives
+     *
+     * @access public
+     * @return mixed the $argv PHP array or PEAR error if not registered
+     */
     function readPHPArgv()
     {
         global $argv;
         if (!is_array($argv)) {
             if (!@is_array($_SERVER['argv'])) {
                 if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) {
-                    return PEAR::raiseError("Console_Getopt: Could not read cmd args (register_argc_argv=Off?)");
+                    $msg = "Could not read cmd args (register_argc_argv=Off?)";
+                    return PEAR::raiseError("Console_Getopt: " . $msg);
                 }
                 return $GLOBALS['HTTP_SERVER_VARS']['argv'];
             }
@@ -6636,12 +6780,9 @@ class Console_Getopt {
         return $argv;
     }
 
-}
-
-?>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <?php
-
-/* $Id: install-pear.php 287906 2009-08-30 20:43:17Z dufuz $ */
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   <?php
+while (@ob_end_flush());
+/* $Id: install-pear.php 308763 2011-02-28 16:18:46Z dufuz $ */
 
 error_reporting(1803);
 
@@ -6676,10 +6817,10 @@ if (!$a) {
 
 $force = false;
 $install_files = array('Archive_Tar' => 'phar://install-pear-nozlib.phar/Archive_Tar-1.3.7.tar',
-'Console_Getopt' => 'phar://install-pear-nozlib.phar/Console_Getopt-1.2.3.tar',
-'Structures_Graph' => 'phar://install-pear-nozlib.phar/Structures_Graph-1.0.3.tar',
+'Console_Getopt' => 'phar://install-pear-nozlib.phar/Console_Getopt-1.3.0.tar',
+'Structures_Graph' => 'phar://install-pear-nozlib.phar/Structures_Graph-1.0.4.tar',
 'XML_Util' => 'phar://install-pear-nozlib.phar/XML_Util-1.2.1.tar',
-'PEAR' => 'phar://install-pear-nozlib.phar/PEAR-1.9.1.tar',
+'PEAR' => 'phar://install-pear-nozlib.phar/PEAR-1.9.2.tar',
 );
 array_shift($argv);
 $debug = false;
@@ -7029,7 +7170,7 @@ foreach ($install_files as $package => $instfile) {
  * @author     Gregory Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -7277,8 +7418,8 @@ class OS_Guess
  * indent-tabs-mode: nil
  * c-basic-offset: 4
  * End:
- */package2.xml                                                                                        0000644 0000765 0000024 00000122140 11377276006 012241  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="UTF-8"?>
-<package packagerversion="1.9.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
+ */package2.xml                                                                                        0000644 0000765 0000024 00000127404 11532757774 012262  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.9.2" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
  <name>PEAR</name>
  <channel>pear.php.net</channel>
  <summary>PEAR Base System</summary>
@@ -7360,11 +7501,11 @@ class OS_Guess
   <email>mj at php.net</email>
   <active>no</active>
  </helper>
- <date>2010-05-26</date>
- <time>20:52:38</time>
+ <date>2011-02-28</date>
+ <time>17:48:43</time>
  <version>
-  <release>1.9.1</release>
-  <api>1.9.1</api>
+  <release>1.9.2</release>
+  <api>1.9.2</api>
  </version>
  <stability>
   <release>stable</release>
@@ -7372,245 +7513,252 @@ class OS_Guess
  </stability>
  <license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
  <notes>
-* svntag improvements, tag package files passed into the command and better directory checks [dufuz]
-* rely on Structures_Graph minimum version instead of recommended version [saltybeagle]
-* Fix Bug #12613: running go-pear.phar from C:\ fails [dufuz]
-* Fix Bug #14841: Installing pear into directory with space fails [dufuz]
-* Fix Bug #16644: pear.bat returns syntax error when parenthesis are in install path. [dufuz] [patch by bwaters (Bryan Waters)]
-* Fix Bug #16767: Use of Depreciated HTML Attributes in the Exception class [dufuz] [patch by fuhrysteve (Stephen J. Fuhry)]
-* Fix Bug #16864: "pear list-upgrades -i" issues E_WARNINGS [dufuz] [patch by rquadling (Richard Quadling)]
-* Fix Bug #17220: command `pear help` outputs to stderr instead of stdout [dufuz]
-* Fix Bug #17234: channel-discover adds port to HTTP Host header [dufuz]
-* Fix Bug #17292: Code Coverage in PEAR_RunTest does not work with namespaces [sebastian]
-* Fix Bug #17359: loadExtension() fails over missing dl() when used in multithread env [dufuz]
-* Fix Bug #17378: pear info $package fails if directory with that name exists [dufuz]
+Important! This is a security fix release. The advisory can be found at
+http://pear.php.net/advisory-20110228.txt
+
+  Bugs:
+  * Fixed Bug #17463: Regression: On Windows, svntag [patch by doconnor]
+  * Fixed Bug #17641: pecl-list doesn't sort packages by name [dufuz]
+  * Fixed Bug #17781: invalid argument warning on foreach due to an empty optional dependencie [dufuz]
+  * Fixed Bug #17801: PEAR run-tests wrongly detects php-cgi [patch by David Jean Louis (izi)]
+  * Fixed Bug #17839: pear svntag does not tag package.xml file [dufuz]
+  * Fixed Bug #17986: PEAR Installer cannot handle files moved between packages [dufuz]
+  * Fixed Bug #17997: Strange output if directories are not writeable [dufuz]
+  * Fixed Bug #18001: PEAR/RunTest coverage fails [dufuz]
+  * Fixed Bug #18056 [SECURITY]: Symlink attack in PEAR install [dufuz]
+  * Fixed Bug #18218: "pear package" does not allow the use of late static binding [dufuz and Christer Edvartsen]
+  * Fixed Bug #18238: Wrong return code from "pear help" [till]
+  * Fixed Bug #18308: Broken error message about missing channel validator [yunosh]
+
+  This feature is implemented as a result of #18056
+  * Implemented Request #16648: Use TMPDIR for builds instead of /var/tmp [dufuz]
  </notes>
  <contents>
   <dir name="/">
-   <file md5sum="3d9c9883c2a7c0747155dada2f26be37" name="OS/Guess.php" role="php">
+   <file md5sum="7603f6baacaf0ea7790fffcc0e16c89a" name="OS/Guess.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="c530153bde718e2028c5ee0edcde919f" name="PEAR/ChannelFile/Parser.php" role="php">
+   <file md5sum="76885f7afe06fad8dc344a117ecd9280" name="PEAR/ChannelFile/Parser.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="8fd87e64002e11fd86eb2f3fbfee6599" name="PEAR/Command/Auth.xml" role="php" />
-   <file md5sum="2d274a61760df9acf36f88d2cdcbc5bf" name="PEAR/Command/Auth.php" role="php">
+   <file md5sum="0976ac790aeae7a2e3e39464b29e9157" name="PEAR/Command/Auth.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="73602fd7f051eaf8d37452d0e3063bdb" name="PEAR/Command/Build.xml" role="php" />
-   <file md5sum="1e823a289a01f5c817ac4eff1296c50d" name="PEAR/Command/Build.php" role="php">
+   <file md5sum="38647de7fc3d70ba3b712b2b3377129f" name="PEAR/Command/Build.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="6d5aab4d4308c3005b5f584c7783a031" name="PEAR/Command/Channels.xml" role="php" />
-   <file md5sum="4a4e8ca23b0faa4f84c140e6b5258d33" name="PEAR/Command/Channels.php" role="php">
+   <file md5sum="5f86073cf92d5ab9be43d2e2469ac3d1" name="PEAR/Command/Channels.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="4ce219083b34cde9e2a5141488f39335" name="PEAR/Command/Common.php" role="php">
+   <file md5sum="b66396998254782d3aa9b6dcb8d52f8c" name="PEAR/Command/Common.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="91f189cb9423b5e87ee0abc5ea1a2be3" name="PEAR/Command/Config.xml" role="php" />
-   <file md5sum="47bc731edd8c51466d075789cd8135f3" name="PEAR/Command/Config.php" role="php">
+   <file md5sum="148a76d6d70be44cac0624b710b199d6" name="PEAR/Command/Config.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="2db0386b865d3f9a29f9126728722ece" name="PEAR/Command/Install.xml" role="php" />
-   <file md5sum="a4507a5aa3ee2b63a89e8aec734ed634" name="PEAR/Command/Install.php" role="php">
+   <file md5sum="0a59e20243b49602d22de57505760ba2" name="PEAR/Command/Install.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="5cb62a04c0a268f4edd64a49a3895c92" name="PEAR/Command/Mirror.xml" role="php" />
-   <file md5sum="9019af267ac15bce27aa81f1839f9bc6" name="PEAR/Command/Mirror.php" role="php">
+   <file md5sum="136994a2164d4ac1cd284720ea341ed8" name="PEAR/Command/Mirror.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="6c3061a594644e49b0648798dce6de32" name="PEAR/Command/Package.xml" role="php" />
-   <file md5sum="942478fbb01914eec4e86e8f8f6b5f81" name="PEAR/Command/Package.php" role="php">
+   <file md5sum="13c9637cce82bb8660c4d8b450af46f2" name="PEAR/Command/Package.php" role="php">
     <tasks:replace from="@DATA-DIR@" to="data_dir" type="pear-config" />
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="28dc842ea725d8787b9f9c3dbca5aa22" name="PEAR/Command/Pickle.xml" role="php" />
-   <file md5sum="a9cdb1e95f4811b94b65c8150c009351" name="PEAR/Command/Pickle.php" role="php">
+   <file md5sum="bd80b3abdfae17fd470e2f672215533b" name="PEAR/Command/Pickle.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="49b046cfc14747f0365e02e9c3f0e6dc" name="PEAR/Command/Registry.xml" role="php" />
-   <file md5sum="7bea09a9680753183ffaa6b5cf8489d9" name="PEAR/Command/Registry.php" role="php">
+   <file md5sum="e033a30ccfa46c0ef56b8a9600a7ca49" name="PEAR/Command/Registry.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="29c02e823879b4e3e291f6b36fb339f1" name="PEAR/Command/Remote.xml" role="php" />
-   <file md5sum="7ad01351a46c780f5b2b3ca46b7f2b7e" name="PEAR/Command/Remote.php" role="php">
+   <file md5sum="97b92d3af109fb1fa6a2f75d7ca8b7cc" name="PEAR/Command/Remote.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="a50c32015005e0761cc3b04679b29ed0" name="PEAR/Command/Test.xml" role="php" />
-   <file md5sum="b10de7e19df1b028b45f0fd0cef3cea2" name="PEAR/Command/Test.php" role="php">
+   <file md5sum="83b2009fc56e881186bfb59d3a15a528" name="PEAR/Command/Test.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="035af3c0e87018b816c77de4613dad7e" name="PEAR/Downloader/Package.php" role="php">
+   <file md5sum="477639ffd5cfaa92e81acc6ea6ce7d6d" name="PEAR/Downloader/Package.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="2ad448f52de31562cb1aa6d4544c9a21" name="PEAR/Frontend/CLI.php" role="php">
+   <file md5sum="f3398ede1f7be447a36ffce474303c11" name="PEAR/Frontend/CLI.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="419793dcb9405b83c715b46991957170" name="PEAR/Installer/Role/Common.php" role="php">
+   <file md5sum="f88e91d8e0fdc0467a2777ff6e87eef3" name="PEAR/Installer/Role/Common.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="d8c62e6275e3aaa7784290912406092c" name="PEAR/Installer/Role/Cfg.xml" role="php" />
-   <file md5sum="71ee455e864d6ab1caf127b093cf69b9" name="PEAR/Installer/Role/Cfg.php" role="php">
+   <file md5sum="d51365d242fccf6c50e911c7dab51846" name="PEAR/Installer/Role/Cfg.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="89a4a2a286e842d45a98974f40a0565c" name="PEAR/Installer/Role/Data.xml" role="php" />
-   <file md5sum="c328326a8aa119281006a547ac6851fe" name="PEAR/Installer/Role/Data.php" role="php">
+   <file md5sum="036c961fce35ded967ac35a6432aa6b4" name="PEAR/Installer/Role/Data.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="b1ce0fe105251c3b75209d6518ee69ac" name="PEAR/Installer/Role/Doc.xml" role="php" />
-   <file md5sum="8831a5742304fb11b12a7106ca9aae48" name="PEAR/Installer/Role/Doc.php" role="php">
+   <file md5sum="0ca7fc1975cdd2fa2ffaf168fff23ddc" name="PEAR/Installer/Role/Doc.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="af71c0ad42d16a323afe24a4f884ef15" name="PEAR/Installer/Role/Ext.xml" role="php" />
-   <file md5sum="c578fcb78bc555bb120c01d7c9daa38f" name="PEAR/Installer/Role/Ext.php" role="php">
+   <file md5sum="3f951ef15feb1ddedc11af9a55793920" name="PEAR/Installer/Role/Ext.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="ef88f0321d3e481c2130c95122cf76d8" name="PEAR/Installer/Role/Php.xml" role="php" />
-   <file md5sum="6356cfb0741d160e16a82ee75f989b76" name="PEAR/Installer/Role/Php.php" role="php">
+   <file md5sum="dd0b4b3fc8a6d3fe893a9cf1357914aa" name="PEAR/Installer/Role/Php.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="746461dc3b48af6d24094cb0211608f2" name="PEAR/Installer/Role/Script.xml" role="php" />
-   <file md5sum="4393edd772da70ee4e6a30fda0720abf" name="PEAR/Installer/Role/Script.php" role="php">
+   <file md5sum="2b22f9b0246a414f009c7e46509eb2ce" name="PEAR/Installer/Role/Script.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="e147d63f168ea156fc2be38caaa63804" name="PEAR/Installer/Role/Src.xml" role="php" />
-   <file md5sum="543aae5ae1079a43afcefc3e8b717a35" name="PEAR/Installer/Role/Src.php" role="php">
+   <file md5sum="b202066210bd97b1f13677b9123a5dc0" name="PEAR/Installer/Role/Src.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="a24b596ec987aa5688fc19e8ed4e97ea" name="PEAR/Installer/Role/Test.xml" role="php" />
-   <file md5sum="fae5cee222cd1afccb43a58f942387d4" name="PEAR/Installer/Role/Test.php" role="php">
+   <file md5sum="4fbbbc04df1c16c0674a9d0352e025ee" name="PEAR/Installer/Role/Test.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="7641e71c5785bb33a4261ebe25ed0fd7" name="PEAR/Installer/Role/Www.xml" role="php" />
-   <file md5sum="d32da89753298476b60a6987d98b88be" name="PEAR/Installer/Role/Www.php" role="php">
+   <file md5sum="ae55d4d598bb887bd4d0aa7ea31e1a29" name="PEAR/Installer/Role/Www.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="3dba76d8cad0ee633749b215fa2f7bbb" name="PEAR/Installer/Role.php" role="php">
+   <file md5sum="f8d7f3f192591bb0b5354e659dcc04c0" name="PEAR/Installer/Role.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="eff7ba0329cfb00fe57bee018024edca" name="PEAR/PackageFile/Generator/v1.php" role="php">
+   <file md5sum="3b311c19d0ba9be5dabec4402441e358" name="PEAR/PackageFile/Generator/v1.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="a4de32c380f15e9a01dcbd07a2fa1062" name="PEAR/PackageFile/Generator/v2.php" role="php">
+   <file md5sum="a66a9d24f81ff2bbca09112e2150fcb1" name="PEAR/PackageFile/Generator/v2.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="7d3828c0f41aadc34d948f5215c4cd66" name="PEAR/PackageFile/Parser/v1.php" role="php">
+   <file md5sum="a26a911133ea3730650a71855b747478" name="PEAR/PackageFile/Parser/v1.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="a5f847fdba24116593efc223425a9609" name="PEAR/PackageFile/Parser/v2.php" role="php">
+   <file md5sum="3339e565f07ad7c79df48c967a94fdab" name="PEAR/PackageFile/Parser/v2.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="e964916c2b8fb5e1e947baa6dcc909d9" name="PEAR/PackageFile/v2/rw.php" role="php">
+   <file md5sum="9683a155ab03363ac882d1e1eabbbdbb" name="PEAR/PackageFile/v2/rw.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="feebfc45a40c46bfa7665237fb8ed5f2" name="PEAR/PackageFile/v2/Validator.php" role="php">
+   <file md5sum="b1e70351c440fb2b18f40a8e7666ac4c" name="PEAR/PackageFile/v2/Validator.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="43d3f37727760235681fdf026a43fc64" name="PEAR/PackageFile/v1.php" role="php">
+   <file md5sum="92a7e44752f87ec71ac868c49b983836" name="PEAR/PackageFile/v1.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="a1bf67f5d7009889e2ba2dcb0fb635c1" name="PEAR/PackageFile/v2.php" role="php">
+   <file md5sum="29506521602492e9c60d71318c2c3734" name="PEAR/PackageFile/v2.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="cedbfe0e711e6f0d2bb6b1e0e7f12274" name="PEAR/REST/10.php" role="php">
+   <file md5sum="7d329a9780d19ea451e3252399248a9e" name="PEAR/REST/10.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="93150a26f1a37747f5e2051deae71288" name="PEAR/REST/11.php" role="php">
+   <file md5sum="03bd9ed0db8d1fb4f19b40f18b13ab1e" name="PEAR/REST/11.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="58734baedca9a15f3013a8e5e21db229" name="PEAR/REST/13.php" role="php">
+   <file md5sum="37015364cb5d619d508b9385d45d5772" name="PEAR/REST/13.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="7e8d7f5385ee8bf9150cf1f8145432dc" name="PEAR/Task/Postinstallscript/rw.php" role="php">
+   <file md5sum="cdad68b04bbc76858b46dd679c3ed0da" name="PEAR/Task/Postinstallscript/rw.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="402e525ad2549c443f0a2d27f83df600" name="PEAR/Task/Replace/rw.php" role="php">
+   <file md5sum="990de5dff8cb0c44629beb9d30d811d4" name="PEAR/Task/Replace/rw.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="d0116f3e8c7f0226dc1056b77185f53c" name="PEAR/Task/Unixeol/rw.php" role="php">
+   <file md5sum="758cdf1a47d12cf5afb31557bd990d18" name="PEAR/Task/Unixeol/rw.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="eaf19cd57b5c132c350380572d81b901" name="PEAR/Task/Windowseol/rw.php" role="php">
+   <file md5sum="17212ae0bb8b1eb2b49ea3c508924ca8" name="PEAR/Task/Windowseol/rw.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="5b3adb4dc3798b128c05a1fc87fe1440" name="PEAR/Task/Common.php" role="php">
+   <file md5sum="f05d2838440df120b2c02e7a6c9739cc" name="PEAR/Task/Common.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="e2ef901aeb745899ef48e29bcadf9409" name="PEAR/Task/Postinstallscript.php" role="php">
+   <file md5sum="05c3161b5ba178cdb100d5f77c6867c1" name="PEAR/Task/Postinstallscript.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="20b9fce126804204841f9f394f476f38" name="PEAR/Task/Replace.php" role="php">
+   <file md5sum="c1a53771989c7f2c94ba95249bcd088e" name="PEAR/Task/Replace.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="a98e009b3b41aa2efdeab4c34c56bbda" name="PEAR/Task/Unixeol.php" role="php">
+   <file md5sum="7a85755dbbacbe0193b1aacb341195c1" name="PEAR/Task/Unixeol.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="81453f45f1c0aa142ac7e829ec40e6c7" name="PEAR/Task/Windowseol.php" role="php">
+   <file md5sum="09f591d71310db1c1af856b66806400b" name="PEAR/Task/Windowseol.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="720035513393e7331b196ab39a3dc822" name="PEAR/Validator/PECL.php" role="php">
+   <file md5sum="633cedd5fbe0b873d76726f825c43452" name="PEAR/Validator/PECL.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="0b0570ebd3e3124e88cb7f520f533bbb" name="PEAR/Autoloader.php" role="php">
+   <file md5sum="75c967d7f20c7e88e5730bfa8e0f79d5" name="PEAR/Autoloader.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="a5b7b9ee6a402ffd4855a22ccc3328e3" name="PEAR/Builder.php" role="php">
+   <file md5sum="bddd56709ff8f70bfa4d4d3497ab5f6c" name="PEAR/Builder.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="6bd29d53837ee18034e8ea7bb1a5c97c" name="PEAR/ChannelFile.php" role="php">
+   <file md5sum="a7c6103aebd5afccc9aa56719f5d0738" name="PEAR/ChannelFile.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="cc6f2699a388214e35a2d2bad21cd13d" name="PEAR/Command.php" role="php">
+   <file md5sum="ad5fd8e5ba519430dc6e5009266bf33e" name="PEAR/Command.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="4fa7f5017ea636ef7101698a3633cb31" name="PEAR/Common.php" role="php">
+   <file md5sum="52c59e6a5000be2f084bfae57e7a3015" name="PEAR/Common.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="8986d72091e1b2ca4d711ebc9fd716fe" name="PEAR/Config.php" role="php">
+   <file md5sum="3bd08408cf14b40b38f4e47b4f2f8d62" name="PEAR/Config.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="db6b82926708f636ca619b3e061dffae" name="PEAR/DependencyDB.php" role="php">
+   <file md5sum="fca80ee320f623f7dc423f804222c2f5" name="PEAR/DependencyDB.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="d4da6b74965e332e7f5dde3e391d4156" name="PEAR/Dependency2.php" role="php">
+   <file md5sum="9024f66cb48a6cf46094feeae8279927" name="PEAR/Dependency2.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="0646fba5c60d4b906889973c8e7ac6ae" name="PEAR/Downloader.php" role="php">
+   <file md5sum="4836941903f5a12263664e6894bbf86e" name="PEAR/Downloader.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="77c31950fa502d9e565653141a1f3637" name="PEAR/ErrorStack.php" role="php">
+   <file md5sum="9161368eee386cf7c39999ffb8575cc6" name="PEAR/ErrorStack.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="424a61a67dbd5f9f3ed5fc3be2b9ac54" name="PEAR/Exception.php" role="php">
+   <file md5sum="ccdd046e3dc7771152f7542deca29f89" name="PEAR/Exception.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="e0e4cbcec4a972fbad779d0f9d323120" name="PEAR/FixPHP5PEARWarnings.php" role="php" />
-   <file md5sum="8d04ed7e4179548d69d0040163cb7250" name="PEAR/Frontend.php" role="php">
+   <file md5sum="301c319491f446ff7322a87cb3ce87de" name="PEAR/Frontend.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="994655f8cc16f97cd0a241c6d548f484" name="PEAR/Installer.php" role="php">
+   <file md5sum="c4b2bdcf6bdccb96a9e956391edc08c8" name="PEAR/Installer.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="ad5eb9913cd7324545f3583df670e551" name="PEAR/PackageFile.php" role="php">
+   <file md5sum="8010b321c068d18599394fb135c8f9e3" name="PEAR/PackageFile.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="46a8ccf2a1662f008d793b0d07dfaf34" name="PEAR/Packager.php" role="php">
+   <file md5sum="db9fbd383b970f369d984f6947f71791" name="PEAR/Packager.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="289853b317cab761b6752f146feeb483" name="PEAR/Registry.php" role="php">
+   <file md5sum="f31eea0499fe1be18314ccb8137eca2a" name="PEAR/Registry.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="f789969ce01f02afc38272fe4d76bd7a" name="PEAR/REST.php" role="php">
+   <file md5sum="2a28b9ea154c19401876d105f5cc7732" name="PEAR/REST.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="b9a5d829d6897724d14b2b52b8986d74" name="PEAR/RunTest.php" role="php">
+   <file md5sum="52f7bfd1c9f910b54f9b9f30eaa6275e" name="PEAR/RunTest.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="cc4aa49c5296f475054a3054d2c33170" name="PEAR/Validate.php" role="php">
+   <file md5sum="571ba455b07af214dd508858f8f1fa77" name="PEAR/Validate.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="de6c3f7f8676896a36eef666c751987e" name="PEAR/XMLParser.php" role="php">
+   <file md5sum="1c257c0bede6f784e8105dea15108808" name="PEAR/XMLParser.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file baseinstalldir="/" md5sum="1b655ab71a82e0b32e4d01f644f04ab9" name="scripts/pear.bat" role="script">
@@ -7652,27 +7800,27 @@ class OS_Guess
     <tasks:replace from="@include_path@" to="php_dir" type="pear-config" />
     <tasks:unixeol />
    </file>
-   <file baseinstalldir="/" md5sum="ec19ff8205b9fe9468ac567386ffc435" name="scripts/pearcmd.php" role="php">
+   <file baseinstalldir="/" md5sum="90b6d92e8c3bfb59d84a75bfcac1b69a" name="scripts/pearcmd.php" role="php">
     <tasks:replace from="@php_bin@" to="php_bin" type="pear-config" />
     <tasks:replace from="@php_dir@" to="php_dir" type="pear-config" />
     <tasks:replace from="@pear_version@" to="version" type="package-info" />
     <tasks:replace from="@include_path@" to="php_dir" type="pear-config" />
    </file>
-   <file baseinstalldir="/" md5sum="320849b646e4cdaeca543af666524e73" name="scripts/peclcmd.php" role="php">
+   <file baseinstalldir="/" md5sum="6e0dab8958f7d87561b4a5ea5a9cc703" name="scripts/peclcmd.php" role="php">
     <tasks:replace from="@php_bin@" to="php_bin" type="pear-config" />
     <tasks:replace from="@php_dir@" to="php_dir" type="pear-config" />
     <tasks:replace from="@pear_version@" to="version" type="package-info" />
     <tasks:replace from="@include_path@" to="php_dir" type="pear-config" />
    </file>
    <file md5sum="45b44486d8090de17b2a8b4211fab247" name="LICENSE" role="doc" />
-   <file md5sum="dca60ef14e3f43b5fe0c31a33f1b7311" name="INSTALL" role="doc" />
+   <file md5sum="7708e944734e4ee330a467ff028e8bc2" name="INSTALL" role="doc" />
    <file md5sum="4a49bc83a392934e57af45c70a589fda" name="package.dtd" role="data" />
    <file md5sum="1a8f67d58009372a6cbcddd638b128cf" name="PEAR5.php" role="php" />
-   <file md5sum="40a050880b2bfbaa71add94087e22db1" name="PEAR.php" role="php">
+   <file md5sum="fb4a4f4266cde1ed20c8d18072213629" name="PEAR.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="d3b517006b304817731eb77cc2154258" name="README" role="doc" />
-   <file md5sum="99b954d9ba836df49368170e77748c8a" name="System.php" role="php">
+   <file md5sum="8c0b29c81943b6ff0a5f31bbca24081c" name="README" role="doc" />
+   <file md5sum="3b6e9f8261dddca82e9c261af1043847" name="System.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="acd010e3bc43c0f72df584acde7b9158" name="template.spec" role="data" />
@@ -7696,15 +7844,13 @@ class OS_Guess
    <package>
     <name>Archive_Tar</name>
     <channel>pear.php.net</channel>
-    <min>1.1</min>
-    <recommended>1.3.7</recommended>
-    <exclude>1.3.0</exclude>
+    <min>1.3.7</min>
    </package>
    <package>
     <name>Structures_Graph</name>
     <channel>pear.php.net</channel>
     <min>1.0.2</min>
-    <recommended>1.0.3</recommended>
+    <recommended>1.0.4</recommended>
    </package>
    <package>
     <name>Console_Getopt</name>
@@ -8089,7 +8235,7 @@ Alpha1 Release Notes:
    </notes>
   </release>
   <release>
-   <date>2009-10-10</date>
+   <date>2010-05-26</date>
    <version>
     <release>1.9.1</release>
     <api>1.9.1</api>
@@ -8101,11 +8247,56 @@ Alpha1 Release Notes:
    <license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
    <notes>
 * svntag improvements, tag package files passed into the command and better directory checks [dufuz]
+* rely on Structures_Graph minimum version instead of recommended version [saltybeagle]
+* Fix Bug #12613: running go-pear.phar from C:\ fails [dufuz]
+* Fix Bug #14841: Installing pear into directory with space fails [dufuz]
+* Fix Bug #16644: pear.bat returns syntax error when parenthesis are in install path. [dufuz] [patch by bwaters (Bryan Waters)]
+* Fix Bug #16767: Use of Depreciated HTML Attributes in the Exception class [dufuz] [patch by fuhrysteve (Stephen J. Fuhry)]
+* Fix Bug #16864: "pear list-upgrades -i" issues E_WARNINGS [dufuz] [patch by rquadling (Richard Quadling)]
+* Fix Bug #17220: command `pear help` outputs to stderr instead of stdout [dufuz]
+* Fix Bug #17234: channel-discover adds port to HTTP Host header [dufuz]
+* Fix Bug #17292: Code Coverage in PEAR_RunTest does not work with namespaces [sebastian]
+* Fix Bug #17359: loadExtension() fails over missing dl() when used in multithread env [dufuz]
+* Fix Bug #17378: pear info $package fails if directory with that name exists [dufuz]
+   </notes>
+  </release>
+  <release>
+   <date>2011-02-28</date>
+   <time>18:30:00</time>
+   <version>
+    <release>1.9.2</release>
+    <api>1.9.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
+   <notes>
+Important! This is a security fix release. The advisory can be found at
+http://pear.php.net/advisory-20110228.txt
+
+    Bugs:
+    * Fixed Bug #17463: Regression: On Windows, svntag [patch by doconnor]
+    * Fixed Bug #17641: pecl-list doesn't sort packages by name [dufuz]
+    * Fixed Bug #17781: invalid argument warning on foreach due to an empty optional dependencie [dufuz]
+    * Fixed Bug #17801: PEAR run-tests wrongly detects php-cgi [patch by David Jean Louis (izi)]
+    * Fixed Bug #17839: pear svntag does not tag package.xml file [dufuz]
+    * Fixed Bug #17986: PEAR Installer cannot handle files moved between packages [dufuz]
+    * Fixed Bug #17997: Strange output if directories are not writeable [dufuz]
+    * Fixed Bug #18001: PEAR/RunTest coverage fails [dufuz]
+    * Fixed Bug #18056 [SECURITY]: Symlink attack in PEAR install [dufuz]
+    * Fixed Bug #18218: "pear package" does not allow the use of late static binding [dufuz and Christer Edvartsen]
+    * Fixed Bug #18238: Wrong return code from "pear help" [till]
+    * Fixed Bug #18308: Broken error message about missing channel validator [yunosh]
+
+    This feature is implemented as a result of #18056
+    * Implemented Request #16648: Use TMPDIR for builds instead of /var/tmp [dufuz]
    </notes>
   </release>
  </changelog>
 </package>
-                                                                                                                                                                                                                                                                                                                                                                                                                                PEAR-1.9.1/OS/Guess.php                                                                             0000644 0000765 0000024 00000024634 11377276005 013365  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+                                                                                                                                                                                                                                                            PEAR-1.9.2/OS/Guess.php                                                                             0000644 0000765 0000024 00000024634 11532757773 013377  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * The OS_Guess class
  *
@@ -8117,7 +8308,7 @@ Alpha1 Release Notes:
  * @author     Gregory Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Guess.php 278521 2009-04-09 22:24:12Z dufuz $
+ * @version    CVS: $Id: Guess.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since PEAR 0.1
  */
@@ -8194,7 +8385,7 @@ Alpha1 Release Notes:
  * @author     Gregory Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -8442,7 +8633,7 @@ class OS_Guess
  * indent-tabs-mode: nil
  * c-basic-offset: 4
  * End:
- */                                                                                                    PEAR-1.9.1/PEAR/ChannelFile/Parser.php                                                              0000644 0000765 0000024 00000003362 11377276005 016104  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+ */                                                                                                    PEAR-1.9.2/PEAR/ChannelFile/Parser.php                                                              0000644 0000765 0000024 00000003362 11532757773 016116  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_ChannelFile_Parser for parsing channel.xml
  *
@@ -8453,7 +8644,7 @@ class OS_Guess
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Parser.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Parser.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -8470,7 +8661,7 @@ require_once 'PEAR/ChannelFile.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -8509,7 +8700,7 @@ class PEAR_ChannelFile_Parser extends PEAR_XMLParser
         $ret->setPackagefile($file, $archive);
         return $ret;
     }
-}                                                                                                                                                                                                                                                                              PEAR-1.9.1/PEAR/Command/Auth.xml                                                                    0000644 0000765 0000024 00000002314 11377276005 014764  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}                                                                                                                                                                                                                                                                              PEAR-1.9.2/PEAR/Command/Auth.xml                                                                    0000644 0000765 0000024 00000002314 11532757773 014776  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <login>
   <summary>Connects and authenticates to remote server [Deprecated in favor of channel-login]</summary>
   <function>doLogin</function>
@@ -8538,7 +8729,7 @@ Logs out from the remote server.  This command does not actually
 connect to the remote server, it only deletes the stored username and
 password from your user configuration.</doc>
  </logout>
-</commands>                                                                                                                                                                                                                                                                                                                    PEAR-1.9.1/PEAR/Command/Auth.php                                                                    0000644 0000765 0000024 00000005136 11377276005 014760  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                                                                                                                                                                                                    PEAR-1.9.2/PEAR/Command/Auth.php                                                                    0000644 0000765 0000024 00000005136 11532757773 014772  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Auth (login, logout commands)
  *
@@ -8550,7 +8741,7 @@ password from your user configuration.</doc>
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Auth.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Auth.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  * @deprecated since 1.8.0alpha1
@@ -8570,7 +8761,7 @@ require_once 'PEAR/Command/Channels.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  * @deprecated since 1.8.0alpha1
@@ -8618,7 +8809,7 @@ password from your user configuration.',
     {
         parent::PEAR_Command_Channels($ui, $config);
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                                  PEAR-1.9.1/PEAR/Command/Build.xml                                                                   0000644 0000765 0000024 00000000404 11377276005 015120  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}                                                                                                                                                                                                                                                                                                                                                                                                                                  PEAR-1.9.2/PEAR/Command/Build.xml                                                                   0000644 0000765 0000024 00000000404 11532757773 015132  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <build>
   <summary>Build an Extension From C Source</summary>
   <function>doBuild</function>
@@ -8627,7 +8818,7 @@ password from your user configuration.',
   <doc>[package.xml]
 Builds one or more extensions contained in a package.</doc>
  </build>
-</commands>                                                                                                                                                                                                                                                            PEAR-1.9.1/PEAR/Command/Build.php                                                                   0000644 0000765 0000024 00000004453 11377276005 015117  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                                                                                                                                            PEAR-1.9.2/PEAR/Command/Build.php                                                                   0000644 0000765 0000024 00000004453 11532757773 015131  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Auth (build command)
  *
@@ -8640,7 +8831,7 @@ Builds one or more extensions contained in a package.</doc>
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Build.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Build.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -8660,7 +8851,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -8711,7 +8902,7 @@ Builds one or more extensions contained in a package.'
             $this->ui->outputData(rtrim($data), 'build');
         }
     }
-}                                                                                                                                                                                                                     PEAR-1.9.1/PEAR/Command/Channels.xml                                                                0000644 0000765 0000024 00000010172 11377276005 015617  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}                                                                                                                                                                                                                     PEAR-1.9.2/PEAR/Command/Channels.xml                                                                0000644 0000765 0000024 00000010172 11532757773 015631  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <list-channels>
   <summary>List Available Channels</summary>
   <function>doList</function>
@@ -8833,7 +9024,7 @@ the default channel is used. This command does not actually connect to the
 remote server, it only deletes the stored username and password from your user
 configuration.</doc>
  </channel-logout>
-</commands>                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.9.1/PEAR/Command/Channels.php                                                                0000644 0000765 0000024 00000101377 11377276005 015616  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.9.2/PEAR/Command/Channels.php                                                                0000644 0000765 0000024 00000101377 11532757773 015630  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 // /* vim: set expandtab tabstop=4 shiftwidth=4: */
 /**
  * PEAR_Command_Channels (list-channels, update-channels, channel-delete, channel-add,
@@ -8847,7 +9038,7 @@ configuration.</doc>
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Channels.php 287561 2009-08-21 22:42:58Z dufuz $
+ * @version    CVS: $Id: Channels.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -8867,7 +9058,7 @@ define('PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS', -500);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -9715,7 +9906,7 @@ configuration.',
         $this->config->store();
         return true;
     }
-}                                                                                                                                                                                                                                                                 PEAR-1.9.1/PEAR/Command/Common.php                                                                  0000644 0000765 0000024 00000020144 11377276005 015303  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                 PEAR-1.9.2/PEAR/Command/Common.php                                                                  0000644 0000765 0000024 00000020144 11532757773 015315  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Common base class
  *
@@ -9727,7 +9918,7 @@ configuration.',
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Common.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Common.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -9746,7 +9937,7 @@ require_once 'PEAR.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -9987,7 +10178,7 @@ class PEAR_Command_Common extends PEAR
 
         return $this->$func($command, $options, $params);
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                            PEAR-1.9.1/PEAR/Command/Config.xml                                                                  0000644 0000765 0000024 00000006466 11377276005 015304  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}                                                                                                                                                                                                                                                                                                                                                                                                                            PEAR-1.9.2/PEAR/Command/Config.xml                                                                  0000644 0000765 0000024 00000006466 11532757773 015316  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <config-show>
   <summary>Show All Settings</summary>
   <function>doConfigShow</function>
@@ -10078,7 +10269,7 @@ PEAR installation (using the --remoteconfig option of install, upgrade,
 and uninstall).
 </doc>
  </config-create>
-</commands>                                                                                                                                                                                                          PEAR-1.9.1/PEAR/Command/Config.php                                                                  0000644 0000765 0000024 00000036076 11377276005 015273  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                                                                                          PEAR-1.9.2/PEAR/Command/Config.php                                                                  0000644 0000765 0000024 00000036076 11532757773 015305  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Config (config-show, config-get, config-set, config-help, config-create commands)
  *
@@ -10090,7 +10281,7 @@ and uninstall).
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Config.php 287554 2009-08-21 21:16:25Z dufuz $
+ * @version    CVS: $Id: Config.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -10109,7 +10300,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -10490,7 +10681,7 @@ and uninstall).
 
         return false;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                                                                  PEAR-1.9.1/PEAR/Command/Install.xml                                                                 0000644 0000765 0000024 00000020576 11377276005 015503  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                  PEAR-1.9.2/PEAR/Command/Install.xml                                                                 0000644 0000765 0000024 00000020576 11532757773 015515  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <install>
   <summary>Install Package</summary>
   <function>doInstall</function>
@@ -10765,7 +10956,7 @@ package if needed.
 Run post-installation scripts in package <package>, if any exist.
 </doc>
  </run-scripts>
-</commands>                                                                                                                                  PEAR-1.9.1/PEAR/Command/Install.php                                                                 0000644 0000765 0000024 00000143164 11377276005 015471  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                  PEAR-1.9.2/PEAR/Command/Install.php                                                                 0000644 0000765 0000024 00000143226 11532757773 015502  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Install (install, upgrade, upgrade-all, uninstall, bundle, run-scripts commands)
  *
@@ -10777,7 +10968,7 @@ Run post-installation scripts in package <package>, if any exist.
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Install.php 287477 2009-08-19 14:19:43Z dufuz $
+ * @version    CVS: $Id: Install.php 308687 2011-02-25 23:14:27Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -10797,7 +10988,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -11497,7 +11688,8 @@ Run post-installation scripts in package <package>, if any exist.
             if ($param->getPackageType() == 'extsrc' ||
                   $param->getPackageType() == 'extbin' ||
                   $param->getPackageType() == 'zendextsrc' ||
-                  $param->getPackageType() == 'zendextbin') {
+                  $param->getPackageType() == 'zendextbin'
+            ) {
                 $pkg = &$param->getPackageFile();
                 if ($instbin = $pkg->getInstalledBinary()) {
                     $instpkg = &$instreg->getPackage($instbin, $pkg->getChannel());
@@ -11508,7 +11700,8 @@ Run post-installation scripts in package <package>, if any exist.
                 foreach ($instpkg->getFilelist() as $name => $atts) {
                     $pinfo = pathinfo($atts['installed_as']);
                     if (!isset($pinfo['extension']) ||
-                          in_array($pinfo['extension'], array('c', 'h'))) {
+                          in_array($pinfo['extension'], array('c', 'h'))
+                    ) {
                         continue; // make sure we don't match php_blah.h
                     }
 
@@ -12030,7 +12223,7 @@ Run post-installation scripts in package <package>, if any exist.
 
         return $ret;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                            PEAR-1.9.1/PEAR/Command/Mirror.xml                                                                  0000644 0000765 0000024 00000001151 11377276005 015333  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}                                                                                                                                                                                                                                                                                                                                                                          PEAR-1.9.2/PEAR/Command/Mirror.xml                                                                  0000644 0000765 0000024 00000001151 11532757773 015345  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <download-all>
   <summary>Downloads each available package from the default channel</summary>
   <function>doDownloadAll</function>
@@ -12047,7 +12240,7 @@ Requests a list of available packages from the default channel ({config default_
 and downloads them to current working directory.  Note: only
 packages within preferred_state ({config preferred_state}) will be downloaded</doc>
  </download-all>
-</commands>                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.1/PEAR/Command/Mirror.php                                                                  0000644 0000765 0000024 00000010762 11377276005 015332  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.2/PEAR/Command/Mirror.php                                                                  0000644 0000765 0000024 00000010762 11532757773 015344  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Mirror (download-all command)
  *
@@ -12058,7 +12251,7 @@ packages within preferred_state ({config preferred_state}) will be downloaded</d
  * @author     Alexander Merz <alexmerz at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Mirror.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Mirror.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.2.0
  */
@@ -12076,7 +12269,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Alexander Merz <alexmerz at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.2.0
  */
@@ -12185,7 +12378,7 @@ packages within preferred_state ({config preferred_state}) will be downloaded'
 
         return true;
     }
-}              PEAR-1.9.1/PEAR/Command/Package.xml                                                                 0000644 0000765 0000024 00000016066 11377276005 015427  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}              PEAR-1.9.2/PEAR/Command/Package.xml                                                                 0000644 0000765 0000024 00000016066 11532757773 015441  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <package>
   <summary>Build Package</summary>
   <function>doPackage</function>
@@ -12421,7 +12614,7 @@ This is not the most intelligent conversion, and should only be
 used for automated conversion or learning the format.
 </doc>
  </convert>
-</commands>                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PEAR-1.9.1/PEAR/Command/Package.php                                                                 0000644 0000765 0000024 00000115763 11377276005 015422  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PEAR-1.9.2/PEAR/Command/Package.php                                                                 0000644 0000765 0000024 00000116511 11532757773 015424  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Package (package, package-validate, cvsdiff, cvstag, package-dependencies,
  * sign, makerpm, convert commands)
@@ -12435,7 +12628,7 @@ used for automated conversion or learning the format.
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Package.php 288113 2009-09-06 21:11:55Z dufuz $
+ * @version    CVS: $Id: Package.php 308690 2011-02-25 23:23:08Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -12737,7 +12930,7 @@ used for automated conversion or learning the format.
         return $a;
     }
 
-    function &getPackageFile($config, $debug = false, $tmpdir = null)
+    function &getPackageFile($config, $debug = false)
     {
         if (!class_exists('PEAR_Common')) {
             require_once 'PEAR/Common.php';
@@ -12745,7 +12938,7 @@ used for automated conversion or learning the format.
         if (!class_exists('PEAR_PackageFile')) {
             require_once 'PEAR/PackageFile.php';
         }
-        $a = &new PEAR_PackageFile($config, $debug, $tmpdir);
+        $a = &new PEAR_PackageFile($config, $debug);
         $common = new PEAR_Common;
         $common->ui = $this->ui;
         $a->setLogger($common);
@@ -12844,7 +13037,7 @@ used for automated conversion or learning the format.
 
         $packageFile = realpath($params[0]);
         $dir = dirname($packageFile);
-        $dir = substr($dir, strrpos($dir, '/') + 1);
+        $dir = substr($dir, strrpos($dir, DIRECTORY_SEPARATOR) + 1);
         $obj  = &$this->getPackageFile($this->config, $this->_debug);
         $info = $obj->fromAnyFile($packageFile, PEAR_VALIDATE_NORMAL);
         if (PEAR::isError($info)) {
@@ -12904,7 +13097,7 @@ used for automated conversion or learning the format.
         }
 
         // Check if tag already exists
-        $releaseTag = $path['local']['base'] . 'tags/' . $svntag;
+        $releaseTag = $path['local']['base'] . 'tags' . DIRECTORY_SEPARATOR . $svntag;
         $existsCommand = 'svn ls ' . $path['base'] . 'tags/';
 
         $fp = popen($existsCommand, "r");
@@ -12914,7 +13107,7 @@ used for automated conversion or learning the format.
         }
         pclose($fp);
 
-        if (in_array($svntag . '/', explode("\n", $out))) {
+        if (in_array($svntag . DIRECTORY_SEPARATOR, explode("\n", $out))) {
             $this->ui->outputData($this->output, $command);
             return $this->raiseError('SVN tag ' . $svntag . ' for ' . $package . ' already exists.');
         } elseif (file_exists($path['local']['base'] . 'tags') === false) {
@@ -12944,8 +13137,11 @@ used for automated conversion or learning the format.
         $command .= ' copy --parents ';
 
         $dir   = dirname($packageFile);
-        $dir   = substr($dir, strrpos($dir, '/') + 1);
+        $dir   = substr($dir, strrpos($dir, DIRECTORY_SEPARATOR) + 1);
         $files = array_keys($info->getFilelist());
+        if (!in_array(basename($packageFile), $files)) {
+            $files[] = basename($packageFile);
+        }
 
         array_shift($params);
         if (count($params)) {
@@ -13003,10 +13199,10 @@ used for automated conversion or learning the format.
         $path['from'] = substr($url, 0, strrpos($url, '/'));
         $path['base'] = substr($path['from'], 0, strrpos($path['from'], '/') + 1);
 
-        // Figure out the local paths
-        $pos = strpos($file, '/trunk/');
+        // Figure out the local paths - see http://pear.php.net/bugs/17463
+        $pos = strpos($file, DIRECTORY_SEPARATOR . 'trunk' . DIRECTORY_SEPARATOR);
         if ($pos === false) {
-            $pos = strpos($file, '/branches/');
+            $pos = strpos($file, DIRECTORY_SEPARATOR . 'branches' . DIRECTORY_SEPARATOR);
         }
         $path['local']['base'] = substr($file, 0, $pos + 1);
 
@@ -13392,7 +13588,9 @@ used for automated conversion or learning the format.
         }
 
         $tar = new Archive_Tar($params[0]);
-        $tmpdir = System::mktemp('-d pearsign');
+
+        $tmpdir = $this->config->get('temp_dir');
+        $tmpdir = System::mktemp(" -t $tmpdir -d pearsign");
         if (!$tar->extractList('package2.xml package.xml package.sig', $tmpdir)) {
             return $this->raiseError("failed to extract tar file");
         }
@@ -13539,7 +13737,7 @@ used for automated conversion or learning the format.
         $this->ui->outputData('Wrote new version 2.0 package.xml to "' . $saved . '"');
         return true;
     }
-}             PEAR-1.9.1/PEAR/Command/Pickle.xml                                                                  0000644 0000765 0000024 00000002233 11377276005 015272  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}                                                                                                                                                                                       PEAR-1.9.2/PEAR/Command/Pickle.xml                                                                  0000644 0000765 0000024 00000002233 11532757773 015304  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <pickle>
   <summary>Build PECL Package</summary>
   <function>doPackage</function>
@@ -13574,7 +13772,7 @@ uses any of these features, you are best off using PEAR_PackageFileManager to
 generate both package.xml.
 </doc>
  </pickle>
-</commands>                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.9.1/PEAR/Command/Pickle.php                                                                  0000644 0000765 0000024 00000037207 11377276005 015272  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.9.2/PEAR/Command/Pickle.php                                                                  0000644 0000765 0000024 00000037156 11532757773 015307  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Pickle (pickle command)
  *
@@ -13585,7 +13783,7 @@ generate both package.xml.
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  2005-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Pickle.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Pickle.php 308687 2011-02-25 23:14:27Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.1
  */
@@ -13603,7 +13801,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  2005-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.1
  */
@@ -13680,7 +13878,7 @@ generate both package.xml.
      * @param string|null $tmpdir
      * @return PEAR_PackageFile
      */
-    function &getPackageFile($config, $debug = false, $tmpdir = null)
+    function &getPackageFile($config, $debug = false)
     {
         if (!class_exists('PEAR_Common')) {
             require_once 'PEAR/Common.php';
@@ -13690,7 +13888,7 @@ generate both package.xml.
             require_once 'PEAR/PackageFile.php';
         }
 
-        $a = &new PEAR_PackageFile($config, $debug, $tmpdir);
+        $a = &new PEAR_PackageFile($config, $debug);
         $common = new PEAR_Common;
         $common->ui = $this->ui;
         $a->setLogger($common);
@@ -13994,7 +14192,7 @@ generate both package.xml.
         $gen = &$pf->getDefaultGenerator();
         $gen->toPackageFile('.');
     }
-}                                                                                                                                                                                                                                                                                                                                                                                         PEAR-1.9.1/PEAR/Command/Registry.xml                                                                0000644 0000765 0000024 00000003376 11377276005 015704  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}                                                                                                                                                                                                                                                                                                                                                                                                                  PEAR-1.9.2/PEAR/Command/Registry.xml                                                                0000644 0000765 0000024 00000003376 11532757773 015716  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <list>
   <summary>List Installed Packages In The Default Channel</summary>
   <function>doList</function>
@@ -14051,7 +14249,7 @@ Displays information about a package. The package argument may be a
 local package file, an URL to a package file, or the name of an
 installed package.</doc>
  </info>
-</commands>                                                                                                                                                                                                                                                                  PEAR-1.9.1/PEAR/Command/Registry.php                                                                0000644 0000765 0000024 00000132416 11377276005 015671  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                                                                                                                                                  PEAR-1.9.2/PEAR/Command/Registry.php                                                                0000644 0000765 0000024 00000132416 11532757773 015703  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Registry (list, list-files, shell-test, info commands)
  *
@@ -14063,7 +14261,7 @@ installed package.</doc>
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Registry.php 299146 2010-05-08 16:26:13Z dufuz $
+ * @version    CVS: $Id: Registry.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -14082,7 +14280,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -15195,7 +15393,7 @@ installed package.'
         $data['raw'] = $obj->getArray(); // no validation needed
         $this->ui->outputData($data, 'package-info');
     }
-}                                                                                                                                                                                                                                                  PEAR-1.9.1/PEAR/Command/Remote.xml                                                                  0000644 0000765 0000024 00000006357 11377276005 015331  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}                                                                                                                                                                                                                                                  PEAR-1.9.2/PEAR/Command/Remote.xml                                                                  0000644 0000765 0000024 00000006357 11532757773 015343  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <remote-info>
   <summary>Information About Remote Packages</summary>
   <function>doRemoteInfo</function>
@@ -15303,7 +15501,7 @@ Clear the XML-RPC/REST cache.  See also the cache_ttl configuration
 parameter.
 </doc>
  </clear-cache>
-</commands>                                                                                                                                                                                                                                                                                 PEAR-1.9.1/PEAR/Command/Remote.php                                                                  0000644 0000765 0000024 00000072576 11377276005 015326  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                                                                                                                                                                 PEAR-1.9.2/PEAR/Command/Remote.php                                                                  0000644 0000765 0000024 00000072566 11532757773 015337  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Remote (remote-info, list-upgrades, remote-list, search, list-all, download,
  * clear-cache commands)
@@ -15316,7 +15514,7 @@ parameter.
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Remote.php 287477 2009-08-19 14:19:43Z dufuz $
+ * @version    CVS: $Id: Remote.php 308687 2011-02-25 23:14:27Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -15336,7 +15534,7 @@ require_once 'PEAR/REST.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -15449,7 +15647,7 @@ version of DB is 1.6.5, the downloaded file will be DB-1.6.5.tgz.',
             'shortcut' => 'cc',
             'options' => array(),
             'doc' => '
-Clear the XML-RPC/REST cache.  See also the cache_ttl configuration
+Clear the REST cache. See also the cache_ttl configuration
 parameter.
 ',
             ),
@@ -16081,6 +16279,7 @@ parameter.
         if ($verbose >= 1) {
             $output .= "reading directory $cache_dir\n";
         }
+
         $num = 0;
         while ($ent = readdir($dp)) {
             if (preg_match('/rest.cache(file|id)\\z/', $ent)) {
@@ -16111,7 +16310,7 @@ parameter.
         $this->ui->outputData(rtrim($output), $command);
         return $num;
     }
-}                                                                                                                                  PEAR-1.9.1/PEAR/Command/Test.xml                                                                    0000644 0000765 0000024 00000003151 11377276005 015002  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
+}                                                                                                                                          PEAR-1.9.2/PEAR/Command/Test.xml                                                                    0000644 0000765 0000024 00000003151 11532757773 015014  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <commands version="1.0">
  <run-tests>
   <summary>Run Regression Tests</summary>
   <function>doRunTests</function>
@@ -16164,7 +16363,7 @@ If none is found, all .phpt tests will be tried instead.</doc>
   <doc>[testfile|dir ...]
 Run regression tests with PHP's regression testing script (run-tests.php).</doc>
  </run-tests>
-</commands>                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.1/PEAR/Command/Test.php                                                                    0000644 0000765 0000024 00000027267 11377276005 015007  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</commands>                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.2/PEAR/Command/Test.php                                                                    0000644 0000765 0000024 00000027266 11532757773 015020  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command_Test (run-tests)
  *
@@ -16177,7 +16376,7 @@ Run regression tests with PHP's regression testing script (run-tests.php).<
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Test.php 279072 2009-04-20 19:57:41Z cellog $
+ * @version    CVS: $Id: Test.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -16197,7 +16396,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -16500,7 +16699,7 @@ Run regression tests with PHP\'s regression testing script (run-tests.php).',
 
         return true;
     }
-}                                                                                                                                                                                                                                                                                                                                         PEAR-1.9.1/PEAR/Downloader/Package.php                                                              0000644 0000765 0000024 00000226171 11377276005 016136  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                          PEAR-1.9.2/PEAR/Downloader/Package.php                                                              0000644 0000765 0000024 00000224646 11532757773 016155  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Downloader_Package
  *
@@ -16511,7 +16710,7 @@ Run regression tests with PHP\'s regression testing script (run-tests.php).',
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Package.php 287560 2009-08-21 22:36:18Z dufuz $
+ * @version    CVS: $Id: Package.php 308687 2011-02-25 23:14:27Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -16552,7 +16751,7 @@ define('PEAR_DOWNLOADER_PACKAGE_PHPVERSION', -1004);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -17878,6 +18077,8 @@ class PEAR_Downloader_Package
                     continue;
                 }
 
+                // FIXME do symlink check
+
                 fwrite($fp, $filecontents, strlen($filecontents));
                 fclose($fp);
                 if ($s = $params[$i]->explicitState()) {
@@ -17999,13 +18200,12 @@ class PEAR_Downloader_Package
      * @param int
      * @param string
      */
-    function &getPackagefileObject(&$c, $d, $t = false)
+    function &getPackagefileObject(&$c, $d)
     {
-        $a = &new PEAR_PackageFile($c, $d, $t);
+        $a = &new PEAR_PackageFile($c, $d);
         return $a;
     }
 
-
     /**
      * This will retrieve from a local file if possible, and parse out
      * a group name as well.  The original parameter will be modified to reflect this.
@@ -18029,16 +18229,7 @@ class PEAR_Downloader_Package
             if (@is_file($param)) {
                 $this->_type = 'local';
                 $options = $this->_downloader->getOptions();
-                if (isset($options['downloadonly'])) {
-                    $pkg = &$this->getPackagefileObject($this->_config,
-                        $this->_downloader->_debug);
-                } else {
-                    if (PEAR::isError($dir = $this->_downloader->getDownloadDir())) {
-                        return $dir;
-                    }
-                    $pkg = &$this->getPackagefileObject($this->_config,
-                        $this->_downloader->_debug, $dir);
-                }
+                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->_debug);
                 PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
                 $pf = &$pkg->fromAnyFile($param, PEAR_VALIDATE_INSTALLING);
                 PEAR::popErrorHandling();
@@ -18110,15 +18301,7 @@ class PEAR_Downloader_Package
             }
 
             // whew, download worked!
-            if (isset($options['downloadonly'])) {
-                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug);
-            } else {
-                $dir = $this->_downloader->getDownloadDir();
-                if (PEAR::isError($dir)) {
-                    return $dir;
-                }
-                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug, $dir);
-            }
+            $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug);
 
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             $pf = &$pkg->fromAnyFile($file, PEAR_VALIDATE_INSTALLING);
@@ -18503,7 +18686,7 @@ class PEAR_Downloader_Package
 
         return $info;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.1/PEAR/Frontend/CLI.php                                                                    0000644 0000765 0000024 00000061142 11377276005 014666  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                          PEAR-1.9.2/PEAR/Frontend/CLI.php                                                                    0000644 0000765 0000024 00000062216 11532757773 014703  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Frontend_CLI
  *
@@ -18515,7 +18698,7 @@ class PEAR_Downloader_Package
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: CLI.php 296938 2010-03-27 16:16:25Z dufuz $
+ * @version    CVS: $Id: CLI.php 308695 2011-02-25 23:40:14Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -18532,7 +18715,7 @@ require_once 'PEAR/Frontend.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -18901,7 +19084,7 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
             case 'install':
             case 'upgrade':
             case 'upgrade-all':
-                if (isset($data['release_warnings'])) {
+                if (is_array($data) && isset($data['release_warnings'])) {
                     $this->_displayLine('');
                     $this->_startTable(array(
                         'border' => false,
@@ -18912,7 +19095,7 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                     $this->_displayLine('');
                 }
 
-                $this->_displayLine($data['data']);
+                $this->_displayLine(is_array($data) ? $data['data'] : $data);
                 break;
             case 'search':
                 $this->_startTable($data);
@@ -18920,12 +19103,19 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                     $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
                 }
 
+                $packages = array();
                 foreach($data['data'] as $category) {
-                    foreach($category as $pkg) {
-                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
+                    foreach($category as $name => $pkg) {
+                        $packages[$pkg[0]] = $pkg;
                     }
                 }
 
+                $p = array_keys($packages);
+                natcasesort($p);
+                foreach ($p as $name) {
+                    $this->_tableRow($packages[$name], null, array(1 => array('wrap' => 55)));
+                }
+
                 $this->_endTable();
                 break;
             case 'list-all':
@@ -18939,13 +19129,21 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                     $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
                 }
 
+                $packages = array();
                 foreach($data['data'] as $category) {
-                    foreach($category as $pkg) {
-                        unset($pkg[4], $pkg[5]);
-                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
+                    foreach($category as $name => $pkg) {
+                        $packages[$pkg[0]] = $pkg;
                     }
                 }
 
+                $p = array_keys($packages);
+                natcasesort($p);
+                foreach ($p as $name) {
+                    $pkg = $packages[$name];
+                    unset($pkg[4], $pkg[5]);
+                    $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
+                }
+
                 $this->_endTable();
                 break;
             case 'config-show':
@@ -19238,7 +19436,7 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
     {
         print $text;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                              PEAR-1.9.1/PEAR/Installer/Role/Common.php                                                           0000644 0000765 0000024 00000014233 11377276005 016565  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                  PEAR-1.9.2/PEAR/Installer/Role/Common.php                                                           0000644 0000765 0000024 00000014233 11532757773 016577  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * Base class for all installation roles.
  *
@@ -19249,7 +19447,7 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Common.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Common.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -19264,7 +19462,7 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -19411,7 +19609,7 @@ class PEAR_Installer_Role_Common
         return $roleInfo['phpextension'];
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.9.1/PEAR/Installer/Role/Cfg.xml                                                              0000644 0000765 0000024 00000000645 11377276005 016047  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
+?>                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.9.2/PEAR/Installer/Role/Cfg.xml                                                              0000644 0000765 0000024 00000000645 11532757773 016061  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -19425,7 +19623,7 @@ class PEAR_Installer_Role_Common
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                           PEAR-1.9.1/PEAR/Installer/Role/Cfg.php                                                              0000644 0000765 0000024 00000007702 11377276005 016037  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</role>                                                                                           PEAR-1.9.2/PEAR/Installer/Role/Cfg.php                                                              0000644 0000765 0000024 00000007702 11532757773 016051  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer_Role_Cfg
  *
@@ -19436,7 +19634,7 @@ class PEAR_Installer_Role_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  2007-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Cfg.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Cfg.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.7.0
  */
@@ -19447,7 +19645,7 @@ class PEAR_Installer_Role_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  2007-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.7.0
  */
@@ -19530,7 +19728,7 @@ class PEAR_Installer_Role_Cfg extends PEAR_Installer_Role_Common
 
         return $test;
     }
-}                                                              PEAR-1.9.1/PEAR/Installer/Role/Data.xml                                                             0000644 0000765 0000024 00000000622 11377276005 016214  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
+}                                                              PEAR-1.9.2/PEAR/Installer/Role/Data.xml                                                             0000644 0000765 0000024 00000000622 11532757773 016226  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -19544,7 +19742,7 @@ class PEAR_Installer_Role_Cfg extends PEAR_Installer_Role_Common
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                                              PEAR-1.9.1/PEAR/Installer/Role/Data.php                                                             0000644 0000765 0000024 00000001523 11377276005 016204  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</role>                                                                                                              PEAR-1.9.2/PEAR/Installer/Role/Data.php                                                             0000644 0000765 0000024 00000001523 11532757773 016216  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer_Role_Data
  *
@@ -19555,7 +19753,7 @@ class PEAR_Installer_Role_Cfg extends PEAR_Installer_Role_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Data.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Data.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -19566,12 +19764,12 @@ class PEAR_Installer_Role_Cfg extends PEAR_Installer_Role_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
 class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                             PEAR-1.9.1/PEAR/Installer/Role/Doc.xml                                                              0000644 0000765 0000024 00000000621 11377276005 016047  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
+?>                                                                                                                                                                             PEAR-1.9.2/PEAR/Installer/Role/Doc.xml                                                              0000644 0000765 0000024 00000000621 11532757773 016061  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -19585,7 +19783,7 @@ class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                                               PEAR-1.9.1/PEAR/Installer/Role/Doc.php                                                              0000644 0000765 0000024 00000001520 11377276005 016035  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</role>                                                                                                               PEAR-1.9.2/PEAR/Installer/Role/Doc.php                                                              0000644 0000765 0000024 00000001520 11532757773 016047  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer_Role_Doc
  *
@@ -19596,7 +19794,7 @@ class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Doc.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Doc.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -19607,12 +19805,12 @@ class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
 class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                PEAR-1.9.1/PEAR/Installer/Role/Ext.xml                                                              0000644 0000765 0000024 00000000502 11377276005 016100  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
+?>                                                                                                                                                                                PEAR-1.9.2/PEAR/Installer/Role/Ext.xml                                                              0000644 0000765 0000024 00000000502 11532757773 016112  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
  <releasetypes>extbin</releasetypes>
  <releasetypes>zendextbin</releasetypes>
  <installable>1</installable>
@@ -19623,7 +19821,7 @@ class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension>1</phpextension>
  <config_vars />
-</role>                                                                                                                                                                                              PEAR-1.9.1/PEAR/Installer/Role/Ext.php                                                              0000644 0000765 0000024 00000001520 11377276005 016070  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</role>                                                                                                                                                                                              PEAR-1.9.2/PEAR/Installer/Role/Ext.php                                                              0000644 0000765 0000024 00000001520 11532757773 016102  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer_Role_Ext
  *
@@ -19634,7 +19832,7 @@ class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Ext.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Ext.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -19645,12 +19843,12 @@ class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
 class PEAR_Installer_Role_Ext extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                PEAR-1.9.1/PEAR/Installer/Role/Php.xml                                                              0000644 0000765 0000024 00000000655 11377276005 016100  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
+?>                                                                                                                                                                                PEAR-1.9.2/PEAR/Installer/Role/Php.xml                                                              0000644 0000765 0000024 00000000655 11532757773 016112  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -19664,7 +19862,7 @@ class PEAR_Installer_Role_Ext extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                   PEAR-1.9.1/PEAR/Installer/Role/Php.php                                                              0000644 0000765 0000024 00000001520 11377276005 016057  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</role>                                                                                   PEAR-1.9.2/PEAR/Installer/Role/Php.php                                                              0000644 0000765 0000024 00000001520 11532757773 016071  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer_Role_Php
  *
@@ -19675,7 +19873,7 @@ class PEAR_Installer_Role_Ext extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Php.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Php.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -19686,12 +19884,12 @@ class PEAR_Installer_Role_Ext extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
 class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                PEAR-1.9.1/PEAR/Installer/Role/Script.xml                                                           0000644 0000765 0000024 00000000660 11377276005 016611  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
+?>                                                                                                                                                                                PEAR-1.9.2/PEAR/Installer/Role/Script.xml                                                           0000644 0000765 0000024 00000000660 11532757773 016623  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -19705,7 +19903,7 @@ class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
  <executable>1</executable>
  <phpextension />
  <config_vars />
-</role>                                                                                PEAR-1.9.1/PEAR/Installer/Role/Script.php                                                           0000644 0000765 0000024 00000001531 11377276005 016576  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</role>                                                                                PEAR-1.9.2/PEAR/Installer/Role/Script.php                                                           0000644 0000765 0000024 00000001531 11532757773 016610  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer_Role_Script
  *
@@ -19716,7 +19914,7 @@ class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Script.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Script.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -19727,12 +19925,12 @@ class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
 class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                       PEAR-1.9.1/PEAR/Installer/Role/Src.xml                                                              0000644 0000765 0000024 00000000442 11377276005 016072  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
+?>                                                                                                                                                                       PEAR-1.9.2/PEAR/Installer/Role/Src.xml                                                              0000644 0000765 0000024 00000000442 11532757773 016104  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
  <releasetypes>extsrc</releasetypes>
  <releasetypes>zendextsrc</releasetypes>
  <installable>1</installable>
@@ -19743,7 +19941,7 @@ class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                                                                                                                                                              PEAR-1.9.1/PEAR/Installer/Role/Src.php                                                              0000644 0000765 0000024 00000001665 11377276005 016071  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</role>                                                                                                                                                                                                                              PEAR-1.9.2/PEAR/Installer/Role/Src.php                                                              0000644 0000765 0000024 00000001665 11532757773 016103  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer_Role_Src
  *
@@ -19754,7 +19952,7 @@ class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Src.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Src.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -19765,7 +19963,7 @@ class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -19776,7 +19974,7 @@ class PEAR_Installer_Role_Src extends PEAR_Installer_Role_Common
         $installer->source_files++;
     }
 }
-?>                                                                           PEAR-1.9.1/PEAR/Installer/Role/Test.xml                                                             0000644 0000765 0000024 00000000622 11377276005 016262  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
+?>                                                                           PEAR-1.9.2/PEAR/Installer/Role/Test.xml                                                             0000644 0000765 0000024 00000000622 11532757773 016274  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -19790,7 +19988,7 @@ class PEAR_Installer_Role_Src extends PEAR_Installer_Role_Common
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                                              PEAR-1.9.1/PEAR/Installer/Role/Test.php                                                             0000644 0000765 0000024 00000001523 11377276005 016252  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</role>                                                                                                              PEAR-1.9.2/PEAR/Installer/Role/Test.php                                                             0000644 0000765 0000024 00000001523 11532757773 016264  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer_Role_Test
  *
@@ -19801,7 +19999,7 @@ class PEAR_Installer_Role_Src extends PEAR_Installer_Role_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Test.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Test.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -19812,12 +20010,12 @@ class PEAR_Installer_Role_Src extends PEAR_Installer_Role_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
 class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                             PEAR-1.9.1/PEAR/Installer/Role/Www.xml                                                              0000644 0000765 0000024 00000000644 11377276005 016133  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
+?>                                                                                                                                                                             PEAR-1.9.2/PEAR/Installer/Role/Www.xml                                                              0000644 0000765 0000024 00000000644 11532757773 016145  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -19831,7 +20029,7 @@ class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                            PEAR-1.9.1/PEAR/Installer/Role/Www.php                                                              0000644 0000765 0000024 00000001514 11377276005 016117  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+</role>                                                                                            PEAR-1.9.2/PEAR/Installer/Role/Www.php                                                              0000644 0000765 0000024 00000001514 11532757773 016131  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer_Role_Www
  *
@@ -19842,7 +20040,7 @@ class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  2007-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Www.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Www.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.7.0
  */
@@ -19853,12 +20051,12 @@ class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  2007-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.7.0
  */
 class PEAR_Installer_Role_Www extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                    PEAR-1.9.1/PEAR/Installer/Role.php                                                                  0000644 0000765 0000024 00000017464 11377276005 015346  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                    PEAR-1.9.2/PEAR/Installer/Role.php                                                                  0000644 0000765 0000024 00000017464 11532757773 015360  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer_Role
  *
@@ -19869,7 +20067,7 @@ class PEAR_Installer_Role_Www extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Role.php 278552 2009-04-10 19:42:49Z dufuz $
+ * @version    CVS: $Id: Role.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -19885,7 +20083,7 @@ require_once 'PEAR/XMLParser.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -20133,7 +20331,7 @@ class PEAR_Installer_Role
         PEAR_Installer_Role::getValidRoles('****', true);
         return true;
     }
-}                                                                                                                                                                                                            PEAR-1.9.1/PEAR/PackageFile/Generator/v1.php                                                        0000644 0000765 0000024 00000142342 11377276005 017111  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                            PEAR-1.9.2/PEAR/PackageFile/Generator/v1.php                                                        0000644 0000765 0000024 00000142342 11532757773 017123  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * package.xml generation class, package.xml version 1.0
  *
@@ -20144,7 +20342,7 @@ class PEAR_Installer_Role
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: v1.php 286494 2009-07-29 06:57:11Z dufuz $
+ * @version    CVS: $Id: v1.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -20164,7 +20362,7 @@ require_once 'PEAR/PackageFile/v2.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -20181,7 +20379,7 @@ class PEAR_PackageFile_Generator_v1
 
     function getPackagerVersion()
     {
-        return '1.9.1';
+        return '1.9.2';
     }
 
     /**
@@ -20335,7 +20533,7 @@ class PEAR_PackageFile_Generator_v1
             );
         $ret = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
         $ret .= "<!DOCTYPE package SYSTEM \"http://pear.php.net/dtd/package-1.0\">\n";
-        $ret .= "<package version=\"1.0\" packagerversion=\"1.9.1\">\n" .
+        $ret .= "<package version=\"1.0\" packagerversion=\"1.9.2\">\n" .
 " <name>$pkginfo[package]</name>";
         if (isset($pkginfo['extends'])) {
             $ret .= "\n<extends>$pkginfo[extends]</extends>";
@@ -21416,7 +21614,7 @@ class PEAR_PackageFile_Generator_v1
         return $ret;
     }
 }
-?>                                                                                                                                                                                                                                                                                              PEAR-1.9.1/PEAR/PackageFile/Generator/v2.php                                                        0000644 0000765 0000024 00000101360 11377276005 017105  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                              PEAR-1.9.2/PEAR/PackageFile/Generator/v2.php                                                        0000644 0000765 0000024 00000101360 11532757773 017117  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * package.xml generation class, package.xml version 2.0
  *
@@ -21428,7 +21626,7 @@ class PEAR_PackageFile_Generator_v1
  * @author     Stephan Schmidt (original XML_Serializer code)
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: v2.php 278907 2009-04-17 21:10:04Z dufuz $
+ * @version    CVS: $Id: v2.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -21449,7 +21647,7 @@ require_once 'XML/Util.php';
  * @author     Stephan Schmidt (original XML_Serializer code)
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -21531,7 +21729,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
      */
     function getPackagerVersion()
     {
-        return '1.9.1';
+        return '1.9.2';
     }
 
     /**
@@ -21816,7 +22014,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             $this->options['beautifyFilelist'] = true;
         }
 
-        $arr['attribs']['packagerversion'] = '1.9.1';
+        $arr['attribs']['packagerversion'] = '1.9.2';
         if ($this->serialize($arr, $options)) {
             return $this->_serializedData . "\n";
         }
@@ -22308,7 +22506,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
         }
         return  $tag;
     }
-}                                                                                                                                                                                                                                                                                PEAR-1.9.1/PEAR/PackageFile/Parser/v1.php                                                           0000644 0000765 0000024 00000040314 11377276005 016413  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                PEAR-1.9.2/PEAR/PackageFile/Parser/v1.php                                                           0000644 0000765 0000024 00000040314 11532757773 016425  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * package.xml parsing class, package.xml version 1.0
  *
@@ -22319,7 +22517,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: v1.php 276385 2009-02-24 23:46:03Z dufuz $
+ * @version    CVS: $Id: v1.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -22766,7 +22964,7 @@ class PEAR_PackageFile_Parser_v1
 
     // }}}
 }
-?>                                                                                                                                                                                                                                                                                                                    PEAR-1.9.1/PEAR/PackageFile/Parser/v2.php                                                           0000644 0000765 0000024 00000006215 11377276005 016416  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                                                    PEAR-1.9.2/PEAR/PackageFile/Parser/v2.php                                                           0000644 0000765 0000024 00000006215 11532757773 016430  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * package.xml parsing class, package.xml version 2.0
  *
@@ -22777,7 +22975,7 @@ class PEAR_PackageFile_Parser_v1
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: v2.php 276385 2009-02-24 23:46:03Z dufuz $
+ * @version    CVS: $Id: v2.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -22878,7 +23076,7 @@ class PEAR_PackageFile_Parser_v2 extends PEAR_XMLParser
         $ret->setPackagefile($file, $archive);
         return $ret;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                   PEAR-1.9.1/PEAR/PackageFile/v2/rw.php                                                               0000644 0000765 0000024 00000173210 11377276005 015612  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                   PEAR-1.9.2/PEAR/PackageFile/v2/rw.php                                                               0000644 0000765 0000024 00000173210 11532757773 015624  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_PackageFile_v2, package.xml version 2.0, read/write version
  *
@@ -22889,7 +23087,7 @@ class PEAR_PackageFile_Parser_v2 extends PEAR_XMLParser
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: rw.php 276385 2009-02-24 23:46:03Z dufuz $
+ * @version    CVS: $Id: rw.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a8
  */
@@ -22903,7 +23101,7 @@ require_once 'PEAR/PackageFile/v2.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a8
  */
@@ -24481,7 +24679,7 @@ class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
     {
         unset($this->_packageInfo['changelog']);
     }
-}                                                                                                                                                                                                                                                                                                                                                                                        PEAR-1.9.1/PEAR/PackageFile/v2/Validator.php                                                        0000644 0000765 0000024 00000250041 11377276005 017105  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                        PEAR-1.9.2/PEAR/PackageFile/v2/Validator.php                                                        0000644 0000765 0000024 00000250151 11532757773 017121  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_PackageFile_v2, package.xml version 2.0, read/write version
  *
@@ -24492,7 +24690,7 @@ class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Validator.php 277885 2009-03-27 19:29:31Z dufuz $
+ * @version    CVS: $Id: Validator.php 308729 2011-02-27 18:58:21Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a8
  */
@@ -24504,7 +24702,7 @@ class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a8
  * @access private
@@ -24595,7 +24793,7 @@ class PEAR_PackageFile_v2_Validator
               isset($test['dependencies']['required']) &&
               isset($test['dependencies']['required']['pearinstaller']) &&
               isset($test['dependencies']['required']['pearinstaller']['min']) &&
-              version_compare('1.9.1',
+              version_compare('1.9.2',
                 $test['dependencies']['required']['pearinstaller']['min'], '<')
         ) {
             $this->_pearVersionTooLow($test['dependencies']['required']['pearinstaller']['min']);
@@ -24739,11 +24937,10 @@ class PEAR_PackageFile_v2_Validator
                 $validator = $chan->getValidationObject($this->_pf->getPackage());
                 if (!$validator) {
                     $this->_stack->push(__FUNCTION__, 'error',
-                        array_merge(
-                            array('channel' => $chan->getName(),
-                                  'package' => $this->_pf->getPackage()),
-                              $valpack
-                            ),
+                        array('channel' => $chan->getName(),
+                              'package' => $this->_pf->getPackage(),
+                              'name'    => $valpack['_content'],
+                              'version' => $valpack['attribs']['version']),
                         'package "%channel%/%package%" cannot be properly validated without ' .
                         'validation package "%channel%/%name%-%version%"');
                     return $this->_isValid = 0;
@@ -25834,7 +26031,7 @@ class PEAR_PackageFile_v2_Validator
         $this->_stack->push(__FUNCTION__, 'error',
             array('version' => $version),
             'This package.xml requires PEAR version %version% to parse properly, we are ' .
-            'version 1.9.1');
+            'version 1.9.2');
     }
 
     function _invalidTagOrder($oktags, $actual, $root)
@@ -26528,7 +26725,8 @@ class PEAR_PackageFile_v2_Validator
                     }
                     continue 2;
                 case T_DOUBLE_COLON:
-                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
+                    $token = $tokens[$i - 1][0];
+                    if (!($token == T_WHITESPACE || $token == T_STRING || $token == T_STATIC)) {
                         if (isset($this->_stack)) {
                             $this->_stack->push(__FUNCTION__, 'warning', array('file' => $file),
                                 'Parser error: invalid PHP found in file "%file%"');
@@ -26634,7 +26832,7 @@ class PEAR_PackageFile_v2_Validator
 
         return $providesret;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               PEAR-1.9.1/PEAR/PackageFile/v1.php                                                                  0000644 0000765 0000024 00000143760 11377276005 015170  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.2/PEAR/PackageFile/v1.php                                                                  0000644 0000765 0000024 00000143760 11532757773 015202  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_PackageFile_v1, package.xml version 1.0
  *
@@ -26645,7 +26843,7 @@ class PEAR_PackageFile_v2_Validator
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: v1.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: v1.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -26911,7 +27109,7 @@ define('PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME', 52);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -28246,7 +28444,7 @@ class PEAR_PackageFile_v1
     // }}}
 }
 ?>
-                PEAR-1.9.1/PEAR/PackageFile/v2.php                                                                  0000644 0000765 0000024 00000207576 11377276006 015200  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+                PEAR-1.9.2/PEAR/PackageFile/v2.php                                                                  0000644 0000765 0000024 00000207576 11532757773 015211  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_PackageFile_v2, package.xml version 2.0
  *
@@ -28257,7 +28455,7 @@ class PEAR_PackageFile_v1
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: v2.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: v2.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -28271,7 +28469,7 @@ require_once 'PEAR/ErrorStack.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -30291,7 +30489,7 @@ class PEAR_PackageFile_v2
     }
 }
 ?>
-                                                                                                                                  PEAR-1.9.1/PEAR/REST/10.php                                                                         0000644 0000765 0000024 00000077605 11377276006 013511  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+                                                                                                                                  PEAR-1.9.2/PEAR/REST/10.php                                                                         0000644 0000765 0000024 00000077605 11532757773 013522  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_REST_10
  *
@@ -30302,7 +30500,7 @@ class PEAR_PackageFile_v2
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: 10.php 287558 2009-08-21 22:21:28Z dufuz $
+ * @version    CVS: $Id: 10.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a12
  */
@@ -30320,7 +30518,7 @@ require_once 'PEAR/REST.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a12
  */
@@ -31157,7 +31355,7 @@ class PEAR_REST_10
             return 1;
         }
     }
-}                                                                                                                           PEAR-1.9.1/PEAR/REST/11.php                                                                         0000644 0000765 0000024 00000026054 11377276006 013502  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                           PEAR-1.9.2/PEAR/REST/11.php                                                                         0000644 0000765 0000024 00000026054 11532757773 013513  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_REST_11 - implement faster list-all/remote-list command
  *
@@ -31168,7 +31366,7 @@ class PEAR_REST_10
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: 11.php 286670 2009-08-02 14:16:06Z dufuz $
+ * @version    CVS: $Id: 11.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.3
  */
@@ -31186,7 +31384,7 @@ require_once 'PEAR/REST.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.3
  */
@@ -31497,7 +31695,7 @@ class PEAR_REST_11
         return array_slice($states, $i + 1);
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    PEAR-1.9.1/PEAR/REST/13.php                                                                         0000644 0000765 0000024 00000026544 11377276006 013510  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    PEAR-1.9.2/PEAR/REST/13.php                                                                         0000644 0000765 0000024 00000026544 11532757773 013521  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_REST_13
  *
@@ -31508,7 +31706,7 @@ class PEAR_REST_11
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: 13.php 287110 2009-08-11 18:51:15Z dufuz $
+ * @version    CVS: $Id: 13.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a12
  */
@@ -31527,7 +31725,7 @@ require_once 'PEAR/REST/10.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a12
  */
@@ -31795,7 +31993,7 @@ class PEAR_REST_13 extends PEAR_REST_10
 
         return $this->_returnDownloadURL($base, $package, $release, $info, $found, $skippedphp, $channel);
     }
-}                                                                                                                                                            PEAR-1.9.1/PEAR/Task/Postinstallscript/rw.php                                                       0000644 0000765 0000024 00000013311 11377276006 017567  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                            PEAR-1.9.2/PEAR/Task/Postinstallscript/rw.php                                                       0000644 0000765 0000024 00000013311 11532757773 017600  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * <tasks:postinstallscript> - read/write version
  *
@@ -31806,7 +32004,7 @@ class PEAR_REST_13 extends PEAR_REST_10
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: rw.php 276385 2009-02-24 23:46:03Z dufuz $
+ * @version    CVS: $Id: rw.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a10
  */
@@ -31821,7 +32019,7 @@ require_once 'PEAR/Task/Postinstallscript.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
@@ -31963,7 +32161,7 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
             );
     }
 }
-?>                                                                                                                                                                                                                                                                                                                       PEAR-1.9.1/PEAR/Task/Replace/rw.php                                                                 0000644 0000765 0000024 00000003115 11377276006 015402  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                                                       PEAR-1.9.2/PEAR/Task/Replace/rw.php                                                                 0000644 0000765 0000024 00000003115 11532757773 015413  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * <tasks:replace> - read/write version
  *
@@ -31974,7 +32172,7 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: rw.php 276385 2009-02-24 23:46:03Z dufuz $
+ * @version    CVS: $Id: rw.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a10
  */
@@ -31989,7 +32187,7 @@ require_once 'PEAR/Task/Replace.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
@@ -32023,7 +32221,7 @@ class PEAR_Task_Replace_rw extends PEAR_Task_Replace
         return $this->_params;
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                                   PEAR-1.9.1/PEAR/Task/Unixeol/rw.php                                                                 0000644 0000765 0000024 00000002535 11377276006 015457  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                                                                                                                                                                                   PEAR-1.9.2/PEAR/Task/Unixeol/rw.php                                                                 0000644 0000765 0000024 00000002535 11532757773 015470  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * <tasks:unixeol> - read/write version
  *
@@ -32034,7 +32232,7 @@ class PEAR_Task_Replace_rw extends PEAR_Task_Replace
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: rw.php 276385 2009-02-24 23:46:03Z dufuz $
+ * @version    CVS: $Id: rw.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a10
  */
@@ -32049,7 +32247,7 @@ require_once 'PEAR/Task/Unixeol.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
@@ -32078,7 +32276,7 @@ class PEAR_Task_Unixeol_rw extends PEAR_Task_Unixeol
         return '';
     }
 }
-?>                                                                                                                                                                   PEAR-1.9.1/PEAR/Task/Windowseol/rw.php                                                              0000644 0000765 0000024 00000002562 11377276006 016166  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                   PEAR-1.9.2/PEAR/Task/Windowseol/rw.php                                                              0000644 0000765 0000024 00000002562 11532757773 016177  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * <tasks:windowseol> - read/write version
  *
@@ -32089,7 +32287,7 @@ class PEAR_Task_Unixeol_rw extends PEAR_Task_Unixeol
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: rw.php 276385 2009-02-24 23:46:03Z dufuz $
+ * @version    CVS: $Id: rw.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a10
  */
@@ -32104,7 +32302,7 @@ require_once 'PEAR/Task/Windowseol.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
@@ -32133,7 +32331,7 @@ class PEAR_Task_Windowseol_rw extends PEAR_Task_Windowseol
         return '';
     }
 }
-?>                                                                                                                                              PEAR-1.9.1/PEAR/Task/Common.php                                                                     0000644 0000765 0000024 00000013736 11377276006 014641  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                              PEAR-1.9.2/PEAR/Task/Common.php                                                                     0000644 0000765 0000024 00000013736 11532757773 014652  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Task_Common, base class for installer tasks
  *
@@ -32144,7 +32342,7 @@ class PEAR_Task_Windowseol_rw extends PEAR_Task_Windowseol
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Common.php 276394 2009-02-25 00:15:49Z dufuz $
+ * @version    CVS: $Id: Common.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -32182,7 +32380,7 @@ define('PEAR_TASK_PACKAGEANDINSTALL', 3);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  * @abstract
@@ -32334,7 +32532,7 @@ class PEAR_Task_Common
         return PEAR::raiseError($msg, $code);
     }
 }
-?>                                  PEAR-1.9.1/PEAR/Task/Postinstallscript.php                                                          0000644 0000765 0000024 00000034122 11377276006 017142  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                  PEAR-1.9.2/PEAR/Task/Postinstallscript.php                                                          0000644 0000765 0000024 00000034122 11532757773 017153  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * <tasks:postinstallscript>
  *
@@ -32345,7 +32543,7 @@ class PEAR_Task_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Postinstallscript.php 276385 2009-02-24 23:46:03Z dufuz $
+ * @version    CVS: $Id: Postinstallscript.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -32363,7 +32561,7 @@ require_once 'PEAR/Task/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -32656,7 +32854,7 @@ class PEAR_Task_Postinstallscript extends PEAR_Task_Common
     {
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                              PEAR-1.9.1/PEAR/Task/Replace.php                                                                    0000644 0000765 0000024 00000015232 11377276006 014755  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                                                                                                                                                                              PEAR-1.9.2/PEAR/Task/Replace.php                                                                    0000644 0000765 0000024 00000015232 11532757773 014766  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * <tasks:replace>
  *
@@ -32667,7 +32865,7 @@ class PEAR_Task_Postinstallscript extends PEAR_Task_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Replace.php 276394 2009-02-25 00:15:49Z dufuz $
+ * @version    CVS: $Id: Replace.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -32682,7 +32880,7 @@ require_once 'PEAR/Task/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -32831,7 +33029,7 @@ class PEAR_Task_Replace extends PEAR_Task_Common
         return $contents;
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.9.1/PEAR/Task/Unixeol.php                                                                    0000644 0000765 0000024 00000004341 11377276006 015024  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.9.2/PEAR/Task/Unixeol.php                                                                    0000644 0000765 0000024 00000004341 11532757773 015035  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * <tasks:unixeol>
  *
@@ -32842,7 +33040,7 @@ class PEAR_Task_Replace extends PEAR_Task_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Unixeol.php 276394 2009-02-25 00:15:49Z dufuz $
+ * @version    CVS: $Id: Unixeol.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -32857,7 +33055,7 @@ require_once 'PEAR/Task/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -32907,7 +33105,7 @@ class PEAR_Task_Unixeol extends PEAR_Task_Common
         return preg_replace("/\r\n|\n\r|\r|\n/", "\n", $contents);
     }
 }
-?>                                                                                                                                                                                                                                                                                               PEAR-1.9.1/PEAR/Task/Windowseol.php                                                                 0000644 0000765 0000024 00000004335 11377276006 015536  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                               PEAR-1.9.2/PEAR/Task/Windowseol.php                                                                 0000644 0000765 0000024 00000004335 11532757773 015547  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * <tasks:windowseol>
  *
@@ -32918,7 +33116,7 @@ class PEAR_Task_Unixeol extends PEAR_Task_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Windowseol.php 276394 2009-02-25 00:15:49Z dufuz $
+ * @version    CVS: $Id: Windowseol.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -32933,7 +33131,7 @@ require_once 'PEAR/Task/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -32983,7 +33181,7 @@ class PEAR_Task_Windowseol extends PEAR_Task_Common
         return preg_replace("/\r\n|\n\r|\r|\n/", "\r\n", $contents);
     }
 }
-?>                                                                                                                                                                                                                                                                                                   PEAR-1.9.1/PEAR/Validator/PECL.php                                                                  0000644 0000765 0000024 00000004175 11377276006 015154  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                                   PEAR-1.9.2/PEAR/Validator/PECL.php                                                                  0000644 0000765 0000024 00000004175 11532757773 015165  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * Channel Validator for the pecl.php.net channel
  *
@@ -32994,7 +33192,7 @@ class PEAR_Task_Windowseol extends PEAR_Task_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: PECL.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: PECL.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a5
  */
@@ -33009,7 +33207,7 @@ require_once 'PEAR/Validate.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a5
  */
@@ -33045,7 +33243,7 @@ class PEAR_Validator_PECL extends PEAR_Validate
         return $ret;
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                   PEAR-1.9.1/PEAR/Autoloader.php                                                                      0000644 0000765 0000024 00000014645 11377276006 014606  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                                                                                                                                   PEAR-1.9.2/PEAR/Autoloader.php                                                                      0000644 0000765 0000024 00000014645 11532757773 014617  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * Class auto-loader
  *
@@ -33057,7 +33255,7 @@ class PEAR_Validator_PECL extends PEAR_Validate
  * @author     Stig Bakken <ssb at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Autoloader.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Autoloader.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/manual/en/core.ppm.php#core.ppm.pear-autoloader
  * @since      File available since Release 0.1
  * @deprecated File deprecated in Release 1.4.0a1
@@ -33092,7 +33290,7 @@ require_once "PEAR.php";
  * @author Stig Bakken <ssb at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/manual/en/core.ppm.php#core.ppm.pear-autoloader
  * @since      File available since Release 0.1
  * @deprecated File deprecated in Release 1.4.0a1
@@ -33263,7 +33461,7 @@ class PEAR_Autoloader extends PEAR
 overload("PEAR_Autoloader");
 
 ?>
-                                                                                           PEAR-1.9.1/PEAR/Builder.php                                                                         0000644 0000765 0000024 00000040120 11377276006 014060  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+                                                                                           PEAR-1.9.2/PEAR/Builder.php                                                                         0000644 0000765 0000024 00000040133 11532757773 014075  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Builder for building PHP extensions (PECL packages)
  *
@@ -33275,7 +33473,7 @@ overload("PEAR_Autoloader");
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Builder.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Builder.php 308687 2011-02-25 23:14:27Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  *
@@ -33298,7 +33496,7 @@ require_once 'PEAR/PackageFile.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since PHP 4.0.2
  * @see        http://pear.php.net/manual/en/core.ppm.pear-builder.php
@@ -33485,7 +33683,7 @@ class PEAR_Builder extends PEAR_Common
     /**
      * Build an extension from source.  Runs "phpize" in the source
      * directory, but compiles in a temporary directory
-     * (/var/tmp/pear-build-USER/PACKAGE-VERSION).
+     * (TMPDIR/pear-build-USER/PACKAGE-VERSION).
      *
      * @param string|PEAR_PackageFile_v* $descfile path to XML package description file, or
      *               a PEAR_PackageFile object
@@ -33515,6 +33713,7 @@ class PEAR_Builder extends PEAR_Common
                            ' appears to have a prefix ' . $matches[2] . ', but' .
                            ' config variable php_prefix does not match');
             }
+
             if (isset($matches[3]) && strlen($matches[3]) &&
                 trim($matches[3]) != trim($this->config->get('php_suffix'))) {
                 $this->log(0, 'WARNING: php_bin ' . $this->config->get('php_bin') .
@@ -33523,14 +33722,15 @@ class PEAR_Builder extends PEAR_Common
             }
         }
 
-
         $this->current_callback = $callback;
         if (PEAR_OS == "Windows") {
             return $this->_build_win32($descfile, $callback);
         }
+
         if (PEAR_OS != 'Unix') {
             return $this->raiseError("building extensions not supported on this platform");
         }
+
         if (is_object($descfile)) {
             $pkg = $descfile;
             $descfile = $pkg->getPackageFile();
@@ -33549,14 +33749,17 @@ class PEAR_Builder extends PEAR_Common
             }
             $dir = dirname($descfile);
         }
+
         $old_cwd = getcwd();
         if (!file_exists($dir) || !is_dir($dir) || !chdir($dir)) {
             return $this->raiseError("could not chdir to $dir");
         }
+
         $vdir = $pkg->getPackage() . '-' . $pkg->getVersion();
         if (is_dir($vdir)) {
             chdir($vdir);
         }
+
         $dir = getcwd();
         $this->log(2, "building in $dir");
         putenv('PATH=' . $this->config->get('bin_dir') . ':' . getenv('PATH'));
@@ -33567,6 +33770,7 @@ class PEAR_Builder extends PEAR_Common
         if (PEAR::isError($err)) {
             return $err;
         }
+
         if (!$err) {
             return $this->raiseError("`phpize' failed");
         }
@@ -33592,30 +33796,31 @@ class PEAR_Builder extends PEAR_Common
         // }}} end of interactive part
 
         // FIXME make configurable
-        if(!$user=getenv('USER')){
+        if (!$user=getenv('USER')) {
             $user='defaultuser';
         }
-        $build_basedir = "/var/tmp/pear-build-$user";
+
+        $tmpdir = $this->config->get('temp_dir');
+        $build_basedir = System::mktemp(" -t $tmpdir -d pear-build-$user");
         $build_dir = "$build_basedir/$vdir";
         $inst_dir = "$build_basedir/install-$vdir";
         $this->log(1, "building in $build_dir");
         if (is_dir($build_dir)) {
             System::rm(array('-rf', $build_dir));
         }
+
         if (!System::mkDir(array('-p', $build_dir))) {
             return $this->raiseError("could not create build dir: $build_dir");
         }
+
         $this->addTempFile($build_dir);
         if (!System::mkDir(array('-p', $inst_dir))) {
             return $this->raiseError("could not create temporary install dir: $inst_dir");
         }
         $this->addTempFile($inst_dir);
 
-        if (getenv('MAKE')) {
-            $make_command = getenv('MAKE');
-        } else {
-            $make_command = 'make';
-        }
+        $make_command = getenv('MAKE') ? getenv('MAKE') : 'make';
+
         $to_run = array(
             $configure_command,
             $make_command,
@@ -33625,7 +33830,7 @@ class PEAR_Builder extends PEAR_Common
         if (!file_exists($build_dir) || !is_dir($build_dir) || !chdir($build_dir)) {
             return $this->raiseError("could not chdir to $build_dir");
         }
-        putenv('PHP_PEAR_VERSION=1.9.1');
+        putenv('PHP_PEAR_VERSION=1.9.2');
         foreach ($to_run as $cmd) {
             $err = $this->_runCommand($cmd, $callback);
             if (PEAR::isError($err)) {
@@ -33736,7 +33941,7 @@ class PEAR_Builder extends PEAR_Common
         }
         return PEAR_Common::log($level, $msg);
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                                                PEAR-1.9.1/PEAR/ChannelFile.php                                                                     0000644 0000765 0000024 00000143353 11377276006 014656  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.9.2/PEAR/ChannelFile.php                                                                     0000644 0000765 0000024 00000143353 11532757773 014667  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_ChannelFile, the channel handling class
  *
@@ -33747,7 +33952,7 @@ class PEAR_Builder extends PEAR_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: ChannelFile.php 286951 2009-08-09 14:41:22Z dufuz $
+ * @version    CVS: $Id: ChannelFile.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -33884,7 +34089,7 @@ $GLOBALS['_PEAR_CHANNELS_MIRROR_TYPES'] =  array('server');
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -35294,7 +35499,7 @@ class PEAR_ChannelFile
 
         return time();
     }
-}                                                                                                                                                                                                                                                                                     PEAR-1.9.1/PEAR/Command.php                                                                         0000644 0000765 0000024 00000030633 11377276006 014060  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                     PEAR-1.9.2/PEAR/Command.php                                                                         0000644 0000765 0000024 00000030633 11532757773 014071  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Command, command pattern class
  *
@@ -35306,7 +35511,7 @@ class PEAR_ChannelFile
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Command.php 286494 2009-07-29 06:57:11Z dufuz $
+ * @version    CVS: $Id: Command.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -35390,7 +35595,7 @@ $GLOBALS['_PEAR_Command_objects'] = array();
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -35707,7 +35912,7 @@ class PEAR_Command
         return false;
     }
     // }}}
-}                                                                                                     PEAR-1.9.1/PEAR/Common.php                                                                          0000644 0000765 0000024 00000062255 11377276006 013737  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                     PEAR-1.9.2/PEAR/Common.php                                                                          0000644 0000765 0000024 00000062255 11532757773 013750  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Common, the base class for the PEAR Installer
  *
@@ -35720,7 +35925,7 @@ class PEAR_Command
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Common.php 282969 2009-06-28 23:09:27Z dufuz $
+ * @version    CVS: $Id: Common.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1.0
  * @deprecated File deprecated since Release 1.4.0a1
@@ -35827,7 +36032,7 @@ $GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'p
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  * @deprecated This class will disappear, and its components will be spread
@@ -36543,7 +36748,7 @@ class PEAR_Common extends PEAR
 }
 
 require_once 'PEAR/Config.php';
-require_once 'PEAR/PackageFile.php';                                                                                                                                                                                                                                                                                                                                                   PEAR-1.9.1/PEAR/Config.php                                                                          0000644 0000765 0000024 00000204452 11377276006 013711  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+require_once 'PEAR/PackageFile.php';                                                                                                                                                                                                                                                                                                                                                   PEAR-1.9.2/PEAR/Config.php                                                                          0000644 0000765 0000024 00000204452 11532757773 013722  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Config, customized configuration handling for the PEAR Installer
  *
@@ -36555,7 +36760,7 @@ require_once 'PEAR/PackageFile.php';                                            
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Config.php 286480 2009-07-29 02:50:02Z dufuz $
+ * @version    CVS: $Id: Config.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -36791,7 +36996,7 @@ if (getenv('PHP_PEAR_SIG_KEYDIR')) {
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -38640,7 +38845,7 @@ class PEAR_Config extends PEAR
         }
     }
 }
-                                                                                                                                                                                                                      PEAR-1.9.1/PEAR/DependencyDB.php                                                                    0000644 0000765 0000024 00000057256 11377276006 015000  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+                                                                                                                                                                                                                      PEAR-1.9.2/PEAR/DependencyDB.php                                                                    0000644 0000765 0000024 00000057256 11532757773 015011  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_DependencyDB, advanced installed packages dependency database
  *
@@ -38652,7 +38857,7 @@ class PEAR_Config extends PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: DependencyDB.php 286686 2009-08-02 17:38:57Z dufuz $
+ * @version    CVS: $Id: DependencyDB.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -38672,7 +38877,7 @@ $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'] = array();
  * @author     Tomas V.V.Cox <cox at idec.net.com>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -39408,7 +39613,7 @@ class PEAR_DependencyDB
             );
         }
     }
-}                                                                                                                                                                                                                                                                                                                                                  PEAR-1.9.1/PEAR/Dependency2.php                                                                     0000644 0000765 0000024 00000142517 11377276006 014647  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                  PEAR-1.9.2/PEAR/Dependency2.php                                                                     0000644 0000765 0000024 00000142517 11532757773 014660  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Dependency2, advanced dependency validation
  *
@@ -39419,7 +39624,7 @@ class PEAR_DependencyDB
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Dependency2.php 286494 2009-07-29 06:57:11Z dufuz $
+ * @version    CVS: $Id: Dependency2.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -39441,7 +39646,7 @@ require_once 'PEAR/Validate.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -39951,7 +40156,7 @@ class PEAR_Dependency2
      */
     function getPEARVersion()
     {
-        return '1.9.1';
+        return '1.9.2';
     }
 
     function validatePearinstallerDependency($dep)
@@ -40765,7 +40970,7 @@ class PEAR_Dependency2
         return array(sprintf($msg, $this->_registry->parsedPackageNameToString(
             $this->_currentPackage, true)));
     }
-}                                                                                                                                                                                 PEAR-1.9.1/PEAR/Downloader.php                                                                      0000644 0000765 0000024 00000201376 11377276006 014604  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                 PEAR-1.9.2/PEAR/Downloader.php                                                                      0000644 0000765 0000024 00000202017 11532757773 014606  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Downloader, the PEAR Installer's download utility class
  *
@@ -40779,7 +40984,7 @@ class PEAR_Dependency2
  * @author     Martin Jansen <mj at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Downloader.php 296767 2010-03-25 00:58:33Z dufuz $
+ * @version    CVS: $Id: Downloader.php 308691 2011-02-25 23:25:02Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.3.0
  */
@@ -40806,7 +41011,7 @@ define('PEAR_INSTALLER_ERROR_NO_PREF_STATE', 2);
  * @author     Martin Jansen <mj at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.3.0
  */
@@ -40956,7 +41161,8 @@ class PEAR_Downloader extends PEAR_Common
             require_once 'System.php';
         }
 
-        $tmp = System::mktemp(array('-d'));
+        $tmpdir = $this->config->get('temp_dir');
+        $tmp = System::mktemp("-d -t $tmpdir");
         $a   = $this->downloadHttp('http://' . $channel . '/channel.xml', $this->ui, $tmp, $callback, false);
         PEAR::popErrorHandling();
         if (PEAR::isError($a)) {
@@ -41260,14 +41466,13 @@ class PEAR_Downloader extends PEAR_Common
      */
     function analyzeDependencies(&$params, $force = false)
     {
-        $hasfailed = $failed = false;
         if (isset($this->_options['downloadonly'])) {
             return;
         }
 
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         $redo  = true;
-        $reset = false;
+        $reset = $hasfailed = $failed = false;
         while ($redo) {
             $redo = false;
             foreach ($params as $i => $param) {
@@ -41320,7 +41525,7 @@ class PEAR_Downloader extends PEAR_Common
                     }
 
                     $failed = false;
-                    if (isset($deps['required'])) {
+                    if (isset($deps['required']) && is_array($deps['required'])) {
                         foreach ($deps['required'] as $type => $dep) {
                             // note: Dependency2 will never return a PEAR_Error if ignore-errors
                             // is specified, so soft is needed to turn off logging
@@ -41354,7 +41559,7 @@ class PEAR_Downloader extends PEAR_Common
                             }
                         }
 
-                        if (isset($deps['optional'])) {
+                        if (isset($deps['optional']) && is_array($deps['optional'])) {
                             foreach ($deps['optional'] as $type => $dep) {
                                 if (!isset($dep[0])) {
                                     if (PEAR::isError($e =
@@ -41465,6 +41670,7 @@ class PEAR_Downloader extends PEAR_Common
                 }
             }
         }
+
         PEAR::staticPopErrorHandling();
         if ($hasfailed && (isset($this->_options['ignore-errors']) ||
               isset($this->_options['nodeps']))) {
@@ -41485,6 +41691,7 @@ class PEAR_Downloader extends PEAR_Common
         if (isset($this->_downloadDir)) {
             return $this->_downloadDir;
         }
+
         $downloaddir = $this->config->get('download_dir');
         if (empty($downloaddir) || (is_dir($downloaddir) && !is_writable($downloaddir))) {
             if  (is_dir($downloaddir) && !is_writable($downloaddir)) {
@@ -41492,14 +41699,17 @@ class PEAR_Downloader extends PEAR_Common
                     '" is not writeable.  Change download_dir config variable to ' .
                     'a writeable dir to avoid this warning');
             }
+
             if (!class_exists('System')) {
                 require_once 'System.php';
             }
+
             if (PEAR::isError($downloaddir = System::mktemp('-d'))) {
                 return $downloaddir;
             }
             $this->log(3, '+ tmp dir created at ' . $downloaddir);
         }
+
         if (!is_writable($downloaddir)) {
             if (PEAR::isError(System::mkdir(array('-p', $downloaddir))) ||
                   !is_writable($downloaddir)) {
@@ -41508,6 +41718,7 @@ class PEAR_Downloader extends PEAR_Common
                     'a writeable dir');
             }
         }
+
         return $this->_downloadDir = $downloaddir;
     }
 
@@ -41538,27 +41749,11 @@ class PEAR_Downloader extends PEAR_Common
         $this->_options = $options;
     }
 
-    // }}}
-    // {{{ setOptions()
     function getOptions()
     {
         return $this->_options;
     }
 
-    /**
-     * For simpler unit-testing
-     * @param PEAR_Config
-     * @param int
-     * @param string
-     */
-    function &getPackagefileObject(&$c, $d, $t = false)
-    {
-        if (!class_exists('PEAR_PackageFile')) {
-            require_once 'PEAR/PackageFile.php';
-        }
-        $a = &new PEAR_PackageFile($c, $d, $t);
-        return $a;
-    }
 
     /**
      * @param array output of {@link parsePackageName()}
@@ -41767,9 +41962,20 @@ class PEAR_Downloader extends PEAR_Common
             }
             return $info;
         } elseif ($chan->supportsREST($this->config->get('preferred_mirror'))
-              && $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))
+              &&
+                (
+                  ($base2 = $chan->getBaseURL('REST1.3', $this->config->get('preferred_mirror')))
+                    ||
+                  ($base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror')))
+                )
         ) {
-            $rest = &$this->config->getREST('1.0', $this->_options);
+            if ($base2) {
+                $base = $base2;
+                $rest = &$this->config->getREST('1.3', $this->_options);
+            } else {
+                $rest = &$this->config->getREST('1.0', $this->_options);
+            }
+
             $url = $rest->getDepDownloadURL($base, $xsdversion, $dep, $parr,
                     $state, $version, $chan->getName());
             if (PEAR::isError($url)) {
@@ -42405,7 +42611,7 @@ class PEAR_Downloader extends PEAR_Common
         }
 
         $request .= $ifmodifiedsince .
-            "User-Agent: PEAR/1.9.1/PHP/" . PHP_VERSION . "\r\n";
+            "User-Agent: PEAR/1.9.2/PHP/" . PHP_VERSION . "\r\n";
 
         if (isset($this)) { // only pass in authentication for non-static calls
             $username = $config->get('username', null, $channel);
@@ -42474,6 +42680,10 @@ class PEAR_Downloader extends PEAR_Common
         }
 
         $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
+        if (is_link($dest_file)) {
+            return PEAR::raiseError('SECURITY ERROR: Will not write to ' . $dest_file . ' as it is symlinked to ' . readlink($dest_file) . ' - Possible symlink attack');
+        }
+
         if (!$wp = @fopen($dest_file, 'wb')) {
             fclose($fp);
             if ($callback) {
@@ -42525,8 +42735,7 @@ class PEAR_Downloader extends PEAR_Common
         }
         return $dest_file;
     }
-}
-// }}}                                                                                                                                                                                                                                                                  PEAR-1.9.1/PEAR/ErrorStack.php                                                                      0000644 0000765 0000024 00000102251 11377276006 014555  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 PEAR-1.9.2/PEAR/ErrorStack.php                                                                      0000644 0000765 0000024 00000102251 11532757773 014566  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * Error Stack Implementation
  * 
@@ -42551,7 +42760,7 @@ class PEAR_Downloader extends PEAR_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  2004-2008 Greg Beaver
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: ErrorStack.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: ErrorStack.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR_ErrorStack
  */
 
@@ -42660,12 +42869,12 @@ define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
  * $local_stack = new PEAR_ErrorStack('MyPackage');
  * </code>
  * @author     Greg Beaver <cellog at php.net>
- * @version    1.9.1
+ * @version    1.9.2
  * @package    PEAR_ErrorStack
  * @category   Debugging
  * @copyright  2004-2008 Greg Beaver
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: ErrorStack.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: ErrorStack.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR_ErrorStack
  */
 class PEAR_ErrorStack {
@@ -43511,7 +43720,7 @@ class PEAR_ErrorStack {
 $stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
 $stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
 ?>
-                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.1/PEAR/Exception.php                                                                       0000644 0000765 0000024 00000033266 11377276006 014445  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.2/PEAR/Exception.php                                                                       0000644 0000765 0000024 00000033266 11532757773 014456  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
 /**
  * PEAR_Exception
@@ -43526,7 +43735,7 @@ $stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Exception.php 296939 2010-03-27 16:24:43Z dufuz $
+ * @version    CVS: $Id: Exception.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.3.3
  */
@@ -43602,7 +43811,7 @@ $stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.3.3
  *
@@ -43899,13 +44108,13 @@ class PEAR_Exception extends Exception
         }
         return $causeMsg . $this->getTraceAsString();
     }
-}                                                                                                                                                                                                                                                                                                                                          PEAR-1.9.1/PEAR/FixPHP5PEARWarnings.php                                                             0000644 0000765 0000024 00000000231 11377276006 016035  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                          PEAR-1.9.2/PEAR/FixPHP5PEARWarnings.php                                                             0000644 0000765 0000024 00000000231 11532757773 016046  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 if ($skipmsg) {
     $a = &new $ec($code, $mode, $options, $userinfo);
 } else {
     $a = &new $ec($message, $code, $mode, $options, $userinfo);
 }
-?>                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.1/PEAR/Frontend.php                                                                        0000644 0000765 0000024 00000015077 11377276006 014266  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+?>                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.2/PEAR/Frontend.php                                                                        0000644 0000765 0000024 00000015077 11532757773 014277  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Frontend, the singleton-based frontend for user input/output
  *
@@ -43916,7 +44125,7 @@ if ($skipmsg) {
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Frontend.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Frontend.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -43946,7 +44155,7 @@ $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null;
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -44132,7 +44341,7 @@ class PEAR_Frontend extends PEAR
     function userDialog($command, $prompts, $types = array(), $defaults = array())
     {
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                                                                 PEAR-1.9.1/PEAR/Installer.php                                                                       0000644 0000765 0000024 00000210603 11377276006 014434  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                 PEAR-1.9.2/PEAR/Installer.php                                                                       0000644 0000765 0000024 00000212317 11532757773 014451  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Installer
  *
@@ -44146,7 +44355,7 @@ class PEAR_Frontend extends PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Installer.php 287446 2009-08-18 11:45:05Z dufuz $
+ * @version    CVS: $Id: Installer.php 308698 2011-02-26 00:17:22Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -44170,7 +44379,7 @@ define('PEAR_INSTALLER_NOBINARY', -240);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -44888,11 +45097,9 @@ class PEAR_Installer extends PEAR_Downloader
 
     function commitFileTransaction()
     {
-        $n = count($this->file_operations);
-        $this->log(2, "about to commit $n file operations");
         // {{{ first, check permissions and such manually
         $errors = array();
-        foreach ($this->file_operations as $tr) {
+        foreach ($this->file_operations as $key => $tr) {
             list($type, $data) = $tr;
             switch ($type) {
                 case 'rename':
@@ -44929,12 +45136,34 @@ class PEAR_Installer extends PEAR_Downloader
                                 fclose($fp);
                             }
                         }
+
+                        /* Verify we are not deleting a file owned by another package
+                         * This can happen when a file moves from package A to B in
+                         * an upgrade ala http://pear.php.net/17986
+                         */
+                        $info = array(
+                            'package' => strtolower($this->pkginfo->getName()),
+                            'channel' => strtolower($this->pkginfo->getChannel()),
+                        );
+                        $result = $this->_registry->checkFileMap($data[0], $info, '1.1');
+                        if (is_array($result)) {
+                            $res = array_diff($result, $info);
+                            if (!empty($res)) {
+                                $new = $this->_registry->getPackage($result[1], $result[0]);
+                                $this->file_operations[$key] = false;
+                                $this->log(3, "file $data[0] was scheduled for removal from {$this->pkginfo->getName()} but is owned by {$new->getChannel()}/{$new->getName()}, removal has been cancelled.");
+                            }
+                        }
                     }
                     break;
             }
 
         }
         // }}}
+
+        $n = count($this->file_operations);
+        $this->log(2, "about to commit $n file operations for " . $this->pkginfo->getName());
+
         $m = count($errors);
         if ($m > 0) {
             foreach ($errors as $error) {
@@ -45170,25 +45399,10 @@ class PEAR_Installer extends PEAR_Downloader
     // }}}
     // {{{ _parsePackageXml()
 
-    function _parsePackageXml(&$descfile, &$tmpdir)
+    function _parsePackageXml(&$descfile)
     {
-        if (substr($descfile, -4) == '.xml') {
-            $tmpdir = false;
-        } else {
-            // {{{ Decompress pack in tmp dir -------------------------------------
-
-            // To allow relative package file names
-            $descfile = realpath($descfile);
-
-            if (PEAR::isError($tmpdir = System::mktemp('-d'))) {
-                return $tmpdir;
-            }
-            $this->log(3, '+ tmp dir created at ' . $tmpdir);
-            // }}}
-        }
-
         // Parse xml file -----------------------------------------------
-        $pkg = new PEAR_PackageFile($this->config, $this->debug, $tmpdir);
+        $pkg = new PEAR_PackageFile($this->config, $this->debug);
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         $p = &$pkg->fromAnyFile($descfile, PEAR_VALIDATE_INSTALLING);
         PEAR::staticPopErrorHandling();
@@ -45269,17 +45483,20 @@ class PEAR_Installer extends PEAR_Downloader
             $pkg      = $pkgfile->getPackageFile();
             $pkgfile  = $pkg->getArchiveFile();
             $descfile = $pkg->getPackageFile();
-            $tmpdir   = dirname($descfile);
         } else {
             $descfile = $pkgfile;
-            $tmpdir   = '';
-            $pkg      = $this->_parsePackageXml($descfile, $tmpdir);
+            $pkg      = $this->_parsePackageXml($descfile);
             if (PEAR::isError($pkg)) {
                 return $pkg;
             }
         }
 
+        $tmpdir   = dirname($descfile);
         if (realpath($descfile) != realpath($pkgfile)) {
+            // Use the temp_dir since $descfile can contain the download dir path
+            $tmpdir = $this->config->get('temp_dir', null, 'pear.php.net');
+            $tmpdir = System::mktemp("-d -t $tmpdir");
+
             $tar = new Archive_Tar($pkgfile);
             if (!$tar->extract($tmpdir)) {
                 return $this->raiseError("unable to unpack $pkgfile");
@@ -45507,9 +45724,8 @@ class PEAR_Installer extends PEAR_Downloader
             }
         }
 
-        $tmp_path = dirname($descfile);
         if (substr($pkgfile, -4) != '.xml') {
-            $tmp_path .= DIRECTORY_SEPARATOR . $pkgname . '-' . $pkg->getVersion();
+            $tmpdir .= DIRECTORY_SEPARATOR . $pkgname . '-' . $pkg->getVersion();
         }
 
         $this->configSet('default_channel', $channel);
@@ -45535,9 +45751,9 @@ class PEAR_Installer extends PEAR_Downloader
         foreach ($filelist as $file => $atts) {
             $this->expectError(PEAR_INSTALLER_FAILED);
             if ($pkg->getPackagexmlVersion() == '1.0') {
-                $res = $this->_installFile($file, $atts, $tmp_path, $options);
+                $res = $this->_installFile($file, $atts, $tmpdir, $options);
             } else {
-                $res = $this->_installFile2($pkg, $file, $atts, $tmp_path, $options);
+                $res = $this->_installFile2($pkg, $file, $atts, $tmpdir, $options);
             }
             $this->popExpect();
 
@@ -45954,7 +46170,7 @@ class PEAR_Installer extends PEAR_Downloader
     }
 
     // }}}
-}                                                                                                                             PEAR-1.9.1/PEAR/PackageFile.php                                                                     0000644 0000765 0000024 00000037466 11377276006 014650  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                 PEAR-1.9.2/PEAR/PackageFile.php                                                                     0000644 0000765 0000024 00000037032 11532757773 014646  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_PackageFile, package.xml parsing utility class
  *
@@ -45965,7 +46181,7 @@ class PEAR_Installer extends PEAR_Downloader
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: PackageFile.php 286670 2009-08-02 14:16:06Z dufuz $
+ * @version    CVS: $Id: PackageFile.php 308687 2011-02-25 23:14:27Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -45991,7 +46207,7 @@ define('PEAR_PACKAGEFILE_ERROR_INVALID_PACKAGEVERSION', 2);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -46002,11 +46218,7 @@ class PEAR_PackageFile
      */
     var $_config;
     var $_debug;
-    /**
-     * Temp directory for uncompressing tgz files.
-     * @var string|false
-     */
-    var $_tmpdir;
+
     var $_logger = false;
     /**
      * @var boolean
@@ -46014,17 +46226,23 @@ class PEAR_PackageFile
     var $_rawReturn = false;
 
     /**
+     * helper for extracting Archive_Tar errors
+     * @var array
+     * @access private
+     */
+    var $_extractErrors = array();
+
+    /**
      *
      * @param   PEAR_Config $config
      * @param   ?   $debug
      * @param   string @tmpdir Optional temporary directory for uncompressing
      *          files
      */
-    function PEAR_PackageFile(&$config, $debug = false, $tmpdir = false)
+    function PEAR_PackageFile(&$config, $debug = false)
     {
         $this->_config = $config;
         $this->_debug = $debug;
-        $this->_tmpdir = $tmpdir;
     }
 
     /**
@@ -46305,20 +46523,17 @@ class PEAR_PackageFile
             }
         }
 
-        if ($this->_tmpdir) {
-            $tmpdir = $this->_tmpdir;
-        } else {
-            $tmpdir = System::mkTemp(array('-t', $this->_config->get('temp_dir'), '-d', 'pear'));
-            if ($tmpdir === false) {
-                $ret = PEAR::raiseError("there was a problem with getting the configured temp directory");
-                return $ret;
-            }
-
-            PEAR_PackageFile::addTempFile($tmpdir);
+        $tmpdir = System::mktemp('-t ' . $this->_config->get('temp_dir') . ' -d pear');
+        if ($tmpdir === false) {
+            $ret = PEAR::raiseError("there was a problem with getting the configured temp directory");
+            return $ret;
         }
 
+        PEAR_PackageFile::addTempFile($tmpdir);
+
         $this->_extractErrors();
         PEAR::staticPushErrorHandling(PEAR_ERROR_CALLBACK, array($this, '_extractErrors'));
+
         if (!$xml || !$tar->extractList(array($xml), $tmpdir)) {
             $extra = implode("\n", $this->_extractErrors());
             if ($extra) {
@@ -46337,13 +46552,6 @@ class PEAR_PackageFile
     }
 
     /**
-     * helper for extracting Archive_Tar errors
-     * @var array
-     * @access private
-     */
-    var $_extractErrors = array();
-
-    /**
      * helper callback for extracting Archive_Tar errors
      *
      * @param PEAR_Error|null $err
@@ -46454,7 +46662,7 @@ class PEAR_PackageFile
         $info = PEAR::raiseError("Cannot open '$info' for parsing");
         return $info;
     }
-}                                                                                                                                                                                                          PEAR-1.9.1/PEAR/Packager.php                                                                        0000644 0000765 0000024 00000017151 11377276006 014217  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.9.2/PEAR/Packager.php                                                                        0000644 0000765 0000024 00000017151 11532757773 014230  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Packager for generating releases
  *
@@ -46467,7 +46675,7 @@ class PEAR_PackageFile
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Packager.php 286809 2009-08-04 15:10:26Z dufuz $
+ * @version    CVS: $Id: Packager.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -46487,7 +46695,7 @@ require_once 'System.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -46654,7 +46862,7 @@ class PEAR_Packager extends PEAR_Common
 
         return $dest_package;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.1/PEAR/Registry.php                                                                        0000644 0000765 0000024 00000224124 11377276006 014312  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.2/PEAR/Registry.php                                                                        0000644 0000765 0000024 00000224124 11532757773 014323  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Registry
  *
@@ -46667,7 +46875,7 @@ class PEAR_Packager extends PEAR_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Registry.php 287555 2009-08-21 21:27:27Z dufuz $
+ * @version    CVS: $Id: Registry.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -46693,7 +46901,7 @@ define('PEAR_REGISTRY_ERROR_CHANNEL_FILE', -6);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -49048,7 +49256,7 @@ class PEAR_Registry extends PEAR
         }
         return $ret;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                                            PEAR-1.9.1/PEAR/REST.php                                                                            0000644 0000765 0000024 00000036065 11377276006 013264  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                            PEAR-1.9.2/PEAR/REST.php                                                                            0000644 0000765 0000024 00000040232 11532757773 013264  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_REST
  *
@@ -49059,7 +49267,7 @@ class PEAR_Registry extends PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: REST.php 296767 2010-03-25 00:58:33Z dufuz $
+ * @version    CVS: $Id: REST.php 308687 2011-02-25 23:14:27Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -49078,7 +49286,7 @@ require_once 'PEAR/XMLParser.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -49150,7 +49358,10 @@ class PEAR_REST
             $ret = $this->getCache($url);
             if (!PEAR::isError($ret) && $trieddownload) {
                 // reset the age of the cache if the server says it was unmodified
-                $this->saveCache($url, $ret, null, true, $cacheId);
+                $result = $this->saveCache($url, $ret, null, true, $cacheId);
+                if (PEAR::isError($result)) {
+                    return PEAR::raiseErro($result->getMessage());
+                }
             }
 
             return $ret;
@@ -49167,7 +49378,11 @@ class PEAR_REST
         }
 
         if ($forcestring) {
-            $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+            $result = $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+            if (PEAR::isError($result)) {
+                return PEAR::raiseErro($result->getMessage());
+            }
+
             return $content;
         }
 
@@ -49203,7 +49418,11 @@ class PEAR_REST
             $content = $parser->getData();
         }
 
-        $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+        $result = $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+        if (PEAR::isError($result)) {
+            return PEAR::raiseErro($result->getMessage());
+        }
+
         return $content;
     }
 
@@ -49262,57 +49481,65 @@ class PEAR_REST
      */
     function saveCache($url, $contents, $lastmodified, $nochange = false, $cacheid = null)
     {
-        $cachedir    = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR . md5($url);
-        $cacheidfile = $cachedir . 'rest.cacheid';
-        $cachefile   = $cachedir . 'rest.cachefile';
+        $cache_dir   = $this->config->get('cache_dir');
+        $d           = $cache_dir . DIRECTORY_SEPARATOR . md5($url);
+        $cacheidfile = $d . 'rest.cacheid';
+        $cachefile   = $d . 'rest.cachefile';
 
         if ($cacheid === null && $nochange) {
             $cacheid = unserialize(implode('', file($cacheidfile)));
         }
 
-        $fp = @fopen($cacheidfile, 'wb');
-        if (!$fp) {
-            $cache_dir = $this->config->get('cache_dir');
+        if (is_link($cacheidfile)) {
+            return PEAR::raiseError('SECURITY ERROR: Will not write to ' . $cacheidfile . ' as it is symlinked to ' . readlink($cacheidfile) . ' - Possible symlink attack');
+        }
+
+        if (is_link($cachefile)) {
+            return PEAR::raiseError('SECURITY ERROR: Will not write to ' . $cacheidfile . ' as it is symlinked to ' . readlink($cacheidfile) . ' - Possible symlink attack');
+        }
+
+        $cacheidfile_fp = @fopen($cacheidfile, 'wb');
+        if (!$cacheidfile_fp) {
             if (is_dir($cache_dir)) {
-                return false;
+                return PEAR::raiseError("The value of config option cache_dir ($cache_dir) is not a directory. ");
             }
 
             System::mkdir(array('-p', $cache_dir));
-            $fp = @fopen($cacheidfile, 'wb');
-            if (!$fp) {
-                return false;
+            $cacheidfile_fp = @fopen($cacheidfile, 'wb');
+            if (!$cacheidfile_fp) {
+                return PEAR::raiseError("Could not open $cacheidfile for writing.");
             }
         }
 
         if ($nochange) {
-            fwrite($fp, serialize(array(
+            fwrite($cacheidfile_fp, serialize(array(
                 'age'        => time(),
                 'lastChange' => $cacheid['lastChange'],
                 ))
             );
 
-            fclose($fp);
+            fclose($cacheidfile_fp);
             return true;
         }
 
-        fwrite($fp, serialize(array(
+        fwrite($cacheidfile_fp, serialize(array(
             'age'        => time(),
             'lastChange' => $lastmodified,
             ))
         );
+        fclose($cacheidfile_fp);
 
-        fclose($fp);
-        $fp = @fopen($cachefile, 'wb');
-        if (!$fp) {
+        $cachefile_fp = @fopen($cachefile, 'wb');
+        if (!$cachefile_fp) {
             if (file_exists($cacheidfile)) {
                 @unlink($cacheidfile);
             }
 
-            return false;
+            return PEAR::raiseError("Could not open $cacheidfile for writing.");
         }
 
-        fwrite($fp, serialize($contents));
-        fclose($fp);
+        fwrite($cachefile_fp, serialize($contents));
+        fclose($cachefile_fp);
         return true;
     }
 
@@ -49398,7 +49625,7 @@ class PEAR_REST
         }
 
         $request .= $ifmodifiedsince .
-            "User-Agent: PEAR/1.9.1/PHP/" . PHP_VERSION . "\r\n";
+            "User-Agent: PEAR/1.9.2/PHP/" . PHP_VERSION . "\r\n";
 
         $username = $this->config->get('username', null, $channel);
         $password = $this->config->get('password', null, $channel);
@@ -49495,7 +49722,7 @@ class PEAR_REST
 
         return $data;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PEAR-1.9.1/PEAR/RunTest.php                                                                         0000644 0000765 0000024 00000106107 11377276006 014106  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.9.2/PEAR/RunTest.php                                                                         0000644 0000765 0000024 00000106172 11532757773 014121  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_RunTest
  *
@@ -49507,7 +49734,7 @@ class PEAR_REST
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: RunTest.php 297621 2010-04-07 15:09:33Z sebastian $
+ * @version    CVS: $Id: RunTest.php 308689 2011-02-25 23:20:24Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.3.3
  */
@@ -49535,7 +49762,7 @@ putenv("PHP_PEAR_RUNTESTS=1");
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.3.3
  */
@@ -49779,7 +50006,7 @@ class PEAR_RunTest
         if (empty($this->_options['cgi'])) {
             // try to see if php-cgi is in the path
             $res = $this->system_with_timeout('php-cgi -v');
-            if (false !== $res && !(is_array($res) && $res === array(127, ''))) {
+            if (false !== $res && !(is_array($res) && in_array($res[0], array(-1, 127)))) {
                 $this->_options['cgi'] = 'php-cgi';
             }
         }
@@ -49882,7 +50109,7 @@ class PEAR_RunTest
             $text .= "\n" . 'xdebug_stop_code_coverage();' .
                 "\n" . '} // end coverage_shutdown()' .
                 "\n" . 'register_shutdown_function("coverage_shutdown");';
-            $text .= "\n" . 'xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);' . "\n?>";
+            $text .= "\n" . 'xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);' . "\n";
 
             // Workaround for http://pear.php.net/bugs/bug.php?id=17292
             $lines     = explode("\n", $section_text['FILE']);
@@ -49896,14 +50123,14 @@ class PEAR_RunTest
                     unset($lines[$i]);
                 }
 
-                if (substr($lines[$i], 0, 9) == 'namespace') {
+                if (isset($lines[$i]) && substr($lines[$i], 0, 9) == 'namespace') {
                     $namespace = $lines[$i] . "\n";
                     unset($lines[$i]);
                     break;
                 }
             }
 
-            $this->save_text($temp_file, "<?php\n" . $namespace . join("\n", $lines));
+            $this->save_text($temp_file, "<?php\n" . $namespace . "\n" . $text  . "\n" . implode("\n", $lines));
         } else {
             $this->save_text($temp_file, $section_text['FILE']);
         }
@@ -50457,7 +50684,7 @@ $text
         }
     }
 }
-                                                                                                                                                                                                                                                                                                                                                                                                                                                         PEAR-1.9.1/PEAR/Validate.php                                                                        0000644 0000765 0000024 00000053055 11377276006 014236  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.9.2/PEAR/Validate.php                                                                        0000644 0000765 0000024 00000053055 11532757773 014247  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_Validate
  *
@@ -50468,7 +50695,7 @@ $text
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Validate.php 276383 2009-02-24 23:39:37Z dufuz $
+ * @version    CVS: $Id: Validate.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -50491,7 +50718,7 @@ require_once 'PEAR/Validator/PECL.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -51085,7 +51312,7 @@ class PEAR_Validate
     {
         return true;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   PEAR-1.9.1/PEAR/XMLParser.php                                                                       0000644 0000765 0000024 00000016001 11377276006 014310  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   PEAR-1.9.2/PEAR/XMLParser.php                                                                       0000644 0000765 0000024 00000016001 11532757773 014321  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR_XMLParser
  *
@@ -51097,7 +51324,7 @@ class PEAR_Validate
  * @author     Stephan Schmidt (original XML_Unserializer code)
  * @copyright  1997-2009 The Authors
  * @license   http://opensource.org/licenses/bsd-license New BSD License
- * @version    CVS: $Id: XMLParser.php 282970 2009-06-28 23:10:07Z dufuz $
+ * @version    CVS: $Id: XMLParser.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -51110,7 +51337,7 @@ class PEAR_Validate
  * @author    Stephan Schmidt (original XML_Unserializer code)
  * @copyright 1997-2009 The Authors
  * @license   http://opensource.org/licenses/bsd-license New BSD License
- * @version   Release: 1.9.1
+ * @version   Release: 1.9.2
  * @link      http://pear.php.net/package/PEAR
  * @since     Class available since Release 1.4.0a1
  */
@@ -51337,7 +51564,7 @@ class PEAR_XMLParser
     {
         $this->_dataStack[$this->_depth] .= $cdata;
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               PEAR-1.9.1/scripts/pear.bat                                                                         0000755 0000765 0000024 00000010334 11377276006 014347  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  @ECHO OFF
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               PEAR-1.9.2/scripts/pear.bat                                                                         0000755 0000765 0000024 00000010334 11532757773 014360  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  @ECHO OFF
 
 REM ----------------------------------------------------------------------
 REM PHP version 5
@@ -51447,7 +51674,7 @@ GOTO END
 :RUN
 "%PHP_PEAR_PHP_BIN%" -C -d output_buffering=1 -d safe_mode=0 -d open_basedir="" -d auto_prepend_file="" -d auto_append_file="" -d variables_order=EGPCS -d register_argc_argv="On" -d "include_path='%PHP_PEAR_INSTALL_DIR%'" -f "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9
 :END
- at ECHO ON                                                                                                                                                                                                                                                                                                    PEAR-1.9.1/scripts/peardev.bat                                                                      0000644 0000765 0000024 00000011112 11377276006 015036  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  @ECHO OFF
+ at ECHO ON                                                                                                                                                                                                                                                                                                    PEAR-1.9.2/scripts/peardev.bat                                                                      0000644 0000765 0000024 00000011112 11532757773 015047  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  @ECHO OFF
 
 REM ----------------------------------------------------------------------
 REM PHP version 5
@@ -51561,7 +51788,7 @@ GOTO END
 :RUN
 "%PHP_PEAR_PHP_BIN%" -C -d memory_limit="-1" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d auto_append_file="" -d variables_order=EGPCS -d open_basedir="" -d output_buffering=1 -d "include_path='%PHP_PEAR_INSTALL_DIR%'" -f "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9
 :END
- at ECHO ON                                                                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.9.1/scripts/pecl.bat                                                                         0000644 0000765 0000024 00000011003 11377276006 014332  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  @ECHO OFF
+ at ECHO ON                                                                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.9.2/scripts/pecl.bat                                                                         0000644 0000765 0000024 00000011003 11532757773 014343  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  @ECHO OFF
 
 REM ----------------------------------------------------------------------
 REM PHP version 5
@@ -51675,7 +51902,7 @@ GOTO END
 :RUN
 "%PHP_PEAR_PHP_BIN%" -C -n -d output_buffering=1 -d safe_mode=0 -d "include_path='%PHP_PEAR_INSTALL_DIR%'" -d register_argc_argv="On" -d variables_order=EGPCS -f "%PHP_PEAR_INSTALL_DIR%\peclcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9
 :END
- at ECHO ON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             PEAR-1.9.1/scripts/pear.sh                                                                          0000644 0000765 0000024 00000001362 11377276006 014211  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  #!/bin/sh
+ at ECHO ON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             PEAR-1.9.2/scripts/pear.sh                                                                          0000644 0000765 0000024 00000001362 11532757773 014222  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  #!/bin/sh
 
 # first find which PHP binary to use
 if test "x$PHP_PEAR_PHP_BIN" != "x"; then
@@ -51703,7 +51930,7 @@ else
 fi
 
 exec $PHP -C -q $INCARG -d output_buffering=1 -d variables_order=EGPCS -d open_basedir="" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d auto_append_file="" $INCDIR/pearcmd.php "$@"
-                                                                                                                                                                                                                                                                              PEAR-1.9.1/scripts/peardev.sh                                                                       0000644 0000765 0000024 00000001407 11377276006 014710  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  #!/bin/sh
+                                                                                                                                                                                                                                                                              PEAR-1.9.2/scripts/peardev.sh                                                                       0000644 0000765 0000024 00000001407 11532757773 014721  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  #!/bin/sh
 
 # first find which PHP binary to use
 if test "x$PHP_PEAR_PHP_BIN" != "x"; then
@@ -51731,7 +51958,7 @@ else
 fi
 
 exec $PHP -d memory_limit="-1" -C -q $INCARG -d output_buffering=1 -d open_basedir="" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d variables_order=EGPCS -d auto_append_file="" $INCDIR/pearcmd.php "$@"
-                                                                                                                                                                                                                                                         PEAR-1.9.1/scripts/pecl.sh                                                                          0000644 0000765 0000024 00000001263 11377276006 014205  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  #!/bin/sh
+                                                                                                                                                                                                                                                         PEAR-1.9.2/scripts/pecl.sh                                                                          0000644 0000765 0000024 00000001263 11532757773 014216  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  #!/bin/sh
 
 # first find which PHP binary to use
 if test "x$PHP_PEAR_PHP_BIN" != "x"; then
@@ -51759,7 +51986,7 @@ else
 fi
 
 exec $PHP -C -n -q $INCARG -d output_buffering=1 -d variables_order=EGPCS -d safe_mode=0 -d register_argc_argv="On" $INCDIR/peclcmd.php "$@"
-                                                                                                                                                                                                                                                                                                                                             PEAR-1.9.1/scripts/pearcmd.php                                                                      0000644 0000765 0000024 00000034062 11377276006 015055  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+                                                                                                                                                                                                                                                                                                                                             PEAR-1.9.2/scripts/pearcmd.php                                                                      0000644 0000765 0000024 00000034145 11532757773 015070  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR, the PHP Extension and Application Repository
  *
@@ -51773,7 +52000,7 @@ exec $PHP -C -n -q $INCARG -d output_buffering=1 -d variables_order=EGPCS -d saf
  * @author     Tomas V.V.Cox <cox at idecnet.com>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: pearcmd.php 296932 2010-03-27 15:13:06Z dufuz $
+ * @version    CVS: $Id: pearcmd.php 308720 2011-02-27 13:56:15Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  */
 
@@ -52104,6 +52331,10 @@ function usage($error = null, $helpsubject = null)
     }
     fputs($stdout, "$put\n");
     fclose($stdout);
+
+    if ($error === null) {
+        exit(0);
+    }
     exit(1);
 }
 
@@ -52202,7 +52433,7 @@ function error_handler($errno, $errmsg, $file, $line, $vars) {
  * mode: php
  * End:
  */
-// vim600:syn=php                                                                                                                                                                                                                                                                                                                                                                                                                                                                              PEAR-1.9.1/scripts/peclcmd.php                                                                      0000644 0000765 0000024 00000001636 11377276006 015052  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+// vim600:syn=php                                                                                                                                                                                                                                                                                                                                                                                                                           PEAR-1.9.2/scripts/peclcmd.php                                                                      0000644 0000765 0000024 00000001636 11532757773 015063  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR, the PHP Extension and Application Repository
  *
@@ -52216,7 +52447,7 @@ function error_handler($errno, $errmsg, $file, $line, $vars) {
  * @author     Tomas V.V.Cox <cox at idecnet.com>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: peclcmd.php 276392 2009-02-25 00:06:23Z dufuz $
+ * @version    CVS: $Id: peclcmd.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  */
 
@@ -52243,7 +52474,7 @@ require_once 'pearcmd.php';
 // vim600:syn=php
 
 ?>
-                                                                                                  PEAR-1.9.1/LICENSE                                                                                  0000644 0000765 0000024 00000002705 11377276006 012246  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  Copyright (c) 1997-2009,
+                                                                                                  PEAR-1.9.2/LICENSE                                                                                  0000644 0000765 0000024 00000002705 11532757773 012257  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  Copyright (c) 1997-2009,
  Stig Bakken <ssb at php.net>,
  Gregory Beaver <cellog at php.net>,
  Helgi Þormar Þorbjörnsson <helgi at php.net>,
@@ -52270,7 +52501,7 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-                                                           PEAR-1.9.1/INSTALL                                                                                  0000644 0000765 0000024 00000004253 11377276006 012272  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  PEAR - The PEAR Installer
+                                                           PEAR-1.9.2/INSTALL                                                                                  0000644 0000765 0000024 00000004251 11532757773 012301  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  PEAR - The PEAR Installer
 =========================
 Installing the PEAR Installer.
 
@@ -52323,7 +52554,7 @@ related issues.
 
 Happy PHPing, we hope PEAR will be a great tool for your development work!
 
-$Id: INSTALL 289056 2009-10-01 16:50:43Z ashnazg $                                                                                                                                                                                                                                                                                                                                                     PEAR-1.9.1/package.dtd                                                                              0000644 0000765 0000024 00000006477 11377276006 013343  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <!--
+$Id: INSTALL 307683 2011-01-23 21:56:12Z dufuz $                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.2/package.dtd                                                                              0000644 0000765 0000024 00000006477 11532757773 013354  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <!--
      $Id: package.dtd,v 1.38 2005-11-12 02:23:07 cellog Exp $
 
      This is the PEAR package description, version 1.0.
@@ -52426,7 +52657,7 @@ $Id: INSTALL 289056 2009-10-01 16:50:43Z ashnazg $                              
                               to CDATA #REQUIRED>
 
 
-                                                                                                                                                                                                 PEAR-1.9.1/PEAR5.php                                                                                0000644 0000765 0000024 00000002077 11377276006 012570  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+                                                                                                                                                                                                 PEAR-1.9.2/PEAR5.php                                                                                0000644 0000765 0000024 00000002077 11532757773 012601  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * This is only meant for PHP 5 to get rid of certain strict warning
  * that doesn't get hidden since it's in the shutdown function
@@ -52458,7 +52689,7 @@ class PEAR5
 
         return $properties[$class][$var];
     }
-}                                                                                                                                                                                                                                                                                                                                                                                                                                                                 PEAR-1.9.1/PEAR.php                                                                                 0000644 0000765 0000024 00000102151 11377276006 012475  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                 PEAR-1.9.2/PEAR.php                                                                                 0000644 0000765 0000024 00000102151 11532757773 012506  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * PEAR, the PHP Extension and Application Repository
  *
@@ -52474,7 +52705,7 @@ class PEAR5
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2010 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: PEAR.php 299159 2010-05-08 22:32:52Z dufuz $
+ * @version    CVS: $Id: PEAR.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -52538,7 +52769,7 @@ $GLOBALS['_PEAR_error_handler_stack']    = array();
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/package/PEAR
  * @see        PEAR_Error
  * @since      Class available since PHP 4.0.2
@@ -53248,7 +53479,7 @@ function _PEAR_call_destructors()
  * @author     Gregory Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.9.2
  * @link       http://pear.php.net/manual/en/core.pear.pear-error.php
  * @see        PEAR::raiseError(), PEAR::throwError()
  * @since      Class available since PHP 4.0.2
@@ -53521,7 +53752,7 @@ class PEAR_Error
  * c-basic-offset: 4
  * End:
  */
-                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.1/README                                                                                   0000644 0000765 0000024 00000002246 11377276006 012121  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  PEAR - The PEAR Installer
+                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.9.2/README                                                                                   0000644 0000765 0000024 00000002245 11532757773 012131  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  PEAR - The PEAR Installer
 =========================
 
 What is the PEAR Installer?  What is PEAR?
@@ -53552,7 +53783,7 @@ prior to use.
 
 Happy PHPing, we hope PEAR will be a great tool for your development work!
 
-$Id: README 220345 2006-09-22 03:31:36Z cellog $                                                                                                                                                                                                                                                                                                                                                          PEAR-1.9.1/System.php                                                                               0000644 0000765 0000024 00000046777 11377276006 013257  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
+$Id: README 307683 2011-01-23 21:56:12Z dufuz $                                                                                                                                                                                                                                                                                                                                                           PEAR-1.9.2/System.php                                                                               0000644 0000765 0000024 00000046777 11532757773 013270  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?php
 /**
  * File/Directory manipulation
  *
@@ -53563,7 +53794,7 @@ $Id: README 220345 2006-09-22 03:31:36Z cellog $                                
  * @author     Tomas V.V.Cox <cox at idecnet.com>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: System.php 276386 2009-02-24 23:52:56Z dufuz $
+ * @version    CVS: $Id: System.php 307683 2011-01-23 21:56:12Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -53605,7 +53836,7 @@ $GLOBALS['_System_temp_files'] = array();
 * @author     Tomas V.V. Cox <cox at idecnet.com>
 * @copyright  1997-2006 The PHP Group
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
-* @version    Release: 1.9.1
+* @version    Release: 1.9.2
 * @link       http://pear.php.net/package/PEAR
 * @since      Class available since Release 0.1
 * @static
@@ -54172,7 +54403,7 @@ class System
         }
         return $files;
     }
-} PEAR-1.9.1/template.spec                                                                            0000644 0000765 0000024 00000003725 11377276006 013733  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  Summary: PEAR: @summary@
+} PEAR-1.9.2/template.spec                                                                            0000644 0000765 0000024 00000003725 11532757773 013744  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  Summary: PEAR: @summary@
 Name: @rpm_package@
 Version: @version@
 Release: 1
@@ -54244,9 +54475,9 @@ cp -p package at package2xml@.xml %{buildroot}@rpm_xml_dir@/@package at .xml
     %defattr(-,root,root)
     %doc @doc_files@
     /
-                                           package.xml                                                                                         0000644 0000765 0000024 00000100432 11377276006 012157  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="UTF-8" ?>
+                                           package.xml                                                                                         0000644 0000765 0000024 00000105514 11532757774 012176  0                                                                                                    ustar   helgi                           staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
-<package version="1.0" packagerversion="1.9.1">
+<package version="1.0" packagerversion="1.9.2">
  <name>PEAR</name>
  <summary>PEAR Base System</summary>
  <description>The PEAR package contains:
@@ -54332,22 +54563,29 @@ cp -p package at package2xml@.xml %{buildroot}@rpm_xml_dir@/@package at .xml
   </maintainer>
   </maintainers>
  <release>
-  <version>1.9.1</version>
-  <date>2010-05-26</date>
+  <version>1.9.2</version>
+  <date>2011-02-28</date>
   <license>New BSD License</license>
   <state>stable</state>
-  <notes>* svntag improvements, tag package files passed into the command and better directory checks [dufuz]
-* rely on Structures_Graph minimum version instead of recommended version [saltybeagle]
-* Fix Bug #12613: running go-pear.phar from C:\ fails [dufuz]
-* Fix Bug #14841: Installing pear into directory with space fails [dufuz]
-* Fix Bug #16644: pear.bat returns syntax error when parenthesis are in install path. [dufuz] [patch by bwaters (Bryan Waters)]
-* Fix Bug #16767: Use of Depreciated HTML Attributes in the Exception class [dufuz] [patch by fuhrysteve (Stephen J. Fuhry)]
-* Fix Bug #16864: "pear list-upgrades -i" issues E_WARNINGS [dufuz] [patch by rquadling (Richard Quadling)]
-* Fix Bug #17220: command `pear help` outputs to stderr instead of stdout [dufuz]
-* Fix Bug #17234: channel-discover adds port to HTTP Host header [dufuz]
-* Fix Bug #17292: Code Coverage in PEAR_RunTest does not work with namespaces [sebastian]
-* Fix Bug #17359: loadExtension() fails over missing dl() when used in multithread env [dufuz]
-* Fix Bug #17378: pear info $package fails if directory with that name exists [dufuz]
+  <notes>Important! This is a security fix release. The advisory can be found at
+http://pear.php.net/advisory-20110228.txt
+
+  Bugs:
+  * Fixed Bug #17463: Regression: On Windows, svntag [patch by doconnor]
+  * Fixed Bug #17641: pecl-list doesn't sort packages by name [dufuz]
+  * Fixed Bug #17781: invalid argument warning on foreach due to an empty optional dependencie [dufuz]
+  * Fixed Bug #17801: PEAR run-tests wrongly detects php-cgi [patch by David Jean Louis (izi)]
+  * Fixed Bug #17839: pear svntag does not tag package.xml file [dufuz]
+  * Fixed Bug #17986: PEAR Installer cannot handle files moved between packages [dufuz]
+  * Fixed Bug #17997: Strange output if directories are not writeable [dufuz]
+  * Fixed Bug #18001: PEAR/RunTest coverage fails [dufuz]
+  * Fixed Bug #18056 [SECURITY]: Symlink attack in PEAR install [dufuz]
+  * Fixed Bug #18218: "pear package" does not allow the use of late static binding [dufuz and Christer Edvartsen]
+  * Fixed Bug #18238: Wrong return code from "pear help" [till]
+  * Fixed Bug #18308: Broken error message about missing channel validator [yunosh]
+
+  This feature is implemented as a result of #18056
+  * Implemented Request #16648: Use TMPDIR for builds instead of /var/tmp [dufuz]
   </notes>
   <deps>
    <dep type="php" rel="ge" version="4.4.0"/>
@@ -54878,15 +55116,52 @@ Alpha1 Release Notes:
    </release>
    <release>
     <version>1.9.1</version>
-    <date>2009-09-XX</date>
+    <date>2010-05-26</date>
     <license>New BSD License</license>
     <state>stable</state>
     <notes>* svntag improvements, tag package files passed into the command and better directory checks [dufuz]
+* rely on Structures_Graph minimum version instead of recommended version [saltybeagle]
+* Fix Bug #12613: running go-pear.phar from C:\ fails [dufuz]
+* Fix Bug #14841: Installing pear into directory with space fails [dufuz]
+* Fix Bug #16644: pear.bat returns syntax error when parenthesis are in install path. [dufuz] [patch by bwaters (Bryan Waters)]
+* Fix Bug #16767: Use of Depreciated HTML Attributes in the Exception class [dufuz] [patch by fuhrysteve (Stephen J. Fuhry)]
+* Fix Bug #16864: "pear list-upgrades -i" issues E_WARNINGS [dufuz] [patch by rquadling (Richard Quadling)]
+* Fix Bug #17220: command `pear help` outputs to stderr instead of stdout [dufuz]
+* Fix Bug #17234: channel-discover adds port to HTTP Host header [dufuz]
+* Fix Bug #17292: Code Coverage in PEAR_RunTest does not work with namespaces [sebastian]
+* Fix Bug #17359: loadExtension() fails over missing dl() when used in multithread env [dufuz]
+* Fix Bug #17378: pear info $package fails if directory with that name exists [dufuz]
+    </notes>
+   </release>
+   <release>
+    <version>1.9.2</version>
+    <date>2011-02-28</date>
+    <license>New BSD License</license>
+    <state>stable</state>
+    <notes>Important! This is a security fix release. The advisory can be found at
+http://pear.php.net/advisory-20110228.txt
+
+    Bugs:
+    * Fixed Bug #17463: Regression: On Windows, svntag [patch by doconnor]
+    * Fixed Bug #17641: pecl-list doesn't sort packages by name [dufuz]
+    * Fixed Bug #17781: invalid argument warning on foreach due to an empty optional dependencie [dufuz]
+    * Fixed Bug #17801: PEAR run-tests wrongly detects php-cgi [patch by David Jean Louis (izi)]
+    * Fixed Bug #17839: pear svntag does not tag package.xml file [dufuz]
+    * Fixed Bug #17986: PEAR Installer cannot handle files moved between packages [dufuz]
+    * Fixed Bug #17997: Strange output if directories are not writeable [dufuz]
+    * Fixed Bug #18001: PEAR/RunTest coverage fails [dufuz]
+    * Fixed Bug #18056 [SECURITY]: Symlink attack in PEAR install [dufuz]
+    * Fixed Bug #18218: "pear package" does not allow the use of late static binding [dufuz and Christer Edvartsen]
+    * Fixed Bug #18238: Wrong return code from "pear help" [till]
+    * Fixed Bug #18308: Broken error message about missing channel validator [yunosh]
+
+    This feature is implemented as a result of #18056
+    * Implemented Request #16648: Use TMPDIR for builds instead of /var/tmp [dufuz]
     </notes>
    </release>
  </changelog>
 </package>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <?php
 /**
  * PEAR, the PHP Extension and Application Repository
  *
@@ -54966,7 +55241,7 @@ $GLOBALS['_PEAR_error_handler_stack']    = array();
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @see        PEAR_Error
  * @since      Class available since PHP 4.0.2
@@ -55676,7 +55951,7 @@ function _PEAR_call_destructors()
  * @author     Gregory Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/manual/en/core.pear.pear-error.php
  * @see        PEAR::raiseError(), PEAR::throwError()
  * @since      Class available since PHP 4.0.2
@@ -56097,7 +56372,7 @@ $GLOBALS['_PEAR_CHANNELS_MIRROR_TYPES'] =  array('server');
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -57535,7 +57810,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -57670,7 +57945,7 @@ $GLOBALS['_PEAR_Command_objects'] = array();
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -58018,7 +58293,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -58271,7 +58546,7 @@ class PEAR_Command_Common extends PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Install.php 287477 2009-08-19 14:19:43Z dufuz $
+ * @version    CVS: $Id: Install.php 308688 2011-02-25 23:18:06Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -58291,7 +58566,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -58991,7 +59266,8 @@ Run post-installation scripts in package <package>, if any exist.
             if ($param->getPackageType() == 'extsrc' ||
                   $param->getPackageType() == 'extbin' ||
                   $param->getPackageType() == 'zendextsrc' ||
-                  $param->getPackageType() == 'zendextbin') {
+                  $param->getPackageType() == 'zendextbin'
+            ) {
                 $pkg = &$param->getPackageFile();
                 if ($instbin = $pkg->getInstalledBinary()) {
                     $instpkg = &$instreg->getPackage($instbin, $pkg->getChannel());
@@ -59002,7 +59278,8 @@ Run post-installation scripts in package <package>, if any exist.
                 foreach ($instpkg->getFilelist() as $name => $atts) {
                     $pinfo = pathinfo($atts['installed_as']);
                     if (!isset($pinfo['extension']) ||
-                          in_array($pinfo['extension'], array('c', 'h'))) {
+                          in_array($pinfo['extension'], array('c', 'h'))
+                    ) {
                         continue; // make sure we don't match php_blah.h
                     }
 
@@ -59919,7 +60196,7 @@ $GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'p
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  * @deprecated This class will disappear, and its components will be spread
@@ -60883,7 +61160,7 @@ if (getenv('PHP_PEAR_SIG_KEYDIR')) {
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -62765,7 +63042,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Validate.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -63275,7 +63552,7 @@ class PEAR_Dependency2
      */
     function getPEARVersion()
     {
-        return '1.9.1';
+        return '1.10.0beta1';
     }
 
     function validatePearinstallerDependency($dep)
@@ -64121,7 +64398,7 @@ $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'] = array();
  * @author     Tomas V.V.Cox <cox at idec.net.com>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -64871,7 +65148,7 @@ class PEAR_DependencyDB
  * @author     Martin Jansen <mj at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Downloader.php 296767 2010-03-25 00:58:33Z dufuz $
+ * @version    CVS: $Id: Downloader.php 308688 2011-02-25 23:18:06Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.3.0
  */
@@ -64898,7 +65175,7 @@ define('PEAR_INSTALLER_ERROR_NO_PREF_STATE', 2);
  * @author     Martin Jansen <mj at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.3.0
  */
@@ -65048,7 +65325,8 @@ class PEAR_Downloader extends PEAR_Common
             require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
         }
 
-        $tmp = System::mktemp(array('-d'));
+        $tmpdir = $this->config->get('temp_dir');
+        $tmp = System::mktemp("-d -t $tmpdir");
         $a   = $this->downloadHttp('http://' . $channel . '/channel.xml', $this->ui, $tmp, $callback, false);
         PEAR::popErrorHandling();
         if (PEAR::isError($a)) {
@@ -65352,14 +65630,13 @@ class PEAR_Downloader extends PEAR_Common
      */
     function analyzeDependencies(&$params, $force = false)
     {
-        $hasfailed = $failed = false;
         if (isset($this->_options['downloadonly'])) {
             return;
         }
 
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         $redo  = true;
-        $reset = false;
+        $reset = $hasfailed = $failed = false;
         while ($redo) {
             $redo = false;
             foreach ($params as $i => $param) {
@@ -65412,7 +65689,7 @@ class PEAR_Downloader extends PEAR_Common
                     }
 
                     $failed = false;
-                    if (isset($deps['required'])) {
+                    if (isset($deps['required']) && is_array($deps['required'])) {
                         foreach ($deps['required'] as $type => $dep) {
                             // note: Dependency2 will never return a PEAR_Error if ignore-errors
                             // is specified, so soft is needed to turn off logging
@@ -65446,7 +65723,7 @@ class PEAR_Downloader extends PEAR_Common
                             }
                         }
 
-                        if (isset($deps['optional'])) {
+                        if (isset($deps['optional']) && is_array($deps['optional'])) {
                             foreach ($deps['optional'] as $type => $dep) {
                                 if (!isset($dep[0])) {
                                     if (PEAR::isError($e =
@@ -65557,6 +65834,7 @@ class PEAR_Downloader extends PEAR_Common
                 }
             }
         }
+
         PEAR::staticPopErrorHandling();
         if ($hasfailed && (isset($this->_options['ignore-errors']) ||
               isset($this->_options['nodeps']))) {
@@ -65577,6 +65855,7 @@ class PEAR_Downloader extends PEAR_Common
         if (isset($this->_downloadDir)) {
             return $this->_downloadDir;
         }
+
         $downloaddir = $this->config->get('download_dir');
         if (empty($downloaddir) || (is_dir($downloaddir) && !is_writable($downloaddir))) {
             if  (is_dir($downloaddir) && !is_writable($downloaddir)) {
@@ -65584,14 +65863,17 @@ class PEAR_Downloader extends PEAR_Common
                     '" is not writeable.  Change download_dir config variable to ' .
                     'a writeable dir to avoid this warning');
             }
+
             if (!class_exists('System')) {
                 require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
             }
+
             if (PEAR::isError($downloaddir = System::mktemp('-d'))) {
                 return $downloaddir;
             }
             $this->log(3, '+ tmp dir created at ' . $downloaddir);
         }
+
         if (!is_writable($downloaddir)) {
             if (PEAR::isError(System::mkdir(array('-p', $downloaddir))) ||
                   !is_writable($downloaddir)) {
@@ -65600,6 +65882,7 @@ class PEAR_Downloader extends PEAR_Common
                     'a writeable dir');
             }
         }
+
         return $this->_downloadDir = $downloaddir;
     }
 
@@ -65630,27 +65913,11 @@ class PEAR_Downloader extends PEAR_Common
         $this->_options = $options;
     }
 
-    // }}}
-    // {{{ setOptions()
     function getOptions()
     {
         return $this->_options;
     }
 
-    /**
-     * For simpler unit-testing
-     * @param PEAR_Config
-     * @param int
-     * @param string
-     */
-    function &getPackagefileObject(&$c, $d, $t = false)
-    {
-        if (!class_exists('PEAR_PackageFile')) {
-            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile.php';
-        }
-        $a = &new PEAR_PackageFile($c, $d, $t);
-        return $a;
-    }
 
     /**
      * @param array output of {@link parsePackageName()}
@@ -65859,9 +66126,20 @@ class PEAR_Downloader extends PEAR_Common
             }
             return $info;
         } elseif ($chan->supportsREST($this->config->get('preferred_mirror'))
-              && $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))
+              &&
+                (
+                  ($base2 = $chan->getBaseURL('REST1.3', $this->config->get('preferred_mirror')))
+                    ||
+                  ($base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror')))
+                )
         ) {
-            $rest = &$this->config->getREST('1.0', $this->_options);
+            if ($base2) {
+                $base = $base2;
+                $rest = &$this->config->getREST('1.3', $this->_options);
+            } else {
+                $rest = &$this->config->getREST('1.0', $this->_options);
+            }
+
             $url = $rest->getDepDownloadURL($base, $xsdversion, $dep, $parr,
                     $state, $version, $chan->getName());
             if (PEAR::isError($url)) {
@@ -66497,7 +66775,7 @@ class PEAR_Downloader extends PEAR_Common
         }
 
         $request .= $ifmodifiedsince .
-            "User-Agent: PEAR/1.9.1/PHP/" . PHP_VERSION . "\r\n";
+            "User-Agent: PEAR/1.10.0beta1/PHP/" . PHP_VERSION . "\r\n";
 
         if (isset($this)) { // only pass in authentication for non-static calls
             $username = $config->get('username', null, $channel);
@@ -66566,6 +66844,10 @@ class PEAR_Downloader extends PEAR_Common
         }
 
         $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
+        if (is_link($dest_file)) {
+            return PEAR::raiseError('SECURITY ERROR: Will not write to ' . $dest_file . ' as it is symlinked to ' . readlink($dest_file) . ' - Possible symlink attack');
+        }
+
         if (!$wp = @fopen($dest_file, 'wb')) {
             fclose($fp);
             if ($callback) {
@@ -66617,8 +66899,7 @@ class PEAR_Downloader extends PEAR_Common
         }
         return $dest_file;
     }
-}
-// }}}<?php
+}<?php
 /**
  * PEAR_Downloader_Package
  *
@@ -66629,7 +66910,7 @@ class PEAR_Downloader extends PEAR_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Package.php 287560 2009-08-21 22:36:18Z dufuz $
+ * @version    CVS: $Id: Package.php 308688 2011-02-25 23:18:06Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -66670,7 +66951,7 @@ define('PEAR_DOWNLOADER_PACKAGE_PHPVERSION', -1004);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -67996,6 +68277,8 @@ class PEAR_Downloader_Package
                     continue;
                 }
 
+                // FIXME do symlink check
+
                 fwrite($fp, $filecontents, strlen($filecontents));
                 fclose($fp);
                 if ($s = $params[$i]->explicitState()) {
@@ -68117,13 +68400,12 @@ class PEAR_Downloader_Package
      * @param int
      * @param string
      */
-    function &getPackagefileObject(&$c, $d, $t = false)
+    function &getPackagefileObject(&$c, $d)
     {
-        $a = &new PEAR_PackageFile($c, $d, $t);
+        $a = &new PEAR_PackageFile($c, $d);
         return $a;
     }
 
-
     /**
      * This will retrieve from a local file if possible, and parse out
      * a group name as well.  The original parameter will be modified to reflect this.
@@ -68147,16 +68429,7 @@ class PEAR_Downloader_Package
             if (@is_file($param)) {
                 $this->_type = 'local';
                 $options = $this->_downloader->getOptions();
-                if (isset($options['downloadonly'])) {
-                    $pkg = &$this->getPackagefileObject($this->_config,
-                        $this->_downloader->_debug);
-                } else {
-                    if (PEAR::isError($dir = $this->_downloader->getDownloadDir())) {
-                        return $dir;
-                    }
-                    $pkg = &$this->getPackagefileObject($this->_config,
-                        $this->_downloader->_debug, $dir);
-                }
+                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->_debug);
                 PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
                 $pf = &$pkg->fromAnyFile($param, PEAR_VALIDATE_INSTALLING);
                 PEAR::popErrorHandling();
@@ -68228,15 +68501,7 @@ class PEAR_Downloader_Package
             }
 
             // whew, download worked!
-            if (isset($options['downloadonly'])) {
-                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug);
-            } else {
-                $dir = $this->_downloader->getDownloadDir();
-                if (PEAR::isError($dir)) {
-                    return $dir;
-                }
-                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug, $dir);
-            }
+            $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug);
 
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             $pf = &$pkg->fromAnyFile($file, PEAR_VALIDATE_INSTALLING);
@@ -68755,7 +69020,7 @@ define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
  * $local_stack = new PEAR_ErrorStack('MyPackage');
  * </code>
  * @author     Greg Beaver <cellog at php.net>
- * @version    1.9.1
+ * @version    1.10.0beta1
  * @package    PEAR_ErrorStack
  * @category   Debugging
  * @copyright  2004-2008 Greg Beaver
@@ -69607,6 +69872,394 @@ $stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
 $stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
 ?>
 <?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
+/**
+ * PEAR_Exception
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Tomas V. V. Cox <cox at idecnet.com>
+ * @author     Hans Lellelid <hans at velum.net>
+ * @author     Bertrand Mansion <bmansion at mamasam.com>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Exception.php 308688 2011-02-25 23:18:06Z dufuz $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.3.3
+ */
+
+
+/**
+ * Base PEAR_Exception Class
+ *
+ * 1) Features:
+ *
+ * - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception))
+ * - Definable triggers, shot when exceptions occur
+ * - Pretty and informative error messages
+ * - Added more context info available (like class, method or cause)
+ * - cause can be a PEAR_Exception or an array of mixed
+ *   PEAR_Exceptions/PEAR_ErrorStack warnings
+ * - callbacks for specific exception classes and their children
+ *
+ * 2) Ideas:
+ *
+ * - Maybe a way to define a 'template' for the output
+ *
+ * 3) Inherited properties from PHP Exception Class:
+ *
+ * protected $message
+ * protected $code
+ * protected $line
+ * protected $file
+ * private   $trace
+ *
+ * 4) Inherited methods from PHP Exception Class:
+ *
+ * __clone
+ * __construct
+ * getMessage
+ * getCode
+ * getFile
+ * getLine
+ * getTraceSafe
+ * getTraceSafeAsString
+ * __toString
+ *
+ * 5) Usage example
+ *
+ * <code>
+ *  require_once 'PEAR/Exception.php';
+ *
+ *  class Test {
+ *     function foo() {
+ *         throw new PEAR_Exception('Error Message', ERROR_CODE);
+ *     }
+ *  }
+ *
+ *  function myLogger($pear_exception) {
+ *     echo $pear_exception->getMessage();
+ *  }
+ *  // each time a exception is thrown the 'myLogger' will be called
+ *  // (its use is completely optional)
+ *  PEAR_Exception::addObserver('myLogger');
+ *  $test = new Test;
+ *  try {
+ *     $test->foo();
+ *  } catch (PEAR_Exception $e) {
+ *     print $e;
+ *  }
+ * </code>
+ *
+ * @category   pear
+ * @package    PEAR_Exception
+ * @author     Tomas V.V.Cox <cox at idecnet.com>
+ * @author     Hans Lellelid <hans at velum.net>
+ * @author     Bertrand Mansion <bmansion at mamasam.com>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.10.0beta1
+ * @link       http://pear.php.net/package/PEAR_Exception
+ * @since      Class available since Release 1.0.0
+ *
+ */
+class PEAR_Exception extends Exception
+{
+    const OBSERVER_PRINT = -2;
+    const OBSERVER_TRIGGER = -4;
+    const OBSERVER_DIE = -8;
+    protected $cause;
+    private static $_observers = array();
+    private static $_uniqueid = 0;
+    private $_trace;
+
+    /**
+     * Supported signatures:
+     *  - PEAR_Exception(string $message);
+     *  - PEAR_Exception(string $message, int $code);
+     *  - PEAR_Exception(string $message, Exception $cause);
+     *  - PEAR_Exception(string $message, Exception $cause, int $code);
+     *  - PEAR_Exception(string $message, PEAR_Error $cause);
+     *  - PEAR_Exception(string $message, PEAR_Error $cause, int $code);
+     *  - PEAR_Exception(string $message, array $causes);
+     *  - PEAR_Exception(string $message, array $causes, int $code);
+     * @param string exception message
+     * @param int|Exception|PEAR_Error|array|null exception cause
+     * @param int|null exception code or null
+     */
+    public function __construct($message, $p2 = null, $p3 = null)
+    {
+        if (is_int($p2)) {
+            $code = $p2;
+            $this->cause = null;
+        } elseif (is_object($p2) || is_array($p2)) {
+            // using is_object allows both Exception and PEAR_Error
+            if (is_object($p2) && !($p2 instanceof Exception)) {
+                if (!class_exists('PEAR_Error') || !($p2 instanceof PEAR_Error)) {
+                    throw new PEAR_Exception('exception cause must be Exception, ' .
+                        'array, or PEAR_Error');
+                }
+            }
+            $code = $p3;
+            if (is_array($p2) && isset($p2['message'])) {
+                // fix potential problem of passing in a single warning
+                $p2 = array($p2);
+            }
+            $this->cause = $p2;
+        } else {
+            $code = null;
+            $this->cause = null;
+        }
+        parent::__construct($message, $code);
+        $this->signal();
+    }
+
+    /**
+     * @param mixed $callback  - A valid php callback, see php func is_callable()
+     *                         - A PEAR_Exception::OBSERVER_* constant
+     *                         - An array(const PEAR_Exception::OBSERVER_*,
+     *                           mixed $options)
+     * @param string $label    The name of the observer. Use this if you want
+     *                         to remove it later with removeObserver()
+     */
+    public static function addObserver($callback, $label = 'default')
+    {
+        self::$_observers[$label] = $callback;
+    }
+
+    public static function removeObserver($label = 'default')
+    {
+        unset(self::$_observers[$label]);
+    }
+
+    /**
+     * @return int unique identifier for an observer
+     */
+    public static function getUniqueId()
+    {
+        return self::$_uniqueid++;
+    }
+
+    private function signal()
+    {
+        foreach (self::$_observers as $func) {
+            if (is_callable($func)) {
+                call_user_func($func, $this);
+                continue;
+            }
+            settype($func, 'array');
+            switch ($func[0]) {
+                case self::OBSERVER_PRINT :
+                    $f = (isset($func[1])) ? $func[1] : '%s';
+                    printf($f, $this->getMessage());
+                    break;
+                case self::OBSERVER_TRIGGER :
+                    $f = (isset($func[1])) ? $func[1] : E_USER_NOTICE;
+                    trigger_error($this->getMessage(), $f);
+                    break;
+                case self::OBSERVER_DIE :
+                    $f = (isset($func[1])) ? $func[1] : '%s';
+                    die(printf($f, $this->getMessage()));
+                    break;
+                default:
+                    trigger_error('invalid observer type', E_USER_WARNING);
+            }
+        }
+    }
+
+    /**
+     * Return specific error information that can be used for more detailed
+     * error messages or translation.
+     *
+     * This method may be overridden in child exception classes in order
+     * to add functionality not present in PEAR_Exception and is a placeholder
+     * to define API
+     *
+     * The returned array must be an associative array of parameter => value like so:
+     * <pre>
+     * array('name' => $name, 'context' => array(...))
+     * </pre>
+     * @return array
+     */
+    public function getErrorData()
+    {
+        return array();
+    }
+
+    /**
+     * Returns the exception that caused this exception to be thrown
+     * @access public
+     * @return Exception|array The context of the exception
+     */
+    public function getCause()
+    {
+        return $this->cause;
+    }
+
+    /**
+     * Function must be public to call on caused exceptions
+     * @param array
+     */
+    public function getCauseMessage(&$causes)
+    {
+        $trace = $this->getTraceSafe();
+        $cause = array('class'   => get_class($this),
+                       'message' => $this->message,
+                       'file' => 'unknown',
+                       'line' => 'unknown');
+        if (isset($trace[0])) {
+            if (isset($trace[0]['file'])) {
+                $cause['file'] = $trace[0]['file'];
+                $cause['line'] = $trace[0]['line'];
+            }
+        }
+        $causes[] = $cause;
+        if ($this->cause instanceof PEAR_Exception) {
+            $this->cause->getCauseMessage($causes);
+        } elseif ($this->cause instanceof Exception) {
+            $causes[] = array('class'   => get_class($this->cause),
+                              'message' => $this->cause->getMessage(),
+                              'file' => $this->cause->getFile(),
+                              'line' => $this->cause->getLine());
+        } elseif (class_exists('PEAR_Error') && $this->cause instanceof PEAR_Error) {
+            $causes[] = array('class' => get_class($this->cause),
+                              'message' => $this->cause->getMessage(),
+                              'file' => 'unknown',
+                              'line' => 'unknown');
+        } elseif (is_array($this->cause)) {
+            foreach ($this->cause as $cause) {
+                if ($cause instanceof PEAR_Exception) {
+                    $cause->getCauseMessage($causes);
+                } elseif ($cause instanceof Exception) {
+                    $causes[] = array('class'   => get_class($cause),
+                                   'message' => $cause->getMessage(),
+                                   'file' => $cause->getFile(),
+                                   'line' => $cause->getLine());
+                } elseif (class_exists('PEAR_Error') && $cause instanceof PEAR_Error) {
+                    $causes[] = array('class' => get_class($cause),
+                                      'message' => $cause->getMessage(),
+                                      'file' => 'unknown',
+                                      'line' => 'unknown');
+                } elseif (is_array($cause) && isset($cause['message'])) {
+                    // PEAR_ErrorStack warning
+                    $causes[] = array(
+                        'class' => $cause['package'],
+                        'message' => $cause['message'],
+                        'file' => isset($cause['context']['file']) ?
+                                            $cause['context']['file'] :
+                                            'unknown',
+                        'line' => isset($cause['context']['line']) ?
+                                            $cause['context']['line'] :
+                                            'unknown',
+                    );
+                }
+            }
+        }
+    }
+
+    public function getTraceSafe()
+    {
+        if (!isset($this->_trace)) {
+            $this->_trace = $this->getTrace();
+            if (empty($this->_trace)) {
+                $backtrace = debug_backtrace();
+                $this->_trace = array($backtrace[count($backtrace)-1]);
+            }
+        }
+        return $this->_trace;
+    }
+
+    public function getErrorClass()
+    {
+        $trace = $this->getTraceSafe();
+        return $trace[0]['class'];
+    }
+
+    public function getErrorMethod()
+    {
+        $trace = $this->getTraceSafe();
+        return $trace[0]['function'];
+    }
+
+    public function __toString()
+    {
+        if (isset($_SERVER['REQUEST_URI'])) {
+            return $this->toHtml();
+        }
+        return $this->toText();
+    }
+
+    public function toHtml()
+    {
+        $trace = $this->getTraceSafe();
+        $causes = array();
+        $this->getCauseMessage($causes);
+        $html =  '<table style="border: 1px" cellspacing="0">' . "\n";
+        foreach ($causes as $i => $cause) {
+            $html .= '<tr><td colspan="3" style="background: #ff9999">'
+               . str_repeat('-', $i) . ' <b>' . $cause['class'] . '</b>: '
+               . htmlspecialchars($cause['message']) . ' in <b>' . $cause['file'] . '</b> '
+               . 'on line <b>' . $cause['line'] . '</b>'
+               . "</td></tr>\n";
+        }
+        $html .= '<tr><td colspan="3" style="background-color: #aaaaaa; text-align: center; font-weight: bold;">Exception trace</td></tr>' . "\n"
+               . '<tr><td style="text-align: center; background: #cccccc; width:20px; font-weight: bold;">#</td>'
+               . '<td style="text-align: center; background: #cccccc; font-weight: bold;">Function</td>'
+               . '<td style="text-align: center; background: #cccccc; font-weight: bold;">Location</td></tr>' . "\n";
+
+        foreach ($trace as $k => $v) {
+            $html .= '<tr><td style="text-align: center;">' . $k . '</td>'
+                   . '<td>';
+            if (!empty($v['class'])) {
+                $html .= $v['class'] . $v['type'];
+            }
+            $html .= $v['function'];
+            $args = array();
+            if (!empty($v['args'])) {
+                foreach ($v['args'] as $arg) {
+                    if (is_null($arg)) $args[] = 'null';
+                    elseif (is_array($arg)) $args[] = 'Array';
+                    elseif (is_object($arg)) $args[] = 'Object('.get_class($arg).')';
+                    elseif (is_bool($arg)) $args[] = $arg ? 'true' : 'false';
+                    elseif (is_int($arg) || is_double($arg)) $args[] = $arg;
+                    else {
+                        $arg = (string)$arg;
+                        $str = htmlspecialchars(substr($arg, 0, 16));
+                        if (strlen($arg) > 16) $str .= '…';
+                        $args[] = "'" . $str . "'";
+                    }
+                }
+            }
+            $html .= '(' . implode(', ',$args) . ')'
+                   . '</td>'
+                   . '<td>' . (isset($v['file']) ? $v['file'] : 'unknown')
+                   . ':' . (isset($v['line']) ? $v['line'] : 'unknown')
+                   . '</td></tr>' . "\n";
+        }
+        $html .= '<tr><td style="text-align: center;">' . ($k+1) . '</td>'
+               . '<td>{main}</td>'
+               . '<td> </td></tr>' . "\n"
+               . '</table>';
+        return $html;
+    }
+
+    public function toText()
+    {
+        $causes = array();
+        $this->getCauseMessage($causes);
+        $causeMsg = '';
+        foreach ($causes as $i => $cause) {
+            $causeMsg .= str_repeat(' ', $i) . $cause['class'] . ': '
+                   . $cause['message'] . ' in ' . $cause['file']
+                   . ' on line ' . $cause['line'] . "\n";
+        }
+        return $causeMsg . $this->getTraceAsString();
+    }
+}<?php
 /**
  * PEAR_Frontend, the singleton-based frontend for user input/output
  *
@@ -69647,7 +70300,7 @@ $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null;
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -69845,7 +70498,7 @@ class PEAR_Frontend extends PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: CLI.php 296938 2010-03-27 16:16:25Z dufuz $
+ * @version    CVS: $Id: CLI.php 305390 2010-11-15 23:46:43Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -69862,7 +70515,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Frontend.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -70231,7 +70884,7 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
             case 'install':
             case 'upgrade':
             case 'upgrade-all':
-                if (isset($data['release_warnings'])) {
+                if (is_array($data) && isset($data['release_warnings'])) {
                     $this->_displayLine('');
                     $this->_startTable(array(
                         'border' => false,
@@ -70242,7 +70895,7 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                     $this->_displayLine('');
                 }
 
-                $this->_displayLine($data['data']);
+                $this->_displayLine(is_array($data) ? $data['data'] : $data);
                 break;
             case 'search':
                 $this->_startTable($data);
@@ -70250,12 +70903,19 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                     $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
                 }
 
+                $packages = array();
                 foreach($data['data'] as $category) {
-                    foreach($category as $pkg) {
-                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
+                    foreach($category as $name => $pkg) {
+                        $packages[$pkg[0]] = $pkg;
                     }
                 }
 
+                $p = array_keys($packages);
+                natcasesort($p);
+                foreach ($p as $name) {
+                    $this->_tableRow($packages[$name], null, array(1 => array('wrap' => 55)));
+                }
+
                 $this->_endTable();
                 break;
             case 'list-all':
@@ -70269,13 +70929,21 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                     $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
                 }
 
+                $packages = array();
                 foreach($data['data'] as $category) {
-                    foreach($category as $pkg) {
-                        unset($pkg[4], $pkg[5]);
-                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
+                    foreach($category as $name => $pkg) {
+                        $packages[$pkg[0]] = $pkg;
                     }
                 }
 
+                $p = array_keys($packages);
+                natcasesort($p);
+                foreach ($p as $name) {
+                    $pkg = $packages[$name];
+                    unset($pkg[4], $pkg[5]);
+                    $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
+                }
+
                 $this->_endTable();
                 break;
             case 'config-show':
@@ -70582,7 +71250,7 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Installer.php 287446 2009-08-18 11:45:05Z dufuz $
+ * @version    CVS: $Id: Installer.php 308692 2011-02-25 23:31:16Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -70606,14 +71274,12 @@ define('PEAR_INSTALLER_NOBINARY', -240);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
 class PEAR_Installer extends PEAR_Downloader
 {
-    // {{{ properties
-
     /** name of the package directory, for example Foo-1.0
      * @var string
      */
@@ -70675,10 +71341,6 @@ class PEAR_Installer extends PEAR_Downloader
      */
     var $file_operations = array();
 
-    // }}}
-
-    // {{{ constructor
-
     /**
      * PEAR_Installer constructor.
      *
@@ -70704,8 +71366,6 @@ class PEAR_Installer extends PEAR_Downloader
         $this->_registry = &$config->getRegistry();
     }
 
-    // }}}
-
     function _removeBackups($files)
     {
         foreach ($files as $path) {
@@ -70713,8 +71373,6 @@ class PEAR_Installer extends PEAR_Downloader
         }
     }
 
-    // {{{ _deletePackageFiles()
-
     /**
      * Delete a package's installed files, does not remove empty directories.
      *
@@ -70773,9 +71431,6 @@ class PEAR_Installer extends PEAR_Downloader
         return true;
     }
 
-    // }}}
-    // {{{ _installFile()
-
     /**
      * @param string filename
      * @param array attributes from <file> tag in package.xml
@@ -70785,7 +71440,7 @@ class PEAR_Installer extends PEAR_Downloader
      */
     function _installFile($file, $atts, $tmp_path, $options)
     {
-        // {{{ return if this file is meant for another platform
+        // return if this file is meant for another platform
         static $os;
         if (!isset($this->_registry)) {
             $this->_registry = &$this->config->getRegistry();
@@ -70809,10 +71464,9 @@ class PEAR_Installer extends PEAR_Downloader
                 return PEAR_INSTALLER_SKIPPED;
             }
         }
-        // }}}
 
         $channel = $this->pkginfo->getChannel();
-        // {{{ assemble the destination paths
+        // assemble the destination paths
         switch ($atts['role']) {
             case 'src':
             case 'extsrc':
@@ -70874,7 +71528,6 @@ class PEAR_Installer extends PEAR_Downloader
         if (preg_match('~/\.\.(/|\\z)|^\.\./~', str_replace('\\', '/', $dest_file))) {
             return $this->raiseError("SECURITY ERROR: file $file (installed to $dest_file) contains parent directory reference ..", PEAR_INSTALLER_FAILED);
         }
-        // }}}
 
         if (empty($this->_options['register-only']) &&
               (!file_exists($dest_dir) || !is_dir($dest_dir))) {
@@ -70903,7 +71556,7 @@ class PEAR_Installer extends PEAR_Downloader
                     $md5sum = md5_file($dest_file);
                 }
             } else {
-                // {{{ file with replacements
+                // file with replacements
                 if (!file_exists($orig_file)) {
                     return $this->raiseError("file does not exist",
                                              PEAR_INSTALLER_FAILED);
@@ -70980,10 +71633,9 @@ class PEAR_Installer extends PEAR_Downloader
                 }
 
                 fclose($wp);
-                // }}}
             }
 
-            // {{{ check the md5
+            // check the md5
             if (isset($md5sum)) {
                 if (strtolower($md5sum) === strtolower($atts['md5sum'])) {
                     $this->log(2, "md5sum ok: $final_dest_file");
@@ -71009,8 +71661,8 @@ class PEAR_Installer extends PEAR_Downloader
                     }
                 }
             }
-            // }}}
-            // {{{ set file permissions
+
+            // set file permissions
             if (!OS_WINDOWS) {
                 if ($atts['role'] == 'script') {
                     $mode = 0777 & ~(int)octdec($this->config->get('umask'));
@@ -71028,7 +71680,6 @@ class PEAR_Installer extends PEAR_Downloader
                     }
                 }
             }
-            // }}}
 
             if ($atts['role'] == 'src') {
                 rename($dest_file, $final_dest_file);
@@ -71056,9 +71707,6 @@ class PEAR_Installer extends PEAR_Downloader
         return PEAR_INSTALLER_OK;
     }
 
-    // }}}
-    // {{{ _installFile2()
-
     /**
      * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
      * @param string filename
@@ -71075,7 +71723,7 @@ class PEAR_Installer extends PEAR_Downloader
         }
 
         $channel = $pkg->getChannel();
-        // {{{ assemble the destination paths
+        // assemble the destination paths
         if (!in_array($atts['attribs']['role'],
               PEAR_Installer_Role::getValidRoles($pkg->getPackageType()))) {
             return $this->raiseError('Invalid role `' . $atts['attribs']['role'] .
@@ -71110,7 +71758,6 @@ class PEAR_Installer extends PEAR_Downloader
 
         $dest_dir  = dirname($final_dest_file);
         $dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
-        // }}}
 
         if (empty($this->_options['register-only'])) {
             if (!file_exists($dest_dir) || !is_dir($dest_dir)) {
@@ -71189,7 +71836,7 @@ class PEAR_Installer extends PEAR_Downloader
                 }
             }
 
-            // {{{ check the md5
+            // check the md5
             if (isset($md5sum)) {
                 // Make sure the original md5 sum matches with expected
                 if (strtolower($md5sum) === strtolower($attribs['md5sum'])) {
@@ -71224,8 +71871,7 @@ class PEAR_Installer extends PEAR_Downloader
                 $real_atts['attribs']['md5sum'] = md5_file($dest_file);
             }
 
-            // }}}
-            // {{{ set file permissions
+            //set file permissions
             if (!OS_WINDOWS) {
                 if ($role->isExecutable()) {
                     $mode = 0777 & ~(int)octdec($this->config->get('umask'));
@@ -71243,7 +71889,6 @@ class PEAR_Installer extends PEAR_Downloader
                     }
                 }
             }
-            // }}}
 
             if ($attribs['role'] == 'src') {
                 rename($dest_file, $final_dest_file);
@@ -71265,9 +71910,6 @@ class PEAR_Installer extends PEAR_Downloader
         return PEAR_INSTALLER_OK;
     }
 
-    // }}}
-    // {{{ addFileOperation()
-
     /**
      * Add a file operation to the current file transaction.
      *
@@ -71308,9 +71950,6 @@ class PEAR_Installer extends PEAR_Downloader
         $this->file_operations[] = array($type, $data);
     }
 
-    // }}}
-    // {{{ startFileTransaction()
-
     function startFileTransaction($rollback_in_case = false)
     {
         if (count($this->file_operations) && $rollback_in_case) {
@@ -71319,16 +71958,11 @@ class PEAR_Installer extends PEAR_Downloader
         $this->file_operations = array();
     }
 
-    // }}}
-    // {{{ commitFileTransaction()
-
     function commitFileTransaction()
     {
-        $n = count($this->file_operations);
-        $this->log(2, "about to commit $n file operations");
-        // {{{ first, check permissions and such manually
+        //first, check permissions and such manually
         $errors = array();
-        foreach ($this->file_operations as $tr) {
+        foreach ($this->file_operations as $key => $tr) {
             list($type, $data) = $tr;
             switch ($type) {
                 case 'rename':
@@ -71351,6 +71985,7 @@ class PEAR_Installer extends PEAR_Downloader
                     if (!file_exists($data[0])) {
                         $this->log(2, "warning: file $data[0] doesn't exist, can't be deleted");
                     }
+
                     // check that directory is writable
                     if (file_exists($data[0])) {
                         if (!is_writable(dirname($data[0]))) {
@@ -71365,12 +72000,32 @@ class PEAR_Installer extends PEAR_Downloader
                                 fclose($fp);
                             }
                         }
+
+                        /* Verify we are not deleting a file owned by another package
+                         * This can happen when a file moves from package A to B in
+                         * an upgrade ala http://pear.php.net/17986
+                         */
+                        $info = array(
+                            'package' => strtolower($this->pkginfo->getName()),
+                            'channel' => strtolower($this->pkginfo->getChannel()),
+                        );
+                        $result = $this->_registry->checkFileMap($data[0], $info, '1.1');
+                        if (is_array($result)) {
+                            $res = array_diff($result, $info);
+                            if (!empty($res)) {
+                                $new = $this->_registry->getPackage($result[1], $result[0]);
+                                $this->file_operations[$key] = false;
+                                $this->log(3, "file $data[0] was scheduled for removal from {$this->pkginfo->getName()} but is owned by {$new->getChannel()}/{$new->getName()}, removal has been cancelled.");
+                            }
+                        }
                     }
                     break;
             }
-
         }
-        // }}}
+
+        $n = count($this->file_operations);
+        $this->log(2, "about to commit $n file operations for " . $this->pkginfo->getName());
+
         $m = count($errors);
         if ($m > 0) {
             foreach ($errors as $error) {
@@ -71385,7 +72040,7 @@ class PEAR_Installer extends PEAR_Downloader
         }
 
         $this->_dirtree = array();
-        // {{{ really commit the transaction
+        // really commit the transaction
         foreach ($this->file_operations as $i => $tr) {
             if (!$tr) {
                 // support removal of non-existing backups
@@ -71506,15 +72161,12 @@ class PEAR_Installer extends PEAR_Downloader
                     break;
             }
         }
-        // }}}
+
         $this->log(2, "successfully committed $n file operations");
         $this->file_operations = array();
         return true;
     }
 
-    // }}}
-    // {{{ rollbackFileTransaction()
-
     function rollbackFileTransaction()
     {
         $n = count($this->file_operations);
@@ -71558,18 +72210,12 @@ class PEAR_Installer extends PEAR_Downloader
         $this->file_operations = array();
     }
 
-    // }}}
-    // {{{ mkDirHier($dir)
-
     function mkDirHier($dir)
     {
         $this->addFileOperation('mkdir', array($dir));
         return parent::mkDirHier($dir);
     }
 
-    // }}}
-    // {{{ download()
-
     /**
      * Download any files and their dependencies, if necessary
      *
@@ -71603,28 +72249,10 @@ class PEAR_Installer extends PEAR_Downloader
         return $ret;
     }
 
-    // }}}
-    // {{{ _parsePackageXml()
-
-    function _parsePackageXml(&$descfile, &$tmpdir)
+    function _parsePackageXml(&$descfile)
     {
-        if (substr($descfile, -4) == '.xml') {
-            $tmpdir = false;
-        } else {
-            // {{{ Decompress pack in tmp dir -------------------------------------
-
-            // To allow relative package file names
-            $descfile = realpath($descfile);
-
-            if (PEAR::isError($tmpdir = System::mktemp('-d'))) {
-                return $tmpdir;
-            }
-            $this->log(3, '+ tmp dir created at ' . $tmpdir);
-            // }}}
-        }
-
-        // Parse xml file -----------------------------------------------
-        $pkg = new PEAR_PackageFile($this->config, $this->debug, $tmpdir);
+        // Parse xml file
+        $pkg = new PEAR_PackageFile($this->config, $this->debug);
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         $p = &$pkg->fromAnyFile($descfile, PEAR_VALIDATE_INSTALLING);
         PEAR::staticPopErrorHandling();
@@ -71644,7 +72272,6 @@ class PEAR_Installer extends PEAR_Downloader
         return $p;
     }
 
-    // }}}
     /**
      * Set the list of PEAR_Downloader_Package objects to allow more sane
      * dependency validation
@@ -71676,8 +72303,6 @@ class PEAR_Installer extends PEAR_Downloader
         return $this->_downloadedPackages;
     }
 
-    // {{{ install()
-
     /**
      * Installs the files within the package file specified.
      *
@@ -71705,17 +72330,20 @@ class PEAR_Installer extends PEAR_Downloader
             $pkg      = $pkgfile->getPackageFile();
             $pkgfile  = $pkg->getArchiveFile();
             $descfile = $pkg->getPackageFile();
-            $tmpdir   = dirname($descfile);
         } else {
             $descfile = $pkgfile;
-            $tmpdir   = '';
-            $pkg      = $this->_parsePackageXml($descfile, $tmpdir);
+            $pkg      = $this->_parsePackageXml($descfile);
             if (PEAR::isError($pkg)) {
                 return $pkg;
             }
         }
 
+        $tmpdir   = dirname($descfile);
         if (realpath($descfile) != realpath($pkgfile)) {
+            // Use the temp_dir since $descfile can contain the download dir path
+            $tmpdir = $this->config->get('temp_dir', null, 'pear.php.net');
+            $tmpdir = System::mktemp("-d -t $tmpdir");
+
             $tar = new Archive_Tar($pkgfile);
             if (!$tar->extract($tmpdir)) {
                 return $this->raiseError("unable to unpack $pkgfile");
@@ -71758,7 +72386,7 @@ class PEAR_Installer extends PEAR_Downloader
             $this->installroot = '';
         }
 
-        // {{{ checks to do when not in "force" mode
+        // checks to do when not in "force" mode
         if (empty($options['force']) &&
               (file_exists($this->config->get('php_dir')) &&
                is_dir($this->config->get('php_dir')))) {
@@ -71873,7 +72501,6 @@ class PEAR_Installer extends PEAR_Downloader
                 }
             }
         }
-        // }}}
 
         $this->startFileTransaction();
 
@@ -71929,7 +72556,7 @@ class PEAR_Installer extends PEAR_Downloader
             }
         }
 
-        // {{{ Copy files to dest dir ---------------------------------------
+        // Copy files to dest dir
 
         // info from the package it self we want to access from _installFile
         $this->pkginfo = &$pkg;
@@ -71943,13 +72570,12 @@ class PEAR_Installer extends PEAR_Downloader
             }
         }
 
-        $tmp_path = dirname($descfile);
         if (substr($pkgfile, -4) != '.xml') {
-            $tmp_path .= DIRECTORY_SEPARATOR . $pkgname . '-' . $pkg->getVersion();
+            $tmpdir .= DIRECTORY_SEPARATOR . $pkgname . '-' . $pkg->getVersion();
         }
 
         $this->configSet('default_channel', $channel);
-        // {{{ install files
+        // install files
 
         $ver = $pkg->getPackagexmlVersion();
         if (version_compare($ver, '2.0', '>=')) {
@@ -71971,9 +72597,9 @@ class PEAR_Installer extends PEAR_Downloader
         foreach ($filelist as $file => $atts) {
             $this->expectError(PEAR_INSTALLER_FAILED);
             if ($pkg->getPackagexmlVersion() == '1.0') {
-                $res = $this->_installFile($file, $atts, $tmp_path, $options);
+                $res = $this->_installFile($file, $atts, $tmpdir, $options);
             } else {
-                $res = $this->_installFile2($pkg, $file, $atts, $tmp_path, $options);
+                $res = $this->_installFile2($pkg, $file, $atts, $tmpdir, $options);
             }
             $this->popExpect();
 
@@ -71998,16 +72624,18 @@ class PEAR_Installer extends PEAR_Downloader
                 $pkg->installedFile($file, $atts);
             }
         }
-        // }}}
 
-        // {{{ compile and install source files
+        // compile and install source files
         if ($this->source_files > 0 && empty($options['nobuild'])) {
+            if (!isset($options['__compile_configureoptions'])) {
+                $options['__compile_configureoptions'] = array();
+            }
+
             if (PEAR::isError($err =
-                  $this->_compileSourceFiles($savechannel, $pkg))) {
+                  $this->_compileSourceFiles($savechannel, $pkg, $options['__compile_configureoptions']))) {
                 return $err;
             }
         }
-        // }}}
 
         if (isset($backedup)) {
             $this->_removeBackups($backedup);
@@ -72018,12 +72646,11 @@ class PEAR_Installer extends PEAR_Downloader
             $this->configSet('default_channel', $savechannel);
             return $this->raiseError("commit failed", PEAR_INSTALLER_FAILED);
         }
-        // }}}
 
         $ret          = false;
         $installphase = 'install';
         $oldversion   = false;
-        // {{{ Register that the package is installed -----------------------
+        // Register that the package is installed
         if (empty($options['upgrade'])) {
             // if 'force' is used, replace the info in registry
             $usechannel = $channel;
@@ -72094,20 +72721,17 @@ class PEAR_Installer extends PEAR_Downloader
         return $pkg->toArray(true);
     }
 
-    // }}}
-
-    // {{{ _compileSourceFiles()
     /**
      * @param string
      * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
      */
-    function _compileSourceFiles($savechannel, &$filelist)
+    function _compileSourceFiles($savechannel, &$filelist, $configure_options = array())
     {
         require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Builder.php';
         $this->log(1, "$this->source_files source files, building");
         $bob = &new PEAR_Builder($this->ui);
         $bob->debug = $this->debug;
-        $built = $bob->build($filelist, array(&$this, '_buildCallback'));
+        $built = $bob->build($filelist, array(&$this, '_buildCallback'), $configure_options);
         if (PEAR::isError($built)) {
             $this->rollbackFileTransaction();
             $this->configSet('default_channel', $savechannel);
@@ -72166,7 +72790,6 @@ class PEAR_Installer extends PEAR_Downloader
                 }
             }
 
-
             $data = array(
                 'role'         => $role,
                 'name'         => $bn,
@@ -72184,12 +72807,10 @@ class PEAR_Installer extends PEAR_Downloader
         }
     }
 
-    // }}}
     function &getUninstallPackages()
     {
         return $this->_downloadedPackages;
     }
-    // {{{ uninstall()
 
     /**
      * Uninstall a package
@@ -72271,7 +72892,7 @@ class PEAR_Installer extends PEAR_Downloader
         $this->pkginfo = &$pkg;
         // pretty much nothing happens if we are only registering the uninstall
         if (empty($options['register-only'])) {
-            // {{{ Delete the files
+            // Delete the files
             $this->startFileTransaction();
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             if (PEAR::isError($err = $this->_deletePackageFiles($package, $channel))) {
@@ -72323,7 +72944,6 @@ class PEAR_Installer extends PEAR_Downloader
                     }
                 }
             }
-            // }}}
         }
 
         $this->configSet('default_channel', $savechannel);
@@ -72368,8 +72988,6 @@ class PEAR_Installer extends PEAR_Downloader
         return 0;
     }
 
-    // }}}
-    // {{{ _sortDirs()
     function _sortDirs($a, $b)
     {
         if (strnatcmp($a, $b) == -1) return 1;
@@ -72377,10 +72995,6 @@ class PEAR_Installer extends PEAR_Downloader
         return 0;
     }
 
-    // }}}
-
-    // {{{ _buildCallback()
-
     function _buildCallback($what, $data)
     {
         if (($what == 'cmdoutput' && $this->debug > 1) ||
@@ -72388,8 +73002,6 @@ class PEAR_Installer extends PEAR_Downloader
             $this->ui->outputData(rtrim($data), 'build');
         }
     }
-
-    // }}}
 }<?php
 /**
  * PEAR_Installer_Role
@@ -72417,7 +73029,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/XMLParser.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -72691,7 +73303,7 @@ class PEAR_Installer_Role
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -72860,7 +73472,7 @@ class PEAR_Installer_Role_Common
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -72901,7 +73513,7 @@ class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -72942,7 +73554,7 @@ class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -72983,7 +73595,7 @@ class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -73024,7 +73636,7 @@ class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -73054,7 +73666,7 @@ class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: PackageFile.php 286670 2009-08-02 14:16:06Z dufuz $
+ * @version    CVS: $Id: PackageFile.php 308688 2011-02-25 23:18:06Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -73080,7 +73692,7 @@ define('PEAR_PACKAGEFILE_ERROR_INVALID_PACKAGEVERSION', 2);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -73091,11 +73703,7 @@ class PEAR_PackageFile
      */
     var $_config;
     var $_debug;
-    /**
-     * Temp directory for uncompressing tgz files.
-     * @var string|false
-     */
-    var $_tmpdir;
+
     var $_logger = false;
     /**
      * @var boolean
@@ -73103,17 +73711,23 @@ class PEAR_PackageFile
     var $_rawReturn = false;
 
     /**
+     * helper for extracting Archive_Tar errors
+     * @var array
+     * @access private
+     */
+    var $_extractErrors = array();
+
+    /**
      *
      * @param   PEAR_Config $config
      * @param   ?   $debug
      * @param   string @tmpdir Optional temporary directory for uncompressing
      *          files
      */
-    function PEAR_PackageFile(&$config, $debug = false, $tmpdir = false)
+    function PEAR_PackageFile(&$config, $debug = false)
     {
         $this->_config = $config;
         $this->_debug = $debug;
-        $this->_tmpdir = $tmpdir;
     }
 
     /**
@@ -73394,20 +74008,17 @@ class PEAR_PackageFile
             }
         }
 
-        if ($this->_tmpdir) {
-            $tmpdir = $this->_tmpdir;
-        } else {
-            $tmpdir = System::mkTemp(array('-t', $this->_config->get('temp_dir'), '-d', 'pear'));
-            if ($tmpdir === false) {
-                $ret = PEAR::raiseError("there was a problem with getting the configured temp directory");
-                return $ret;
-            }
-
-            PEAR_PackageFile::addTempFile($tmpdir);
+        $tmpdir = System::mktemp('-t ' . $this->_config->get('temp_dir') . ' -d pear');
+        if ($tmpdir === false) {
+            $ret = PEAR::raiseError("there was a problem with getting the configured temp directory");
+            return $ret;
         }
 
+        PEAR_PackageFile::addTempFile($tmpdir);
+
         $this->_extractErrors();
         PEAR::staticPushErrorHandling(PEAR_ERROR_CALLBACK, array($this, '_extractErrors'));
+
         if (!$xml || !$tar->extractList(array($xml), $tmpdir)) {
             $extra = implode("\n", $this->_extractErrors());
             if ($extra) {
@@ -73426,13 +74037,6 @@ class PEAR_PackageFile
     }
 
     /**
-     * helper for extracting Archive_Tar errors
-     * @var array
-     * @access private
-     */
-    var $_extractErrors = array();
-
-    /**
      * helper callback for extracting Archive_Tar errors
      *
      * @param PEAR_Error|null $err
@@ -73574,7 +74178,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -73591,7 +74195,7 @@ class PEAR_PackageFile_Generator_v1
 
     function getPackagerVersion()
     {
-        return '1.9.1';
+        return '1.10.0beta1';
     }
 
     /**
@@ -73745,7 +74349,7 @@ class PEAR_PackageFile_Generator_v1
             );
         $ret = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
         $ret .= "<!DOCTYPE package SYSTEM \"http://pear.php.net/dtd/package-1.0\">\n";
-        $ret .= "<package version=\"1.0\" packagerversion=\"1.9.1\">\n" .
+        $ret .= "<package version=\"1.0\" packagerversion=\"1.10.0beta1\">\n" .
 " <name>$pkginfo[package]</name>";
         if (isset($pkginfo['extends'])) {
             $ret .= "\n<extends>$pkginfo[extends]</extends>";
@@ -74859,7 +75463,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'XML/Util.php';
  * @author     Stephan Schmidt (original XML_Serializer code)
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -74941,7 +75545,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
      */
     function getPackagerVersion()
     {
-        return '1.9.1';
+        return '1.10.0beta1';
     }
 
     /**
@@ -75226,7 +75830,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             $this->options['beautifyFilelist'] = true;
         }
 
-        $arr['attribs']['packagerversion'] = '1.9.1';
+        $arr['attribs']['packagerversion'] = '1.10.0beta1';
         if ($this->serialize($arr, $options)) {
             return $this->_serializedData . "\n";
         }
@@ -75744,7 +76348,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v1.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -76203,7 +76807,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -76565,7 +77169,7 @@ define('PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME', 52);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -77925,7 +78529,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ErrorStack.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -79956,7 +80560,7 @@ class PEAR_PackageFile_v2
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: Validator.php 277885 2009-03-27 19:29:31Z dufuz $
+ * @version    CVS: $Id: Validator.php 308728 2011-02-27 18:58:02Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a8
  */
@@ -79968,7 +80572,7 @@ class PEAR_PackageFile_v2
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a8
  * @access private
@@ -80059,7 +80663,7 @@ class PEAR_PackageFile_v2_Validator
               isset($test['dependencies']['required']) &&
               isset($test['dependencies']['required']['pearinstaller']) &&
               isset($test['dependencies']['required']['pearinstaller']['min']) &&
-              version_compare('1.9.1',
+              version_compare('1.10.0beta1',
                 $test['dependencies']['required']['pearinstaller']['min'], '<')
         ) {
             $this->_pearVersionTooLow($test['dependencies']['required']['pearinstaller']['min']);
@@ -80203,11 +80807,10 @@ class PEAR_PackageFile_v2_Validator
                 $validator = $chan->getValidationObject($this->_pf->getPackage());
                 if (!$validator) {
                     $this->_stack->push(__FUNCTION__, 'error',
-                        array_merge(
                             array('channel' => $chan->getName(),
-                                  'package' => $this->_pf->getPackage()),
-                              $valpack
-                            ),
+                              'package' => $this->_pf->getPackage(),
+                              'name'    => $valpack['_content'],
+                              'version' => $valpack['attribs']['version']),
                         'package "%channel%/%package%" cannot be properly validated without ' .
                         'validation package "%channel%/%name%-%version%"');
                     return $this->_isValid = 0;
@@ -81298,7 +81901,7 @@ class PEAR_PackageFile_v2_Validator
         $this->_stack->push(__FUNCTION__, 'error',
             array('version' => $version),
             'This package.xml requires PEAR version %version% to parse properly, we are ' .
-            'version 1.9.1');
+            'version 1.10.0beta1');
     }
 
     function _invalidTagOrder($oktags, $actual, $root)
@@ -81992,7 +82595,8 @@ class PEAR_PackageFile_v2_Validator
                     }
                     continue 2;
                 case T_DOUBLE_COLON:
-                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
+                    $token = $tokens[$i - 1][0];
+                    if (!($token == T_WHITESPACE || $token == T_STRING || $token == T_STATIC)) {
                         if (isset($this->_stack)) {
                             $this->_stack->push(__FUNCTION__, 'warning', array('file' => $file),
                                 'Parser error: invalid PHP found in file "%file%"');
@@ -82137,7 +82741,7 @@ define('PEAR_REGISTRY_ERROR_CHANNEL_FILE', -6);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -84503,7 +85107,7 @@ class PEAR_Registry extends PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    CVS: $Id: REST.php 296767 2010-03-25 00:58:33Z dufuz $
+ * @version    CVS: $Id: REST.php 308688 2011-02-25 23:18:06Z dufuz $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -84522,7 +85126,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/XMLParser.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -84594,7 +85198,10 @@ class PEAR_REST
             $ret = $this->getCache($url);
             if (!PEAR::isError($ret) && $trieddownload) {
                 // reset the age of the cache if the server says it was unmodified
-                $this->saveCache($url, $ret, null, true, $cacheId);
+                $result = $this->saveCache($url, $ret, null, true, $cacheId);
+                if (PEAR::isError($result)) {
+                    return PEAR::raiseErro($result->getMessage());
+                }
             }
 
             return $ret;
@@ -84611,7 +85218,11 @@ class PEAR_REST
         }
 
         if ($forcestring) {
-            $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+            $result = $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+            if (PEAR::isError($result)) {
+                return PEAR::raiseErro($result->getMessage());
+            }
+
             return $content;
         }
 
@@ -84647,7 +85258,11 @@ class PEAR_REST
             $content = $parser->getData();
         }
 
-        $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+        $result = $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+        if (PEAR::isError($result)) {
+            return PEAR::raiseErro($result->getMessage());
+        }
+
         return $content;
     }
 
@@ -84706,57 +85321,65 @@ class PEAR_REST
      */
     function saveCache($url, $contents, $lastmodified, $nochange = false, $cacheid = null)
     {
-        $cachedir    = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR . md5($url);
-        $cacheidfile = $cachedir . 'rest.cacheid';
-        $cachefile   = $cachedir . 'rest.cachefile';
+        $cache_dir   = $this->config->get('cache_dir');
+        $d           = $cache_dir . DIRECTORY_SEPARATOR . md5($url);
+        $cacheidfile = $d . 'rest.cacheid';
+        $cachefile   = $d . 'rest.cachefile';
 
         if ($cacheid === null && $nochange) {
             $cacheid = unserialize(implode('', file($cacheidfile)));
         }
 
-        $fp = @fopen($cacheidfile, 'wb');
-        if (!$fp) {
-            $cache_dir = $this->config->get('cache_dir');
+        if (is_link($cacheidfile)) {
+            return PEAR::raiseError('SECURITY ERROR: Will not write to ' . $cacheidfile . ' as it is symlinked to ' . readlink($cacheidfile) . ' - Possible symlink attack');
+        }
+
+        if (is_link($cachefile)) {
+            return PEAR::raiseError('SECURITY ERROR: Will not write to ' . $cacheidfile . ' as it is symlinked to ' . readlink($cacheidfile) . ' - Possible symlink attack');
+        }
+
+        $cacheidfile_fp = @fopen($cacheidfile, 'wb');
+        if (!$cacheidfile_fp) {
             if (is_dir($cache_dir)) {
-                return false;
+                return PEAR::raiseError("The value of config option cache_dir ($cache_dir) is not a directory. ");
             }
 
             System::mkdir(array('-p', $cache_dir));
-            $fp = @fopen($cacheidfile, 'wb');
-            if (!$fp) {
-                return false;
+            $cacheidfile_fp = @fopen($cacheidfile, 'wb');
+            if (!$cacheidfile_fp) {
+                return PEAR::raiseError("Could not open $cacheidfile for writing.");
             }
         }
 
         if ($nochange) {
-            fwrite($fp, serialize(array(
+            fwrite($cacheidfile_fp, serialize(array(
                 'age'        => time(),
                 'lastChange' => $cacheid['lastChange'],
                 ))
             );
 
-            fclose($fp);
+            fclose($cacheidfile_fp);
             return true;
         }
 
-        fwrite($fp, serialize(array(
+        fwrite($cacheidfile_fp, serialize(array(
             'age'        => time(),
             'lastChange' => $lastmodified,
             ))
         );
+        fclose($cacheidfile_fp);
 
-        fclose($fp);
-        $fp = @fopen($cachefile, 'wb');
-        if (!$fp) {
+        $cachefile_fp = @fopen($cachefile, 'wb');
+        if (!$cachefile_fp) {
             if (file_exists($cacheidfile)) {
                 @unlink($cacheidfile);
             }
 
-            return false;
+            return PEAR::raiseError("Could not open $cacheidfile for writing.");
         }
 
-        fwrite($fp, serialize($contents));
-        fclose($fp);
+        fwrite($cachefile_fp, serialize($contents));
+        fclose($cachefile_fp);
         return true;
     }
 
@@ -84842,7 +85465,7 @@ class PEAR_REST
         }
 
         $request .= $ifmodifiedsince .
-            "User-Agent: PEAR/1.9.1/PHP/" . PHP_VERSION . "\r\n";
+            "User-Agent: PEAR/1.10.0beta1/PHP/" . PHP_VERSION . "\r\n";
 
         $username = $this->config->get('username', null, $channel);
         $password = $this->config->get('password', null, $channel);
@@ -84968,7 +85591,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/REST.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a12
  */
@@ -86500,7 +87123,7 @@ End If
              */
             if ($this->php_bin == '') {
                 print "
-We do not find any php.exe, please select the php.exe folder (CLI is
+We did not find any php.exe, please select the php.exe folder (CLI is
 recommended, usually in c:\php\cli\php.exe)
 ";
                 $this->validPHPBin = false;
@@ -86896,7 +87519,7 @@ define('PEAR_TASK_PACKAGEANDINSTALL', 3);
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  * @abstract
@@ -87077,7 +87700,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -87396,7 +88019,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Postinstallscript.p
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
@@ -87564,7 +88187,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -87739,7 +88362,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Replace.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
@@ -87799,7 +88422,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -87875,7 +88498,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Unixeol.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
@@ -87930,7 +88553,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Common.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -88006,7 +88629,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Windowseol.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
@@ -88069,7 +88692,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Validator/PECL.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -88689,7 +89312,7 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Validate.php';
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.9.1
+ * @version    Release: 1.10.0beta1
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a5
  */
@@ -88750,7 +89373,7 @@ class PEAR_Validator_PECL extends PEAR_Validate
  * @author    Stephan Schmidt (original XML_Unserializer code)
  * @copyright 1997-2009 The Authors
  * @license   http://opensource.org/licenses/bsd-license New BSD License
- * @version   Release: 1.9.1
+ * @version   Release: 1.10.0beta1
  * @link      http://pear.php.net/package/PEAR
  * @since     Class available since Release 1.4.0a1
  */
@@ -89794,8 +90417,8 @@ class Structures_Graph_Node {
     /* }}} */
 }
 ?>
-package.xml                                                                                         100644     766      24        15133      100644   6217                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="UTF-8"?>
-<package packagerversion="1.9.0" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0     http://pear.php.net/dtd/tasks-1.0.xsd     http://pear.php.net/dtd/package-2.0     http://pear.php.net/dtd/package-2.0.xsd">
+package.xml                                                                                         0000644 0000766 0000024 00000015430 11461440276 012461  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.9.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0     http://pear.php.net/dtd/tasks-1.0.xsd     http://pear.php.net/dtd/package-2.0     http://pear.php.net/dtd/package-2.0.xsd">
  <name>Structures_Graph</name>
  <channel>pear.php.net</channel>
  <summary>Graph datastructure manipulation library</summary>
@@ -89814,10 +90437,10 @@ as well as for characteristic extraction from the graph topology.</description>
   <email>brett.bieber at gmail.com</email>
   <active>yes</active>
  </helper>
- <date>2009-10-11</date>
- <time>14:29:28</time>
+ <date>2010-10-25</date>
+ <time>21:45:17</time>
  <version>
-  <release>1.0.3</release>
+  <release>1.0.4</release>
   <api>1.0.3</api>
  </version>
  <stability>
@@ -89827,10 +90450,7 @@ as well as for characteristic extraction from the graph topology.</description>
  <license>LGPL License</license>
  <notes>
 Bugfix Release:
-Version 1.0.3 is functionally equivalent to 1.0.2 but with an updated package.xml file.
-* Correct invalid md5 sum preventing installation with pyrus [saltybeagle]
-* Add compatible tag for PEAR 1.5.0RC3-1.9.0 [saltybeagle]
-* Update package.xml
+* Bug #17108 BasicGraph::test_directed_degree fails on PHP 5 [clockwerx]
  </notes>
  <contents>
   <dir baseinstalldir="/" name="/">
@@ -89857,7 +90477,7 @@ Version 1.0.3 is functionally equivalent to 1.0.2 but with an updated package.xm
    <file baseinstalldir="/" md5sum="ce2da39dbb75e21074eb5e96231a3379" name="docs/generate.sh" role="doc" />
    <file baseinstalldir="/" md5sum="f0aff5a1efd188d63b4b8b9e9e840b97" name="Structures/Graph/Manipulator/AcyclicTest.php" role="php" />
    <file baseinstalldir="/" md5sum="0492e677436d29228df93dca23629e06" name="Structures/Graph/Manipulator/TopologicalSorter.php" role="php" />
-   <file baseinstalldir="/" md5sum="2529b0cbcf0791dd87f3ec060a6a0eb9" name="Structures/Graph/Node.php" role="php" />
+   <file baseinstalldir="/" md5sum="254ebaba7537ad0f36e63eb8b975cc51" name="Structures/Graph/Node.php" role="php" />
    <file baseinstalldir="/" md5sum="4f25a6275af156f6f8e7b4309cb9f40d" name="Structures/Graph.php" role="php" />
    <file baseinstalldir="/" md5sum="5791baa61d5d36442be58ea5cd9d4bd0" name="tests/testCase/BasicGraph.php" role="test" />
    <file baseinstalldir="/" md5sum="4fed49ef60db01eed800105aae4f2c8b" name="tests/AllTests.php" role="test" />
@@ -89868,7 +90488,7 @@ Version 1.0.3 is functionally equivalent to 1.0.2 but with an updated package.xm
   <name>PEAR</name>
   <channel>pear.php.net</channel>
   <min>1.5.0RC3</min>
-  <max>1.9.0</max>
+  <max>1.9.1</max>
  </compatible>
  <dependencies>
   <required>
@@ -89917,9 +90537,25 @@ Version 1.0.3 is functionally equivalent to 1.0.2 but with an updated package.xm
 * Update package.xml
    </notes>
   </release>
+  <release>
+   <version>
+    <release>1.0.4</release>
+    <api>1.0.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2010-10-25</date>
+   <license>LGPL License</license>
+   <notes>
+Bugfix Release:
+* Bug #17108 BasicGraph::test_directed_degree fails on PHP 5 [clockwerx]
+   </notes>
+  </release>
  </changelog>
 </package>
-                                                                                                                                                                                                                                                                                                                                                                                                                                     Structures_Graph-1.0.3/docs/html/media/banner.css                                                   100644     766      24          611      100644  14730                                                                                                                                                                                                                                                                                                                                                                      body 
+                                                                                                                                                                                                                                        Structures_Graph-1.0.4/docs/html/media/banner.css                                                   0000644 0000766 0000024 00000000611 11461440275 021232  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  body 
 { 
 	background-color: #CCCCFF; 
 	margin: 0px; 
@@ -89951,7 +90587,7 @@ Version 1.0.3 is functionally equivalent to 1.0.2 but with an updated package.xm
 	border: 1px solid black; 
 	color: yellow;
 }
-                                                                                                                       Structures_Graph-1.0.3/docs/html/media/stylesheet.css                                               100644     766      24        11604      100644  15720                                                                                                                                                                                                                                                                                                                                                                      a { color: #336699; text-decoration: none; }
+                                                                                                                       Structures_Graph-1.0.4/docs/html/media/stylesheet.css                                               0000644 0000766 0000024 00000011604 11461440275 022162  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  a { color: #336699; text-decoration: none; }
 a:hover { color: #6699CC; text-decoration: underline; }
 a:active { color: #6699CC; text-decoration: underline; }
 
@@ -90085,7 +90721,7 @@ dd { margin-left: 0px; padding-left: 1em; }
 .cmd-title { font-weight: bold }
 .toc { margin-left: 2em; padding-left: 0em }
 
-                                                                                                                            Structures_Graph-1.0.3/docs/html/Structures_Graph/Structures_Graph.html                             100644     766      24        21273      100644  21437                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+                                                                                                                            Structures_Graph-1.0.4/docs/html/Structures_Graph/Structures_Graph.html                             0000644 0000766 0000024 00000021273 11461440275 025701  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -90327,7 +90963,7 @@ dd { margin-left: 0px; padding-left: 1em; }
 		Documentation generated on Fri, 30 Jan 2004 16:37:28 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</div></body>
-</html>                                                                                                                                                                                                                                                                                                                                     Structures_Graph-1.0.3/docs/html/Structures_Graph/Structures_Graph_Manipulator_AcyclicTest.html     100644     766      24         7410      100644  26256                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                                                                                                                                                     Structures_Graph-1.0.4/docs/html/Structures_Graph/Structures_Graph_Manipulator_AcyclicTest.html     0000644 0000766 0000024 00000007410 11461440275 032540  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -90431,7 +91067,7 @@ dd { margin-left: 0px; padding-left: 1em; }
 		Documentation generated on Fri, 30 Jan 2004 16:37:28 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</div></body>
-</html>                                                                                                                                                                                                                                                        ././@LongLink                                                                                       0       0       0               145 0             4476  L                                                                                                                                                                                                                                                                                                                                                                   Structures_Graph-1.0.3/docs/html/Structures_Graph/Structures_Graph_Manipulator_TopologicalSorter.html                                                                                                                                                                                                                                                                                                                                                                                                                           Structures_Graph-1.0.3/docs/html/Structures_Graph/Structures_Graph_Manipulator_TopologicalSorter.htm100644     766      24        10141      100644  27361                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                                                                        ././@LongLink                                                                                       0       0       0               145 0           003736  L                                                                                                                                                                                                                                                                                                                                                                   Structures_Graph-1.0.4/docs/html/Structures_Graph/Structures_Graph_Manipulator_TopologicalSorter.html                                                                                                                                                                                                                                                                                                                                                                                                                           Structures_Graph-1.0.4/docs/html/Structures_Graph/Structures_Graph_Manipulator_TopologicalSorter.htm0000644 0000766 0000024 00000010141 11461440275 033623  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -90537,7 +91173,7 @@ dd { margin-left: 0px; padding-left: 1em; }
 		Documentation generated on Fri, 30 Jan 2004 16:37:29 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</div></body>
-</html>                                                                                                                                                                                                                                                                                                                                                                                                                               Structures_Graph-1.0.3/docs/html/Structures_Graph/Structures_Graph_Node.html                        100644     766      24        50071      100644  22402                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                                                                                                                                                                                                                                               Structures_Graph-1.0.4/docs/html/Structures_Graph/Structures_Graph_Node.html                        0000644 0000766 0000024 00000050071 11461440275 026644  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -91085,7 +91721,7 @@ dd { margin-left: 0px; padding-left: 1em; }
 		Documentation generated on Fri, 30 Jan 2004 16:37:29 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</div></body>
-</html>                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Structures_Graph-1.0.3/docs/html/Structures_Graph/tutorial_Structures_Graph.pkg.html                100644     766      24        11106      100644  24134                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Structures_Graph-1.0.4/docs/html/Structures_Graph/tutorial_Structures_Graph.pkg.html                0000644 0000766 0000024 00000011106 11461440275 030376  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -91159,7 +91795,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 		Documentation generated on Fri, 30 Jan 2004 16:37:28 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</div></body>
-</html>                                                                                                                                                                                                                                                                                                                                                                                                                                                          ././@LongLink                                                                                       0       0       0               144 0             4475  L                                                                                                                                                                                                                                                                                                                                                                   Structures_Graph-1.0.3/docs/html/Structures_Graph/_Structures_Graph_Manipulator_AcyclicTest_php.html                                                                                                                                                                                                                                                                                                                                                                                                                            Structures_Graph-1.0.3/docs/html/Structures_Graph/_Structures_Graph_Manipulator_AcyclicTest_php.html100644     766      24         7462      100644  27273                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                                                                                                                                                                                                                                                                          ././@LongLink                                                                                       0       0       0               144 0           003735  L                                                                                                                                                                                                                                                                                                                                                                   Structures_Graph-1.0.4/docs/html/Structures_Graph/_Structures_Graph_Manipulator_AcyclicTest_php.html                                                                                                                                                                                                                                                                                                                                                                                                                            Structures_Graph-1.0.4/docs/html/Structures_Graph/_Structures_Graph_Manipulator_AcyclicTest_php.html0000644 0000766 0000024 00000007462 11461440275 033555  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -91277,7 +91913,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 		Documentation generated on Fri, 30 Jan 2004 16:37:28 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</div></body>
-</html>                                                                                                                                                                                                              ././@LongLink                                                                                       0       0       0               152 0             4474  L                                                                                                                                                                                                                                                                                                                                                                   Structures_Graph-1.0.3/docs/html/Structures_Graph/_Structures_Graph_Manipulator_TopologicalSorter_php.html                                                                                                                                                                                                                                                                                                                                                                                                                      Structures_Graph-1.0.3/docs/html/Structures_Graph/_Structures_Graph_Manipulator_TopologicalSorter_ph100644     766      24        10525      100644  27426                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                              ././@LongLink                                                                                       0       0       0               152 0           003734  L                                                                                                                                                                                                                                                                                                                                                                   Structures_Graph-1.0.4/docs/html/Structures_Graph/_Structures_Graph_Manipulator_TopologicalSorter_php.html                                                                                                                                                                                                                                                                                                                                                                                                                      Structures_Graph-1.0.4/docs/html/Structures_Graph/_Structures_Graph_Manipulator_TopologicalSorter_ph0000644 0000766 0000024 00000010525 11461440275 033670  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -91409,7 +92045,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 		Documentation generated on Fri, 30 Jan 2004 16:37:29 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</div></body>
-</html>                                                                                                                                                                           Structures_Graph-1.0.3/docs/html/Structures_Graph/_Structures_Graph_Node_php.html                   100644     766      24         6356      100644  23377                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                           Structures_Graph-1.0.4/docs/html/Structures_Graph/_Structures_Graph_Node_php.html                   0000644 0000766 0000024 00000006356 11461440275 027661  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -91513,7 +92149,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 		Documentation generated on Fri, 30 Jan 2004 16:37:29 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</div></body>
-</html>                                                                                                                                                                                                                                                                                  Structures_Graph-1.0.3/docs/html/Structures_Graph/_Structures_Graph_php.html                        100644     766      24        10207      100644  22440                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                                                                                                  Structures_Graph-1.0.4/docs/html/Structures_Graph/_Structures_Graph_php.html                        0000644 0000766 0000024 00000010207 11461440275 026702  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -91648,7 +92284,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 		Documentation generated on Fri, 30 Jan 2004 16:37:28 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</div></body>
-</html>                                                                                                                                                                                                                                                                                                                                                                                         Structures_Graph-1.0.3/docs/html/classtrees_Structures_Graph.html                                   100644     766      24         2530      100644  20336                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                                                                                                                                                                                                         Structures_Graph-1.0.4/docs/html/classtrees_Structures_Graph.html                                   0000644 0000766 0000024 00000002530 11461440275 024620  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -91683,7 +92319,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 		Documentation generated on Fri, 30 Jan 2004 16:37:28 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</body>
-</html>                                                                                                                                                                        Structures_Graph-1.0.3/docs/html/elementindex.html                                                  100644     766      24        36407      100644  15315                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                        Structures_Graph-1.0.4/docs/html/elementindex.html                                                  0000644 0000766 0000024 00000036407 11461440275 021557  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -92021,7 +92657,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 	<a class="index-letter" href="elementindex.html#t">t</a>
 	<a class="index-letter" href="elementindex.html#u">u</a>
 </div>	</body>
-</html>                                                                                                                                                                                                                                                         Structures_Graph-1.0.3/docs/html/elementindex_Structures_Graph.html                                 100644     766      24        37120      100644  20672                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                                                                         Structures_Graph-1.0.4/docs/html/elementindex_Structures_Graph.html                                 0000644 0000766 0000024 00000037120 11461440275 025134  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -92356,7 +92992,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 	<a class="index-letter" href="elementindex_Structures_Graph.html#t">t</a>
 	<a class="index-letter" href="elementindex_Structures_Graph.html#u">u</a>
 </div>	</body>
-</html>                                                                                                                                                                                                                                                                                                                                                                                                                                                Structures_Graph-1.0.3/docs/html/errors.html                                                        100644     766      24         1325      100644  14117                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                                                                                                                                                                                                                                                                Structures_Graph-1.0.4/docs/html/errors.html                                                        0000644 0000766 0000024 00000001325 11461440275 020401  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -92371,7 +93007,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 		Documentation generated on Fri, 30 Jan 2004 16:37:29 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</body>
-</html>                                                                                                                                                                                                                                                                                                           Structures_Graph-1.0.3/docs/html/index.html                                                         100644     766      24         1761      100644  13716                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</html>                                                                                                                                                                                                                                                                                                           Structures_Graph-1.0.4/docs/html/index.html                                                         0000644 0000766 0000024 00000001761 11461440275 020200  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html 
      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
@@ -92394,7 +93030,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 		If you see this message, you are using a non-frame-capable web client.</P>
 	</NOFRAMES>
 </FRAMESET>
-</HTML>               Structures_Graph-1.0.3/docs/html/li_Structures_Graph.html                                           100644     766      24         4760      100644  16601                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</HTML>               Structures_Graph-1.0.4/docs/html/li_Structures_Graph.html                                           0000644 0000766 0000024 00000004760 11461440275 023063  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -92446,7 +93082,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 </div>
 <p class="notes"><a href="http://www.phpdoc.org" target="_blank">phpDocumentor v <span class="field">1.2.3</span></a></p>
 </BODY>
-</HTML>                Structures_Graph-1.0.3/docs/html/packages.html                                                      100644     766      24         1641      100644  14362                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+</HTML>                Structures_Graph-1.0.4/docs/html/packages.html                                                      0000644 0000766 0000024 00000001641 11461440275 020644  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -92472,7 +93108,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 				</div>
 			</div>
 		</body>
-	</html>                                                                                               Structures_Graph-1.0.3/docs/html/todolist.html                                                      100644     766      24         1554      100644  14450                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="iso-8859-1"?>
+	</html>                                                                                               Structures_Graph-1.0.4/docs/html/todolist.html                                                      0000644 0000766 0000024 00000001554 11461440275 020732  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
 		<head>
@@ -92492,7 +93128,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
 		Documentation generated on Fri, 30 Jan 2004 16:37:29 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.2.3</a>
 	</p>
 	</body>
-</html>                                                                                                                                                    Structures_Graph-1.0.3/docs/tutorials/Structures_Graph/Structures_Graph.pkg                         100644     766      24         7714      100644  22322                                                                                                                                                                                                                                                                                                                                                                      <refentry id="{@id package.database.structures_graph.tutorial}">
+</html>                                                                                                                                                    Structures_Graph-1.0.4/docs/tutorials/Structures_Graph/Structures_Graph.pkg                         0000644 0000766 0000024 00000007714 11461440275 026604  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <refentry id="{@id package.database.structures_graph.tutorial}">
  <refnamediv>
   <refname><classname>Structures_Graph</classname> Tutorial</refname>
   <refpurpose>A first tour of graph datastructure manipulation</refpurpose>
@@ -92590,7 +93226,7 @@ for ($i=0;$i<sizeof($arcs);$i++) {
   </para>
  </refsect1>
 </refentry>
-                                                    Structures_Graph-1.0.3/docs/generate.sh                                                             100755     766      24          555      100755  13071                                                                                                                                                                                                                                                                                                                                                                      #!/bin/sh
+                                                    Structures_Graph-1.0.4/docs/generate.sh                                                             0000755 0000766 0000024 00000000555 11461440275 017370  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  #!/bin/sh
 (cd ..; tar czf docs/arch.tgz "{arch}")
 rm -Rf "../{arch}"
 rm -Rf ./html
@@ -92598,7 +93234,7 @@ mkdir -p ./html
 phpdoc --directory ../Structures,./tutorials --target ./html --title "Structures_Graph Documentation" --output "HTML:frames" --defaultpackagename structures_graph --defaultcategoryname structures --pear 
 (cd ..; tar --absolute-names -xzf docs/arch.tgz)
 #rm arch.tgz
-                                                                                                                                                   Structures_Graph-1.0.3/Structures/Graph/Manipulator/AcyclicTest.php                                 100644     766      24        13160      100644  20500                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                                                   Structures_Graph-1.0.4/Structures/Graph/Manipulator/AcyclicTest.php                                 0000644 0000766 0000024 00000013160 11461440275 024742  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
 // +-----------------------------------------------------------------------------+
 // | Copyright (c) 2003 Sérgio Gonçalves Carvalho                                |
@@ -92734,7 +93370,7 @@ class Structures_Graph_Manipulator_AcyclicTest {
 }
 /* }}} */
 ?>
-                                                                                                                                                                                                                                                                                                                                                                                                                Structures_Graph-1.0.3/Structures/Graph/Manipulator/TopologicalSorter.php                           100644     766      24        15046      100644  21751                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                                                                                                                                                                                                                                                                                                                Structures_Graph-1.0.4/Structures/Graph/Manipulator/TopologicalSorter.php                           0000644 0000766 0000024 00000015046 11461440275 026213  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
 // +-----------------------------------------------------------------------------+
 // | Copyright (c) 2003 Sérgio Gonçalves Carvalho                                |
@@ -92887,7 +93523,7 @@ class Structures_Graph_Manipulator_TopologicalSorter {
 }
 /* }}} */
 ?>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Structures_Graph-1.0.3/Structures/Graph/Node.php                                                    100644     766      24        25237      100644  14673                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Structures_Graph-1.0.4/Structures/Graph/Node.php                                                    0000644 0000766 0000024 00000025450 11461440275 021132  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
 // +-----------------------------------------------------------------------------+
 // | Copyright (c) 2003 Sérgio Gonçalves Carvalho                                |
@@ -93161,6 +93797,10 @@ class Structures_Graph_Node {
     * @access	public
     */
     function connectsTo(&$target) {
+        if (version_compare(PHP_VERSION, '5.0.0') >= 0) {
+            return in_array($target, $this->getNeighbours(), true);
+        }
+
         $copy = $target;
         $arcKeys = array_keys($this->_arcs);
         foreach($arcKeys as $key) {
@@ -93225,7 +93865,7 @@ class Structures_Graph_Node {
     /* }}} */
 }
 ?>
-                                                                                                                                                                                                                                                                                                                                                                 Structures_Graph-1.0.3/Structures/Graph.php                                                         100644     766      24        13163      100644  14001                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                                                                                                                        Structures_Graph-1.0.4/Structures/Graph.php                                                         0000644 0000766 0000024 00000013163 11461440275 020243  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
 // +-----------------------------------------------------------------------------+
 // | Copyright (c) 2003 Sérgio Gonçalves Carvalho                                |
@@ -93379,7 +94019,7 @@ class Structures_Graph {
     /* }}} */
 }
 ?>
-                                                                                                                                                                                                                                                                                                                                                                                                             Structures_Graph-1.0.3/tests/testCase/BasicGraph.php                                                100644     766      24        21611      100644  15472                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                                                                                                                                                                                                                                                                                                             Structures_Graph-1.0.4/tests/testCase/BasicGraph.php                                                0000644 0000766 0000024 00000021611 11461440275 021734  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
 // +-----------------------------------------------------------------------------+
 // | Copyright (c) 2003 Sérgio Gonçalves Carvalho                                |
@@ -93550,7 +94190,7 @@ class BasicGraph extends PHPUnit_Framework_TestCase
     }
 }
 ?>
-                                                                                                                       Structures_Graph-1.0.3/tests/AllTests.php                                                           100644     766      24         6414      100644  13433                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                       Structures_Graph-1.0.4/tests/AllTests.php                                                           0000644 0000766 0000024 00000006414 11461440275 017715  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  <?php
 
 /**
  * Master Unit Test Suite file for Structures_Graph
@@ -93671,7 +94311,7 @@ if (PHPUnit_MAIN_METHOD == 'Structures_Graph_AllTests::main') {
 
 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 ?>
-                                                                                                                                                                                                                                                    Structures_Graph-1.0.3/LICENSE                                                                      100644     766      24        63476      100644  11065                                                                                                                                                                                                                                                                                                                                                                      		  GNU LESSER GENERAL PUBLIC LICENSE
+                                                                                                                                                                                                                                                    Structures_Graph-1.0.4/LICENSE                                                                      0000644 0000766 0000024 00000063476 11461440275 015327  0                                                                                                    ustar   bbieber                         staff                                                                                                                                                                                                                  		  GNU LESSER GENERAL PUBLIC LICENSE
 		       Version 2.1, February 1999
 
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
@@ -94228,7 +94868,7 @@ $GLOBALS['_System_temp_files'] = array();
 * @author     Tomas V.V. Cox <cox at idecnet.com>
 * @copyright  1997-2006 The PHP Group
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
-* @version    Release: 1.9.1
+* @version    Release: 1.10.0beta1
 * @link       http://pear.php.net/package/PEAR
 * @since      Class available since Release 0.1
 * @static
@@ -98721,4 +99361,4 @@ iEYEABECAAYFAkk8e2QACgkQcqMhusJF8XULZgCg0iwVLWueraJzK5s1AesDkVzv
 GucAn22sSv3QiTSUWG9BmakiW9hFsb4V
 =g2mr
 -----END PGP SIGNATURE-----
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ˜ì¿9ÿeX!	§Çg®–6ùþ   GBMB
\ No newline at end of file
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           a*۝3åä³{z8îÕ™"–k   GBMB
\ No newline at end of file
diff --git a/php.ini-development b/php.ini-development
index c8a7a1f..4a494a0 100644
--- a/php.ini-development
+++ b/php.ini-development
@@ -317,7 +317,7 @@ unserialize_callback_func =
 ; When floats & doubles are serialized store serialize_precision significant
 ; digits after the floating point. The default value ensures that when floats
 ; are decoded with unserialize, the data will remain the same.
-serialize_precision = 100
+serialize_precision = 17
 
 ; This directive allows you to enable and disable warnings which PHP will issue
 ; if you pass a value by reference at function call time. Passing values by
@@ -621,13 +621,13 @@ html_errors = On
 ; this setting blank.
 ; http://php.net/error-prepend-string
 ; Example:
-;error_prepend_string = "<font color=#ff0000>"
+;error_prepend_string = "<span style='color: #ff0000'>"
 
 ; String to output after an error message. PHP's default behavior is to leave
 ; this setting blank.
 ; http://php.net/error-append-string
 ; Example:
-;error_append_string = "</font>"
+;error_append_string = "</span>"
 
 ; Log errors to specified file. PHP's default behavior is to leave this value
 ; empty.
@@ -972,7 +972,11 @@ default_socket_timeout = 60
 ;extension=php_phar.dll
 ;extension=php_pspell.dll
 ;extension=php_shmop.dll
+
+; The MIBS data available in the PHP distribution must be installed. 
+; See http://www.php.net/manual/en/snmp.installation.php 
 ;extension=php_snmp.dll
+
 ;extension=php_soap.dll
 ;extension=php_sockets.dll
 ;extension=php_sqlite.dll
diff --git a/php.ini-production b/php.ini-production
index fb31d73..89c1bed 100644
--- a/php.ini-production
+++ b/php.ini-production
@@ -317,7 +317,7 @@ unserialize_callback_func =
 ; When floats & doubles are serialized store serialize_precision significant
 ; digits after the floating point. The default value ensures that when floats
 ; are decoded with unserialize, the data will remain the same.
-serialize_precision = 100
+serialize_precision = 17
 
 ; This directive allows you to enable and disable warnings which PHP will issue
 ; if you pass a value by reference at function call time. Passing values by
@@ -621,13 +621,13 @@ html_errors = Off
 ; this setting blank.
 ; http://php.net/error-prepend-string
 ; Example:
-;error_prepend_string = "<font color=#ff0000>"
+;error_prepend_string = "<span style='color: #ff0000'>"
 
 ; String to output after an error message. PHP's default behavior is to leave
 ; this setting blank.
 ; http://php.net/error-append-string
 ; Example:
-;error_append_string = "</font>"
+;error_append_string = "</span>"
 
 ; Log errors to specified file. PHP's default behavior is to leave this value
 ; empty.
@@ -971,7 +971,11 @@ default_socket_timeout = 60
 ;extension=php_pgsql.dll
 ;extension=php_pspell.dll
 ;extension=php_shmop.dll
+
+; The MIBS data available in the PHP distribution must be installed. 
+; See http://www.php.net/manual/en/snmp.installation.php 
 ;extension=php_snmp.dll
+
 ;extension=php_soap.dll
 ;extension=php_sockets.dll
 ;extension=php_sqlite.dll
diff --git a/run-tests.php b/run-tests.php
index f98190f..9898713 100755
--- a/run-tests.php
+++ b/run-tests.php
@@ -24,7 +24,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: run-tests.php 305310 2010-11-13 10:18:35Z jani $ */
+/* $Id: run-tests.php 308726 2011-02-27 17:55:39Z felipe $ */
 
 /* Sanity check to ensure that pcre extension needed by this script is available.
  * In the event it is not, print a nice error message indicating that this script will
@@ -77,7 +77,7 @@ if (PHP_VERSION_ID < 50300) {
 	// FILE_BINARY is available from 5.2.7
 	if (PHP_VERSION_ID < 50207) {
 		define('FILE_BINARY', 0);
-	}	
+	}
 }
 
 // (unicode) is available from 6.0.0
@@ -567,7 +567,7 @@ if (isset($argc) && $argc > 1) {
 				case 'm':
 					$leak_check = true;
 					$valgrind_cmd = "valgrind --version";
-					$valgrind_header = system_with_timeout($valgrind_cmd);
+					$valgrind_header = system_with_timeout($valgrind_cmd, $environment);
 					$replace_count = 0;
 					if (!$valgrind_header) {
 						error("Valgrind returned no version info, cannot proceed.\nPlease check if Valgrind is installed.");
@@ -641,7 +641,7 @@ if (isset($argc) && $argc > 1) {
 					$html_output = is_resource($html_file);
 					break;
 				case '--version':
-					echo '$Revision: 305310 $' . "\n";
+					echo '$Revision: 308726 $' . "\n";
 					exit(1);
 
 				default:
@@ -937,7 +937,7 @@ if ($html_output) {
 }
 
 save_or_mail_results();
- 
+
 if (getenv('REPORT_EXIT_STATUS') == 1 and $sum_results['FAILED']) {
 	exit(1);
 }
@@ -977,7 +977,7 @@ function mail_qa_team($data, $compression, $status = false)
 	fclose($fs);
 
 	return 1;
-} 
+}
 
 
 //
@@ -1001,7 +1001,7 @@ function save_text($filename, $text, $filename_copy = null)
 	if (1 < $DETAILED) echo "
 FILE $filename {{{
 $text
-}}} 
+}}}
 ";
 }
 
@@ -1009,7 +1009,7 @@ $text
 //  Write an error in a format recognizable to Emacs or MSVC.
 //
 
-function error_report($testname, $logname, $tested) 
+function error_report($testname, $logname, $tested)
 {
 	$testname = realpath($testname);
 	$logname  = realpath($logname);
@@ -1051,7 +1051,7 @@ function system_with_timeout($commandline, $env = null, $stdin = null)
 		fwrite($pipes[0], (binary) $stdin);
 	}
 	fclose($pipes[0]);
-	
+
 	$timeout = $leak_check ? 300 : (isset($env['TEST_TIMEOUT']) ? $env['TEST_TIMEOUT'] : 60);
 
 	while (true) {
@@ -1139,7 +1139,7 @@ function show_file_block($file, $block, $section = null)
 
 function binary_section($section)
 {
-	return PHP_MAJOR_VERSION < 6 || 
+	return PHP_MAJOR_VERSION < 6 ||
 		(
 			$section == 'FILE'			||
 	        $section == 'FILEEOF'		||
@@ -1821,7 +1821,7 @@ COMMAND $cmd
 				$startOffset = $end + 2;
 			}
 			$wanted_re = $temp;
-		
+
 			$wanted_re = str_replace(
 				array(b'%binary_string_optional%'),
 				version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'string' : b'binary string',
@@ -1935,6 +1935,7 @@ COMMAND $cmd
 	if (!$passed) {
 		if (isset($section_text['XFAIL'])) {
 			$restype[] = 'XFAIL';
+			$info = '  XFAIL REASON: ' . $section_text['XFAIL'];
 		} else {
 			$restype[] = 'FAIL';
 		}
@@ -2143,7 +2144,7 @@ function settings2array($settings, &$ini_settings)
 
 		if (strpos($setting, '=') !== false) {
 			$setting = explode("=", $setting, 2);
-			$name = trim(strtolower($setting[0]));
+			$name = trim($setting[0]);
 			$value = trim($setting[1]);
 
 			if ($name == 'extension') {
@@ -2240,7 +2241,7 @@ function get_summary($show_ext_summary, $show_html)
 	if ($show_html) {
 		$summary .= "<pre>\n";
 	}
-	
+
 	if ($show_ext_summary) {
 		$summary .= '
 =====================================================================
@@ -2457,12 +2458,12 @@ function show_result($result, $tested, $tested_file, $extra = '', $temp_filename
 			$mem = " ";
 		}
 
-		fwrite($html_file, 
+		fwrite($html_file,
 			"<tr>" .
 			"<td>$result</td>" .
 			"<td>$tested</td>" .
 			"<td>$extra</td>" .
-			"<td>$diff</td>" . 
+			"<td>$diff</td>" .
 			"<td>$mem</td>" .
 			"</tr>\n");
 	}
diff --git a/sapi/aolserver/aolserver.c b/sapi/aolserver/aolserver.c
index 7cc8cdd..fda7364 100644
--- a/sapi/aolserver/aolserver.c
+++ b/sapi/aolserver/aolserver.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -22,7 +22,7 @@
  * - CGI/1.1 conformance
  */
 
-/* $Id: aolserver.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: aolserver.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* conflict between PHP and AOLserver headers */
 #define Debug php_Debug
@@ -205,7 +205,7 @@ static void php_info_aolserver(ZEND_MODULE_INFO_FUNC_ARGS)
 	int i;
 	
 	php_info_print_table_start();
-	php_info_print_table_row(2, "SAPI module version", "$Id: aolserver.c 293036 2010-01-03 09:23:27Z sebastian $");
+	php_info_print_table_row(2, "SAPI module version", "$Id: aolserver.c 306939 2011-01-01 02:19:59Z felipe $");
 	php_info_print_table_row(2, "Build date", Ns_InfoBuildDate());
 	php_info_print_table_row(2, "Config file path", Ns_InfoConfigFile());
 	php_info_print_table_row(2, "Error Log path", Ns_InfoErrorLog());
diff --git a/sapi/apache/libpre.c b/sapi/apache/libpre.c
index 15f7a10..033ea54 100644
--- a/sapi/apache/libpre.c
+++ b/sapi/apache/libpre.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: libpre.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: libpre.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifdef NETWARE
 
diff --git a/sapi/apache/mod_php5.c b/sapi/apache/mod_php5.c
index 70e49a7..ebcd69f 100644
--- a/sapi/apache/mod_php5.c
+++ b/sapi/apache/mod_php5.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    | PHP 4.0 patches by Zeev Suraski <zeev at zend.com>                      |
    +----------------------------------------------------------------------+
  */
-/* $Id: mod_php5.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: mod_php5.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_apache_http.h"
 #include "http_conf_globals.h"
diff --git a/sapi/apache/mod_php5.h b/sapi/apache/mod_php5.h
index adbb783..1360731 100644
--- a/sapi/apache/mod_php5.h
+++ b/sapi/apache/mod_php5.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Rasmus Lerdorf <rasmus at php.net>                              |
    +----------------------------------------------------------------------+
  */
-/* $Id: mod_php5.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mod_php5.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MOD_PHP5_H
 #define MOD_PHP5_H
diff --git a/sapi/apache/php_apache.c b/sapi/apache/php_apache.c
index 8701bbf..0f73b84 100644
--- a/sapi/apache/php_apache.c
+++ b/sapi/apache/php_apache.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    |          David Sklar <sklar at student.net>                             |
    +----------------------------------------------------------------------+
  */
-/* $Id: php_apache.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: php_apache.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_apache_http.h"
 
diff --git a/sapi/apache/php_apache_http.h b/sapi/apache/php_apache_http.h
index 44d0927..693d1b7 100644
--- a/sapi/apache/php_apache_http.h
+++ b/sapi/apache/php_apache_http.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_apache_http.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_apache_http.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define NO_REGEX_EXTRA_H
 
diff --git a/sapi/apache/sapi_apache.c b/sapi/apache/sapi_apache.c
index 2447b8f..13827d6 100644
--- a/sapi/apache/sapi_apache.c
+++ b/sapi/apache/sapi_apache.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    | Stig Bakken <ssb at php.net>                                            |
    +----------------------------------------------------------------------+
  */
-/* $Id: sapi_apache.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: sapi_apache.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_apache_http.h"
 
diff --git a/sapi/apache2filter/apache_config.c b/sapi/apache2filter/apache_config.c
index b9626cb..3b53f01 100644
--- a/sapi/apache2filter/apache_config.c
+++ b/sapi/apache2filter/apache_config.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: apache_config.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: apache_config.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
diff --git a/sapi/apache2filter/php_apache.h b/sapi/apache2filter/php_apache.h
index 6ec8c37..72eaa3f 100644
--- a/sapi/apache2filter/php_apache.h
+++ b/sapi/apache2filter/php_apache.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_apache.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_apache.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_APACHE_H
 #define PHP_APACHE_H
diff --git a/sapi/apache2filter/php_functions.c b/sapi/apache2filter/php_functions.c
index 159e5c5..8b5ba83 100644
--- a/sapi/apache2filter/php_functions.c
+++ b/sapi/apache2filter/php_functions.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_functions.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_functions.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
diff --git a/sapi/apache2filter/sapi_apache2.c b/sapi/apache2filter/sapi_apache2.c
index 08e4230..f2c7a87 100644
--- a/sapi/apache2filter/sapi_apache2.c
+++ b/sapi/apache2filter/sapi_apache2.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: sapi_apache2.c 294571 2010-02-05 18:59:05Z rasmus $ */
+/* $Id: sapi_apache2.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include <fcntl.h>
 
diff --git a/sapi/apache2handler/apache_config.c b/sapi/apache2handler/apache_config.c
index 15e25b5..3e97b59 100644
--- a/sapi/apache2handler/apache_config.c
+++ b/sapi/apache2handler/apache_config.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: apache_config.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: apache_config.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
diff --git a/sapi/apache2handler/mod_php5.c b/sapi/apache2handler/mod_php5.c
index 56ec28b..56bfdad 100644
--- a/sapi/apache2handler/mod_php5.c
+++ b/sapi/apache2handler/mod_php5.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_php5.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mod_php5.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
diff --git a/sapi/apache2handler/php_apache.h b/sapi/apache2handler/php_apache.h
index a7ad1cc..2ee8bd8 100644
--- a/sapi/apache2handler/php_apache.h
+++ b/sapi/apache2handler/php_apache.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_apache.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_apache.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_APACHE_H
 #define PHP_APACHE_H
diff --git a/sapi/apache2handler/php_functions.c b/sapi/apache2handler/php_functions.c
index b54fe6a..b7cc640 100644
--- a/sapi/apache2handler/php_functions.c
+++ b/sapi/apache2handler/php_functions.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_functions.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: php_functions.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
diff --git a/sapi/apache2handler/sapi_apache2.c b/sapi/apache2handler/sapi_apache2.c
index 63a8a47..18f2124 100644
--- a/sapi/apache2handler/sapi_apache2.c
+++ b/sapi/apache2handler/sapi_apache2.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: sapi_apache2.c 298951 2010-05-04 09:51:03Z pajoye $ */
+/* $Id: sapi_apache2.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
diff --git a/sapi/apache_hooks/mod_php5.c b/sapi/apache_hooks/mod_php5.c
index 95e1d0a..79a733b 100644
--- a/sapi/apache_hooks/mod_php5.c
+++ b/sapi/apache_hooks/mod_php5.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5													      |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group								  |
+   | Copyright (c) 1997-2011 The PHP Group								  |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,	  |
    | that is bundled with this package in the file LICENSE, and is		  |
@@ -17,7 +17,7 @@
    | PHP 4.0 patches by Zeev Suraski <zeev at zend.com>					  |
    +----------------------------------------------------------------------+
  */
-/* $Id: mod_php5.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: mod_php5.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_apache_http.h"
 
diff --git a/sapi/apache_hooks/mod_php5.h b/sapi/apache_hooks/mod_php5.h
index 229ba3e..08ec4eb 100644
--- a/sapi/apache_hooks/mod_php5.h
+++ b/sapi/apache_hooks/mod_php5.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Rasmus Lerdorf <rasmus at php.net>                              |
    +----------------------------------------------------------------------+
  */
-/* $Id: mod_php5.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: mod_php5.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef MOD_PHP5_H
 #define MOD_PHP5_H
diff --git a/sapi/apache_hooks/php_apache.c b/sapi/apache_hooks/php_apache.c
index ce1e269..8be9276 100644
--- a/sapi/apache_hooks/php_apache.c
+++ b/sapi/apache_hooks/php_apache.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    |          David Sklar <sklar at student.net>                             |
    +----------------------------------------------------------------------+
  */
-/* $Id: php_apache.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: php_apache.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_apache_http.h"
 
diff --git a/sapi/apache_hooks/sapi_apache.c b/sapi/apache_hooks/sapi_apache.c
index 7612a18..f1b948b 100644
--- a/sapi/apache_hooks/sapi_apache.c
+++ b/sapi/apache_hooks/sapi_apache.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    | Stig Bakken <ssb at php.net>                                            |
    +----------------------------------------------------------------------+
  */
-/* $Id: sapi_apache.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: sapi_apache.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_apache_http.h"
 
diff --git a/sapi/caudium/caudium.c b/sapi/caudium/caudium.c
index 4b59c57..e0c4847 100644
--- a/sapi/caudium/caudium.c
+++ b/sapi/caudium/caudium.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: caudium.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: caudium.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #ifdef HAVE_CAUDIUM
@@ -444,7 +444,7 @@ static void php_info_caudium(ZEND_MODULE_INFO_FUNC_ARGS)
 {
   /*  char buf[512]; */
   php_info_print_table_start();
-  php_info_print_table_row(2, "SAPI module version", "$Id: caudium.c 293036 2010-01-03 09:23:27Z sebastian $");
+  php_info_print_table_row(2, "SAPI module version", "$Id: caudium.c 306939 2011-01-01 02:19:59Z felipe $");
   /*  php_info_print_table_row(2, "Build date", Ns_InfoBuildDate());
       php_info_print_table_row(2, "Config file path", Ns_InfoConfigFile());
       php_info_print_table_row(2, "Error Log path", Ns_InfoErrorLog());
diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
index 0a94324..1ecbcb1 100644
--- a/sapi/cgi/cgi_main.c
+++ b/sapi/cgi/cgi_main.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: cgi_main.c 300854 2010-06-29 11:37:13Z felipe $ */
+/* $Id: cgi_main.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -1930,9 +1930,9 @@ consult the installation file that came with this distribution, or visit \n\
 								SG(request_info).no_headers = 1;
 							}
 #if ZEND_DEBUG
-							php_printf("PHP %s (%s) (built: %s %s) (DEBUG)\nCopyright (c) 1997-2010 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
+							php_printf("PHP %s (%s) (built: %s %s) (DEBUG)\nCopyright (c) 1997-2011 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
 #else
-							php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c) 1997-2010 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
+							php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c) 1997-2011 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
 #endif
 							php_request_shutdown((void *) 0);
 							fcgi_shutdown();
diff --git a/sapi/cgi/fastcgi.c b/sapi/cgi/fastcgi.c
index 304b1d0..c6f96f3 100644
--- a/sapi/cgi/fastcgi.c
+++ b/sapi/cgi/fastcgi.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: fastcgi.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: fastcgi.c 307579 2011-01-19 08:38:25Z dmitry $ */
 
 #include "php.h"
 #include "fastcgi.h"
@@ -605,28 +605,39 @@ static int fcgi_get_params(fcgi_request *req, unsigned char *p, unsigned char *e
 {
 	char buf[128];
 	char *tmp = buf;
-	int buf_size = sizeof(buf);
-	int name_len, val_len;
+	size_t buf_size = sizeof(buf);
+	unsigned int name_len, val_len;
 	char *s;
 	int ret = 1;
 
 	while (p < end) {
 		name_len = *p++;
 		if (name_len >= 128) {
+			if (p + 3 >= end) {
+				ret = 0;
+				break;
+			}
 			name_len = ((name_len & 0x7f) << 24);
 			name_len |= (*p++ << 16);
 			name_len |= (*p++ << 8);
 			name_len |= *p++;
 		}
+		if (p >= end) {
+			ret = 0;
+			break;
+		}
 		val_len = *p++;
 		if (val_len >= 128) {
+			if (p + 3 >= end) {
+				ret = 0;
+				break;
+			}
 			val_len = ((val_len & 0x7f) << 24);
 			val_len |= (*p++ << 16);
 			val_len |= (*p++ << 8);
 			val_len |= *p++;
 		}
-		if (name_len + val_len < 0 ||
-		    name_len + val_len > end - p) {
+		if (name_len + val_len > end - p) {
 			/* Malformated request */
 			ret = 0;
 			break;
diff --git a/sapi/cgi/fastcgi.h b/sapi/cgi/fastcgi.h
index 7621737..226b68f 100644
--- a/sapi/cgi/fastcgi.h
+++ b/sapi/cgi/fastcgi.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: fastcgi.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: fastcgi.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* FastCGI protocol */
 
diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c
index dced263..1d0a0ed 100644
--- a/sapi/cli/php_cli.c
+++ b/sapi/cli/php_cli.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_cli.c 303357 2010-09-14 10:36:21Z pajoye $ */
+/* $Id: php_cli.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -832,7 +832,7 @@ int main(int argc, char *argv[])
 				}
 
 				request_started = 1;
-				php_printf("PHP %s (%s) (built: %s %s) %s\nCopyright (c) 1997-2010 The PHP Group\n%s",
+				php_printf("PHP %s (%s) (built: %s %s) %s\nCopyright (c) 1997-2011 The PHP Group\n%s",
 					PHP_VERSION, sapi_module.name, __DATE__, __TIME__,
 #if ZEND_DEBUG && defined(HAVE_GCOV)
 					"(DEBUG GCOV)",
diff --git a/sapi/cli/php_cli_readline.c b/sapi/cli/php_cli_readline.c
index f76f948..4b601ee 100644
--- a/sapi/cli/php_cli_readline.c
+++ b/sapi/cli/php_cli_readline.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_cli_readline.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_cli_readline.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/sapi/cli/php_cli_readline.h b/sapi/cli/php_cli_readline.h
index ce68321..93d8696 100644
--- a/sapi/cli/php_cli_readline.h
+++ b/sapi/cli/php_cli_readline.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_cli_readline.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_cli_readline.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 
diff --git a/sapi/continuity/capi.c b/sapi/continuity/capi.c
index 9e94211..720727b 100644
--- a/sapi/continuity/capi.c
+++ b/sapi/continuity/capi.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -110,7 +110,7 @@ PHP_MSHUTDOWN_FUNCTION(continuity)
 PHP_MINFO_FUNCTION(continuity)
 {
         php_info_print_table_start();
-        php_info_print_table_row(2, "Continuity Module Revision", "$Revision: 293036 $");
+        php_info_print_table_row(2, "Continuity Module Revision", "$Revision: 306939 $");
         php_info_print_table_row(2, "Server Version", conFget_build());
 #ifdef CONTINUITY_CDPEXT
 	php_info_print_table_row(2,"CDP Extensions", "enabled");
diff --git a/sapi/embed/php_embed.c b/sapi/embed/php_embed.c
index 85040b1..563d3e1 100644
--- a/sapi/embed/php_embed.c
+++ b/sapi/embed/php_embed.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Edin Kadribasic <edink at php.net>                              |
    +----------------------------------------------------------------------+
 */
-/* $Id: php_embed.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_embed.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php_embed.h"
 #include "ext/standard/php_standard.h"
diff --git a/sapi/embed/php_embed.h b/sapi/embed/php_embed.h
index 983b1aa..c5e731d 100644
--- a/sapi/embed/php_embed.h
+++ b/sapi/embed/php_embed.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -15,7 +15,7 @@
    | Author: Edin Kadribasic <edink at php.net>                              |
    +----------------------------------------------------------------------+
 */
-/* $Id: php_embed.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_embed.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef _PHP_EMBED_H_
 #define _PHP_EMBED_H_
diff --git a/sapi/fpm/fpm/fastcgi.c b/sapi/fpm/fpm/fastcgi.c
index d96fcfc..a1644ed 100644
--- a/sapi/fpm/fpm/fastcgi.c
+++ b/sapi/fpm/fpm/fastcgi.c
@@ -26,6 +26,7 @@
 #include <stdio.h>
 #include <stdarg.h>
 #include <errno.h>
+#include <limits.h>
 
 #ifdef FPM_AUTOCONFIG_H
 #include <fpm_autoconfig.h>
@@ -402,44 +403,113 @@ static inline int fcgi_make_header(fcgi_header *hdr, fcgi_request_type type, int
 	return pad;
 }
 
+static inline size_t fcgi_get_params_len( int *result, unsigned char *p, unsigned char *end)
+{
+	size_t ret = 0;
+
+	if (p < end) {
+		*result = p[0];
+		if (*result < 128) {
+			ret = 1;
+		}
+		else if (p + 3 < end) {
+			*result = ((*result & 0x7f) << 24);
+			*result |= (p[1] << 16);
+			*result |= (p[2] << 8);
+			*result |= p[3];
+			ret = 4;
+		}
+	}
+	if (*result < 0) {
+		ret = 0;
+	}
+	return ret;
+}
+
+static inline int fcgi_param_get_eff_len( unsigned char *p, unsigned char *end, uint *eff_len)
+{
+	int ret = 1;
+	int zero_found = 0;
+        *eff_len = 0;
+	for (; p != end; ++p) {
+		if (*p == '\0') {
+			zero_found = 1;
+		}
+		else {
+			if (zero_found) {
+				ret = 0;
+				break;
+			}
+			if (*eff_len < ((uint)-1)) {
+				++*eff_len;
+			}
+			else {
+				ret = 0;
+				break;
+			}
+		}
+	}
+	return ret;
+}
+
 static int fcgi_get_params(fcgi_request *req, unsigned char *p, unsigned char *end)
 {
 	char buf[128];
 	char *tmp = buf;
-	int buf_size = sizeof(buf);
+	size_t buf_size = sizeof(buf);
 	int name_len, val_len;
+	uint eff_name_len, eff_val_len;
 	char *s;
 	int ret = 1;
+	size_t bytes_consumed;
 
 	while (p < end) {
-		name_len = *p++;
-		if (name_len >= 128) {
-			name_len = ((name_len & 0x7f) << 24);
-			name_len |= (*p++ << 16);
-			name_len |= (*p++ << 8);
-			name_len |= *p++;
+		bytes_consumed = fcgi_get_params_len(&name_len, p, end);
+		if (!bytes_consumed) {
+			/* Malformated request */
+			ret = 0;
+			break;
 		}
-		val_len = *p++;
-		if (val_len >= 128) {
-			val_len = ((val_len & 0x7f) << 24);
-			val_len |= (*p++ << 16);
-			val_len |= (*p++ << 8);
-			val_len |= *p++;
+		p += bytes_consumed;
+		bytes_consumed = fcgi_get_params_len(&val_len, p, end);
+		if (!bytes_consumed) {
+			/* Malformated request */
+			ret = 0;
+			break;
 		}
-		if (name_len + val_len < 0 ||
-		    name_len + val_len > end - p) {
+		p += bytes_consumed;
+		if (name_len > (INT_MAX - val_len) || /* would the addition overflow? */
+		    name_len + val_len > end - p) {   /* would we exceed the buffer? */
 			/* Malformated request */
 			ret = 0;
 			break;
 		}
-		if (name_len+1 >= buf_size) {
-			buf_size = name_len + 64;
+		if (!fcgi_param_get_eff_len(p, p+name_len, &eff_name_len) ||
+		    !fcgi_param_get_eff_len(p+name_len, p+name_len+val_len, &eff_val_len)) {
+			/* Malicious request */
+			ret = 0;
+			break;
+		}
+		if (eff_name_len >= buf_size-1) {
+			if (eff_name_len > ((uint)-1)-64) { 
+				ret = 0;
+				break;
+			}
+			buf_size = eff_name_len + 64;
 			tmp = (tmp == buf ? emalloc(buf_size): erealloc(tmp, buf_size));
+			if (tmp == NULL) {
+				ret = 0;
+				break;
+			}
+		}
+		memcpy(tmp, p, eff_name_len);
+		tmp[eff_name_len] = 0;
+		s = estrndup((char*)p + name_len, eff_val_len);
+		if (s == NULL) {
+			ret = 0;
+			break;
 		}
-		memcpy(tmp, p, name_len);
-		tmp[name_len] = 0;
-		s = estrndup((char*)p + name_len, val_len);
-		zend_hash_update(req->env, tmp, name_len+1, &s, sizeof(char*), NULL);
+		zend_hash_update(req->env, tmp, eff_name_len+1, &s, sizeof(char*), NULL);
 		p += name_len + val_len;
 	}
 	if (tmp != buf && tmp != NULL) {
diff --git a/sapi/fpm/fpm/fpm.c b/sapi/fpm/fpm/fpm.c
index 17a215c..0cfaabd 100644
--- a/sapi/fpm/fpm/fpm.c
+++ b/sapi/fpm/fpm/fpm.c
@@ -21,7 +21,20 @@
 #include "fpm_stdio.h"
 #include "zlog.h"
 
-struct fpm_globals_s fpm_globals;
+struct fpm_globals_s fpm_globals = {
+		.parent_pid = 0, 
+		.argc = 0,
+		.argv = NULL,
+		.config = NULL,
+		.prefix = NULL,
+		.running_children = 0,
+		.error_log_fd = 0,
+		.log_level = 0,
+		.listening_socket = 0,
+		.max_requests = 0,
+		.is_child = 0,
+		.test_successful = 0
+	};
 
 int fpm_init(int argc, char **argv, char *config, char *prefix, int test_conf) /* {{{ */
 {
@@ -43,7 +56,12 @@ int fpm_init(int argc, char **argv, char *config, char *prefix, int test_conf) /
 		0 > fpm_sockets_init_main()          ||
 		0 > fpm_worker_pool_init_main()      ||
 		0 > fpm_event_init_main()) {
-		return -1;
+		
+		if (fpm_globals.test_successful) {
+			exit(0);
+		} else {
+			return -1;
+		}
 	}
 
 	if (0 > fpm_conf_write_pid()) {
diff --git a/sapi/fpm/fpm/fpm.h b/sapi/fpm/fpm/fpm.h
index 63e3bac..f06d9ed 100644
--- a/sapi/fpm/fpm/fpm.h
+++ b/sapi/fpm/fpm/fpm.h
@@ -22,6 +22,7 @@ struct fpm_globals_s {
 	int listening_socket; /* for this child */
 	int max_requests; /* for this child */
 	int is_child;
+	int test_successful;
 };
 
 extern struct fpm_globals_s fpm_globals;
diff --git a/sapi/fpm/fpm/fpm_conf.c b/sapi/fpm/fpm/fpm_conf.c
index f38227c..5d6fe77 100644
--- a/sapi/fpm/fpm/fpm_conf.c
+++ b/sapi/fpm/fpm/fpm_conf.c
@@ -1218,6 +1218,7 @@ int fpm_conf_init_main(int test_conf) /* {{{ */
 			fpm_conf_dump();
 		}
 		zlog(ZLOG_NOTICE, "configuration file %s test is successful\n", fpm_globals.config);
+		fpm_globals.test_successful = 1;
 		return -1;
 	}
 
diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c
index 8f0d760..13d21ec 100644
--- a/sapi/fpm/fpm/fpm_main.c
+++ b/sapi/fpm/fpm/fpm_main.c
@@ -1085,6 +1085,7 @@ static void init_request_info(TSRMLS_D)
 	char *env_path_translated = sapi_cgibin_getenv("PATH_TRANSLATED", sizeof("PATH_TRANSLATED")-1 TSRMLS_CC);
 	char *script_path_translated = env_script_filename;
 	char *ini;
+	int apache_was_here = 0;
 
 	/* some broken servers do not have script_filename or argv0
 	 * an example, IIS configured in some ways.  then they do more
@@ -1130,6 +1131,30 @@ static void init_request_info(TSRMLS_D)
 			env_path_info = _sapi_cgibin_putenv("PATH_INFO", env_path_info TSRMLS_CC);
 		}
 
+#define APACHE_PROXY_FCGI_PREFIX "proxy:fcgi://"
+		/* Fix proxy URLs in SCRIPT_FILENAME generated by Apache mod_proxy_fcgi:
+		 *     proxy:fcgi://localhost:9000/some-dir/info.php/test
+		 * should be changed to:
+		 *     /some-dir/info.php/test
+		 * See: http://bugs.php.net/bug.php?id=54152
+		 *      https://issues.apache.org/bugzilla/show_bug.cgi?id=50851
+		 */
+		if (env_script_filename &&
+			strncasecmp(env_script_filename, APACHE_PROXY_FCGI_PREFIX, sizeof(APACHE_PROXY_FCGI_PREFIX) - 1) == 0) {
+			/* advance to first character of hostname */
+			char *p = env_script_filename + (sizeof(APACHE_PROXY_FCGI_PREFIX) - 1);
+			while (*p != '\0' && *p != '/') {
+				p++;	/* move past hostname and port */
+			}
+			if (*p != '\0') {
+				/* Copy path portion in place to avoid memory leak.  Note
+				 * that this also affects what script_path_translated points
+				 * to. */
+				memmove(env_script_filename, p, strlen(p) + 1);
+				apache_was_here = 1;
+			}
+		}
+
 		if (CGIG(fix_pathinfo)) {
 			struct stat st;
 			char *real_path = NULL;
@@ -1201,11 +1226,21 @@ static void init_request_info(TSRMLS_D)
 						 * we have to play the game of hide and seek to figure
 						 * out what SCRIPT_NAME should be
 						 */
-						int slen = len - strlen(pt);
+						int ptlen = strlen(pt);
+						int slen = len - ptlen;
 						int pilen = env_path_info ? strlen(env_path_info) : 0;
-						char *path_info = env_path_info ? env_path_info + pilen - slen : NULL;
+						int tflag = 0;
+						char *path_info;
+						if (apache_was_here) {
+							/* recall that PATH_INFO won't exist */
+							path_info = script_path_translated + ptlen;
+							tflag = (slen != 0 && (!orig_path_info || strcmp(orig_path_info, path_info) != 0));
+						} else {
+							path_info = env_path_info ? env_path_info + pilen - slen : NULL;
+							tflag = (orig_path_info != path_info);
+						}
 
-						if (orig_path_info != path_info) {
+						if (tflag) {
 							if (orig_path_info) {
 								char old;
 
@@ -1729,6 +1764,7 @@ int main(int argc, char *argv[])
 	SG(request_info).path_translated = NULL;
 #endif
 
+	cgi_sapi_module.additional_functions = additional_functions;
 	cgi_sapi_module.executable_location = argv[0];
 
 	/* startup after we get the above ini override se we get things right */
diff --git a/sapi/fpm/fpm/fpm_php.c b/sapi/fpm/fpm/fpm_php.c
index eeba713..384682b 100644
--- a/sapi/fpm/fpm/fpm_php.c
+++ b/sapi/fpm/fpm/fpm_php.c
@@ -160,6 +160,12 @@ char *fpm_php_script_filename(TSRMLS_D) /* {{{ */
 }
 /* }}} */
 
+char *fpm_php_request_uri(TSRMLS_D) /* {{{ */
+{
+	return (char *) SG(request_info).request_uri;
+}
+/* }}} */
+
 char *fpm_php_request_method(TSRMLS_D) /* {{{ */
 {
 	return (char *) SG(request_info).request_method;
diff --git a/sapi/fpm/fpm/fpm_php.h b/sapi/fpm/fpm/fpm_php.h
index 81e5332..891e83b 100644
--- a/sapi/fpm/fpm/fpm_php.h
+++ b/sapi/fpm/fpm/fpm_php.h
@@ -35,6 +35,7 @@ struct fpm_worker_pool_s;
 
 int fpm_php_init_child(struct fpm_worker_pool_s *wp);
 char *fpm_php_script_filename(TSRMLS_D);
+char *fpm_php_request_uri(TSRMLS_D);
 char *fpm_php_request_method(TSRMLS_D);
 size_t fpm_php_content_length(TSRMLS_D);
 void fpm_php_soft_quit();
diff --git a/sapi/fpm/fpm/fpm_request.c b/sapi/fpm/fpm/fpm_request.c
index 590548e..6ba9e51 100644
--- a/sapi/fpm/fpm/fpm_request.c
+++ b/sapi/fpm/fpm/fpm_request.c
@@ -26,6 +26,7 @@ void fpm_request_accepting() /* {{{ */
 	slot = fpm_shm_slots_acquire(0, 0);
 	slot->request_stage = FPM_REQUEST_ACCEPTING;
 	fpm_clock_get(&slot->tv);
+	memset(slot->request_uri, 0, sizeof(slot->request_uri));
 	memset(slot->request_method, 0, sizeof(slot->request_method));
 	slot->content_length = 0;
 	memset(slot->script_filename, 0, sizeof(slot->script_filename));
@@ -51,6 +52,7 @@ void fpm_request_info() /* {{{ */
 {
 	TSRMLS_FETCH();
 	struct fpm_shm_slot_s *slot;
+	char *request_uri = fpm_php_request_uri(TSRMLS_C);
 	char *request_method = fpm_php_request_method(TSRMLS_C);
 	char *script_filename = fpm_php_script_filename(TSRMLS_C);
 
@@ -58,8 +60,12 @@ void fpm_request_info() /* {{{ */
 	slot->request_stage = FPM_REQUEST_INFO;
 	fpm_clock_get(&slot->tv);
 
+	if (request_uri) {
+		strlcpy(slot->request_uri, request_uri, sizeof(slot->request_uri));
+	}
+
 	if (request_method) {
-		cpystrn(slot->request_method, request_method, sizeof(slot->request_method));
+		strlcpy(slot->request_method, request_method, sizeof(slot->request_method));
 	}
 
 	slot->content_length = fpm_php_content_length(TSRMLS_C);
@@ -67,7 +73,7 @@ void fpm_request_info() /* {{{ */
 	/* if cgi.fix_pathinfo is set to "1" and script cannot be found (404)
 		the sapi_globals.request_info.path_translated is set to NULL */
 	if (script_filename) {
-		cpystrn(slot->script_filename, script_filename, sizeof(slot->script_filename));
+		strlcpy(slot->script_filename, script_filename, sizeof(slot->script_filename));
 	}
 
 	fpm_shm_slots_release(slot);
@@ -136,8 +142,9 @@ void fpm_request_check_timed_out(struct fpm_child_s *child, struct timeval *now,
 
 			fpm_trace_signal(child->pid);
 
-			zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' executing too slow (%d.%06d sec), logging",
-				child->wp->config->name, (int) child->pid, purified_script_filename, (int) tv.tv_sec, (int) tv.tv_usec);
+			zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s\") executing too slow (%d.%06d sec), logging",
+				child->wp->config->name, (int) child->pid, purified_script_filename, slot_c.request_method, slot_c.request_uri,
+				(int) tv.tv_sec, (int) tv.tv_usec);
 		}
 		else
 #endif
@@ -145,8 +152,9 @@ void fpm_request_check_timed_out(struct fpm_child_s *child, struct timeval *now,
 			str_purify_filename(purified_script_filename, slot_c.script_filename, sizeof(slot_c.script_filename));
 			fpm_pctl_kill(child->pid, FPM_PCTL_TERM);
 
-			zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' execution timed out (%d.%06d sec), terminating",
-				child->wp->config->name, (int) child->pid, purified_script_filename, (int) tv.tv_sec, (int) tv.tv_usec);
+			zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s\") execution timed out (%d.%06d sec), terminating",
+				child->wp->config->name, (int) child->pid, purified_script_filename, slot_c.request_method, slot_c.request_uri,
+				(int) tv.tv_sec, (int) tv.tv_usec);
 		}
 	}
 }
diff --git a/sapi/fpm/fpm/fpm_shm_slots.h b/sapi/fpm/fpm/fpm_shm_slots.h
index 4596c6f..d74f176 100644
--- a/sapi/fpm/fpm/fpm_shm_slots.h
+++ b/sapi/fpm/fpm/fpm_shm_slots.h
@@ -19,6 +19,7 @@ struct fpm_shm_slot_s {
 	enum fpm_request_stage_e request_stage;
 	struct timeval accepted;
 	struct timeval tv;
+	char request_uri[128];
 	char request_method[16];
 	size_t content_length; /* used with POST only */
 	char script_filename[256];
diff --git a/sapi/fpm/fpm/fpm_sockets.c b/sapi/fpm/fpm/fpm_sockets.c
index baa9f98..d893150 100644
--- a/sapi/fpm/fpm/fpm_sockets.c
+++ b/sapi/fpm/fpm/fpm_sockets.c
@@ -286,7 +286,7 @@ static int fpm_socket_af_unix_listening_socket(struct fpm_worker_pool_s *wp) /*
 	struct sockaddr_un sa_un;
 
 	memset(&sa_un, 0, sizeof(sa_un));
-	cpystrn(sa_un.sun_path, wp->config->listen_address, sizeof(sa_un.sun_path));
+	strlcpy(sa_un.sun_path, wp->config->listen_address, sizeof(sa_un.sun_path));
 	sa_un.sun_family = AF_UNIX;
 	return fpm_sockets_get_listening_socket(wp, (struct sockaddr *) &sa_un, sizeof(struct sockaddr_un));
 }
diff --git a/sapi/fpm/fpm/fpm_str.h b/sapi/fpm/fpm/fpm_str.h
index 2755dc5..65db545 100644
--- a/sapi/fpm/fpm/fpm_str.h
+++ b/sapi/fpm/fpm/fpm_str.h
@@ -5,29 +5,6 @@
 #ifndef FPM_STR_H
 #define FPM_STR_H 1
 
-static inline char *cpystrn(char *dst, const char *src, size_t dst_size) /* {{{ */
-{
-	char *d, *end;
-	
-	if (!dst_size) {
-		return dst;
-	}
-	
-	d = dst;
-	end = dst + dst_size - 1;
-	
-	for (; d < end; ++d, ++src) {
-		if (!(*d = *src)) {
-			return d;
-		}
-	}
-
-	*d = '\0';
-
-	return d;
-}
-/* }}} */
-
 static inline char *str_purify_filename(char *dst, char *src, size_t size) /* {{{ */
 {
 	char *d, *end;
diff --git a/sapi/fpm/fpm/zlog.c b/sapi/fpm/fpm/zlog.c
index b99ad85..ddf552b 100644
--- a/sapi/fpm/fpm/zlog.c
+++ b/sapi/fpm/fpm/zlog.c
@@ -43,8 +43,11 @@ size_t zlog_print_time(struct timeval *tv, char *timebuf, size_t timebuf_len) /*
 	struct tm t;
 	size_t len;
 
-	len = strftime(timebuf, timebuf_len, "%b %d %H:%M:%S", localtime_r((const time_t *) &tv->tv_sec, &t));
-	len += snprintf(timebuf + len, timebuf_len - len, ".%06d", (int) tv->tv_usec);
+	len = strftime(timebuf, timebuf_len, "[%d-%b-%Y %H:%M:%S", localtime_r((const time_t *) &tv->tv_sec, &t));
+	if (zlog_level == ZLOG_DEBUG) {
+		len += snprintf(timebuf + len, timebuf_len - len, ".%06d", (int) tv->tv_usec);
+	}
+	len += snprintf(timebuf + len, timebuf_len - len, "]");
 	return len;
 }
 /* }}} */
@@ -87,9 +90,9 @@ void zlog_ex(const char *function, int line, int flags, const char *fmt, ...) /*
 	gettimeofday(&tv, 0);
 	len = zlog_print_time(&tv, buf, buf_size);
 	if (zlog_level == ZLOG_DEBUG) {
-		len += snprintf(buf + len, buf_size - len, " [%s] pid %d, %s(), line %d: ", level_names[flags & ZLOG_LEVEL_MASK], getpid(), function, line);
+		len += snprintf(buf + len, buf_size - len, " %s: pid %d, %s(), line %d: ", level_names[flags & ZLOG_LEVEL_MASK], getpid(), function, line);
 	} else {
-		len += snprintf(buf + len, buf_size - len, " [%s] ", level_names[flags & ZLOG_LEVEL_MASK]);
+		len += snprintf(buf + len, buf_size - len, " %s: ", level_names[flags & ZLOG_LEVEL_MASK]);
 	}
 
 	if (len > buf_size - 1) {
diff --git a/sapi/isapi/php5isapi.c b/sapi/isapi/php5isapi.c
index 60e37b9..b013ba2 100644
--- a/sapi/isapi/php5isapi.c
+++ b/sapi/isapi/php5isapi.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    |          Ben Mansell <ben at zeus.com> (Zeus Support)                   |
    +----------------------------------------------------------------------+
  */
-/* $Id: php5isapi.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php5isapi.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include <httpext.h>
diff --git a/sapi/litespeed/lsapi_main.c b/sapi/litespeed/lsapi_main.c
index 6058e5b..f828b1f 100644
--- a/sapi/litespeed/lsapi_main.c
+++ b/sapi/litespeed/lsapi_main.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: lsapi_main.c 300764 2010-06-26 16:03:39Z felipe $ */
+/* $Id: lsapi_main.c 306212 2010-12-10 22:51:08Z gwang $ */
 
 #include "php.h"
 #include "SAPI.h"
@@ -75,7 +75,8 @@ static int  lsapi_mode       = 1;
 static char *php_self        = "";
 static char *script_filename = "";
 static int  source_highlight = 0;
-
+static char * argv0 = NULL;
+static int  engine = 1;
 #ifdef ZTS
 zend_compiler_globals    *compiler_globals;
 zend_executor_globals    *executor_globals;
@@ -90,40 +91,65 @@ zend_module_entry litespeed_module_entry;
  */
 static int php_lsapi_startup(sapi_module_struct *sapi_module)
 {
-	if (php_module_startup(sapi_module, NULL, 0)==FAILURE) {
-		return FAILURE;
-	}
-	return SUCCESS;
+    if (php_module_startup(sapi_module, NULL, 0)==FAILURE) {
+        return FAILURE;
+    }
+    argv0 = sapi_module->executable_location;
+    return SUCCESS;
 }
 /* }}} */
 
+/* {{{ sapi_lsapi_ini_defaults */
+
+/* overwriteable ini defaults must be set in sapi_cli_ini_defaults() */
+#define INI_DEFAULT(name,value)\
+    ZVAL_STRING(tmp, value, 0);\
+    zend_hash_update(configuration_hash, name, sizeof(name), tmp, sizeof(zval), (void**)&entry);\
+    Z_STRVAL_P(entry) = zend_strndup(Z_STRVAL_P(entry), Z_STRLEN_P(entry))
+
+static void sapi_lsapi_ini_defaults(HashTable *configuration_hash)
+{
+    zval *tmp, *entry;
+
+#if PHP_MAJOR_VERSION > 4
+/*
+    MAKE_STD_ZVAL(tmp);
+
+    INI_DEFAULT("register_long_arrays", "0");
+
+    FREE_ZVAL(tmp);
+*/
+#endif
+
+}
+/* }}} */
 
 
 /* {{{ sapi_lsapi_ub_write
  */
 static int sapi_lsapi_ub_write(const char *str, uint str_length TSRMLS_DC)
 {
-	int ret;
-	int remain;
-	if ( lsapi_mode ) {
-		ret  = LSAPI_Write( str, str_length );
-		if ( ret < str_length ) {
-			php_handle_aborted_connection();
-			return str_length - ret;
-		}
-	} else {
-		remain = str_length;
-		while( remain > 0 ) {
-			ret = write( 1, str, remain );
-			if ( ret <= 0 ) {
-				php_handle_aborted_connection();
-				return str_length - remain;
-			}
-			str += ret;
-			remain -= ret;
-		}
-	}
-	return str_length;
+    int ret;
+    int remain;
+    if ( lsapi_mode ) {
+        ret  = LSAPI_Write( str, str_length );
+        if ( ret < str_length ) {
+            php_handle_aborted_connection();
+            return str_length - ret;
+        }
+    } else {
+        remain = str_length;
+        while( remain > 0 ) {
+            ret = write( 1, str, remain );
+            if ( ret <= 0 ) {
+                php_handle_aborted_connection();
+                return str_length - remain;
+            }
+            str += ret;
+            remain -= ret;
+        }
+    }
+    return str_length;
 }
 /* }}} */
 
@@ -132,11 +158,11 @@ static int sapi_lsapi_ub_write(const char *str, uint str_length TSRMLS_DC)
  */
 static void sapi_lsapi_flush( void * server_context )
 {
-	if ( lsapi_mode ) {
-		if ( LSAPI_Flush() == -1) {
-			php_handle_aborted_connection();
-		}
-	}
+    if ( lsapi_mode ) {
+        if ( LSAPI_Flush() == -1) {
+            php_handle_aborted_connection();
+        }
+    }
 }
 /* }}} */
 
@@ -145,8 +171,12 @@ static void sapi_lsapi_flush( void * server_context )
  */
 static int sapi_lsapi_deactivate(TSRMLS_D)
 {
-	LSAPI_Finish();
-	return SUCCESS;
+    if ( SG(request_info).path_translated )
+    {
+        efree( SG(request_info).path_translated );
+    }
+
+    return SUCCESS;
 }
 /* }}} */
 
@@ -157,46 +187,92 @@ static int sapi_lsapi_deactivate(TSRMLS_D)
  */
 static char *sapi_lsapi_getenv( char * name, size_t name_len TSRMLS_DC )
 {
-	if ( lsapi_mode ) {
-		return LSAPI_GetEnv( name );
-	} else {
-		return getenv( name );
-	}
+    if ( lsapi_mode ) {
+        return LSAPI_GetEnv( name );
+    } else {
+        return getenv( name );
+    }
 }
 /* }}} */
 
 
+/*
+static int add_variable( const char * pKey, int keyLen, const char * pValue, int valLen,
+                         void * arg )
+{
+    php_register_variable_safe((char *)pKey, (char *)pValue, valLen, (zval *)arg TSRMLS_CC);
+    return 1;
+}
+*/
 
 static int add_variable( const char * pKey, int keyLen, const char * pValue, int valLen,
-						 void * arg )
+                         void * arg )
 {
-	php_register_variable_safe((char *)pKey, (char *)pValue, valLen, (zval *)arg TSRMLS_CC);
-	return 1;
+    zval * gpc_element, **gpc_element_p;
+    HashTable * symtable1 = Z_ARRVAL_P((zval * )arg);
+    register char * pKey1 = (char *)pKey;
+
+    MAKE_STD_ZVAL(gpc_element);
+    Z_STRLEN_P( gpc_element ) = valLen;
+    Z_STRVAL_P( gpc_element ) = estrndup(pValue, valLen);
+    Z_TYPE_P( gpc_element ) = IS_STRING;
+#if PHP_MAJOR_VERSION > 4
+    zend_symtable_update( symtable1, pKey1, keyLen + 1, &gpc_element, sizeof( zval *), (void **) &gpc_element_p );
+#else
+    zend_hash_update( symtable1, pKey1, keyLen + 1, &gpc_element, sizeof( zval *), (void **) &gpc_element_p );
+#endif
+    return 1;
 }
 
 
+static int add_variable_magic_quote( const char * pKey, int keyLen, const char * pValue, int valLen, 
+                         void * arg )
+{
+    zval * gpc_element, **gpc_element_p;
+    HashTable * symtable1 = Z_ARRVAL_P((zval * )arg);
+    register char * pKey1 = (char *)pKey;
+
+    MAKE_STD_ZVAL(gpc_element);
+    Z_STRLEN_P( gpc_element ) = valLen;
+    Z_STRVAL_P( gpc_element ) = php_addslashes((char *)pValue, valLen, &Z_STRLEN_P( gpc_element ), 0 );
+    Z_TYPE_P( gpc_element ) = IS_STRING;
+#if PHP_MAJOR_VERSION > 4
+    zend_symtable_update( symtable1, pKey1, keyLen + 1, &gpc_element, sizeof( zval *), (void **) &gpc_element_p );
+#else
+    zend_hash_update( symtable1, pKey1, keyLen + 1, &gpc_element, sizeof( zval *), (void **) &gpc_element_p );
+#endif
+    return 1;
+}
 
 /* {{{ sapi_lsapi_register_variables
  */
 static void sapi_lsapi_register_variables(zval *track_vars_array TSRMLS_DC)
 {
-
-	if ( lsapi_mode ) {
-		LSAPI_ForeachHeader( add_variable, track_vars_array );
-		LSAPI_ForeachEnv( add_variable, track_vars_array );
-		php_import_environment_variables(track_vars_array TSRMLS_CC);
-
-		php_register_variable("PHP_SELF", (SG(request_info).request_uri ? SG(request_info).request_uri:""), track_vars_array TSRMLS_CC);
-	} else {
-		php_import_environment_variables(track_vars_array TSRMLS_CC);
-
-		php_register_variable("PHP_SELF", php_self, track_vars_array TSRMLS_CC);
-		php_register_variable("SCRIPT_NAME", php_self, track_vars_array TSRMLS_CC);
-		php_register_variable("SCRIPT_FILENAME", script_filename, track_vars_array TSRMLS_CC);
-		php_register_variable("PATH_TRANSLATED", script_filename, track_vars_array TSRMLS_CC);
-		php_register_variable("DOCUMENT_ROOT", "", track_vars_array TSRMLS_CC);
-
-	}
+    char * php_self = "";
+    if ( lsapi_mode ) {
+        if ( (SG(request_info).request_uri ) )
+            php_self = (SG(request_info).request_uri );
+
+        if (!PG(magic_quotes_gpc)) {
+            LSAPI_ForeachHeader( add_variable, track_vars_array );
+            LSAPI_ForeachEnv( add_variable, track_vars_array );
+            add_variable("PHP_SELF", 8, php_self, strlen( php_self ), track_vars_array );
+        } else {
+            LSAPI_ForeachHeader( add_variable_magic_quote, track_vars_array );
+            LSAPI_ForeachEnv( add_variable_magic_quote, track_vars_array );
+            add_variable_magic_quote("PHP_SELF", 8, php_self, strlen( php_self ), track_vars_array );
+        }
+        php_import_environment_variables(track_vars_array TSRMLS_CC);
+    } else {
+        php_import_environment_variables(track_vars_array TSRMLS_CC);
+
+        php_register_variable("PHP_SELF", php_self, track_vars_array TSRMLS_CC);
+        php_register_variable("SCRIPT_NAME", php_self, track_vars_array TSRMLS_CC);
+        php_register_variable("SCRIPT_FILENAME", script_filename, track_vars_array TSRMLS_CC);
+        php_register_variable("PATH_TRANSLATED", script_filename, track_vars_array TSRMLS_CC);
+        php_register_variable("DOCUMENT_ROOT", "", track_vars_array TSRMLS_CC);
+
+    }
 }
 /* }}} */
 
@@ -205,11 +281,11 @@ static void sapi_lsapi_register_variables(zval *track_vars_array TSRMLS_DC)
  */
 static int sapi_lsapi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
 {
-	if ( lsapi_mode ) {
-		return LSAPI_ReadReqBody( buffer, count_bytes );
-	} else {
-		return 0;
-	}
+    if ( lsapi_mode ) {
+        return LSAPI_ReadReqBody( buffer, count_bytes );
+    } else {
+        return 0;
+    }
 }
 /* }}} */
 
@@ -220,11 +296,11 @@ static int sapi_lsapi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
  */
 static char *sapi_lsapi_read_cookies(TSRMLS_D)
 {
-	if ( lsapi_mode ) {
-		return LSAPI_GetHeader( H_COOKIE );
-	} else {
-		return NULL;
-	}
+    if ( lsapi_mode ) {
+        return LSAPI_GetHeader( H_COOKIE );
+    } else {
+        return NULL;
+    }
 }
 /* }}} */
 
@@ -233,33 +309,33 @@ static char *sapi_lsapi_read_cookies(TSRMLS_D)
  */
 static int sapi_lsapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
 {
-	sapi_header_struct  *h;
-	zend_llist_position pos;
-	if ( lsapi_mode ) {
-		LSAPI_SetRespStatus( SG(sapi_headers).http_response_code );
-
-		h = zend_llist_get_first_ex(&sapi_headers->headers, &pos);
-		while (h) {
-			if ( h->header_len > 0 ) {
-				LSAPI_AppendRespHeader(h->header, h->header_len);
-			}
-			h = zend_llist_get_next_ex(&sapi_headers->headers, &pos);
-		}
-		if (SG(sapi_headers).send_default_content_type) {
-			char	*hd;
-			int	 len;
-			char	headerBuf[SAPI_LSAPI_MAX_HEADER_LENGTH];
-
-			hd = sapi_get_default_content_type(TSRMLS_C);
-			len = snprintf( headerBuf, SAPI_LSAPI_MAX_HEADER_LENGTH - 1,
-							"Content-type: %s", hd );
-			efree(hd);
-
-			LSAPI_AppendRespHeader( headerBuf, len );
-		}
-	}
-	LSAPI_FinalizeRespHeaders();
-	return SAPI_HEADER_SENT_SUCCESSFULLY;
+    sapi_header_struct  *h;
+    zend_llist_position pos;
+    if ( lsapi_mode ) {
+        LSAPI_SetRespStatus( SG(sapi_headers).http_response_code );
+
+        h = zend_llist_get_first_ex(&sapi_headers->headers, &pos);
+        while (h) {
+            if ( h->header_len > 0 ) {
+                LSAPI_AppendRespHeader(h->header, h->header_len);
+            }
+            h = zend_llist_get_next_ex(&sapi_headers->headers, &pos);
+        }
+        if (SG(sapi_headers).send_default_content_type) {
+            char    *hd;
+            int     len;
+            char    headerBuf[SAPI_LSAPI_MAX_HEADER_LENGTH];
+
+            hd = sapi_get_default_content_type(TSRMLS_C);
+            len = snprintf( headerBuf, SAPI_LSAPI_MAX_HEADER_LENGTH - 1,
+                            "Content-type: %s", hd );
+            efree(hd);
+
+            LSAPI_AppendRespHeader( headerBuf, len );
+        }
+    }
+    LSAPI_FinalizeRespHeaders();
+    return SAPI_HEADER_SENT_SUCCESSFULLY;
 
 
 }
@@ -270,8 +346,8 @@ static int sapi_lsapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
  */
 static void sapi_lsapi_log_message(char *message)
 {
-	int len = strlen( message );
-	LSAPI_Write_Stderr( message, len);
+    int len = strlen( message );
+    LSAPI_Write_Stderr( message, len);
 }
 /* }}} */
 
@@ -280,158 +356,247 @@ static void sapi_lsapi_log_message(char *message)
  */
 static sapi_module_struct lsapi_sapi_module =
 {
-	"litespeed",
-	"LiteSpeed",
+    "litespeed",
+    "LiteSpeed V5.5",
 
-	php_lsapi_startup,              /* startup */
-	php_module_shutdown_wrapper,    /* shutdown */
+    php_lsapi_startup,              /* startup */
+    php_module_shutdown_wrapper,    /* shutdown */
 
-	NULL,                           /* activate */
-	sapi_lsapi_deactivate,          /* deactivate */
+    NULL,                           /* activate */
+    sapi_lsapi_deactivate,          /* deactivate */
 
-	sapi_lsapi_ub_write,            /* unbuffered write */
-	sapi_lsapi_flush,               /* flush */
-	NULL,                           /* get uid */
-	sapi_lsapi_getenv,              /* getenv */
+    sapi_lsapi_ub_write,            /* unbuffered write */
+    sapi_lsapi_flush,               /* flush */
+    NULL,                           /* get uid */
+    sapi_lsapi_getenv,              /* getenv */
 
-	php_error,                      /* error handler */
+    php_error,                      /* error handler */
 
-	NULL,                           /* header handler */
-	sapi_lsapi_send_headers,        /* send headers handler */
-	NULL,                           /* send header handler */
+    NULL,                           /* header handler */
+    sapi_lsapi_send_headers,        /* send headers handler */
+    NULL,                           /* send header handler */
 
-	sapi_lsapi_read_post,           /* read POST data */
-	sapi_lsapi_read_cookies,        /* read Cookies */
+    sapi_lsapi_read_post,           /* read POST data */
+    sapi_lsapi_read_cookies,        /* read Cookies */
 
-	sapi_lsapi_register_variables,  /* register server variables */
-	sapi_lsapi_log_message,         /* Log message */
+    sapi_lsapi_register_variables,  /* register server variables */
+    sapi_lsapi_log_message,         /* Log message */
 
-	NULL,                           /* php.ini path override */
-	NULL,                           /* block interruptions */
-	NULL,                           /* unblock interruptions */
-	NULL,                           /* default post reader */
-	NULL,                           /* treat data */
-	NULL,                           /* executable location */
+    NULL,                           /* php.ini path override */
+    NULL,                           /* block interruptions */
+    NULL,                           /* unblock interruptions */
+    NULL,                           /* default post reader */
+    NULL,                           /* treat data */
+    NULL,                           /* executable location */
 
-	0,                              /* php.ini ignore */
+    0,                              /* php.ini ignore */
 
-	STANDARD_SAPI_MODULE_PROPERTIES
+    STANDARD_SAPI_MODULE_PROPERTIES
 
 };
 /* }}} */
 
 static int init_request_info( TSRMLS_D )
 {
-	char * pContentType = LSAPI_GetHeader( H_CONTENT_TYPE );
-	char * pAuth;
-	
-	SG(request_info).content_type = pContentType ? pContentType : "";
-	SG(request_info).request_method = LSAPI_GetRequestMethod();
-	SG(request_info).query_string = LSAPI_GetQueryString();
-	SG(request_info).request_uri = LSAPI_GetScriptName();
-	SG(request_info).content_length = LSAPI_GetReqBodyLen();
-	SG(request_info).path_translated = LSAPI_GetScriptFileName();
+    char * pContentType = LSAPI_GetHeader( H_CONTENT_TYPE );
+    char * pAuth;
+    
+    SG(request_info).content_type = pContentType ? pContentType : "";
+    SG(request_info).request_method = LSAPI_GetRequestMethod();
+    SG(request_info).query_string = LSAPI_GetQueryString();
+    SG(request_info).request_uri = LSAPI_GetScriptName();
+    SG(request_info).content_length = LSAPI_GetReqBodyLen();
+    SG(request_info).path_translated = estrdup( LSAPI_GetScriptFileName());
+
+    /* It is not reset by zend engine, set it to 0. */
+    SG(sapi_headers).http_response_code = 0;
+    
+    pAuth = LSAPI_GetHeader( H_AUTHORIZATION );
+    php_handle_auth_data(pAuth TSRMLS_CC);
+}
+
+static char s_cur_chdir[4096] = "";
 
-	/* It is not reset by zend engine, set it to 0. */
-	SG(sapi_headers).http_response_code = 0;
-	
-	pAuth = LSAPI_GetHeader( H_AUTHORIZATION );
-	php_handle_auth_data(pAuth TSRMLS_CC);
+static int lsapi_chdir_primary_script( zend_file_handle * file_handle )
+{
+#if PHP_MAJOR_VERSION > 4
+    char * p;
+    char ch;
+
+    SG(options) |= SAPI_OPTION_NO_CHDIR;
+    getcwd( s_cur_chdir, sizeof( s_cur_chdir ) );
+
+    p = strrchr( file_handle->filename, '/' );
+    if ( *p )
+    {
+        *p = 0;
+        if ( strcmp( file_handle->filename, s_cur_chdir ) != 0 ) {
+            chdir( file_handle->filename );
+        }
+        *p++ = '/';
+        ch = *p;
+        *p = 0;
+        if ( !CWDG(cwd).cwd ||
+             ( strcmp( file_handle->filename, CWDG(cwd).cwd ) != 0 ) ) {
+            CWDG(cwd).cwd_length = p - file_handle->filename;
+            CWDG(cwd).cwd = (char *) realloc(CWDG(cwd).cwd, CWDG(cwd).cwd_length+1);            
+            memmove( CWDG(cwd).cwd, file_handle->filename, CWDG(cwd).cwd_length+1 );
+        }
+        *p = ch;
+    }
+    /* virtual_file_ex(&CWDG(cwd), file_handle->filename, NULL, CWD_REALPATH); */
+#else
+    VCWD_CHDIR_FILE( file_handle->filename );
+#endif
+    return 0;
 }
 
-static int lsapi_module_main(int show_source TSRMLS_DC)
+static int lsapi_fopen_primary_script( zend_file_handle * file_handle )
+{
+    FILE * fp;
+    char * p;
+    fp = fopen( SG(request_info).path_translated, "rb" );
+    if ( !fp )
+    {
+        return -1;
+    }
+    file_handle->type = ZEND_HANDLE_FP;
+    file_handle->handle.fp = fp;
+    file_handle->filename = SG(request_info).path_translated;
+    file_handle->free_filename = 0;
+    file_handle->opened_path = NULL;
+
+    lsapi_chdir_primary_script( file_handle );
+
+    return 0;
+}
+
+static int lsapi_execute_script( zend_file_handle * file_handle TSRMLS_DC)
 {
-	zend_file_handle file_handle = {0};
+    char *p;
+    int len;
+    file_handle->type = ZEND_HANDLE_FILENAME;
+    file_handle->handle.fd = 0;
+    file_handle->filename = SG(request_info).path_translated;
+    file_handle->free_filename = 0;
+    file_handle->opened_path = NULL;
+
+    p = argv0;
+    *p++ = ':';
+    len = strlen( SG(request_info).path_translated );
+    if ( len > 45 )
+        len = len - 45;
+    else
+        len = 0;
+    memccpy( p, SG(request_info).path_translated + len, 0, 46 );
+
+    php_execute_script(file_handle TSRMLS_CC);
+    return 0;
 
-	if (php_request_startup(TSRMLS_C) == FAILURE ) {
-		return -1;
-	}
-	if (show_source) {
-		zend_syntax_highlighter_ini syntax_highlighter_ini;
+}
 
-		php_get_highlight_struct(&syntax_highlighter_ini);
-		highlight_file(SG(request_info).path_translated, &syntax_highlighter_ini TSRMLS_CC);
-	} else {
-		file_handle.type = ZEND_HANDLE_FILENAME;
-		file_handle.handle.fd = 0;
-		file_handle.filename = SG(request_info).path_translated;
-		file_handle.free_filename = 0;
-		file_handle.opened_path = NULL;
 
-		php_execute_script(&file_handle TSRMLS_CC);
-	}
-	zend_try {
-		php_request_shutdown(NULL);
-	} zend_end_try();
-	return 0;
+static int lsapi_module_main(int show_source TSRMLS_DC)
+{
+    zend_file_handle file_handle = {0};
+
+    if (php_request_startup(TSRMLS_C) == FAILURE ) {
+        return -1;
+    }
+    if (show_source) {
+        zend_syntax_highlighter_ini syntax_highlighter_ini;
+
+        php_get_highlight_struct(&syntax_highlighter_ini);
+        highlight_file(SG(request_info).path_translated, &syntax_highlighter_ini TSRMLS_CC);
+    } else {
+        lsapi_execute_script( &file_handle TSRMLS_CC);
+    }
+    zend_try {
+        php_request_shutdown(NULL);
+        *argv0 = 0;
+    } zend_end_try();
+    return 0;
 }
 
 
 static int alter_ini( const char * pKey, int keyLen, const char * pValue, int valLen,
-				void * arg )
+                void * arg )
 {
-	int type = ZEND_INI_PERDIR;
-	if ( '\001' == *pKey ) {
-		++pKey;
-		if ( *pKey == 4 ) {
-			type = ZEND_INI_SYSTEM;
-		}
-		++pKey;
-		--keyLen;
-		zend_alter_ini_entry((char *)pKey, keyLen,
-							 (char *)pValue, valLen,
-							 type, PHP_INI_STAGE_ACTIVATE);
-	}
-	return 1;
+    int type = ZEND_INI_PERDIR;
+    if ( '\001' == *pKey ) {
+        ++pKey;
+        if ( *pKey == 4 ) {
+            type = ZEND_INI_SYSTEM;
+        }
+        ++pKey;
+        --keyLen;
+        if (( keyLen == 7 )&&( strncasecmp( pKey, "engine", 6 )== 0 ))
+        {
+            if ( *pValue == '0' )
+                engine = 0;
+        }
+        else
+            zend_alter_ini_entry((char *)pKey, keyLen,
+                             (char *)pValue, valLen,
+                             type, PHP_INI_STAGE_ACTIVATE);
+    }
+    return 1;
 }
 
 
 static void override_ini()
 {
 
-	LSAPI_ForeachSpecialEnv( alter_ini, NULL );
+    LSAPI_ForeachSpecialEnv( alter_ini, NULL );
 
 }
 
 static int processReq( TSRMLS_D )
 {
-	int ret = 0;
-	zend_first_try {
-		/* avoid server_context==NULL checks */
-		SG(server_context) = (void *) 1;
-
-		init_request_info( TSRMLS_C );
-
-		override_ini();
-
-		if ( lsapi_module_main( source_highlight TSRMLS_CC ) == -1 ) {
-			ret = -1;
-		}
-	} zend_end_try();
-	return ret;
+    int ret = 0;
+    zend_first_try {
+        /* avoid server_context==NULL checks */
+        SG(server_context) = (void *) 1;
+
+        engine = 1;
+        override_ini();
+
+        if ( engine ) {
+            init_request_info( TSRMLS_C );
+
+            if ( lsapi_module_main( source_highlight TSRMLS_CC ) == -1 ) {
+                ret = -1;
+            }
+        } else {
+            LSAPI_AppendRespHeader( "status: 403", 11 );
+            LSAPI_AppendRespHeader( "content-type: text/html", 23 );
+            LSAPI_Write( "Forbidden: PHP engine is disable.\n", 34 );
+        }
+    } zend_end_try();
+    return ret;
 }
 
 static void cli_usage( TSRMLS_D )
 {
-	static const char * usage =
-		"Usage: php\n"
-		"      php -[b|c|h|i|q|s|v|?] [<file>] [args...]\n"
-		"  Run in LSAPI mode, only '-b', '-s' and '-c' are effective\n"
-		"  Run in Command Line Interpreter mode when parameters are specified\n"
-		"\n"
-		"  -b <address:port>|<port> Bind Path for external LSAPI Server mode\n"
-		"  -c <path>|<file> Look for php.ini file in this directory\n"
-		"  -h    This help\n"
-		"  -i    PHP information\n"
-		"  -q    Quiet-mode.  Suppress HTTP Header output.\n"
-		"  -s    Display colour syntax highlighted source.\n"
-		"  -v    Version number\n"
-		"  -?    This help\n"
-		"\n"
-		"  args...	Arguments passed to script.\n";
-	php_output_startup();
-	php_output_activate(TSRMLS_C);
-	php_printf( usage );
+    static const char * usage =
+        "Usage: php\n"
+        "      php -[b|c|h|i|q|s|v|?] [<file>] [args...]\n"
+        "  Run in LSAPI mode, only '-b', '-s' and '-c' are effective\n"
+        "  Run in Command Line Interpreter mode when parameters are specified\n"
+        "\n"
+        "  -b <address:port>|<port> Bind Path for external LSAPI Server mode\n"
+        "  -c <path>|<file> Look for php.ini file in this directory\n"
+        "  -h    This help\n"
+        "  -i    PHP information\n"
+        "  -q    Quiet-mode.  Suppress HTTP Header output.\n"
+        "  -s    Display colour syntax highlighted source.\n"
+        "  -v    Version number\n"
+        "  -?    This help\n"
+        "\n"
+        "  args...    Arguments passed to script.\n";
+    php_output_startup();
+    php_output_activate(TSRMLS_C);
+    php_printf( usage );
 #ifdef PHP_OUTPUT_NEWAPI
     php_output_end_all(TSRMLS_C);
 #else
@@ -440,249 +605,249 @@ static void cli_usage( TSRMLS_D )
 }
 
 static int parse_opt( int argc, char * argv[], int *climode,
-						char **php_ini_path, char ** php_bind )
-{
-	char ** p = &argv[1];
-	char ** argend= &argv[argc];
-	int c;
-	while (( p < argend )&&(**p == '-' )) {
-		c = *((*p)+1);
-		++p;
-		switch( c ) {
-		case 'b':
-			if ( p >= argend ) {
-				fprintf( stderr, "TCP or socket address must be specified following '-b' option.\n");
-				return -1;
-			}
-			*php_bind = *p++;
-			break;
-			
-		case 'c':
-			if ( p >= argend ) {
-				fprintf( stderr, "<path> or <file> must be specified following '-c' option.\n");
-
-				return -1;
-			}
-			*php_ini_path = *p++;
-			break;
-		case 's':
-			source_highlight = 1;
-			break;	
-		case 'h':
-		case 'i':
-		case 'q':
-		case 'v':
-		case '?':
-		default:
-			*climode = 1;
-			break;
-		}
-	}
-	if ( p - argv < argc ) {
-		*climode = 1;
-	}
-	return 0;
+                        char **php_ini_path, char ** php_bind )
+{
+    char ** p = &argv[1];
+    char ** argend= &argv[argc];
+    int c;
+    while (( p < argend )&&(**p == '-' )) {
+        c = *((*p)+1);
+        ++p;
+        switch( c ) {
+        case 'b':
+            if ( p >= argend ) {
+                fprintf( stderr, "TCP or socket address must be specified following '-b' option.\n");
+                return -1;
+            }
+            *php_bind = *p++;
+            break;
+            
+        case 'c':
+            if ( p >= argend ) {
+                fprintf( stderr, "<path> or <file> must be specified following '-c' option.\n");
+
+                return -1;
+            }
+            *php_ini_path = *p++;
+            break;
+        case 's':
+            source_highlight = 1;
+            break;    
+        case 'h':
+        case 'i':
+        case 'q':
+        case 'v':
+        case '?':
+        default:
+            *climode = 1;
+            break;
+        }
+    }
+    if ( p - argv < argc ) {
+        *climode = 1;
+    }
+    return 0;
 }
 
 static int cli_main( int argc, char * argv[] )
 {
 
-	static const char * ini_defaults[] = {
-		"report_zend_debug",    "0",
-		"display_errors",       "1",
-		"register_argc_argv",   "1",
-		"html_errors",          "0",
-		"implicit_flush",       "1",
-		"output_buffering",     "0",
-		"max_execution_time",   "0",
-		NULL
-	};
-
-	const char ** ini;
-	char ** p = &argv[1];
-	char ** argend= &argv[argc];
-	int ret = 0;
-	int c;
-	lsapi_mode = 0;        /* enter CLI mode */
+    static const char * ini_defaults[] = {
+        "report_zend_debug",    "0",
+        "display_errors",       "1",
+        "register_argc_argv",   "1",
+        "html_errors",          "0",
+        "implicit_flush",       "1",
+        "output_buffering",     "0",
+        "max_execution_time",   "0",
+        NULL
+    };
+
+    const char ** ini;
+    char ** p = &argv[1];
+    char ** argend= &argv[argc];
+    int ret = 0;
+    int c;
+    lsapi_mode = 0;        /* enter CLI mode */
 
 #ifdef PHP_WIN32
-	_fmode = _O_BINARY;			/*sets default for file streams to binary */
-	setmode(_fileno(stdin), O_BINARY);    /* make the stdio mode be binary */
-	setmode(_fileno(stdout), O_BINARY);   /* make the stdio mode be binary */
-	setmode(_fileno(stderr), O_BINARY);   /* make the stdio mode be binary */
+    _fmode = _O_BINARY;            /*sets default for file streams to binary */
+    setmode(_fileno(stdin), O_BINARY);    /* make the stdio mode be binary */
+    setmode(_fileno(stdout), O_BINARY);   /* make the stdio mode be binary */
+    setmode(_fileno(stderr), O_BINARY);   /* make the stdio mode be binary */
 #endif
 
-	zend_first_try 	{
-		SG(server_context) = (void *) 1;
-
-		zend_uv.html_errors = 0; /* tell the engine we're in non-html mode */
-		CG(in_compilation) = 0; /* not initialized but needed for several options */
-		EG(uninitialized_zval_ptr) = NULL;
-
-		for( ini = ini_defaults; *ini; ini+=2 ) {
-			zend_alter_ini_entry( (char *)*ini, strlen( *ini )+1,
-								(char *)*(ini+1), strlen( *(ini+1) ),
-								PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
-		}
-
-		while (( p < argend )&&(**p == '-' )) {
-			c = *((*p)+1);
-			++p;
-			switch( c ) {
-			case 'q':
-				break;
-			case 'i':
-				if (php_request_startup(TSRMLS_C) != FAILURE) {
-					php_print_info(0xFFFFFFFF TSRMLS_CC);
+    zend_first_try     {
+        SG(server_context) = (void *) 1;
+
+        zend_uv.html_errors = 0; /* tell the engine we're in non-html mode */
+        CG(in_compilation) = 0; /* not initialized but needed for several options */
+        EG(uninitialized_zval_ptr) = NULL;
+
+        for( ini = ini_defaults; *ini; ini+=2 ) {
+            zend_alter_ini_entry( (char *)*ini, strlen( *ini )+1,
+                                (char *)*(ini+1), strlen( *(ini+1) ),
+                                PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
+        }
+
+        while (( p < argend )&&(**p == '-' )) {
+            c = *((*p)+1);
+            ++p;
+            switch( c ) {
+            case 'q':
+                break;
+            case 'i':
+                if (php_request_startup(TSRMLS_C) != FAILURE) {
+                    php_print_info(0xFFFFFFFF TSRMLS_CC);
 #ifdef PHP_OUTPUT_NEWAPI
                     php_output_end_all(TSRMLS_C);
 #else
                     php_end_ob_buffers(1 TSRMLS_CC);
 #endif
-					php_request_shutdown( NULL );
-				}
-				ret = 1;
-				break;
-			case 'v':
-				if (php_request_startup(TSRMLS_C) != FAILURE) {
+                    php_request_shutdown( NULL );
+                }
+                ret = 1;
+                break;
+            case 'v':
+                if (php_request_startup(TSRMLS_C) != FAILURE) {
 #if ZEND_DEBUG
-					php_printf("PHP %s (%s) (built: %s %s) (DEBUG)\nCopyright (c) 1997-2004 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
+                    php_printf("PHP %s (%s) (built: %s %s) (DEBUG)\nCopyright (c) 1997-2004 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
 #else
-					php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c) 1997-2004 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
+                    php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c) 1997-2004 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
 #endif
 #ifdef PHP_OUTPUT_NEWAPI
                     php_output_end_all(TSRMLS_C);
 #else
                     php_end_ob_buffers(1 TSRMLS_CC);
 #endif
-					php_request_shutdown( NULL );
-				}
-				ret = 1;
-				break;
-			case 'c':
-				++p;
-			/* fall through */
-			case 's':
-				break;
-				
-			case 'h':
-			case '?':
-			default:
-				cli_usage(TSRMLS_C);
-				ret = 1;
-				break;
-
-			}
-		}
-		if ( !ret ) {
-			if ( *p ) {
-				zend_file_handle file_handle = {0};
-
-				file_handle.type = ZEND_HANDLE_FP;
-				file_handle.handle.fp = VCWD_FOPEN(*p, "rb");
-
-				if ( file_handle.handle.fp ) {
-					script_filename = *p;
-					php_self = *p;
-
-					SG(request_info).path_translated = *p;
-					SG(request_info).argc = argc - (p - argv);
-					SG(request_info).argv = p;
-
-					if (php_request_startup(TSRMLS_C) == FAILURE ) {
-						fclose( file_handle.handle.fp );
-						ret = 2;
-					} else {
-						if (source_highlight) {
-							zend_syntax_highlighter_ini syntax_highlighter_ini;
-					
-							php_get_highlight_struct(&syntax_highlighter_ini);
-							highlight_file(SG(request_info).path_translated, &syntax_highlighter_ini TSRMLS_CC);
-						} else {
-							file_handle.filename = *p;
-							file_handle.free_filename = 0;
-							file_handle.opened_path = NULL;
-
-							php_execute_script(&file_handle TSRMLS_CC);
-						}
-
-						php_request_shutdown( NULL );
-					}
-				} else {
-					php_printf("Could not open input file: %s.\n", *p);
-				}
-			} else {
-				cli_usage(TSRMLS_C);
-			}
-		}
-
-	}zend_end_try();
-
-	php_module_shutdown(TSRMLS_C);
+                    php_request_shutdown( NULL );
+                }
+                ret = 1;
+                break;
+            case 'c':
+                ++p;
+            /* fall through */
+            case 's':
+                break;
+                
+            case 'h':
+            case '?':
+            default:
+                cli_usage(TSRMLS_C);
+                ret = 1;
+                break;
+
+            }
+        }
+        if ( !ret ) {
+            if ( *p ) {
+                zend_file_handle file_handle = {0};
+
+                file_handle.type = ZEND_HANDLE_FP;
+                file_handle.handle.fp = VCWD_FOPEN(*p, "rb");
+
+                if ( file_handle.handle.fp ) {
+                    script_filename = *p;
+                    php_self = *p;
+
+                    SG(request_info).path_translated = estrdup(*p);
+                    SG(request_info).argc = argc - (p - argv);
+                    SG(request_info).argv = p;
+
+                    if (php_request_startup(TSRMLS_C) == FAILURE ) {
+                        fclose( file_handle.handle.fp );
+                        ret = 2;
+                    } else {
+                        if (source_highlight) {
+                            zend_syntax_highlighter_ini syntax_highlighter_ini;
+                    
+                            php_get_highlight_struct(&syntax_highlighter_ini);
+                            highlight_file(SG(request_info).path_translated, &syntax_highlighter_ini TSRMLS_CC);
+                        } else {
+                            file_handle.filename = *p;
+                            file_handle.free_filename = 0;
+                            file_handle.opened_path = NULL;
+
+                            php_execute_script(&file_handle TSRMLS_CC);
+                        }
+
+                        php_request_shutdown( NULL );
+                    }
+                } else {
+                    php_printf("Could not open input file: %s.\n", *p);
+                }
+            } else {
+                cli_usage(TSRMLS_C);
+            }
+        }
+
+    }zend_end_try();
+
+    php_module_shutdown(TSRMLS_C);
 
 #ifdef ZTS
-	tsrm_shutdown();
+    tsrm_shutdown();
 #endif
-	return ret;
+    return ret;
 }
 
 static int s_stop;
 void litespeed_cleanup(int signal)
 {
-	s_stop = signal;
+    s_stop = signal;
 }
 
 
 void start_children( int children )
 {
-	struct sigaction act, old_term, old_quit, old_int, old_usr1;
-	int running = 0;
-	int status;
-	pid_t pid;
-
-	/* Create a process group */
-	setsid();
-
-	/* Set up handler to kill children upon exit */
-	act.sa_flags = 0;
-	act.sa_handler = litespeed_cleanup;
-	if( sigaction( SIGTERM, &act, &old_term ) ||
-		sigaction( SIGINT,  &act, &old_int  ) ||
-		sigaction( SIGUSR1, &act, &old_usr1 ) ||
-		sigaction( SIGQUIT, &act, &old_quit )) {
-		perror( "Can't set signals" );
-		exit( 1 );
-	}
-	s_stop = 0;
-	while( 1 ) {
-		while((!s_stop )&&( running < children )) {
-			pid = fork();
-			switch( pid ) {
-			case 0: /* children process */
-
-				/* don't catch our signals */
-				sigaction( SIGTERM, &old_term, 0 );
-				sigaction( SIGQUIT, &old_quit, 0 );
-				sigaction( SIGINT,  &old_int,  0 );
-				sigaction( SIGUSR1, &old_usr1, 0 );
-				return ;
-			case -1:
-				perror( "php (pre-forking)" );
-				exit( 1 );
-				break;
-			default: /* parent process */
-				running++;
-				break;
-			}
-		} 
-		if ( s_stop ) {
-			break;
-		}
-		pid = wait( &status );
-		running--;
-	}
-	kill( -getpgrp(), SIGUSR1 );
-	exit( 0 );
+    struct sigaction act, old_term, old_quit, old_int, old_usr1;
+    int running = 0;
+    int status;
+    pid_t pid;
+
+    /* Create a process group */
+    setsid();
+
+    /* Set up handler to kill children upon exit */
+    act.sa_flags = 0;
+    act.sa_handler = litespeed_cleanup;
+    if( sigaction( SIGTERM, &act, &old_term ) ||
+        sigaction( SIGINT,  &act, &old_int  ) ||
+        sigaction( SIGUSR1, &act, &old_usr1 ) ||
+        sigaction( SIGQUIT, &act, &old_quit )) {
+        perror( "Can't set signals" );
+        exit( 1 );
+    }
+    s_stop = 0;
+    while( 1 ) {
+        while((!s_stop )&&( running < children )) {
+            pid = fork();
+            switch( pid ) {
+            case 0: /* children process */
+
+                /* don't catch our signals */
+                sigaction( SIGTERM, &old_term, 0 );
+                sigaction( SIGQUIT, &old_quit, 0 );
+                sigaction( SIGINT,  &old_int,  0 );
+                sigaction( SIGUSR1, &old_usr1, 0 );
+                return ;
+            case -1:
+                perror( "php (pre-forking)" );
+                exit( 1 );
+                break;
+            default: /* parent process */
+                running++;
+                break;
+            }
+        } 
+        if ( s_stop ) {
+            break;
+        }
+        pid = wait( &status );
+        running--;
+    }
+    kill( -getpgrp(), SIGUSR1 );
+    exit( 0 );
 }
 
 
@@ -690,98 +855,124 @@ void start_children( int children )
 #include <fcntl.h>
 int main( int argc, char * argv[] )
 {
-	int ret;
-	int bindFd;
-
-	char * php_ini_path = NULL;
-	char * php_bind	 = NULL;
-	char * p;
-	int n;
-	int climode = 0;
-	
+    int ret;
+    int bindFd;
+
+    char * php_ini_path = NULL;
+    char * php_bind     = NULL;
+    char * p;
+    int n;
+    int climode = 0;
+    struct timeval tv_req_begin;
+    struct timeval tv_req_end;
+    int slow_script_msec = 0;
+    char time_buf[40];
+    
 #ifdef HAVE_SIGNAL_H
 #if defined(SIGPIPE) && defined(SIG_IGN)
-	signal(SIGPIPE, SIG_IGN);
+    signal(SIGPIPE, SIG_IGN);
 #endif
 #endif
 
 #ifdef ZTS
-	tsrm_startup(1, 1, 0, NULL);
+    tsrm_startup(1, 1, 0, NULL);
 #endif
 
-	if (argc > 1 ) {
-		if ( parse_opt( argc, argv, &climode, 
-				&php_ini_path, &php_bind ) == -1 ) {
-			return 1;
-		}
-	}
-	if ( climode ) {
-		lsapi_sapi_module.phpinfo_as_text = 1;
-	}
-	sapi_startup(&lsapi_sapi_module);
+    if (argc > 1 ) {
+        if ( parse_opt( argc, argv, &climode, 
+                &php_ini_path, &php_bind ) == -1 ) {
+            return 1;
+        }
+    }
+    if ( climode ) {
+        lsapi_sapi_module.phpinfo_as_text = 1;
+    }
+    argv0 = argv[0] + strlen( argv[0] );
+    sapi_startup(&lsapi_sapi_module);
 
 #ifdef ZTS
-	compiler_globals = ts_resource(compiler_globals_id);
-	executor_globals = ts_resource(executor_globals_id);
-	core_globals = ts_resource(core_globals_id);
-	sapi_globals = ts_resource(sapi_globals_id);
-	tsrm_ls = ts_resource(0);
+    compiler_globals = ts_resource(compiler_globals_id);
+    executor_globals = ts_resource(executor_globals_id);
+    core_globals = ts_resource(core_globals_id);
+    sapi_globals = ts_resource(sapi_globals_id);
+    tsrm_ls = ts_resource(0);
 
-	SG(request_info).path_translated = NULL;
+    SG(request_info).path_translated = NULL;
 #endif
 
-	lsapi_sapi_module.executable_location = argv[0];
+    lsapi_sapi_module.executable_location = argv[0];
+
+    if ( php_ini_path ) {
+        lsapi_sapi_module.php_ini_path_override = php_ini_path;
+    }
 
-	if ( php_ini_path ) {
-		lsapi_sapi_module.php_ini_path_override = php_ini_path;
-	}
 
-	if (php_module_startup(&lsapi_sapi_module, &litespeed_module_entry, 1) == FAILURE) {
+    lsapi_sapi_module.ini_defaults = sapi_lsapi_ini_defaults;
+
+    if (php_module_startup(&lsapi_sapi_module, &litespeed_module_entry, 1) == FAILURE) {
 #ifdef ZTS
-		tsrm_shutdown();
+        tsrm_shutdown();
 #endif
-		return FAILURE;
-	}
-
-	if ( climode ) {
-		return cli_main(argc, argv);
-	}
-
-	
-	if ( php_bind ) {
-		bindFd = LSAPI_CreateListenSock( php_bind, 10 );
-		if ( bindFd == -1 ) {
-			fprintf( stderr,
-					 "Failed to bind socket [%s]: %s\n", php_bind, strerror( errno ) );
-			exit( 2 );
-		}
-		if ( bindFd != 0 ) {
-			dup2( bindFd, 0 );
-			close( bindFd );
-		}
-	}
-
-	LSAPI_Init();
+        return FAILURE;
+    }
+
+    if ( climode ) {
+        return cli_main(argc, argv);
+    }
+
+    if ( php_bind ) {
+        bindFd = LSAPI_CreateListenSock( php_bind, 10 );
+        if ( bindFd == -1 ) {
+            fprintf( stderr,
+                     "Failed to bind socket [%s]: %s\n", php_bind, strerror( errno ) );
+            exit( 2 );
+        }
+        if ( bindFd != 0 ) {
+            dup2( bindFd, 0 );
+            close( bindFd );
+        }
+    }
+
+    LSAPI_Init();
    
-	LSAPI_Init_Env_Parameters( NULL );
-
-	if ( php_bind ) {
-		LSAPI_No_Check_ppid();
-	}
-
-	while( LSAPI_Prefork_Accept_r( &g_req ) >= 0 ) {
-		ret = processReq(TSRMLS_C);
-		LSAPI_Finish();
-		if ( ret ) {
-			break;
-		}
-	}
-	php_module_shutdown(TSRMLS_C);
+    LSAPI_Init_Env_Parameters( NULL );
+
+    slow_script_msec = LSAPI_Get_Slow_Req_Msecs();
+
+    if ( php_bind ) {
+        LSAPI_No_Check_ppid();
+    }
+
+    while( LSAPI_Prefork_Accept_r( &g_req ) >= 0 ) {
+        if ( slow_script_msec ) {
+            gettimeofday( &tv_req_begin, NULL );
+        }
+        ret = processReq(TSRMLS_C);
+        if ( slow_script_msec ) {
+            gettimeofday( &tv_req_end, NULL );
+            n = ((long) tv_req_end.tv_sec - tv_req_begin.tv_sec ) * 1000 
+                + (tv_req_end.tv_usec - tv_req_begin.tv_usec) / 1000;
+            if ( n > slow_script_msec )
+            {
+                strftime( time_buf, 30, "%d/%b/%Y:%H:%M:%S", localtime( &tv_req_end.tv_sec ) );
+                fprintf( stderr, "[%s] Slow PHP script: %d ms\n  URL: %s %s\n  Query String: %s\n  Script: %s\n",
+                         time_buf, n,  LSAPI_GetRequestMethod(), 
+                         LSAPI_GetScriptName(), LSAPI_GetQueryString(),
+                         LSAPI_GetScriptFileName() );
+
+            }
+        }
+        LSAPI_Finish();
+        if ( ret ) {
+            break;
+        }
+    }
+    php_module_shutdown(TSRMLS_C);
 
 #ifdef ZTS
-	tsrm_shutdown();
+    tsrm_shutdown();
 #endif
-	return ret;
+    return ret;
 }
 
 
@@ -798,45 +989,45 @@ PHP_FUNCTION(litespeed_response_headers);
 PHP_MINFO_FUNCTION(litespeed);
 
 zend_function_entry litespeed_functions[] = {
-	PHP_FE(litespeed_request_headers, 	arginfo_litespeed__void)
-	PHP_FE(litespeed_response_headers, 	arginfo_litespeed__void)
-	PHP_FALIAS(getallheaders, 			litespeed_request_headers, 	arginfo_litespeed__void)
-	PHP_FALIAS(apache_request_headers, 	litespeed_request_headers, 	arginfo_litespeed__void)
-	PHP_FALIAS(apache_response_headers, litespeed_response_headers, arginfo_litespeed__void)
-	{NULL, NULL, NULL}
+    PHP_FE(litespeed_request_headers,     arginfo_litespeed__void)
+    PHP_FE(litespeed_response_headers,     arginfo_litespeed__void)
+    PHP_FALIAS(getallheaders,             litespeed_request_headers,     arginfo_litespeed__void)
+    PHP_FALIAS(apache_request_headers,     litespeed_request_headers,     arginfo_litespeed__void)
+    PHP_FALIAS(apache_response_headers, litespeed_response_headers, arginfo_litespeed__void)
+    {NULL, NULL, NULL}
 };
 
 static PHP_MINIT_FUNCTION(litespeed)
 {
-	/* REGISTER_INI_ENTRIES(); */
-	return SUCCESS;
+    /* REGISTER_INI_ENTRIES(); */
+    return SUCCESS;
 }
 
 
 static PHP_MSHUTDOWN_FUNCTION(litespeed)
 {
-	/* UNREGISTER_INI_ENTRIES(); */
-	return SUCCESS;
+    /* UNREGISTER_INI_ENTRIES(); */
+    return SUCCESS;
 }
 
 zend_module_entry litespeed_module_entry = {
-	STANDARD_MODULE_HEADER,
-	"litespeed",
-	litespeed_functions,
-	PHP_MINIT(litespeed),
-	PHP_MSHUTDOWN(litespeed),
-	NULL,
-	NULL,
-	NULL,
-	NO_VERSION_YET,
-	STANDARD_MODULE_PROPERTIES
+    STANDARD_MODULE_HEADER,
+    "litespeed",
+    litespeed_functions,
+    PHP_MINIT(litespeed),
+    PHP_MSHUTDOWN(litespeed),
+    NULL,
+    NULL,
+    NULL,
+    NO_VERSION_YET,
+    STANDARD_MODULE_PROPERTIES
 };
 
 static int add_associate_array( const char * pKey, int keyLen, const char * pValue, int valLen,
-						 void * arg )
+                         void * arg )
 {
-	add_assoc_string_ex( (zval *)arg, (char *)pKey, keyLen+1, (char *)pValue, 1 );
-	return 1;
+    add_assoc_string_ex( (zval *)arg, (char *)pKey, keyLen+1, (char *)pValue, 1 );
+    return 1;
 }
 
 
@@ -844,13 +1035,13 @@ static int add_associate_array( const char * pKey, int keyLen, const char * pVal
    Fetch all HTTP request headers */
 PHP_FUNCTION(litespeed_request_headers)
 {
-	/* TODO: */
-	if (ZEND_NUM_ARGS() > 0) {
-		WRONG_PARAM_COUNT;
-	}
-	array_init(return_value);
+    /* TODO: */
+    if (ZEND_NUM_ARGS() > 0) {
+        WRONG_PARAM_COUNT;
+    }
+    array_init(return_value);
 
-	LSAPI_ForeachOrgHeader( add_associate_array, return_value );
+    LSAPI_ForeachOrgHeader( add_associate_array, return_value );
 
 }
 /* }}} */
@@ -861,40 +1052,40 @@ PHP_FUNCTION(litespeed_request_headers)
    Fetch all HTTP response headers */
 PHP_FUNCTION(litespeed_response_headers)
 {
-	sapi_header_struct  *h;
-	zend_llist_position pos;
-	char *	   p;
-	int		  len;
-	char		 headerBuf[SAPI_LSAPI_MAX_HEADER_LENGTH];
-
-	if (ZEND_NUM_ARGS() > 0) {
-		WRONG_PARAM_COUNT;
-	}
-
-	if (!&SG(sapi_headers).headers) {
-		RETURN_FALSE;
-	}
-	array_init(return_value);
-
-	h = zend_llist_get_first_ex(&SG(sapi_headers).headers, &pos);
-	while (h) {
-		if ( h->header_len > 0 ) {
-			p = strchr( h->header, ':' );
-			len = p - h->header;
-			if (( p )&&( len > 0 )) {
-				memmove( headerBuf, h->header, len );
-				while( len > 0 && (isspace( headerBuf[len-1])) ) {
-					--len;
-				}
-				headerBuf[len] = 0;
-				if ( len ) {
-					while( isspace(*++p));
-					add_assoc_string_ex(return_value, headerBuf, len+1, p, 1 );
-				}
-			}
-		}
-		h = zend_llist_get_next_ex(&SG(sapi_headers).headers, &pos);
-	}  
+    sapi_header_struct  *h;
+    zend_llist_position pos;
+    char *       p;
+    int          len;
+    char         headerBuf[SAPI_LSAPI_MAX_HEADER_LENGTH];
+
+    if (ZEND_NUM_ARGS() > 0) {
+        WRONG_PARAM_COUNT;
+    }
+
+    if (!&SG(sapi_headers).headers) {
+        RETURN_FALSE;
+    }
+    array_init(return_value);
+
+    h = zend_llist_get_first_ex(&SG(sapi_headers).headers, &pos);
+    while (h) {
+        if ( h->header_len > 0 ) {
+            p = strchr( h->header, ':' );
+            len = p - h->header;
+            if (( p )&&( len > 0 )) {
+                memmove( headerBuf, h->header, len );
+                while( len > 0 && (isspace( headerBuf[len-1])) ) {
+                    --len;
+                }
+                headerBuf[len] = 0;
+                if ( len ) {
+                    while( isspace(*++p));
+                    add_assoc_string_ex(return_value, headerBuf, len+1, p, 1 );
+                }
+            }
+        }
+        h = zend_llist_get_next_ex(&SG(sapi_headers).headers, &pos);
+    }  
 }
 
 /* }}} */
diff --git a/sapi/litespeed/lsapilib.c b/sapi/litespeed/lsapilib.c
index febe6b7..56ea94a 100644
--- a/sapi/litespeed/lsapilib.c
+++ b/sapi/litespeed/lsapilib.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: lsapilib.c 276590 2009-02-27 23:33:01Z gwang $ */
+/* $Id: lsapilib.c 306212 2010-12-10 22:51:08Z gwang $ */
 
 /*
 Copyright (c) 2007, Lite Speed Technologies Inc.
@@ -86,6 +86,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 static int g_inited = 0;
 static int g_running = 1;
 static int s_ppid;
+static int s_slow_req_msecs = 0;
 LSAPI_Request g_req = { -1, -1 };
 
 void Flush_RespBuf_r( LSAPI_Request * pReq );
@@ -507,11 +508,13 @@ static int parseRequest( LSAPI_Request * pReq, int totalLen )
     return 0;
 }
 
+static int s_accept_notify = 0;
+
 static struct lsapi_packet_header ack = {'L', 'S',
                 LSAPI_REQ_RECEIVED, LSAPI_ENDIAN, {LSAPI_PACKET_HEADER_LEN} };
-static inline int notify_req_received( LSAPI_Request * pReq )
+static inline int notify_req_received( int fd )
 {
-    if ( write( pReq->m_fd, &ack, LSAPI_PACKET_HEADER_LEN )
+    if ( write( fd, &ack, LSAPI_PACKET_HEADER_LEN )
          < LSAPI_PACKET_HEADER_LEN ) {
         return -1;
     }
@@ -567,7 +570,10 @@ static int readReq( LSAPI_Request * pReq )
     pReq->m_bufProcessed = packetLen;
     pReq->m_reqState = LSAPI_ST_REQ_BODY | LSAPI_ST_RESP_HEADER;
 
-    return notify_req_received( pReq );
+    if ( !s_accept_notify )
+        return notify_req_received( pReq->m_fd );
+    else
+        return 0;
 }
 
 
@@ -677,6 +683,10 @@ int LSAPI_Accept_r( LSAPI_Request * pReq )
                         setsockopt(pReq->m_fd, IPPROTO_TCP, TCP_NODELAY,
                                 (char *)&nodelay, sizeof(nodelay));
                     }
+
+                    if ( s_accept_notify )
+                        return notify_req_received( pReq->m_fd );
+
                 }
             } else {
                 return -1;
@@ -1239,13 +1249,14 @@ int LSAPI_ForeachHeader_r( LSAPI_Request * pReq,
         while( pCur < pEnd ) {
             pKey = pReq->m_pHttpHeader + pCur->nameOff;
             keyLen = pCur->nameLen;
-            pKeyEnd = pKey + keyLen;
-            memcpy( achHeaderName, "HTTP_", 5 );
-            p = &achHeaderName[5];
             if ( keyLen > 250 ) {
                 keyLen = 250;
             }
 
+            pKeyEnd = pKey + keyLen;
+            memcpy( achHeaderName, "HTTP_", 5 );
+            p = &achHeaderName[5];
+
             while( pKey < pKeyEnd ) {
                 char ch = *pKey++;
                 if ( ch == '-' ) {
@@ -1629,6 +1640,9 @@ static int lsapi_accept( int fdListen )
             setsockopt( fd, IPPROTO_TCP, TCP_NODELAY,
                     (char *)&nodelay, sizeof(nodelay));
         }
+
+        if ( s_accept_notify )
+            notify_req_received( fd );
     }
     return fd;
 
@@ -2073,6 +2087,15 @@ void LSAPI_Set_Server_Max_Idle_Secs( int serverMaxIdle )
     }
 }
 
+void LSAPI_Set_Slow_Req_Msecs( int msecs )
+{
+	s_slow_req_msecs = msecs;
+}
+
+int  LSAPI_Get_Slow_Req_Msecs()
+{
+	return s_slow_req_msecs;
+}
 
 void LSAPI_No_Check_ppid()
 {
@@ -2126,6 +2149,18 @@ void LSAPI_Init_Env_Parameters( fn_select_t fp )
         avoidFork = atoi( p );
     }    
 
+    p = getenv( "LSAPI_ACCEPT_NOTIFY" );
+    if ( p ) {
+        s_accept_notify = atoi( p );
+    }    
+
+    p = getenv( "LSAPI_SLOW_REQ_MSECS" );
+    if ( p ) {
+        n = atoi( p );
+        LSAPI_Set_Slow_Req_Msecs( n );
+    }    
+
+
 #if defined( RLIMIT_CORE )
     p = getenv( "LSAPI_ALLOW_CORE_DUMP" );
     if ( !p ) {
diff --git a/sapi/litespeed/lsapilib.h b/sapi/litespeed/lsapilib.h
index b7b82e3..8a604fb 100644
--- a/sapi/litespeed/lsapilib.h
+++ b/sapi/litespeed/lsapilib.h
@@ -343,6 +343,11 @@ void LSAPI_Set_Max_Process_Time( int secs );
 
 void LSAPI_Init_Env_Parameters( fn_select_t fp );
 
+void LSAPI_Set_Slow_Req_Msecs( int msecs );
+
+int  LSAPI_Get_Slow_Req_Msecs( );
+
+
 #if defined (c_plusplus) || defined (__cplusplus)
 }
 #endif
diff --git a/sapi/milter/php_milter.c b/sapi/milter/php_milter.c
index 1a7fcf2..8935207 100644
--- a/sapi/milter/php_milter.c
+++ b/sapi/milter/php_milter.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_milter.c 296107 2010-03-12 10:28:59Z jani $ */
+/* $Id: php_milter.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -1111,7 +1111,7 @@ int main(int argc, char *argv[])
 				}
 				SG(headers_sent) = 1;
 				SG(request_info).no_headers = 1;
-				php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c) 1997-2010 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
+				php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c) 1997-2011 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
 				php_end_ob_buffers(1 TSRMLS_CC);
 				exit(1);
 				break;
diff --git a/sapi/nsapi/nsapi.c b/sapi/nsapi/nsapi.c
index 53f5f83..b770f2d 100644
--- a/sapi/nsapi/nsapi.c
+++ b/sapi/nsapi/nsapi.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: nsapi.c 300707 2010-06-23 19:06:33Z srinatar $ */
+/* $Id: nsapi.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /*
  * PHP includes
@@ -312,7 +312,7 @@ PHP_MSHUTDOWN_FUNCTION(nsapi)
 PHP_MINFO_FUNCTION(nsapi)
 {
 	php_info_print_table_start();
-	php_info_print_table_row(2, "NSAPI Module Revision", "$Revision: 300707 $");
+	php_info_print_table_row(2, "NSAPI Module Revision", "$Revision: 306939 $");
 	php_info_print_table_row(2, "Server Software", system_version());
 	php_info_print_table_row(2, "Sub-requests with nsapi_virtual()",
 	 (nsapi_servact_service)?((zend_ini_long("zlib.output_compression", sizeof("zlib.output_compression"), 0))?"not supported with zlib.output_compression":"enabled"):"not supported on this platform" );
diff --git a/sapi/phttpd/php_phttpd.h b/sapi/phttpd/php_phttpd.h
index 168c58a..0a0d2e5 100644
--- a/sapi/phttpd/php_phttpd.h
+++ b/sapi/phttpd/php_phttpd.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/sapi/phttpd/phttpd.c b/sapi/phttpd/phttpd.c
index 11df607..65773dd 100644
--- a/sapi/phttpd/phttpd.c
+++ b/sapi/phttpd/phttpd.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/sapi/pi3web/pi3web_sapi.c b/sapi/pi3web/pi3web_sapi.c
index f6cd9b6..f0135af 100644
--- a/sapi/pi3web/pi3web_sapi.c
+++ b/sapi/pi3web/pi3web_sapi.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: pi3web_sapi.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: pi3web_sapi.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
@@ -57,7 +57,7 @@ static void php_info_pi3web(ZEND_MODULE_INFO_FUNC_ARGS)
 	PUTS("<table border=0 cellpadding=3 cellspacing=1 width=600 align=center>\n");
 	PUTS("<tr><th colspan=2 bgcolor=\"" PHP_HEADER_COLOR "\">Pi3Web Server Information</th></tr>\n");
 	php_info_print_table_header(2, "Information Field", "Value");
-	php_info_print_table_row(2, "Pi3Web SAPI module version", "$Id: pi3web_sapi.c 293036 2010-01-03 09:23:27Z sebastian $");
+	php_info_print_table_row(2, "Pi3Web SAPI module version", "$Id: pi3web_sapi.c 306939 2011-01-01 02:19:59Z felipe $");
 	php_info_print_table_row(2, "Server Name Stamp", HTTPCore_getServerStamp());
 	snprintf(variable_buf, 511, "%d", HTTPCore_debugEnabled());
 	php_info_print_table_row(2, "Debug Enabled", variable_buf);
diff --git a/sapi/roxen/roxen.c b/sapi/roxen/roxen.c
index 614a89e..723ffdd 100644
--- a/sapi/roxen/roxen.c
+++ b/sapi/roxen/roxen.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: roxen.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: roxen.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #ifdef HAVE_ROXEN
@@ -438,7 +438,7 @@ static void php_info_roxen(ZEND_MODULE_INFO_FUNC_ARGS)
 {
   /*  char buf[512]; */
   php_info_print_table_start();
-  php_info_print_table_row(2, "SAPI module version", "$Id: roxen.c 293036 2010-01-03 09:23:27Z sebastian $");
+  php_info_print_table_row(2, "SAPI module version", "$Id: roxen.c 306939 2011-01-01 02:19:59Z felipe $");
   /*  php_info_print_table_row(2, "Build date", Ns_InfoBuildDate());
       php_info_print_table_row(2, "Config file path", Ns_InfoConfigFile());
       php_info_print_table_row(2, "Error Log path", Ns_InfoErrorLog());
diff --git a/sapi/thttpd/php_thttpd.h b/sapi/thttpd/php_thttpd.h
index 43e9ad8..e5d1c56 100644
--- a/sapi/thttpd/php_thttpd.h
+++ b/sapi/thttpd/php_thttpd.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/sapi/thttpd/thttpd.c b/sapi/thttpd/thttpd.c
index f2530ec..0e78c49 100644
--- a/sapi/thttpd/thttpd.c
+++ b/sapi/thttpd/thttpd.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: thttpd.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: thttpd.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "SAPI.h"
diff --git a/sapi/tux/php_tux.c b/sapi/tux/php_tux.c
index df66a76..8a1f44e 100644
--- a/sapi/tux/php_tux.c
+++ b/sapi/tux/php_tux.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/sapi/webjames/php_webjames.h b/sapi/webjames/php_webjames.h
index a0532c7..1860352 100644
--- a/sapi/webjames/php_webjames.h
+++ b/sapi/webjames/php_webjames.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/sapi/webjames/webjames.c b/sapi/webjames/webjames.c
index bbe5084..5a975ec 100644
--- a/sapi/webjames/webjames.c
+++ b/sapi/webjames/webjames.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
diff --git a/win32/build/Makefile b/win32/build/Makefile
index 998724a..b1c7455 100644
--- a/win32/build/Makefile
+++ b/win32/build/Makefile
@@ -14,7 +14,7 @@
 #  | Author: Wez Furlong <wez at thebrainroom.com>                           |
 #  +----------------------------------------------------------------------+
 #
-# $Id: Makefile 302247 2010-08-15 03:38:08Z pajoye $
+# $Id: Makefile 308863 2011-03-02 18:35:10Z moriyoshi $
 # This is the makefile template for the win32 build
 
 CC="$(PHP_CL)"
@@ -25,10 +25,12 @@ RE2C="$(RE2C)"
 PHP_BUILD=$(PHP_BUILD)
 
 MCFILE=$(BUILD_DIR)\wsyslog.rc
+BUILD_DIR_DEV_NAME=php-$(PHP_VERSION_STRING)-devel-$(PHP_COMPILER_SHORT)-$(PHP_ARCHITECTURE)
+BUILD_DIR_DEV=$(BUILD_DIR)\$(BUILD_DIR_DEV_NAME)
 
 all: generated_files $(EXT_TARGETS) $(PECL_TARGETS) $(SAPI_TARGETS)
 
-build_dirs: $(BUILD_DIR) $(BUILD_DIRS_SUB)
+build_dirs: $(BUILD_DIR) $(BUILD_DIRS_SUB) $(BUILD_DIR_DEV)
 
 !if $(RE2C) == ""
 generated_files: build_dirs Zend\zend_ini_parser.c \
@@ -85,10 +87,14 @@ $(BUILD_DIR)\$(PHPDLL): generated_files $(PHPDEF) $(PHP_GLOBAL_OBJS) $(STATIC_EX
 
 $(BUILD_DIR)\$(PHPLIB): $(BUILD_DIR)\$(PHPDLL)
 
-$(BUILD_DIR) $(BUILD_DIRS_SUB):
+$(BUILD_DIR) $(BUILD_DIRS_SUB) $(BUILD_DIR_DEV):
 	@echo Recreating build dirs
 	@if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)
+	@cd $(BUILD_DIR)
 	@for %D in ($(BUILD_DIRS_SUB)) do @if not exist %D @mkdir %D > NUL
+	@if not exist $(BUILD_DIR_DEV) @mkdir $(BUILD_DIR_DEV) > NUL
+	@cd "$(PHP_SRC_DIR)"
+	
 
 clean-sapi:
 	@echo Cleaning SAPI
@@ -99,7 +105,9 @@ clean-sapi:
 
 clean: clean-sapi
 	@echo Cleaning distribution build dirs
+	@cd $(BUILD_DIR)
 	@for %D in (_x $(BUILD_DIRS_SUB)) do @if exist %D @del /F /Q %D\*.* > NUL
+	@cd "$(PHP_SRC_DIR)"
 	- at del /F /Q $(BUILD_DIR)\*.res $(BUILD_DIR)\*.lib $(BUILD_DIR)\*.ilk $(BUILD_DIR)\*.pdb $(BUILD_DIR)\*.exp $(PHPDEF) $(BUILD_DIR)\php-$(PHP_VERSION_STRING)-Win32.zip $(BUILD_DIR)\pecl-$(PHP_VERSION_STRING)-Win32.zip > NUL
 	-rd /s /q $(BUILD_DIR)\php-$(PHP_VERSION_STRING)
 
@@ -109,7 +117,9 @@ clean-pecl:
 
 clean-all:
 	@echo Cleaning standard build dirs
+	@cd $(BUILD_DIR)
 	@for %D in (_x $(BUILD_DIRS_SUB)) do @if exist %D @rd /s /q %D
+	@cd "$(PHP_SRC_DIR)"
 	- at del /f /q $(BUILD_DIR)\*.res $(BUILD_DIR)\*.lib $(BUILD_DIR)\*.ilk $(BUILD_DIR)\*.pdb $(BUILD_DIR)\*.exp $(PHPDEF) $(BUILD_DIR)\*.rc $(BUILD_DIR)\*.dbg $(BUILD_DIR)\*.bin $(BUILD_DIR)\php*.dll $(BUILD_DIR)\php*.exe > NUL
 
 test:
@@ -140,10 +150,13 @@ build-dist: $(BUILD_DIR)\deplister.exe
 	cd ..\..
 	cd $(BUILD_DIR)
 	-$(ZIP) -9 -q php-debug-pack-$(PHP_VERSION_STRING)$(PHP_ZTS_ARCHIVE_POSTFIX)-Win32-$(PHP_COMPILER_SHORT)-$(PHP_ARCHITECTURE).zip *.pdb
+	cd
+	cd
+	-$(ZIP) -9 -q -r php-devel-pack-$(PHP_VERSION_STRING)$(PHP_ZTS_ARCHIVE_POSTFIX)-Win32-$(PHP_COMPILER_SHORT)-$(PHP_ARCHITECTURE).zip $(BUILD_DIR_DEV_NAME)
 	cd ..\..
 
 dist: all build-dist
-snap: build-snap build-dist
+snap: build-snap build-devel build-dist
 
 $(BUILD_DIR)\deplister.exe:	win32\build\deplister.c
 	$(PHP_CL) /Fo$(BUILD_DIR)\ /Fd$(BUILD_DIR)\ /Fp$(BUILD_DIR)\ /FR$(BUILD_DIR) /Fe$(BUILD_DIR)\deplister.exe win32\build\deplister.c imagehlp.lib
@@ -152,7 +165,27 @@ msi-installer: dist
 	$(BUILD_DIR)\php.exe ..\php-installer\build-installer.php "$(BUILD_DIR)" "$(PHPDLL)" "$(SAPI_TARGETS)" "$(EXT_TARGETS)" "$(PECL_TARGETS)"
 
 # need to redirect, since INSTALL is a file in the root...
-install: really-install
+install: really-install install-sdk
+
+build-lib:
+	@if not exist $(BUILD_DIR_DEV)\lib mkdir $(BUILD_DIR_DEV)\lib >nul
+	@copy $(BUILD_DIR)\$(PHPLIB) $(BUILD_DIR_DEV)\lib /y >nul
+
+build-devel: build-headers build-lib
+	@if not exist $(BUILD_DIR_DEV)\script mkdir $(BUILD_DIR_DEV)\script >nul
+	@if not exist $(BUILD_DIR_DEV)\build mkdir $(BUILD_DIR_DEV)\build >nul
+	@copy win32\build\confutils.js $(BUILD_DIR_DEV)\script\ /y >nul
+	@copy win32\build\configure.tail $(BUILD_DIR_DEV)\script\ /y >nul
+	@copy win32\build\config.w32.phpize.in $(BUILD_DIR_DEV)\script\ /y >nul
+	@copy win32\build\Makefile.phpize $(BUILD_DIR_DEV)\script\ /y >nul
+	@copy win32\build\phpize.bat $(BUILD_DIR_DEV)\ /y >nul
+	@copy win32\build\template.rc $(BUILD_DIR_DEV)\build\ /y >nul
+	@copy $(BUILD_DIR)\devel\config.phpize.js $(BUILD_DIR_DEV)\script\ /y >nul
+	@copy $(BUILD_DIR)\devel\phpize.js $(BUILD_DIR_DEV)\script\ /y >nul
+	@copy $(BUILD_DIR)\devel\ext_deps.js $(BUILD_DIR_DEV)\script\ /y >nul
+
+install-sdk: build-devel
+	@xcopy /Q /Y /E /I $(BUILD_DIR_DEV)\* $(PHP_PREFIX)\SDK
 
 really-install:
 	@if not exist $(PHP_PREFIX) mkdir $(PHP_PREFIX)
@@ -163,4 +196,3 @@ really-install:
 	@echo It's okay for this step to fail:
 	-$(PHP_PREFIX)\php.exe -n -dextension_dir=$(PHP_PREFIX) win32/build/registersyslog.php $(PHP_PREFIX)\$(PHPDLL)
 
-
diff --git a/win32/build/Makefile.phpize b/win32/build/Makefile.phpize
new file mode 100644
index 0000000..17cfc90
--- /dev/null
+++ b/win32/build/Makefile.phpize
@@ -0,0 +1,38 @@
+CC="$(PHP_CL)"
+LD="$(LINK)"
+MC="$(MC)"
+MT="$(MT)"
+
+PHPSDK_DIR=$(PHP_DIR)
+PHPLIB=$(PHPSDK_DIR)\lib\$(PHPLIB)
+LDFLAGS=/libpath:"$(PHPSDK_DIR)\lib\;$(PHPSDK_DIR)"
+
+CFLAGS=/nologo /FD $(BASE_INCLUDES) /D _WINDOWS /D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D_USE_32BIT_TIME_T=1 /D ZEND_WIN32_FORCE_INLINE /GF /D ZEND_DEBUG=0 /D ZTS=1 /D FD_SETSIZE=256 
+CFLAGS_PHP=/D _USRDLL /D PHP5DLLTS_EXPORTS /D PHP_EXPORTS /D TSRM_EXPORTS /D SAPI_EXPORTS /D WINVER=0x500 /D COMPILE_DL_AJAXMIN 
+
+all: $(EXT_TARGETS) $(PECL_TARGETS)
+
+build_dirs: $(BUILD_DIR) $(BUILD_DIRS_SUB)
+
+clean-pecl:
+	@echo Cleaning PECL targets only
+	-rd /s /q $(BUILD_DIR)\pecl
+
+clean-all:
+	@echo Cleaning standard build dirs
+	@for %D in (_x $(BUILD_DIRS_SUB)) do @if exist %D @rd /s /q %D
+	- at del /f /q $(BUILD_DIR)\*.res $(BUILD_DIR)\*.manifest $(BUILD_DIR)\*.lib $(BUILD_DIR)\*.ilk $(BUILD_DIR)\*.pdb $(BUILD_DIR)\*.exp $(PHPDEF) $(BUILD_DIR)\*.rc $(BUILD_DIR)\*.dbg $(BUILD_DIR)\*.bin $(BUILD_DIR)\php*.dll $(BUILD_DIR)\php*.exe > NUL
+
+clean: clean-pecl
+	@echo Cleaning distribution build dirs
+	@for %D in (_x $(BUILD_DIRS_SUB)) do @if exist %D @del /F /Q %D\*.* > NUL
+	- at del /F /Q $(BUILD_DIR)\*.res $(BUILD_DIR)\*.lib $(BUILD_DIR)\*.ilk $(BUILD_DIR)\*.pdb $(BUILD_DIR)\*.exp $(PHPDEF) $(BUILD_DIR)\php-$(PHP_VERSION_STRING)-Win32.zip $(BUILD_DIR)\pecl-$(PHP_VERSION_STRING)-Win32.zip > NUL
+
+!if $(MT) == ""
+_VC_MANIFEST_EMBED_EXE=
+_VC_MANIFEST_EMBED_DLL=
+!else
+_VC_MANIFEST_EMBED_EXE= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;1
+_VC_MANIFEST_EMBED_DLL= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;2
+!endif
+
diff --git a/win32/build/buildconf.js b/win32/build/buildconf.js
index d26b4c7..b4194ad 100644
--- a/win32/build/buildconf.js
+++ b/win32/build/buildconf.js
@@ -209,6 +209,7 @@ buildconf_process_args();
 
 // Write the head of the configure script
 C.WriteLine("/* This file automatically generated from win32/build/confutils.js */");
+C.WriteLine("MODE_PHPIZE=false;");
 C.Write(file_get_contents("win32/build/confutils.js"));
 
 // If project files were requested, pull in the code to generate them
diff --git a/win32/build/config.w32 b/win32/build/config.w32
index a4e768f..318dd96 100644
--- a/win32/build/config.w32
+++ b/win32/build/config.w32
@@ -1,5 +1,5 @@
 // vim:ft=javascript
-// $Id: config.w32 305923 2010-12-02 23:23:14Z pajoye $
+// $Id: config.w32 308863 2011-03-02 18:35:10Z moriyoshi $
 // "Master" config file; think of it as a configure.in
 // equivalent.
 
@@ -102,7 +102,7 @@ if (PHP_DEBUG == "yes" && PHP_DEBUG_PACK == "yes") {
 }
 ARG_ENABLE('zts', 'Thread safety', 'yes');
 // Configures the hard-coded installation dir
-ARG_ENABLE('prefix', 'where PHP will be installed', '');
+ARG_WITH('prefix', 'where PHP will be installed', '');
 if (PHP_PREFIX == '') {
 	PHP_PREFIX = "C:\\php";
 	if (PHP_DEBUG == "yes")
@@ -199,6 +199,9 @@ if (PHP_DEBUG == "yes") {
 
 if (PHP_ZTS == "yes") {
 	ADD_FLAG("CFLAGS", "/D ZTS=1");
+	ADD_FLAG("ZTS", "1");
+} else {
+	ADD_FLAG("ZTS", "0");
 }
 
 DEFINE("PHP_ZTS_ARCHIVE_POSTFIX", PHP_ZTS == "yes" ? '' : "-nts");
@@ -263,7 +266,7 @@ var php_usual_include_suspects = PHP_PHP_BUILD+"\\include";
 var php_usual_lib_suspects = PHP_PHP_BUILD+"\\lib";
 
 ADD_FLAG("CFLAGS", '/I "' + php_usual_include_suspects + '" ');
-ADD_FLAG("LDFLAGS", '/libpath:"\\"' + php_usual_lib_suspects + '\\"" ');
+ADD_FLAG("LDFLAGS", '/libpath:"' + php_usual_lib_suspects + '" ');
 
 // Poke around for some headers
 function probe_basic_headers()
@@ -351,6 +354,8 @@ ADD_SOURCES("main/streams", "streams.c cast.c memory.c filter.c plain_wrapper.c
 ADD_SOURCES("win32", "glob.c readdir.c \
 	registry.c select.c sendmail.c time.c winutil.c wsyslog.c globals.c");
 
+PHP_INSTALL_HEADERS("", "Zend/ TSRM/ main/ main/streams/ win32/");
+
 STDOUT.WriteBlankLines(1);
 
 /* Can we build with IPv6 support? */
@@ -402,3 +407,14 @@ if (PHP_DSP != "no") {
 	}
 	FSO.CreateFolder("tmp");
 }
+
+ARG_ENABLE("security-flags", "Enable the compiler security flags", "no");
+if (PHP_SECURITY_FLAGS == "yes") {
+	ADD_FLAG("LDFLAGS", "/NXCOMPAT /DYNAMICBASE ");
+}
+
+ARG_ENABLE("static-analyze", "Enable the VC compiler static analyze", "no");
+if (PHP_STATIC_ANALYZE == "yes" && PHP_SNAPSHOT_BUILD == "no") {
+	ADD_FLAG("CFLAGS", " /analyze ");
+	ADD_FLAG("CFLAGS", " /wd6308 ");
+}
diff --git a/win32/build/config.w32.phpize.in b/win32/build/config.w32.phpize.in
new file mode 100644
index 0000000..0f88620
--- /dev/null
+++ b/win32/build/config.w32.phpize.in
@@ -0,0 +1,353 @@
+// vim:ft=javascript
+// $Id: config.w32 305923 2010-12-02 23:23:14Z pajoye $
+// "Master" config file; think of it as a configure.in
+// equivalent.
+
+var PHP_CYGWIN="notset";
+PHP_CL = PATH_PROG('cl', null, 'PHP_CL');
+if (!PHP_CL) {
+	ERROR("MS C++ compiler is required");
+}
+/* For the record here: */
+// 1200 is VC6
+// 1300 is vs.net 2002
+// 1310 is vs.net 2003
+// 1400 is vs.net 2005
+// 1500 is vs.net 2008
+// 1600 is vs.net 2010
+// Which version of the compiler do we have?
+VCVERS = probe_binary(PHP_CL).substr(0, 5).replace('.', '');
+STDOUT.WriteLine("  Detected compiler " + VC_VERSIONS[VCVERS]);
+AC_DEFINE('COMPILER', VC_VERSIONS[VCVERS], "Detected compiler version");
+DEFINE("PHP_COMPILER_SHORT", VC_VERSIONS_SHORT[VCVERS]);
+AC_DEFINE('PHP_COMPILER_ID', VC_VERSIONS_SHORT[VCVERS], "Compiler compatibility ID");
+
+// do we use x64 or 80x86 version of compiler?
+X64 = probe_binary(PHP_CL, 64, null, 'PHP_CL');
+if (X64) {
+	STDOUT.WriteLine("  Detected 64-bit compiler");
+} else {
+	STDOUT.WriteLine("  Detected 32-bit compiler");
+}
+AC_DEFINE('ARCHITECTURE', X64 ? 'x64' : 'x86', "Detected compiler architecture");
+DEFINE("PHP_ARCHITECTURE", X64 ? 'x64' : 'x86');
+
+// cygwin now ships with link.exe.  Avoid searching the cygwin path
+// for this, as we want the MS linker, not the fileutil
+PATH_PROG('link', WshShell.Environment("Process").Item("PATH"));
+PATH_PROG('nmake');
+
+// we don't want to define LIB, as that will override the default library path
+// that is set in that env var
+PATH_PROG('lib', null, 'MAKE_LIB');
+if (!PATH_PROG('bison')) {
+	ERROR('bison is required')
+}
+
+// There's a minimum requirement for re2c..
+MINRE2C = "0.13.4";
+
+RE2C = PATH_PROG('re2c');
+if (RE2C) {
+	var intvers, intmin;
+	var pattern = /\./g;
+
+	RE2CVERS = probe_binary(RE2C, "version");
+	STDOUT.WriteLine('  Detected re2c version ' + RE2CVERS);
+
+	intvers = RE2CVERS.replace(pattern, '') - 0;
+	intmin = MINRE2C.replace(pattern, '') - 0;
+
+	if (intvers < intmin) {
+		STDOUT.WriteLine('WARNING: The minimum RE2C version requirement is ' + MINRE2C);
+		STDOUT.WriteLine('Parsers will not be generated. Upgrade your copy at http://sf.net/projects/re2c');
+		DEFINE('RE2C', '');
+	} else {
+		DEFINE('RE2C_FLAGS', '');
+	}
+} else {
+	STDOUT.WriteLine('Parsers will not be regenerated');
+}
+PATH_PROG('zip');
+PATH_PROG('lemon');
+
+// avoid picking up midnight commander from cygwin
+PATH_PROG('mc', WshShell.Environment("Process").Item("PATH"));
+
+// Try locating manifest tool
+if (VCVERS > 1200) {
+	PATH_PROG('mt', WshShell.Environment("Process").Item("PATH"));
+}
+
+// stick objects somewhere outside of the source tree
+ARG_ENABLE('object-out-dir', 'Alternate location for binary objects during build', '');
+if (PHP_OBJECT_OUT_DIR.length) {
+	PHP_OBJECT_OUT_DIR = FSO.GetAbsolutePathName(PHP_OBJECT_OUT_DIR);
+	if (!FSO.FolderExists(PHP_OBJECT_OUT_DIR)) {
+		ERROR('you chosen output directory ' + PHP_OBJECT_OUT_DIR + ' does not exist');
+	}
+	PHP_OBJECT_OUT_DIR += '\\';
+} else if (X64) {
+	if (!FSO.FolderExists("x64")) {
+		FSO.CreateFolder("x64");
+	}
+	PHP_OBJECT_OUT_DIR = 'x64\\';
+}
+
+ARG_ENABLE('debug', 'Compile with debugging symbols', "no");
+ARG_ENABLE('debug-pack', 'Release binaries with external debug symbols (--enable-debug must not be specified)', 'no');
+if (PHP_DEBUG == "yes" && PHP_DEBUG_PACK == "yes") {
+	ERROR("Use of both --enable-debug and --enable-debug-pack not allowed.");
+}
+
+DEFINE('PHP_PREFIX', PHP_PREFIX);
+
+DEFINE("BASE_INCLUDES", "/I " + PHP_DIR + "/include /I " + PHP_DIR + "/include/main /I " + PHP_DIR + "/include/Zend /I " + PHP_DIR + "/include/TSRM /I " + PHP_DIR + "/include/ext ");
+
+// CFLAGS for building the PHP dll
+DEFINE("CFLAGS_PHP", "/D _USRDLL /D PHP5DLLTS_EXPORTS /D PHP_EXPORTS \
+/D LIBZEND_EXPORTS /D TSRM_EXPORTS /D SAPI_EXPORTS /D WINVER=0x500");
+
+DEFINE('CFLAGS_PHP_OBJ', '$(CFLAGS_PHP) $(STATIC_EXT_CFLAGS)');
+
+// General CFLAGS for building objects
+DEFINE("CFLAGS", "/nologo /FD $(BASE_INCLUDES) /D _WINDOWS \
+/D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D _MBCS /W3 ");
+
+if (VCVERS < 1400) {
+	// Enable automatic precompiled headers
+	ADD_FLAG('CFLAGS', ' /YX ');
+
+	if (PHP_DEBUG == "yes") {
+		// Set some debug/release specific options
+		ADD_FLAG('CFLAGS', ' /GZ ');
+	}
+}
+
+if (VCVERS >= 1400) {
+	// fun stuff: MS deprecated ANSI stdio and similar functions
+	// disable annoying warnings.  In addition, time_t defaults
+	// to 64-bit.  Ask for 32-bit.
+	if (X64) {
+		ADD_FLAG('CFLAGS', ' /wd4996 /Wp64 ');
+	} else {
+		ADD_FLAG('CFLAGS', ' /wd4996 /D_USE_32BIT_TIME_T=1 ');
+	}
+
+	if (PHP_DEBUG == "yes") {
+		// Set some debug/release specific options
+		ADD_FLAG('CFLAGS', ' /RTC1 ');
+	}
+}
+
+ARG_WITH('prefix', 'PHP installation prefix', '');
+ARG_WITH('mp', 'Tell VC9+ use up to [n,auto,disable] processes for compilation', 'auto');
+if (VCVERS >= 1500 && PHP_MP != 'disable') {
+		// no from disable-all 
+		if(PHP_MP == 'auto' || PHP_MP == 'no') {
+			 ADD_FLAG('CFLAGS', ' /MP ');
+		} else {
+			if(parseInt(PHP_MP) != 0) {
+				ADD_FLAG('CFLAGS', ' /MP'+ PHP_MP +' ');
+			} else {
+				STDOUT.WriteLine('WARNING: Invalid argument for MP: ' + PHP_MP);
+			}
+		}
+}
+
+/* For snapshot builders, where can we find the additional
+ * files that make up the snapshot template? */
+ARG_WITH("snapshot-template", "Path to snapshot builder template dir", "no");
+
+// General DLL link flags
+DEFINE("DLL_LDFLAGS", "/dll ");
+
+// PHP DLL link flags
+DEFINE("PHP_LDFLAGS", "$(DLL_LDFLAGS)");
+
+// General libs
+// urlmon.lib ole32.lib oleaut32.lib uuid.lib gdi32.lib winspool.lib comdlg32.lib
+DEFINE("LIBS", "kernel32.lib ole32.lib user32.lib advapi32.lib shell32.lib ws2_32.lib Dnsapi.lib");
+
+// Set some debug/release specific options
+if (PHP_DEBUG == "yes") {
+	ADD_FLAG("CFLAGS", "/LDd /MDd /W3 /Gm /Od /D _DEBUG /D ZEND_DEBUG=1 " +
+		(X64?"/Zi":"/ZI"));
+	ADD_FLAG("LDFLAGS", "/debug");
+	// Avoid problems when linking to release libraries that use the release
+	// version of the libc
+	ADD_FLAG("PHP_LDFLAGS", "/nodefaultlib:msvcrt");
+} else {
+	// Generate external debug files when --enable-debug-pack is specified
+	if (PHP_DEBUG_PACK == "yes") {
+		ADD_FLAG("CFLAGS", "/Zi");
+		ADD_FLAG("LDFLAGS", "/incremental:no /debug /opt:ref,icf");
+	}
+	// Equivalent to Release_TSInline build -> best optimization
+	ADD_FLAG("CFLAGS", "/LD /MD /W3 /Ox /D NDebug /D NDEBUG /D ZEND_WIN32_FORCE_INLINE /GF /D ZEND_DEBUG=0");
+
+	// if you have VS.Net /GS hardens the binary against buffer overruns
+	// ADD_FLAG("CFLAGS", "/GS");
+}
+
+if (PHP_ZTS == "yes") {
+	ADD_FLAG("CFLAGS", "/D ZTS=1");
+}
+
+DEFINE("PHP_ZTS_ARCHIVE_POSTFIX", PHP_ZTS == "yes" ? '' : "-nts");
+
+
+// we want msvcrt in the PHP DLL
+ADD_FLAG("PHP_LDFLAGS", "/nodefaultlib:libcmt");
+
+// set up the build dir and DLL name
+if (PHP_DEBUG == "yes" && PHP_ZTS == "yes") {
+	DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Debug_TS");
+	if (!MODE_PHPIZE) {
+		DEFINE("PHPDLL", "php" + PHP_VERSION + "ts_debug.dll");
+		DEFINE("PHPLIB", "php" + PHP_VERSION + "ts_debug.lib");
+	}
+} else if (PHP_DEBUG == "yes" && PHP_ZTS == "no") {
+	DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Debug");
+	if (!MODE_PHPIZE) {
+		DEFINE("PHPDLL", "php" + PHP_VERSION + "_debug.dll");
+		DEFINE("PHPLIB", "php" + PHP_VERSION + "_debug.lib");
+	}
+} else if (PHP_DEBUG == "no" && PHP_ZTS == "yes") {
+	DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Release_TS");
+	if (!MODE_PHPIZE) {
+		DEFINE("PHPDLL", "php" + PHP_VERSION + "ts.dll");
+		DEFINE("PHPLIB", "php" + PHP_VERSION + "ts.lib");
+	}
+} else if (PHP_DEBUG == "no" && PHP_ZTS == "no") {
+	DEFINE("BUILD_DIR", PHP_OBJECT_OUT_DIR + "Release");
+	if (!MODE_PHPIZE) {
+		DEFINE("PHPDLL", "php" + PHP_VERSION + ".dll");
+		DEFINE("PHPLIB", "php" + PHP_VERSION + ".lib");
+	}
+}
+
+if (MODE_PHPIZE) {
+	DEFINE("PHPDLL", PHP_DLL);
+	DEFINE("PHPLIB", PHP_DLL_LIB);
+}
+
+// Find the php_build dir - it contains headers and libraries
+// that we need
+ARG_WITH('php-build', 'Path to where you extracted the development libraries (http://wiki.php.net/internals/windows/libs). Assumes that it is a sibling of this source dir (..\\deps) if not specified', 'no');
+
+if (PHP_PHP_BUILD == 'no') {
+	if (FSO.FolderExists("..\\deps")) {
+		PHP_PHP_BUILD = "..\\deps";
+	} else {
+		if (FSO.FolderExists("..\\php_build")) {
+			PHP_PHP_BUILD = "..\\php_build";
+		} else {
+			if (X64) {
+				if (FSO.FolderExists("..\\win64build")) {
+					PHP_PHP_BUILD = "..\\win64build";
+				} else if (FSO.FolderExists("..\\php-win64-dev\\php_build")) {
+					PHP_PHP_BUILD = "..\\php-win64-dev\\php_build";
+				}
+			} else {
+				if (FSO.FolderExists("..\\win32build")) {
+					PHP_PHP_BUILD = "..\\win32build";
+				} else if (FSO.FolderExists("..\\php-win32-dev\\php_build")) {
+					PHP_PHP_BUILD = "..\\php-win32-dev\\php_build";
+				}
+			}
+		}
+	}
+	PHP_PHP_BUILD = FSO.GetAbsolutePathName(PHP_PHP_BUILD);
+}
+DEFINE("PHP_BUILD", PHP_PHP_BUILD);
+
+ARG_WITH('extra-includes', 'Extra include path to use when building everything', '');
+ARG_WITH('extra-libs', 'Extra library path to use when linking everything', '');
+
+var php_usual_include_suspects = PHP_PHP_BUILD+"\\include";
+var php_usual_lib_suspects = PHP_PHP_BUILD+"\\lib";
+
+ADD_FLAG("CFLAGS", '/I "' + php_usual_include_suspects + '" ');
+ADD_FLAG("LDFLAGS", '/libpath:"\\"' + php_usual_lib_suspects + '\\"" ');
+
+// Poke around for some headers
+function probe_basic_headers()
+{
+	var p;
+
+	if (PHP_PHP_BUILD != "no") {
+		php_usual_include_suspects += ";" + PHP_PHP_BUILD + "\\include";
+		php_usual_lib_suspects += ";" + PHP_PHP_BUILD + "\\lib";
+	}
+}
+
+function add_extra_dirs()
+{
+	var path, i, f;
+
+	if (PHP_EXTRA_INCLUDES.length) {
+		path = PHP_EXTRA_INCLUDES.split(';');
+		for (i = 0; i < path.length; i++) {
+			f = FSO.GetAbsolutePathName(path[i]);
+			if (FSO.FolderExists(f)) {
+				ADD_FLAG("CFLAGS", '/I "' + f + '" ');
+			}
+		}
+	}
+	if (PHP_EXTRA_LIBS.length) {
+		path = PHP_EXTRA_LIBS.split(';');
+		for (i = 0; i < path.length; i++) {
+			f = FSO.GetAbsolutePathName(path[i]);
+			if (FSO.FolderExists(f)) {
+				if (VCVERS <= 1200 && f.indexOf(" ") >= 0) {
+					ADD_FLAG("LDFLAGS", '/libpath:"\\"' + f + '\\"" ');
+				} else {
+					ADD_FLAG("LDFLAGS", '/libpath:"' + f + '" ');
+				}
+			}
+		}
+	}
+
+}
+
+probe_basic_headers();
+add_extra_dirs();
+
+//DEFINE("PHP_BUILD", PHP_PHP_BUILD);
+
+STDOUT.WriteBlankLines(1);
+STDOUT.WriteLine("Build dir: " + get_define('BUILD_DIR'));
+STDOUT.WriteLine("PHP Core:  " + get_define('PHPDLL') + " and " + get_define('PHPLIB'));
+
+
+if (VCVERS == 1200) {
+	AC_DEFINE('ZEND_DVAL_TO_LVAL_CAST_OK', 1);
+}
+
+if (VCVERS >= 1400) {
+	AC_DEFINE('HAVE_STRNLEN', 1);
+}
+
+STDOUT.WriteBlankLines(1);
+
+if (PHP_SNAPSHOT_TEMPLATE == "no") {
+	/* default is as a sibling of the php_build dir */
+	if (FSO.FolderExists(PHP_PHP_BUILD + "\\template")) {
+		PHP_SNAPSHOT_TEMPLATE = FSO.GetAbsolutePathName(PHP_PHP_BUILD + "\\template");
+	} else if (FSO.FolderExists(PHP_PHP_BUILD + "\\..\\template")) {
+		PHP_SNAPSHOT_TEMPLATE = FSO.GetAbsolutePathName(PHP_PHP_BUILD + "\\..\\template");
+	}
+}
+
+DEFINE('SNAPSHOT_TEMPLATE', PHP_SNAPSHOT_TEMPLATE);
+
+if (PHP_DSP != "no") {
+	if (FSO.FolderExists("tmp")) {
+		FSO.DeleteFolder("tmp");
+	}
+	FSO.CreateFolder("tmp");
+}
+
+AC_DEFINE("PHP_DIR", PHP_DIR);
+DEFINE("PHP_DIR", PHP_DIR);
diff --git a/win32/build/configure.tail b/win32/build/configure.tail
index c904bf4..20dc206 100644
--- a/win32/build/configure.tail
+++ b/win32/build/configure.tail
@@ -1,8 +1,8 @@
 // vim:ft=javascript
-// $Id: configure.tail 271838 2008-12-25 00:09:49Z pajoye $
+// $Id: configure.tail 306344 2010-12-13 18:43:10Z pajoye $
 // tail end of configure
 
-if (sapi_enabled.length < 1) {
+if (!MODE_PHPIZE && sapi_enabled.length < 1) {
 	MESSAGE("");
 	ERROR("No SAPI selected, please enable at least one SAPI.");
 }
diff --git a/win32/build/confutils.js b/win32/build/confutils.js
index ed3f242..a4ea2bf 100644
--- a/win32/build/confutils.js
+++ b/win32/build/confutils.js
@@ -27,6 +27,7 @@ var MFO = null;
 var SYSTEM_DRIVE = WshShell.Environment("Process").Item("SystemDrive");
 var PROGRAM_FILES = WshShell.Environment("Process").Item("ProgramFiles");
 var DSP_FLAGS = new Array();
+var PHP_SRC_DIR=FSO.GetParentFolderName(WScript.ScriptFullName);
 
 /* Store the enabled extensions (summary + QA check) */
 var extensions_enabled = new Array();
@@ -34,6 +35,9 @@ var extensions_enabled = new Array();
 /* Store the SAPI enabled (summary + QA check) */
 var sapi_enabled = new Array();
 
+/* Store the headers to install */
+var headers_install = new Array();
+
 /* Mapping CL version > human readable name */
 var VC_VERSIONS = new Array();
 VC_VERSIONS[1200] = 'MSVC6 (Visual C++ 6.0)';
@@ -55,11 +59,18 @@ if (PROGRAM_FILES == null) {
 	PROGRAM_FILES = "C:\\Program Files";
 }
 
-if (!FSO.FileExists("README.SVN-RULES")) {
-	STDERR.WriteLine("Must be run from the root of the php source");
-	WScript.Quit(10);
+if (MODE_PHPIZE) {
+	if (!FSO.FileExists("config.w32")) {
+		STDERR.WriteLine("Must be run from the root of the extension source");
+		WScript.Quit(10);
+	}
+} else {
+	if (!FSO.FileExists("README.SVN-RULES")) {
+		STDERR.WriteLine("Must be run from the root of the php source");
+		WScript.Quit(10);
+	}
 }
-	
+
 var CWD = WshShell.CurrentDirectory;
 
 if (typeof(CWD) == "undefined") {
@@ -106,7 +117,9 @@ build_dirs = new Array();
 extension_include_code = "";
 extension_module_ptrs = "";
 
-get_version_numbers();
+if (!MODE_PHPIZE) {
+	get_version_numbers();
+}
 
 /* execute a command and return the output as a string */
 function execute(command_line)
@@ -330,7 +343,13 @@ function conf_process_args()
 				arg.seen = true;
 
 				analyzed = analyze_arg(argval);
-				shared = analyzed[0];
+
+				/* Force shared when called after phpize */
+				if (MODE_PHPIZE) {
+					shared = "shared";
+				} else {
+					shared = analyzed[0];
+				}
 				argval = analyzed[1];
 
 				if (argname == arg.imparg) {
@@ -972,13 +991,21 @@ function generate_version_info_resource(makefiletarget, basename, creditspath, s
 			creditspath + '\\template.rc');
 		return resname;
 	}
-
-	MFO.WriteLine("$(BUILD_DIR)\\" + resname + ": win32\\build\\template.rc");
-	MFO.WriteLine("\t$(RC) /n /fo $(BUILD_DIR)\\" + resname + logo + debug +
-		' /d FILE_DESCRIPTION="\\"' + res_desc + '\\"" /d FILE_NAME="\\"'
-		+ makefiletarget + '\\"" /d URL="\\"' + project_url + 
-		'\\"" /d INTERNAL_NAME="\\"' + internal_name + versioning + 
-		'\\"" /d THANKS_GUYS="\\"' + thanks + '\\"" win32\\build\\template.rc');
+	if (MODE_PHPIZE) {
+		MFO.WriteLine("$(BUILD_DIR)\\" + resname + ": $(PHP_DIR)\\build\\template.rc");
+		MFO.WriteLine("\t$(RC)  /I $(PHP_DIR)/include /n /fo $(BUILD_DIR)\\" + resname + logo + debug +
+			' /d FILE_DESCRIPTION="\\"' + res_desc + '\\"" /d FILE_NAME="\\"'
+			+ makefiletarget + '\\"" /d URL="\\"' + project_url + 
+			'\\"" /d INTERNAL_NAME="\\"' + internal_name + versioning + 
+			'\\"" /d THANKS_GUYS="\\"' + thanks + '\\"" $(PHP_DIR)\\build\\template.rc');
+	} else {
+		MFO.WriteLine("$(BUILD_DIR)\\" + resname + ": win32\\build\\template.rc");
+		MFO.WriteLine("\t$(RC) /n /fo $(BUILD_DIR)\\" + resname + logo + debug +
+			' /d FILE_DESCRIPTION="\\"' + res_desc + '\\"" /d FILE_NAME="\\"'
+			+ makefiletarget + '\\"" /d URL="\\"' + project_url + 
+			'\\"" /d INTERNAL_NAME="\\"' + internal_name + versioning + 
+			'\\"" /d THANKS_GUYS="\\"' + thanks + '\\"" win32\\build\\template.rc');
+	}
 	MFO.WriteBlankLines(1);
 	return resname;
 }
@@ -1017,7 +1044,11 @@ function SAPI(sapiname, file_list, makefiletarget, cflags, obj_dir)
 	
 	MFO.WriteLine(makefiletarget + ": $(BUILD_DIR)\\" + makefiletarget);
 	MFO.WriteLine("\t at echo SAPI " + sapiname_for_printing + " build complete");
-	MFO.WriteLine("$(BUILD_DIR)\\" + makefiletarget + ": $(DEPS_" + SAPI + ") $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
+	if (MODE_PHPIZE) {
+		MFO.WriteLine("$(BUILD_DIR)\\" + makefiletarget + ": $(DEPS_" + SAPI + ") $(" + SAPI + "_GLOBAL_OBJS) $(PHPLIB) $(BUILD_DIR)\\" + resname);
+	} else {
+		MFO.WriteLine("$(BUILD_DIR)\\" + makefiletarget + ": $(DEPS_" + SAPI + ") $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
+	}
 
 	if (makefiletarget.match(new RegExp("\\.dll$"))) {
 		ldflags = "/dll $(LDFLAGS)";
@@ -1030,11 +1061,20 @@ function SAPI(sapiname, file_list, makefiletarget, cflags, obj_dir)
 		manifest = "-@$(_VC_MANIFEST_EMBED_EXE)";
 	}
 
-	if (ld) {
-		MFO.WriteLine("\t" + ld + " /nologo /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LDFLAGS_" + SAPI + ") $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname);
+	if (MODE_PHPIZE) {
+		if (ld) {
+			MFO.WriteLine("\t" + ld + " /nologo /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(" + SAPI + "_GLOBAL_OBJS) $(PHPLIB) $(LDFLAGS_" + SAPI + ") $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname);
+		} else {
+			ld = "@$(CC)";
+			MFO.WriteLine("\t" + ld + " /nologo " + " $(" + SAPI + "_GLOBAL_OBJS) $(PHPLIB) $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(LDFLAGS_" + SAPI + ")");
+		}
 	} else {
-		ld = "@$(CC)";
-		MFO.WriteLine("\t" + ld + " /nologo " + " $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(LDFLAGS_" + SAPI + ")");
+		if (ld) {
+			MFO.WriteLine("\t" + ld + " /nologo /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LDFLAGS_" + SAPI + ") $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname);
+		} else {
+			ld = "@$(CC)";
+			MFO.WriteLine("\t" + ld + " /nologo " + " $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(LDFLAGS_" + SAPI + ")");
+		}
 	}
 
 	if (manifest) {
@@ -1089,6 +1129,11 @@ function ADD_EXTENSION_DEP(extname, dependson, optional)
 	var dep_present = false;
 	var dep_shared = false;
 
+	if (MODE_PHPIZE) {
+		ext_deps_js = file_get_contents(PHP_DIR + "\\script\\ext_deps.js");
+		eval(ext_deps_js);
+	}
+
 	try {
 		dep_present = eval("PHP_" + DEP);
 
@@ -1199,8 +1244,13 @@ function EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir)
 
 		MFO.WriteLine("$(BUILD_DIR)\\" + libname + ": $(BUILD_DIR)\\" + dllname);
 		MFO.WriteBlankLines(1);
-		MFO.WriteLine("$(BUILD_DIR)\\" + dllname + ": $(DEPS_" + EXT + ") $(" + EXT + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
-		MFO.WriteLine("\t" + ld + " $(" + EXT + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LIBS_" + EXT + ") $(LIBS) $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + dllname + " $(DLL_LDFLAGS) $(LDFLAGS) $(LDFLAGS_" + EXT + ")");
+		if (MODE_PHPIZE) {
+			MFO.WriteLine("$(BUILD_DIR)\\" + dllname + ": $(DEPS_" + EXT + ") $(" + EXT + "_GLOBAL_OBJS) $(PHPLIB) $(BUILD_DIR)\\" + resname);
+			MFO.WriteLine("\t" + ld + " $(" + EXT + "_GLOBAL_OBJS) $(PHPLIB) $(LIBS_" + EXT + ") $(LIBS) $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + dllname + " $(DLL_LDFLAGS) $(LDFLAGS) $(LDFLAGS_" + EXT + ")");
+		} else {
+			MFO.WriteLine("$(BUILD_DIR)\\" + dllname + ": $(DEPS_" + EXT + ") $(" + EXT + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
+			MFO.WriteLine("\t" + ld + " $(" + EXT + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LIBS_" + EXT + ") $(LIBS) $(BUILD_DIR)\\" + resname + " /link /out:$(BUILD_DIR)\\" + dllname + " $(DLL_LDFLAGS) $(LDFLAGS) $(LDFLAGS_" + EXT + ")");
+		}
 		MFO.WriteLine("\t-@$(_VC_MANIFEST_EMBED_DLL)");
 		MFO.WriteBlankLines(1);
 
@@ -1314,7 +1364,7 @@ function ADD_SOURCES(dir, file_list, target, obj_dir)
 		obj = src.replace(re, ".obj");
 		tv += " " + sub_build + obj;
 
-		if (PHP_ONE_SHOT == "yes") {
+		if (!MODE_PHPIZE && PHP_ONE_SHOT == "yes") {
 			if (i > 0) {
 				objs_line += " " + sub_build + obj;	
 				srcs_line += " " + dir + "\\" + src;
@@ -1328,7 +1378,7 @@ function ADD_SOURCES(dir, file_list, target, obj_dir)
 		}
 	}
 
-	if (PHP_ONE_SHOT == "yes") {
+	if (!MODE_PHPIZE && PHP_ONE_SHOT == "yes") {
 		MFO.WriteLine(objs_line + ": " + srcs_line);
 		MFO.WriteLine("\t$(CC) $(" + flags + ") $(CFLAGS) /Fo" + sub_build + " $(" + bd_flags_name + ") /c " + srcs_line);
 	}
@@ -1475,11 +1525,11 @@ function write_summary()
 	STDOUT.WriteLine("Enabled extensions:");
 	output_as_table(["Extension", "Mode"], extensions_enabled.sort());
 	STDOUT.WriteBlankLines(2);
-
-	STDOUT.WriteLine("Enabled SAPI:");
-	output_as_table(["Sapi Name"], sapi_enabled);
-	STDOUT.WriteBlankLines(2);
-
+	if (!MODE_PHPIZE) {
+		STDOUT.WriteLine("Enabled SAPI:");
+		output_as_table(["Sapi Name"], sapi_enabled);
+		STDOUT.WriteBlankLines(2);
+	}
 	ar[0] = ['Build type', PHP_DEBUG == "yes" ? "Debug" : "Release"];
 	ar[1] = ['Thread Safety', PHP_ZTS == "yes" ? "Yes" : "No"];
 	ar[2] = ['Compiler', VC_VERSIONS[VCVERS]];
@@ -1509,7 +1559,14 @@ function generate_files()
 			continue;
 		}
 		last = bd;
-		ADD_FLAG("BUILD_DIRS_SUB", bd.replace(new RegExp('^'+dir+'\\\\'), '$(BUILD_DIR)\\'));
+
+		build_dir = get_define('BUILD_DIR');
+		build_dir = build_dir.replace(new RegExp("\\\\", "g"), "\\\\");
+		if (build_dir.substr(build_dir.Length - 2, 2) != '\\\\') {
+			build_dir += '\\\\';
+		}
+		ADD_FLAG("BUILD_DIRS_SUB", bd.replace(new RegExp(build_dir), ''));
+
 		if (!FSO.FolderExists(bd)) {
 			FSO.CreateFolder(bd);
 		}
@@ -1526,9 +1583,11 @@ function generate_files()
 
 	STDOUT.WriteLine("Generating files...");
 	generate_makefile();
-	generate_internal_functions();
-	generate_config_h();
-
+	if (!MODE_PHPIZE) {
+		generate_internal_functions();
+		generate_config_h();
+		generate_phpize();
+	}
 	STDOUT.WriteLine("Done.");
 	STDOUT.WriteBlankLines(1);
 	write_summary();
@@ -1602,17 +1661,65 @@ function generate_config_h()
 	outfile.Close();
 }
 
+function generate_phpize()
+{
+	STDOUT.WriteLine("Generating phpize");
+	dest = get_define("BUILD_DIR") + '/devel';
+
+	if (!FSO.FolderExists(dest)) {
+		FSO.CreateFolder(dest);
+	}
+
+	var MF = FSO.CreateTextFile(dest + "/phpize.js", true);
+	var DEPS = FSO.CreateTextFile(dest + "/ext_deps.js", true);
+	prefix = get_define("PHP_PREFIX");
+	prefix = prefix.replace(new RegExp("/", "g"), "\\");
+	prefix = prefix.replace(new RegExp("\\\\", "g"), "\\\\");
+	MF.WriteLine("var PHP_PREFIX=" + '"' + prefix + '"');
+	MF.WriteLine("var PHP_ZTS=" + '"' + (PHP_ZTS.toLowerCase() == "yes" ? "Yes" : "No") + '"');
+	MF.WriteLine("var VC_VERSION=" + VCVERS);
+	MF.WriteLine("var PHP_VERSION=" + PHP_VERSION);
+	MF.WriteLine("var PHP_MINOR_VERSION=" + PHP_MINOR_VERSION);
+	MF.WriteLine("var PHP_RELEASE_VERSION=" + PHP_RELEASE_VERSION);
+	MF.WriteBlankLines(1);
+	MF.WriteLine("/* Genereted extensions list with mode (static/shared) */");
+
+	var count = extensions_enabled.length;
+	for (i in extensions_enabled) {
+		out = "PHP_" + extensions_enabled[i][0].toUpperCase() + "_SHARED=" + (extensions_enabled[i][1] == 'shared' ? 'true' : 'false') + ";";
+		DEPS.WriteLine("PHP_" + extensions_enabled[i][0].toUpperCase() + "=true;");
+		DEPS.WriteLine(out);
+		MF.WriteLine(out);
+	}
+
+	MF.WriteBlankLines(2);
+	MF.WriteLine("/* Genereted win32/build/phpize.js.in */");
+	MF.WriteBlankLines(1);
+	MF.Write(file_get_contents("win32/build/phpize.js.in"));
+	MF.Close();
+	DEPS.Close();
+
+	/* Generate flags file */
+	/* spit out variable definitions */
+	CJ = FSO.CreateTextFile(dest + "/config.phpize.js");
+
+	CJ.WriteLine("var PHP_ZTS =" + '"' + PHP_ZTS + '"');
+	CJ.WriteLine("var PHP_DLL_LIB =" + '"' + get_define('PHPLIB') + '"');
+	CJ.WriteLine("var PHP_DLL =" + '"' + get_define('PHPDLL') + '"');
+	CJ.WriteBlankLines(1);
+	CJ.Close();
+}
+
 function generate_makefile()
 {
 	STDOUT.WriteLine("Generating Makefile");
 	var MF = FSO.CreateTextFile("Makefile", true);
 
 	MF.WriteLine("# Generated by configure.js");
-
 	/* spit out variable definitions */
 	var keys = (new VBArray(configure_subst.Keys())).toArray();
 	var i;
-
+	MF.WriteLine("PHP_SRC_DIR =" + PHP_SRC_DIR);
 	for (i in keys) {
 		// The trailing space is needed to prevent the trailing backslash
 		// that is part of the build dir flags (CFLAGS_BD_XXX) from being
@@ -1625,9 +1732,25 @@ function generate_makefile()
 	}
 
 	MF.WriteBlankLines(1);
+	if (MODE_PHPIZE) {
+		var TF = FSO.OpenTextFile(PHP_DIR + "/script/Makefile.phpize", 1);
+	} else {
+		var TF = FSO.OpenTextFile("win32/build/Makefile", 1);
+	}
 
-	var TF = FSO.OpenTextFile("win32/build/Makefile", 1);
 	MF.Write(TF.ReadAll());
+
+	MF.WriteLine("build-headers:");
+	MF.WriteLine("	@if not exist $(BUILD_DIR_DEV)\\include mkdir $(BUILD_DIR_DEV)\\include >nul");
+	MF.WriteLine("	@for %D in ($(INSTALL_HEADERS_DIR)) do @if not exist $(BUILD_DIR_DEV)\\include\\%D mkdir $(BUILD_DIR_DEV)\\include\\%D >nul");
+	for (i in headers_install) {
+		if (headers_install[i][2] != "") {
+				MF.WriteLine("	@if not exist $(BUILD_DIR_DEV)\\include\\" + headers_install[i][2] + " mkdir $(BUILD_DIR_DEV)\\include\\" + 
+												headers_install[i][2] + ">nul");
+				MF.WriteLine("	@copy " + headers_install[i][0] + " " + "$(BUILD_DIR_DEV)\\include\\" + headers_install[i][2] + " /y >nul");
+		}
+	}
+	MF.WriteLine("	@for %D in ($(INSTALL_HEADERS_DIR)) do @copy %D*.h $(BUILD_DIR_DEV)\\include\\%D /y >nul");
 	TF.Close();
 
 	MF.WriteBlankLines(2);
@@ -1848,16 +1971,68 @@ function _inner_glob(base, p, parts)
 	return items;
 }
 
+function PHP_INSTALL_HEADERS(dir, headers_list)
+{
+	headers_list = headers_list.split(new RegExp("\\s+"));
+	headers_list.sort();
+	if (dir.length > 0 && dir.substr(dir.length - 1) != '/' && dir.substr(dir.length - 1) != '\\') {
+		dir += '/';
+	}
+	dir = dir.replace(new RegExp("/", "g"), "\\");
+
+	for (i in headers_list) {
+		found = false;
+		src = headers_list[i];
+		src = src.replace(new RegExp("/", "g"), "\\");
+		isdir = FSO.FolderExists(dir + src);
+		isfile = FSO.FileExists(dir + src);
+		if (isdir) {
+			if (src.length > 0 && src.substr(src.length - 1) != '/' && src.substr(src.length - 1) != '\\') {
+				src += '\\';
+			}
+			headers_install[headers_install.length] = [dir + src, 'dir',''];
+			ADD_FLAG("INSTALL_HEADERS_DIR", dir + src);
+			found = true;
+		} else if (isfile) {
+			dirname = FSO.GetParentFolderName(dir + src);
+			headers_install[headers_install.length] = [dir + src, 'file', dirname];
+			ADD_FLAG("INSTALL_HEADERS", dir + src);
+			found = true;
+		} else {
+			path =  configure_module_dirname + "\\"+ src;
+			isdir = FSO.FolderExists(path);
+			isfile = FSO.FileExists(path);
+			if (isdir) {
+				if (src.length > 0 && src.substr(src.length - 1) != '/' && src.substr(src.length - 1) != '\\') {
+					src += '\\';
+				}
+				headers_install[headers_install.length] = [path, 'dir',''];
+				ADD_FLAG("INSTALL_HEADERS_DIR", path);
+			} else if (isfile) {
+				dirname = FSO.GetParentFolderName(path);
+				headers_install[headers_install.length] = [path, 'file', dir];
+				ADD_FLAG("INSTALL_HEADERS", dir + src);
+				found = true;
+			}
+		}
+
+		if (found == false) {
+			STDOUT.WriteLine(headers_list);
+			ERROR("Cannot find header " + dir + src);
+		}
+	}
+}
 
 // for snapshot builders, this option will attempt to enable everything
 // and you can then build everything, ignoring fatal errors within a module
 // by running "nmake snap"
 PHP_SNAPSHOT_BUILD = "no";
-ARG_ENABLE('snapshot-build', 'Build a snapshot; turns on everything it can and ignores build errors', 'no');
-
-// one-shot build optimizes build by asking compiler to build
-// several objects at once, reducing overhead of starting new
-// compiler processes.
-ARG_ENABLE('one-shot', 'Optimize for fast build - best for release and snapshot builders, not so hot for edit-and-rebuild hacking', 'no');
+if (!MODE_PHPIZE) {
+	ARG_ENABLE('snapshot-build', 'Build a snapshot; turns on everything it can and ignores build errors', 'no');
 
+	// one-shot build optimizes build by asking compiler to build
+	// several objects at once, reducing overhead of starting new
+	// compiler processes.
+	ARG_ENABLE('one-shot', 'Optimize for fast build - best for release and snapshot builders, not so hot for edit-and-rebuild hacking', 'no');
+}
 
diff --git a/win32/build/mkdist.php b/win32/build/mkdist.php
index 7e3eeee..edb081a 100644
--- a/win32/build/mkdist.php
+++ b/win32/build/mkdist.php
@@ -1,4 +1,4 @@
-<?php # $Id: mkdist.php 289905 2009-10-24 19:52:23Z pajoye $
+<?php # $Id: mkdist.php 306376 2010-12-15 02:01:21Z pajoye $
 /* piece together a windows binary distro */
 
 $build_dir = $argv[1];
@@ -56,6 +56,9 @@ function get_depends($module)
 		/* sybase */
 		'libcs.dll', 'libct.dll',
 
+		/* firebird */
+		'fbclient.dll',
+
 		/* visual C++; mscvrt.dll is present on everyones system,
 		 * but the debug version (msvcrtd.dll) and those from visual studio.net
 		 * (msvcrt7x.dll) are not */
diff --git a/win32/build/phpize.bat b/win32/build/phpize.bat
new file mode 100644
index 0000000..c8840d3
--- /dev/null
+++ b/win32/build/phpize.bat
@@ -0,0 +1,6 @@
+ at echo off
+SET PHP_BUILDCONF_PATH=%~dp0
+cscript /nologo %PHP_BUILDCONF_PATH%\script\phpize.js %*
+copy %PHP_BUILDCONF_PATH%\win32\build\configure.bat %PHP_BUILDCONF_PATH% > nul
+IF NOT EXIST %PHP_BUILDCONF_PATH% (echo Error generating configure script, configure script was not copied) ELSE (echo Now run 'configure --help')
+SET PHP_BUILDCONF_PATH=
diff --git a/win32/build/phpize.js.in b/win32/build/phpize.js.in
new file mode 100644
index 0000000..4813ec0
--- /dev/null
+++ b/win32/build/phpize.js.in
@@ -0,0 +1,260 @@
+/*
+  +----------------------------------------------------------------------+
+  | PHP Version 5                                                        |
+  +----------------------------------------------------------------------+
+  | Copyright (c) 1997-2008 The PHP Group                                |
+  +----------------------------------------------------------------------+
+  | This source file is subject to version 3.01 of the PHP license,      |
+  | that is bundled with this package in the file LICENSE, and is        |
+  | available through the world-wide-web at the following url:           |
+  | http://www.php.net/license/3_01.txt                                  |
+  | If you did not receive a copy of the PHP license and are unable to   |
+  | obtain it through the world-wide-web, please send a note to          |
+  | license at php.net so we can mail you a copy immediately.               |
+  +----------------------------------------------------------------------+
+  | Author: Pierre Joye <pierre1 at php.net>                                |
+  +----------------------------------------------------------------------+
+*/
+
+/* $Id$ */
+// This generates a configure script for win32 build
+
+var STDOUT = WScript.StdOut;
+
+var FSO = WScript.CreateObject("Scripting.FileSystemObject");
+var C = FSO.CreateTextFile("configure.js", true);
+var B = FSO.CreateTextFile("configure.bat", true);
+var DSP = false;
+re = /\\script/i;
+var PHP_DIR=FSO.GetParentFolderName(WScript.ScriptFullName).replace(re,"");
+
+var modules = "";
+var MODULES = WScript.CreateObject("Scripting.Dictionary");
+var module_dirs = new Array();
+
+function ERROR(msg)
+{
+	STDERR.WriteLine("ERROR: " + msg);
+	WScript.Quit(3);
+}
+
+function file_get_contents(filename)
+{
+	var F = FSO.OpenTextFile(filename, 1);
+	var t = F.ReadAll();
+	F.Close();
+	return t;
+}
+
+function Module_Item(module_name, config_path, dir_line, deps, content)
+{
+	this.module_name = module_name;
+	this.config_path = config_path;
+	this.dir_line = dir_line;
+	this.deps = deps;
+	this.content = content;
+}
+
+function get_module_dep(contents)
+{
+	var re_dep_line = new RegExp("ADD_EXTENSION_DEP\\([^,]*\\s*,\\s*['\"]([^'\"]+)['\"].*\\)", "gm");
+	var calls = contents.match(re_dep_line);
+	var deps = new Array();
+	if (calls != null) {
+		for (i = 0; i < calls.length; i++) {
+			// now we need the extension name out of this thing
+			if (calls[i].match(re_dep_line)) {
+				deps[deps.length] = RegExp.$1;
+
+			}
+		}
+	}
+	return deps;
+}
+
+function find_config_w32(dirname)
+{
+	if (!FSO.FolderExists(dirname)) {
+		return;
+	}
+
+	var f = FSO.GetFolder(dirname);
+	var	fc = new Enumerator(f.SubFolders);
+	var c, i, ok, n;
+	var item = null;
+
+	c = dirname + "\\config.w32";
+	if (FSO.FileExists(c)) {
+		var dir_line = "configure_module_dirname = condense_path(FSO.GetParentFolderName('"
+								+ c.replace(new RegExp('(["\\\\])', "g"), '\\$1') + "'));\r\n";
+		var contents = file_get_contents(c);
+
+		deps = get_module_dep(contents);
+
+		item = new Module_Item(n, c, dir_line, deps, contents);
+		MODULES.Add(n, item);
+	}
+
+	for (; !fc.atEnd(); fc.moveNext()) {
+		/* check if we already picked up a module with the same dirname;
+		 * if we have, don't include it here */
+		n = FSO.GetFileName(fc.item());
+		if (n == '.svn' || n == 'tests' || n == '.git') {
+			continue;
+		}
+
+		c = FSO.BuildPath(fc.item(), "config.w32");
+		if (FSO.FileExists(c)) {
+			var dir_line = "configure_module_dirname = condense_path(FSO.GetParentFolderName('"
+							   	+ c.replace(new RegExp('(["\\\\])', "g"), '\\$1') + "'));\r\n";
+			var contents = file_get_contents(c);
+
+			deps = get_module_dep(contents);
+
+			item = new Module_Item(n, c, dir_line, deps, contents);
+			MODULES.Add(n, item);
+		}
+	}
+}
+
+function emit_module(item)
+{
+	return item.dir_line + item.content;
+}
+
+function emit_dep_modules(module_names)
+{
+	var i, mod_name, j;
+	var output = "";
+	var item = null;
+
+	for (i in module_names) {
+		mod_name = module_names[i];
+
+		if (MODULES.Exists(mod_name)) {
+			item = MODULES.Item(mod_name);
+			MODULES.Remove(mod_name);
+			if (item.deps.length) {
+				output += emit_dep_modules(item.deps);
+			}
+			output += emit_module(item);
+		}
+	}
+
+	return output;
+}
+
+function gen_modules()
+{
+	var module_names = (new VBArray(MODULES.Keys())).toArray();
+	var i, mod_name, j;
+	var item;
+	var output = "";
+
+	// first, look for modules with empty deps; emit those first
+	for (i in module_names) {
+		STDOUT.WriteLine("module ... " + module_names);
+		mod_name = module_names[i];
+		item = MODULES.Item(mod_name);
+		if (item.deps.length == 0) {
+			MODULES.Remove(mod_name);
+			output += emit_module(item);
+		}
+	}
+
+	// now we are left with modules that have dependencies on other modules
+	module_names = (new VBArray(MODULES.Keys())).toArray();
+	output += emit_dep_modules(module_names);
+
+	return output;
+}
+
+// Process buildconf arguments
+function buildconf_process_args()
+{
+	args = WScript.Arguments;
+
+	for (i = 0; i < args.length; i++) {
+		arg = args(i);
+		// If it is --foo=bar, split on the equals sign
+		arg = arg.split("=", 2);
+		argname = arg[0];
+		if (arg.length > 1) {
+			argval = arg[1];
+		} else {
+			argval = null;
+		}
+
+		if (argname == '--clean' && argval != null) {
+			STDOUT.WriteLine("Cleaning...");
+			return 0;
+		}
+
+		if (argname == '--help') {
+			STDOUT.WriteLine("Usage: phpize [--clean|--help|--version|-v]");
+			return 0;
+		}
+		return 1;
+	}
+}
+
+if (buildconf_process_args() == 0) {
+	WScript.Quit(3);
+}
+STDOUT.WriteLine("Rebuilding configure.js");
+STDOUT.WriteLine(PHP_DIR);
+
+// Write the head of the configure script
+C.WriteLine("/* This file automatically generated from script/confutils.js */");
+C.WriteLine("var MODE_PHPIZE = true;");
+C.WriteLine("var PHP_DIR = " + '"' + PHP_DIR.replace(new RegExp('(["\\\\])', "g"), '\\$1') + '"');
+
+C.Write(file_get_contents(PHP_DIR + "/script/confutils.js"));
+C.Write(file_get_contents(PHP_DIR + "/script/config.phpize.js"));
+
+// If project files were requested, pull in the code to generate them
+if (DSP == true) {
+	C.WriteLine('PHP_DSP="yes"');
+	C.WriteBlankLines(1);
+	C.Write(file_get_contents(PHP_DIR + "win32/build/projectgen.js"));
+} else {
+	C.WriteLine('PHP_DSP="no"');
+	C.WriteBlankLines(1);
+}
+
+// Pull in code for the base detection
+modules = file_get_contents(PHP_DIR + "/script/config.w32.phpize.in");
+
+C.WriteLine("ARG_ENABLE('debug', 'Compile with debugging symbols', \"no\");");
+find_config_w32(".");
+
+// Now generate contents of module based on MODULES, chasing dependencies
+// to ensure that dependent modules are emitted first
+modules += gen_modules();
+
+// Look for ARG_ENABLE or ARG_WITH calls
+re = new RegExp("(ARG_(ENABLE|WITH)\([^;]+\);)", "gm");
+calls = modules.match(re);
+for (i = 0; i < calls.length; i++) {
+	item = calls[i];
+	C.WriteLine("try {");
+	C.WriteLine(item);
+	C.WriteLine("} catch (e) {");
+	C.WriteLine('\tSTDOUT.WriteLine("problem: " + e);');
+	C.WriteLine("}");
+}
+
+C.WriteBlankLines(1);
+C.WriteLine("conf_process_args();");
+C.WriteBlankLines(1);
+
+// Comment out the calls from their original positions
+modules = modules.replace(re, "/* $1 */");
+C.Write(modules);
+
+
+C.WriteBlankLines(1);
+C.Write(file_get_contents(PHP_DIR + "\\script\\configure.tail"));
+
+B.WriteLine("@echo off");
+B.WriteLine("cscript /nologo configure.js %*");
diff --git a/win32/globals.c b/win32/globals.c
index 6f8389e..c4a4e89 100755
--- a/win32/globals.c
+++ b/win32/globals.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: globals.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: globals.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include "php_win32_globals.h"
diff --git a/win32/grp.h b/win32/grp.h
index fbf226f..d9dd102 100644
--- a/win32/grp.h
+++ b/win32/grp.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: grp.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: grp.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 struct group {
 	char *gr_name;			
diff --git a/win32/php_win32_globals.h b/win32/php_win32_globals.h
index d818aac..ff85954 100755
--- a/win32/php_win32_globals.h
+++ b/win32/php_win32_globals.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_win32_globals.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: php_win32_globals.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef PHP_WIN32_GLOBALS_H
 #define PHP_WIN32_GLOBALS_H
diff --git a/win32/readdir.c b/win32/readdir.c
index 52ebe2f..9525fc0 100644
--- a/win32/readdir.c
+++ b/win32/readdir.c
@@ -33,6 +33,9 @@ DIR *opendir(const char *dir)
 	}
 
 	filespec = (char *)malloc(strlen(resolved_path_buff) + 2 + 1);
+	if (filespec == NULL) {
+		return NULL;
+	}
 	strcpy(filespec, resolved_path_buff);
 	index = strlen(filespec) - 1;
 	if (index >= 0 && (filespec[index] == '/' || 
@@ -41,6 +44,9 @@ DIR *opendir(const char *dir)
 	strcat(filespec, "\\*");
 
 	dp = (DIR *) malloc(sizeof(DIR));
+	if (dp == NULL) {
+		return NULL;
+	}
 	dp->offset = 0;
 	dp->finished = 0;
 
@@ -140,6 +146,10 @@ int rewinddir(DIR *dp)
 	dp->finished = 0;
 
 	filespec = (char *)malloc(strlen(dp->dir) + 2 + 1);
+	if (filespec == NULL) {
+		return -1;
+	}
+
 	strcpy(filespec, dp->dir);
 	index = strlen(filespec) - 1;
 	if (index >= 0 && (filespec[index] == '/' || 
diff --git a/win32/registry.c b/win32/registry.c
index 77089ba..35b411f 100644
--- a/win32/registry.c
+++ b/win32/registry.c
@@ -95,14 +95,14 @@ static int LoadDirectory(HashTable *directories, HKEY key, char *path, int path_
 					char *index;
 					uint index_len;
 					ulong num;
-					zval **data;
+					zval **tmpdata;
 
 					for (zend_hash_internal_pointer_reset_ex(parent_ht, &pos);
-					     zend_hash_get_current_data_ex(parent_ht, (void**)&data, &pos) == SUCCESS &&
+					     zend_hash_get_current_data_ex(parent_ht, (void**)&tmpdata, &pos) == SUCCESS &&
 					     zend_hash_get_current_key_ex(parent_ht, &index, &index_len, &num, 0, &pos) == HASH_KEY_IS_STRING;
 					     zend_hash_move_forward_ex(parent_ht, &pos)) {
-						if (zend_hash_add(ht, index, index_len, data, sizeof(zval*), NULL) == SUCCESS) {
-						    Z_ADDREF_PP(data);
+						if (zend_hash_add(ht, index, index_len, tmpdata, sizeof(zval*), NULL) == SUCCESS) {
+						    Z_ADDREF_PP(tmpdata);
 						}
 					}
 				}
diff --git a/win32/select.c b/win32/select.c
index b163e3f..52dcaaf 100644
--- a/win32/select.c
+++ b/win32/select.c
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -21,7 +21,7 @@
 
 #ifdef PHP_WIN32
 
-/* $Id: select.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: select.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Win32 select() will only work with sockets, so we roll our own implementation here.
  * - If you supply only sockets, this simply passes through to winsock select().
diff --git a/win32/select.h b/win32/select.h
index 3f3de9e..dbecfdf 100644
--- a/win32/select.h
+++ b/win32/select.h
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2010 The PHP Group                                |
+  | Copyright (c) 1997-2011 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: select.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: select.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv);
 
diff --git a/win32/sockets.c b/win32/sockets.c
index 44764f7..e6129a2 100644
--- a/win32/sockets.c
+++ b/win32/sockets.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: sockets.c 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: sockets.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Code originally from ext/sockets */
 
diff --git a/win32/sockets.h b/win32/sockets.h
index 3d8bc34..d9ac0b1 100644
--- a/win32/sockets.h
+++ b/win32/sockets.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: sockets.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: sockets.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 /* Code originally from ext/sockets */
 
diff --git a/win32/syslog.h b/win32/syslog.h
index 331ca11..3aead2a 100644
--- a/win32/syslog.h
+++ b/win32/syslog.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: syslog.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id: syslog.h 306939 2011-01-01 02:19:59Z felipe $ */
 
 #ifndef SYSLOG_H
 #define	SYSLOG_H
diff --git a/win32/syslog.reg b/win32/syslog.reg
index 2baa88e..0de1dd7 100644
--- a/win32/syslog.reg
+++ b/win32/syslog.reg
@@ -1,5 +1,5 @@
 REGEDIT4
 
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\PHP-5.1.0-dev]
+[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\PHP-5.3.5-dev]
 "TypesSupported"=dword:00000007
-"EventMessageFile"="C:\\php5\\php5ts.dll"
+"EventMessageFile"="g:\\test\\php53install\\php5ts.dll"
diff --git a/win32/winutil.c b/win32/winutil.c
index bc20f78..4e8a682 100644
--- a/win32/winutil.c
+++ b/win32/winutil.c
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: winutil.c 305778 2010-11-26 18:25:13Z pajoye $ */
+/* $Id: winutil.c 306939 2011-01-01 02:19:59Z felipe $ */
 
 #include "php.h"
 #include <wincrypt.h>
diff --git a/win32/winutil.h b/win32/winutil.h
index 5f8efe0..ac1d15d 100644
--- a/win32/winutil.h
+++ b/win32/winutil.h
@@ -2,7 +2,7 @@
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
+   | Copyright (c) 1997-2011 The PHP Group                                |
    +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |
-- 
1.7.1





More information about the Pkg-php-commits mailing list