CentOS Sources
2018-05-03 3db796953ff11d9736e037af1713c669cee9ddf4
import devtoolset-7-gcc-7.3.1-5.4.el7
25 files added
1 files deleted
5 files modified
5831 ■■■■■ changed files
.devtoolset-7-gcc.metadata 4 ●●●● patch | view | raw | blame | history
.gitignore 4 ●●●● patch | view | raw | blame | history
SOURCES/0000-infrastructure.patch 125 ●●●●● patch | view | raw | blame | history
SOURCES/0001-Allow-repeated-compatible-type-specifications.patch 81 ●●●●● patch | view | raw | blame | history
SOURCES/0002-Pad-character-to-int-conversions-with-spaces-instead.patch 109 ●●●●● patch | view | raw | blame | history
SOURCES/0003-Add-std-extra-legacy.patch 54 ●●●●● patch | view | raw | blame | history
SOURCES/0004-Allow-conversion-between-Hollerith-constants-and-CHA.patch 318 ●●●●● patch | view | raw | blame | history
SOURCES/0005-Allow-comparisons-between-INTEGER-and-REAL.patch 48 ●●●●● patch | view | raw | blame | history
SOURCES/0006-Allow-blank-format-items-in-format-strings.patch 34 ●●●●● patch | view | raw | blame | history
SOURCES/0007-Allow-more-than-one-character-as-argument-to-ICHAR.patch 45 ●●●●● patch | view | raw | blame | history
SOURCES/0008-Allow-non-integer-substring-indexes.patch 50 ●●●●● patch | view | raw | blame | history
SOURCES/0009-Convert-LOGICAL-to-INTEGER-for-arithmetic-ops-and-vi.patch 68 ●●●●● patch | view | raw | blame | history
SOURCES/0010-Allow-mixed-string-length-and-array-specification-in.patch 134 ●●●●● patch | view | raw | blame | history
SOURCES/0011-Allow-character-to-int-conversions-in-DATA-statement.patch 25 ●●●●● patch | view | raw | blame | history
SOURCES/0012-Allow-old-style-initializers-in-derived-types.patch 56 ●●●●● patch | view | raw | blame | history
SOURCES/0013-Allow-per-variable-kind-specification.patch 95 ●●●●● patch | view | raw | blame | history
SOURCES/0014-Allow-non-logical-expressions-in-IF-statements.patch 68 ●●●●● patch | view | raw | blame | history
SOURCES/0016-Allow-calls-to-intrinsics-with-smaller-types-than-sp.patch 281 ●●●●● patch | view | raw | blame | history
SOURCES/0017-Add-the-SEQUENCE-attribute-by-default-if-it-s-not-pr.patch 35 ●●●●● patch | view | raw | blame | history
SOURCES/0018-Fill-in-missing-array-dimensions-using-the-lower-bou.patch 62 ●●●●● patch | view | raw | blame | history
SOURCES/0019-Add-tests-for-AUTOMATIC-keyword.patch 100 ●●●●● patch | view | raw | blame | history
SOURCES/0020-Add-test-for-STRUCTURE-and-RECORD.patch 48 ●●●●● patch | view | raw | blame | history
SOURCES/0022-Default-values-for-certain-field-descriptors-in-form.patch 516 ●●●●● patch | view | raw | blame | history
SOURCES/gcc7-libstdc++-compat.patch 141 ●●●● patch | view | raw | blame | history
SOURCES/gcc7-libstdc++-docs.patch 4 ●●●● patch | view | raw | blame | history
SOURCES/gcc7-ppc32-retaddr.patch 87 ●●●●● patch | view | raw | blame | history
SOURCES/gcc7-pr84128.patch 180 ●●●●● patch | view | raw | blame | history
SOURCES/gcc7-pr84524.patch 96 ●●●●● patch | view | raw | blame | history
SOURCES/gcc7-rh1512529-aarch64.patch 2477 ●●●●● patch | view | raw | blame | history
SOURCES/gcc7-s390x-libsanitizer.patch 14 ●●●●● patch | view | raw | blame | history
SPECS/gcc.spec 472 ●●●●● patch | view | raw | blame | history
.devtoolset-7-gcc.metadata
@@ -1,4 +1,4 @@
7f4348418dc3efefd357b32a2b5c8010211ab284 SOURCES/doxygen-1.8.0.src.tar.gz
df3ff377895cf96b3439e107e62142bcbed8d046 SOURCES/gcc-7.2.1-20170829.tar.bz2
06409adda1095640ceec7106579fc29be9a57853 SOURCES/isl-0.16.1.tar.xz
705a283296ce907b302946d12cae9a47d92c83ea SOURCES/gcc-7.3.1-20180303.tar.bz2
c5a2b201bf05229647e73203c0bf2d9679d4d21f SOURCES/isl-0.16.1.tar.bz2
5ef03ca7aee134fe7dfecb6c9d048799f0810278 SOURCES/mpc-0.8.1.tar.gz
.gitignore
@@ -1,4 +1,4 @@
SOURCES/doxygen-1.8.0.src.tar.gz
SOURCES/gcc-7.2.1-20170829.tar.bz2
SOURCES/isl-0.16.1.tar.xz
SOURCES/gcc-7.3.1-20180303.tar.bz2
SOURCES/isl-0.16.1.tar.bz2
SOURCES/mpc-0.8.1.tar.gz
SOURCES/0000-infrastructure.patch
New file
@@ -0,0 +1,125 @@
commit 366dbfaa2132186e5e8b0688df05662967e628c7
Author: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Wed Mar 28 11:59:06 2018 +0000
            * gfortran.h (gfc_dt): Rename default_exp field to dec_ext.
            * ioparm.def (IOPARM_dt_default_exp): Rename to ...
            (IOPARM_dt_dec_ext): ... this.
            * trans-io.c (build_dt): Adjust for default_exp renaming to
            dec_ext and IOPARM_dt_default_exp renaming to IOPARM_dt_dec_ext.
            * io.c (match_io): Likewise.
            * io/io.h (IOPARM_DT_DEFAULT_EXP): Rename to ...
            (IOPARM_DT_DEC_EXT): ... this.
            * io/list_read.c (parse_real): Adjust for IOPARM_DT_DEFAULT_EXP
            renaming to IOPARM_DT_DEC_EXT.
            (read_real): Likewise.
            * io/read.c (read_f): Likewise.
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258920 138bc75d-0d04-0410-961f-82ee72b054a4
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 2bfd1e3019d..507570ccbff 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -2437,7 +2437,7 @@ typedef struct
   gfc_expr *io_unit, *format_expr, *rec, *advance, *iostat, *size, *iomsg,
        *id, *pos, *asynchronous, *blank, *decimal, *delim, *pad, *round,
        *sign, *extra_comma, *dt_io_kind, *udtio;
-  char default_exp;
+  char dec_ext;
   gfc_symbol *namelist;
   /* A format_label of `format_asterisk' indicates the "*" format */
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index 10b7e827dab..0aa31bb6a4f 100644
--- a/gcc/fortran/io.c
+++ b/gcc/fortran/io.c
@@ -4291,9 +4291,10 @@ get_io_list:
     goto syntax;
     }
-  /* See if we want to use defaults for missing exponents in real transfers.  */
+  /* See if we want to use defaults for missing exponents in real transfers
+     and other DEC runtime extensions.  */
   if (flag_dec)
-    dt->default_exp = 1;
+    dt->dec_ext = 1;
   /* A full IO statement has been matched.  Check the constraints.  spec_end is
      supplied for cases where no locus is supplied.  */
diff --git a/gcc/fortran/ioparm.def b/gcc/fortran/ioparm.def
index b9dc58f26a7..9ab3b58946e 100644
--- a/gcc/fortran/ioparm.def
+++ b/gcc/fortran/ioparm.def
@@ -118,5 +118,5 @@ IOPARM (dt,      round,        1 << 23, char2)
 IOPARM (dt,      sign,        1 << 24, char1)
 #define IOPARM_dt_f2003              (1 << 25)
 #define IOPARM_dt_dtio              (1 << 26)
-#define IOPARM_dt_default_exp          (1 << 27)
+#define IOPARM_dt_dec_ext          (1 << 27)
 IOPARM (dt,      u,        0,     pad)
diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c
index 9058712c695..2626c4651e2 100644
--- a/gcc/fortran/trans-io.c
+++ b/gcc/fortran/trans-io.c
@@ -1958,8 +1958,8 @@ build_dt (tree function, gfc_code * code)
       if (dt->udtio)
     mask |= IOPARM_dt_dtio;
-      if (dt->default_exp)
-    mask |= IOPARM_dt_default_exp;
+      if (dt->dec_ext)
+    mask |= IOPARM_dt_dec_ext;
       if (dt->namelist)
     {
diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h
index 3c2a2cae38a..ccbaf47ff90 100644
--- a/libgfortran/io/io.h
+++ b/libgfortran/io/io.h
@@ -442,7 +442,7 @@ st_parameter_inquire;
 #define IOPARM_DT_HAS_SIGN            (1 << 24)
 #define IOPARM_DT_HAS_F2003                     (1 << 25)
 #define IOPARM_DT_HAS_UDTIO                     (1 << 26)
-#define IOPARM_DT_DEFAULT_EXP            (1 << 27)
+#define IOPARM_DT_DEC_EXT            (1 << 27)
 /* Internal use bit.  */
 #define IOPARM_DT_IONML_SET            (1u << 31)
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index d052d1fa828..300c3bd23f3 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -1380,7 +1380,7 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
   if (!isdigit (c))
     {
       /* Extension: allow default exponent of 0 when omitted.  */
-      if (dtp->common.flags & IOPARM_DT_DEFAULT_EXP)
+      if (dtp->common.flags & IOPARM_DT_DEC_EXT)
     {
       push_char (dtp, '0');
       goto done;
@@ -1831,7 +1831,7 @@ read_real (st_parameter_dt *dtp, void *dest, int length)
   if (!isdigit (c))
     {
       /* Extension: allow default exponent of 0 when omitted.  */
-      if (dtp->common.flags & IOPARM_DT_DEFAULT_EXP)
+      if (dtp->common.flags & IOPARM_DT_DEC_EXT)
     {
       push_char (dtp, '0');
       goto done;
diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c
index 87adfb8a41d..976020af448 100644
--- a/libgfortran/io/read.c
+++ b/libgfortran/io/read.c
@@ -1093,7 +1093,7 @@ exponent:
   if (w == 0)
     {
       /* Extension: allow default exponent of 0 when omitted.  */
-      if (dtp->common.flags & IOPARM_DT_DEFAULT_EXP)
+      if (dtp->common.flags & IOPARM_DT_DEC_EXT)
     goto done;
       else
     goto bad_float;
SOURCES/0001-Allow-repeated-compatible-type-specifications.patch
New file
@@ -0,0 +1,81 @@
From f96f2f273741ea19311c6e7a6f556c09b6ff9415 Mon Sep 17 00:00:00 2001
From: Mark Doffman <mark.doffman@codethink.co.uk>
Date: Tue, 23 Jun 2015 22:59:08 +0000
Subject: [PATCH 01/23] Allow repeated compatible type specifications.
Add a check to see if a repeated type specification is compatible
with the previous specification. Only create an error on incompatible
type specifications for the same symbol.
Some fixes by Jim MacArthur <jim.macarthur@codethink.co.uk>
---
    0001-Allow-repeated-compatible-type-specifications.patch
    0015-Allow-redefinition-of-types-for-procedures.patch
    0021-Correct-internal-fault-in-select_type_9.f90.patch
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index ec43e63..67ad504 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -1877,6 +1877,8 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
   if (sym->attr.result && type == BT_UNKNOWN && sym->ns->proc_name)
     type = sym->ns->proc_name->ts.type;
+  flavor = sym->attr.flavor;
+
   if (type != BT_UNKNOWN && !(sym->attr.function && sym->attr.implicit_type)
       && !(gfc_state_stack->previous && gfc_state_stack->previous->previous
        && gfc_state_stack->previous->previous->state == COMP_SUBMODULE)
@@ -1886,6 +1888,20 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
     gfc_error ("Symbol %qs at %L conflicts with symbol from module %qs, "
            "use-associated at %L", sym->name, where, sym->module,
            &sym->declared_at);
+      else if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+    {
+      /* Ignore temporaries and class/procedure names */
+          if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS || sym->ts.type == BT_PROCEDURE)
+        return false;
+
+      if (gfc_compare_types (&sym->ts, ts)
+          && (flavor == FL_UNKNOWN || flavor == FL_VARIABLE || flavor == FL_PROCEDURE))
+        {
+          return gfc_notify_std (GFC_STD_LEGACY,
+                     "Symbol '%qs' at %L already has basic type of %s", sym->name,
+                     where, gfc_basic_typename (type));
+        }
+    }
       else
     gfc_error ("Symbol %qs at %L already has basic type of %s", sym->name,
          where, gfc_basic_typename (type));
@@ -1899,8 +1915,6 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
       return false;
     }
-  flavor = sym->attr.flavor;
-
   if (flavor == FL_PROGRAM || flavor == FL_BLOCK_DATA || flavor == FL_MODULE
       || flavor == FL_LABEL
       || (flavor == FL_PROCEDURE && sym->attr.subroutine)
diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_4.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_4.f90
new file mode 100644
index 0000000..cdd29ea
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/duplicate_type_4.f90
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! { dg-options "-std=f95" }
+
+! PR fortran/30239
+! Check for errors when a symbol gets declared a type twice, even if it
+! is the same.
+
+INTEGER FUNCTION foo ()
+  IMPLICIT NONE
+  INTEGER :: x
+  INTEGER :: x ! { dg-error "basic type of" }
+  x = 42
+END FUNCTION foo
SOURCES/0002-Pad-character-to-int-conversions-with-spaces-instead.patch
New file
@@ -0,0 +1,109 @@
From 40d6590b03a9f92c19b7097b1cae296276d6ce22 Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Mon, 28 Sep 2015 16:06:30 +0100
Subject: [PATCH 02/23] Pad character-to-int conversions with spaces instead of
 zeros.
The pad character is 'undefined' or 'processor dependent' depending on which
standard you read. This makes it 0x20 which matches the Oracle Fortran
compiler. One of the tests tests this undefined behaviour, so I had to modify
it.
    0002-Pad-character-to-int-conversions-with-spaces-instead.patch
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 4808c27..93908f8 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -428,6 +428,10 @@ fdec
 Fortran Var(flag_dec)
 Enable all DEC language extensions.
+fdec-pad-with-spaces
+Fortran Var(flag_dec_pad_with_spaces)
+For character to integer conversions, use spaces for the pad rather than NUL.
+
 fdec-intrinsic-ints
 Fortran Var(flag_dec_intrinsic_ints)
 Enable kind-specific variants of integer intrinsic functions.
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index d12ae5f..09da1d2 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -6623,7 +6623,7 @@ gfc_simplify_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
   /* Allocate the buffer to store the binary version of the source.  */
   buffer_size = MAX (source_size, result_size);
   buffer = (unsigned char*)alloca (buffer_size);
-  memset (buffer, 0, buffer_size);
+  memset (buffer, (flag_dec_pad_with_spaces ? 0x20 : 0x0), buffer_size);
   /* Now write source to the buffer.  */
   gfc_target_encode_expr (source, buffer, buffer_size);
diff --git a/gcc/testsuite/gfortran.dg/c_ptr_tests_19.f90 b/gcc/testsuite/gfortran.dg/c_ptr_tests_19.f90
new file mode 100644
index 0000000..a50cd68
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/c_ptr_tests_19.f90
@@ -0,0 +1,62 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-optimized -O -fdec-pad-with-spaces" }
+!
+! PR fortran/46974
+
+program test
+  use ISO_C_BINDING
+  implicit none
+  type(c_ptr) :: m
+  integer(c_intptr_t) :: a
+  integer(transfer(transfer(4_c_intptr_t, c_null_ptr),1_c_intptr_t)) :: b
+  a = transfer (transfer("ABCE", m), 1_c_intptr_t)
+  print '(z8)', a
+  if (     int(z'45434241') /= a  &
+     .and. int(z'41424345') /= a  &
+     .and. int(z'4142434520202020',kind=8) /= a &
+     .and. int(z'2020202045434241',kind=8) /= a ) &
+    call i_do_not_exist()
+end program test
+
+! Examples contributed by Steve Kargl and James Van Buskirk
+
+subroutine bug1
+   use ISO_C_BINDING
+   implicit none
+   type(c_ptr) :: m
+   type mytype
+     integer a, b, c
+   end type mytype
+   type(mytype) x
+   print *, transfer(32512, x)  ! Works.
+   print *, transfer(32512, m)  ! Caused ICE.
+end subroutine bug1
+
+subroutine bug6
+   use ISO_C_BINDING
+   implicit none
+   interface
+      function fun()
+         use ISO_C_BINDING
+         implicit none
+         type(C_FUNPTR) fun
+      end function fun
+   end interface
+   type(C_PTR) array(2)
+   type(C_FUNPTR) result
+   integer(C_INTPTR_T), parameter :: const(*) = [32512,32520]
+
+   result = fun()
+   array = transfer([integer(C_INTPTR_T)::32512,32520],array)
+!   write(*,*) transfer(result,const)
+!   write(*,*) transfer(array,const)
+end subroutine bug6
+
+function fun()
+   use ISO_C_BINDING
+   implicit none
+   type(C_FUNPTR) fun
+   fun = transfer(32512_C_INTPTR_T,fun)
+end function fun
+
+! { dg-final { scan-tree-dump-times "i_do_not_exist" 0 "optimized" } }
SOURCES/0003-Add-std-extra-legacy.patch
New file
@@ -0,0 +1,54 @@
From d1bb76287ec58fdde7ced70088559136555bd7bd Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Fri, 11 Dec 2015 17:04:09 +0000
Subject: [PATCH 03/23] Add -std=extra-legacy
        0003-Add-std-extra-legacy.patch
        0023-Add-a-full-stop-to-the-std-extra-legacy-help-text.patch
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 4421ce4..4808c27 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -790,6 +790,10 @@ std=legacy
 Fortran
 Accept extensions to support legacy code.
+std=extra-legacy
+Fortran
+Accept even more legacy extensions, including things disallowed in f90.
+
 undef
 Fortran
 ; Documented in C
diff --git a/gcc/fortran/libgfortran.h b/gcc/fortran/libgfortran.h
index c5ff992..dcc923b 100644
--- a/gcc/fortran/libgfortran.h
+++ b/gcc/fortran/libgfortran.h
@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3.  If not see
    gfortran.texi.  */
 /* For now, use F2015 = GFC_STD_GNU.  */
 #define GFC_STD_F2015            (1<<5)    /* PLACEHOLDER for Fortran 2015.  */
+#define GFC_STD_EXTRA_LEGACY    (1<<10)    /* Even more backward compatibility.  */
 #define GFC_STD_F2008_TS    (1<<9)    /* POST-F2008 technical reports.  */
 #define GFC_STD_F2008_OBS    (1<<8)    /* Obsolescent in F2008.  */
 #define GFC_STD_F2008        (1<<7)    /* New in F2008.  */
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index 1af76aa..9ebf8e3 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -733,6 +733,12 @@ gfc_handle_option (size_t scode, const char *arg, int value,
       gfc_option.warn_std = 0;
       break;
+    case OPT_std_extra_legacy:
+      set_default_std_flags ();
+      gfc_option.warn_std = 0;
+      gfc_option.allow_std |= GFC_STD_EXTRA_LEGACY;
+      break;
+
     case OPT_fshort_enums:
       /* Handled in language-independent code.  */
       break;
SOURCES/0004-Allow-conversion-between-Hollerith-constants-and-CHA.patch
New file
@@ -0,0 +1,318 @@
From 7420e95a0ebb2401d67ad405670fb6a8d33f02da Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Thu, 4 Feb 2016 17:18:30 +0000
Subject: [PATCH 04/23] Allow conversion between Hollerith constants and
 CHARACTER and INTEGER
Warnings are raised when this happens.
This feature is enabled with the `-std=extra-legacy` compiler flag.
        0004-Allow-conversion-between-Hollerith-constants-and-CHA.patch
diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c
index 8fa305c..fc1be48 100644
--- a/gcc/fortran/arith.c
+++ b/gcc/fortran/arith.c
@@ -2514,7 +2514,7 @@ gfc_int2log (gfc_expr *src, int kind)
 }
-/* Helper function to set the representation in a Hollerith conversion.
+/* Helper function to set the representation in a Hollerith conversion.
    This assumes that the ts.type and ts.kind of the result have already
    been set.  */
@@ -2545,6 +2545,34 @@ hollerith2representation (gfc_expr *result, gfc_expr *src)
 }
+/* Helper function to set the representation in a character conversion.
+   This assumes that the ts.type and ts.kind of the result have already
+   been set.  */
+
+static void
+character2representation (gfc_expr *result, gfc_expr *src)
+{
+  int src_len, result_len;
+  int i;
+  src_len = src->value.character.length;
+  result_len = gfc_target_expr_size (result);
+
+  if (src_len > result_len)
+    gfc_warning (0, "The character constant at %L is too long to convert to %s",
+         &src->where, gfc_typename(&result->ts));
+
+  result->representation.string = XCNEWVEC (char, result_len + 1);
+
+  for (i = 0; i < MIN (result_len, src_len); i++)
+    result->representation.string[i] = (char) src->value.character.string[i];
+
+  if (src_len < result_len)
+    memset (&result->representation.string[src_len], ' ', result_len - src_len);
+
+  result->representation.string[result_len] = '\0'; /* For debugger  */
+  result->representation.length = result_len;
+}
+
 /* Convert Hollerith to integer. The constant will be padded or truncated.  */
 gfc_expr *
@@ -2560,6 +2588,19 @@ gfc_hollerith2int (gfc_expr *src, int kind)
   return result;
 }
+/* Convert character to integer. The constant will be padded or truncated. */
+
+gfc_expr *
+gfc_character2int (gfc_expr *src, int kind)
+{
+  gfc_expr *result;
+  result = gfc_get_constant_expr (BT_INTEGER, kind, &src->where);
+
+  character2representation (result, src);
+  gfc_interpret_integer (kind, (unsigned char *) result->representation.string,
+             result->representation.length, result->value.integer);
+  return result;
+}
 /* Convert Hollerith to real. The constant will be padded or truncated.  */
diff --git a/gcc/fortran/arith.h b/gcc/fortran/arith.h
index 9c623a4..3cd663b 100644
--- a/gcc/fortran/arith.h
+++ b/gcc/fortran/arith.h
@@ -82,6 +82,7 @@ gfc_expr *gfc_hollerith2real (gfc_expr *, int);
 gfc_expr *gfc_hollerith2complex (gfc_expr *, int);
 gfc_expr *gfc_hollerith2character (gfc_expr *, int);
 gfc_expr *gfc_hollerith2logical (gfc_expr *, int);
+gfc_expr *gfc_character2int (gfc_expr *, int);
 #endif /* GFC_ARITH_H  */
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 6e62d40..4f2d216 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -2544,9 +2544,14 @@ gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
 }
+/* This is the check function for the argument to the INT intrinsic */
 bool
 gfc_check_int (gfc_expr *x, gfc_expr *kind)
 {
+  if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && x->ts.type == BT_CHARACTER)
+    return true;
+
   if (!numeric_check (x, 0))
     return false;
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
index 2f60fe8..371f5b8 100644
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -3928,6 +3928,17 @@ add_conversions (void)
       add_conv (BT_LOGICAL, gfc_logical_kinds[j].kind,
             BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_LEGACY);
     }
+
+  /* Oracle allows character values to be converted to integers,
+     similar to Hollerith-Integer conversion - the first characters will
+     be turned into ascii values. */
+  if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+    {
+      /* Character-Integer conversions.  */
+      for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
+    add_conv (BT_CHARACTER, gfc_default_character_kind,
+          BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_LEGACY);
+    }
 }
@@ -5008,6 +5019,15 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag)
                  gfc_typename (&from_ts), gfc_typename (ts),
                  &expr->where);
     }
+      else if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+           && from_ts.type == BT_CHARACTER
+           && ts->type == BT_INTEGER)
+    {
+      if (warn_conversion_extra || warn_conversion)
+        gfc_warning_now (0, "Conversion from %s to %s at %L",
+                 gfc_typename (&from_ts), gfc_typename (ts),
+                 &expr->where);
+    }
       else
         gcc_unreachable ();
     }
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 4bb88b4..84a4827 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -3615,6 +3615,30 @@ logical_to_bitwise (gfc_expr *e)
   return e;
 }
+/* Return true if TYPE is character based, false otherwise.  */
+
+static int
+is_character_based (bt type)
+{
+  return type == BT_CHARACTER || type == BT_HOLLERITH;
+}
+
+/* If E is a logical, convert it to an integer and issue a warning
+   for the conversion.  */
+
+static void
+convert_logical_to_integer (gfc_expr *e)
+{
+  if (e->ts.type == BT_LOGICAL)
+    {
+      /* Convert to INTEGER */
+      gfc_typespec t;
+      t.type = BT_INTEGER;
+      t.kind = 1;
+      gfc_convert_type_warn (e, &t, 2, 1);
+    }
+}
+
 /* Resolve an operator expression node.  This can involve replacing the
    operation with a user defined function call.  */
@@ -3781,6 +3805,38 @@ resolve_operator (gfc_expr *e)
     case INTRINSIC_EQ_OS:
     case INTRINSIC_NE:
     case INTRINSIC_NE_OS:
+
+      if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+    {
+      convert_logical_to_integer (op1);
+      convert_logical_to_integer (op2);
+    }
+
+      /* If you're comparing hollerith contants to character expresisons,
+     convert the hollerith constant */
+      if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && is_character_based (op1->ts.type)
+      && is_character_based (op2->ts.type))
+    {
+      gfc_typespec ts;
+      ts.type = BT_CHARACTER;
+      ts.kind = op1->ts.kind;
+      if (op1->ts.type == BT_HOLLERITH)
+      {
+        gfc_convert_type_warn (op1, &ts, 2, 1);
+        gfc_warning (0, "Promoting argument for comparison from HOLLERITH "
+                     "to CHARACTER at %L", &op1->where);
+      }
+      ts.type = BT_CHARACTER;
+      ts.kind = op2->ts.kind;
+      if (op2->ts.type == BT_HOLLERITH)
+      {
+        gfc_convert_type_warn (op2, &ts, 2, 1);
+        gfc_warning (0, "Promoting argument for comparison from HOLLERITH "
+                         "to CHARACTER at %L", &op2->where);
+      }
+    }
+
       if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
       && op1->ts.kind == op2->ts.kind)
     {
@@ -3789,6 +3845,29 @@ resolve_operator (gfc_expr *e)
       break;
     }
+      /* Numeric to hollerith comparisons */
+      if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && gfc_numeric_ts (&op1->ts)
+      && (op2->ts.type == BT_HOLLERITH || op2->ts.type == BT_CHARACTER))
+    {
+      gfc_warning (0, "Promoting argument for comparison from character type to INTEGER at %L", &op2->where);
+      gfc_typespec ts;
+      ts.type = BT_INTEGER;
+      ts.kind = 4;
+      gfc_convert_type_warn (op2, &ts, 2, 1);
+    }
+
+      if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && gfc_numeric_ts (&op2->ts)
+      && (op1->ts.type == BT_HOLLERITH || op1->ts.type == BT_CHARACTER))
+    {
+      gfc_warning (0, "Promoting argument for comparison from character type to INTEGER at %L", &op1->where);
+      gfc_typespec ts;
+      ts.type = BT_INTEGER;
+      ts.kind = 4;
+      gfc_convert_type_warn (op1, &ts, 2, 1);
+    }
+
       if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
     {
       gfc_type_convert_binary (e, 1);
@@ -3985,7 +4064,6 @@ bad_op:
   return false;
 }
-
 /************** Array resolution subroutines **************/
 enum compare_result
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 09da1d2..80c9637 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -7144,6 +7144,14 @@ gfc_convert_constant (gfc_expr *e, bt type, int kind)
     }
       break;
+   case BT_CHARACTER:
+      if (type == BT_INTEGER)
+    {
+      f = gfc_character2int;
+      break;
+    }
+      goto oops;
+
     default:
     oops:
       gfc_internal_error ("gfc_convert_constant(): Unexpected type");
diff --git a/gcc/testsuite/gfortran.dg/hollerith-character-comparison.f90 b/gcc/testsuite/gfortran.dg/hollerith-character-comparison.f90
new file mode 100644
index 0000000..9c462b9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/hollerith-character-comparison.f90
@@ -0,0 +1,15 @@
+       ! { dg-options "-std=extra-legacy" }
+
+      program convert
+      REAL*4 a
+      INTEGER*4 b
+      b = 1000
+      print *, 4HJMAC.eq.4HJMAC ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
+      print *, 4HJMAC.eq."JMAC" ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
+      print *, 4HJMAC.eq."JMAN" ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
+      print *, "JMAC".eq.4HJMAN !  { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
+      print *, "AAAA".eq.5HAAAAA ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
+      print *, "BBBBB".eq.5HBBBB ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
+
+      end program
+
diff --git a/gcc/testsuite/gfortran.dg/hollerith-int-comparison.f90 b/gcc/testsuite/gfortran.dg/hollerith-int-comparison.f90
new file mode 100644
index 0000000..f44c1f8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/hollerith-int-comparison.f90
@@ -0,0 +1,11 @@
+       ! { dg-options "-std=extra-legacy" }
+
+      program convert
+      INTEGER*4 b
+      b = 5HRIVET ! { dg-warning "Legacy Extension: Hollerith constant|Conversion from HOLLERITH to INTEGER|too long to convert" }
+      print *, 4HJMAC.eq.400 ! { dg-warning "Legacy Extension: Hollerith constant|Promoting argument for comparison from character|Conversion from HOLLERITH to INTEGER" }
+      print *, 4HRIVE.eq.1163282770 ! { dg-warning "Legacy Extension: Hollerith constant|Promoting argument for comparison from character|Conversion from HOLLERITH to INTEGER" }
+      print *, b
+      print *, 1163282770.eq.4HRIVE ! { dg-warning "Legacy Extension: Hollerith constant|Promoting argument for comparison from character|Conversion from HOLLERITH to INTEGER" }
+      end program
+
SOURCES/0005-Allow-comparisons-between-INTEGER-and-REAL.patch
New file
@@ -0,0 +1,48 @@
From ab5aa6f7c04e7193c5387bc74db2605c4dc07f01 Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Thu, 4 Feb 2016 16:46:46 +0000
Subject: [PATCH 05/23] Allow comparisons between INTEGER and REAL
This feature is enabled with the `-std=extra-legacy` compiler flag.
---
        0005-Allow-comparisons-between-INTEGER-and-REAL.patch
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 4f2d216..fd0d280 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -901,6 +901,24 @@ gfc_check_allocated (gfc_expr *array)
 }
+/* Attempt to promote types of A and B so that they are
+   equivalent, if possible.  */
+void
+promote_types (gfc_expr *a, gfc_expr *b)
+{
+  if (a->ts.type == b->ts.type)
+    return;
+  if (a->ts.type == BT_REAL && b->ts.type == BT_INTEGER)
+    {
+      gfc_convert_type_warn (b, &a->ts, 2, 1);
+      return;
+    }
+  if (a->ts.type == BT_INTEGER && b->ts.type == BT_REAL)
+    {
+      gfc_convert_type_warn (a, &b->ts, 2, 1);
+    }
+}
+
 /* Common check function where the first argument must be real or
    integer and the second argument must be the same as the first.  */
@@ -910,6 +928,9 @@ gfc_check_a_p (gfc_expr *a, gfc_expr *p)
   if (!int_or_real_check (a, 0))
     return false;
+  if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+    promote_types(a, p);
+
   if (a->ts.type != p->ts.type)
     {
       gfc_error ("%qs and %qs arguments of %qs intrinsic at %L must "
SOURCES/0006-Allow-blank-format-items-in-format-strings.patch
New file
@@ -0,0 +1,34 @@
From f50b0452c10d514860e08e1ea091b17aa97d6a90 Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Thu, 4 Feb 2016 16:59:41 +0000
Subject: [PATCH 06/23] Allow blank format items in format strings
This has to be written in a slightly verbose manner because GCC 7
defaults to building with -Werror=implicit-fallthrough which prevents
us from just falling through to the default: case.
This feature is enabled by the `-std=extra-legacy` compiler flag.
---
        0006-Allow-blank-format-items-in-format-strings.patch
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index b2fa741..aa3443f 100644
--- a/gcc/fortran/io.c
+++ b/gcc/fortran/io.c
@@ -752,6 +752,16 @@ format_item_1:
       error = unexpected_end;
       goto syntax;
+    case FMT_RPAREN:
+      /* Oracle allows a blank format item. */
+      if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+        goto finished;
+      else
+    {
+      error = unexpected_element;
+      goto syntax;
+    }
+
     default:
       error = unexpected_element;
       goto syntax;
SOURCES/0007-Allow-more-than-one-character-as-argument-to-ICHAR.patch
New file
@@ -0,0 +1,45 @@
From d75972937274489189a151a47da9b9aadfdefe8d Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Mon, 5 Oct 2015 13:45:15 +0100
Subject: [PATCH 07/23] Allow more than one character as argument to ICHAR
This feature is enabled by the `-std=extra-legacy` compiler flag.
---
        0007-Allow-more-than-one-character-as-argument-to-ICHAR.patch
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index fd0d280..b84022b 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -2493,7 +2493,7 @@ gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
   else
     return true;
-  if (i != 1)
+  if (i != 1 && !(gfc_option.allow_std & GFC_STD_EXTRA_LEGACY))
     {
       gfc_error ("Argument of %s at %L must be of length one",
          gfc_current_intrinsic, &c->where);
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index d64f2f3..fce03df 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -2774,7 +2774,7 @@ gfc_simplify_iachar (gfc_expr *e, gfc_expr *kind)
   if (e->expr_type != EXPR_CONSTANT)
     return NULL;
-  if (e->value.character.length != 1)
+  if (e->value.character.length != 1 && !(gfc_option.allow_std & GFC_STD_EXTRA_LEGACY))
     {
       gfc_error ("Argument of IACHAR at %L must be of length one", &e->where);
       return &gfc_bad_expr;
@@ -2972,7 +2972,7 @@ gfc_simplify_ichar (gfc_expr *e, gfc_expr *kind)
   if (e->expr_type != EXPR_CONSTANT)
     return NULL;
-  if (e->value.character.length != 1)
+  if (e->value.character.length != 1 && !(gfc_option.allow_std & GFC_STD_EXTRA_LEGACY))
     {
       gfc_error ("Argument of ICHAR at %L must be of length one", &e->where);
       return &gfc_bad_expr;
SOURCES/0008-Allow-non-integer-substring-indexes.patch
New file
@@ -0,0 +1,50 @@
From a6e02ad7b8b66823629a9703af4662b8b4037e2b Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Mon, 5 Oct 2015 14:05:03 +0100
Subject: [PATCH 08/23] Allow non-integer substring indexes
This feature is enabled by the `-std=extra-legacy` compiler flag.
---
    0008-Allow-non-integer-substring-indexes.patch
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 84a4827..667cc50 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -4680,6 +4680,17 @@ resolve_substring (gfc_ref *ref)
       if (!gfc_resolve_expr (ref->u.ss.start))
     return false;
+      /* In legacy mode, allow non-integer string indexes by converting */
+      if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && ref->u.ss.start->ts.type != BT_INTEGER
+      && gfc_numeric_ts (&ref->u.ss.start->ts))
+    {
+      gfc_typespec t;
+      t.type = BT_INTEGER;
+      t.kind = ref->u.ss.start->ts.kind;
+      gfc_convert_type_warn (ref->u.ss.start, &t, 2, 1);
+    }
+
       if (ref->u.ss.start->ts.type != BT_INTEGER)
     {
       gfc_error ("Substring start index at %L must be of type INTEGER",
@@ -4709,6 +4720,17 @@ resolve_substring (gfc_ref *ref)
       if (!gfc_resolve_expr (ref->u.ss.end))
     return false;
+      /* Non-integer string index endings, as for start */
+      if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && ref->u.ss.end->ts.type != BT_INTEGER
+      && gfc_numeric_ts (&ref->u.ss.end->ts))
+    {
+      gfc_typespec t;
+      t.type = BT_INTEGER;
+      t.kind = ref->u.ss.end->ts.kind;
+      gfc_convert_type_warn (ref->u.ss.end, &t, 2, 1);
+    }
+
       if (ref->u.ss.end->ts.type != BT_INTEGER)
     {
       gfc_error ("Substring end index at %L must be of type INTEGER",
SOURCES/0009-Convert-LOGICAL-to-INTEGER-for-arithmetic-ops-and-vi.patch
New file
@@ -0,0 +1,68 @@
From 00f13a60974cb4145799593398cc61894326c222 Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Wed, 7 Oct 2015 16:31:18 -0400
Subject: [PATCH 09/23] Convert LOGICAL to INTEGER for arithmetic ops, and vice
 versa
We allow converting LOGICAL types to INTEGER when doing arithmetic
operations, and converting INTEGER types to LOGICAL for use in
boolean operations.
This feature is enabled with the `-std=extra-legacy` compiler flag.
---
    0009-Convert-LOGICAL-to-INTEGER-for-arithmetic-ops-and-vi.patch
    Fixup
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 667cc50..33b441a 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -3627,6 +3627,22 @@ is_character_based (bt type)
    for the conversion.  */
 static void
+convert_integer_to_logical (gfc_expr *e)
+{
+  if (e->ts.type == BT_INTEGER)
+    {
+      /* Convert to LOGICAL */
+      gfc_typespec t;
+      t.type = BT_LOGICAL;
+      t.kind = 1;
+      gfc_convert_type_warn (e, &t, 2, 1);
+    }
+}
+
+/* If E is a logical, convert it to an integer and issue a warning
+   for the conversion.  */
+
+static void
 convert_logical_to_integer (gfc_expr *e)
 {
   if (e->ts.type == BT_LOGICAL)
@@ -3733,6 +3749,12 @@ resolve_operator (gfc_expr *e)
     case INTRINSIC_OR:
     case INTRINSIC_EQV:
     case INTRINSIC_NEQV:
+      if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+    {
+      convert_integer_to_logical (op1);
+      convert_integer_to_logical (op2);
+    }
+
       if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
     {
       e->ts.type = BT_LOGICAL;
@@ -3774,6 +3796,11 @@ resolve_operator (gfc_expr *e)
       return resolve_function (e);
     }
+      if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+    {
+      convert_integer_to_logical (op1);
+    }
+
       if (op1->ts.type == BT_LOGICAL)
     {
       e->ts.type = BT_LOGICAL;
SOURCES/0010-Allow-mixed-string-length-and-array-specification-in.patch
New file
@@ -0,0 +1,134 @@
From e4c3d25a9133224535b3142ed31e8a8be1ad356b Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Wed, 7 Oct 2015 17:04:06 -0400
Subject: [PATCH 10/23] Allow mixed string length and array specification in
 character declarations.
---
        0010-Allow-mixed-string-length-and-array-specification-in.patch
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index 6d3d28a..c90f9de 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -2145,6 +2145,35 @@ check_function_name (char *name)
 }
+static match
+match_character_length_clause (gfc_charlen **cl, bool *cl_deferred, int elem)
+{
+  gfc_expr* char_len;
+  char_len = NULL;
+
+  match m = match_char_length (&char_len, cl_deferred, false);
+  if (m == MATCH_YES)
+    {
+      *cl = gfc_new_charlen (gfc_current_ns, NULL);
+      (*cl)->length = char_len;
+    }
+  else if (m == MATCH_NO)
+    {
+      if (elem > 1
+      && (current_ts.u.cl->length == NULL
+          || current_ts.u.cl->length->expr_type != EXPR_CONSTANT))
+    {
+      *cl = gfc_new_charlen (gfc_current_ns, NULL);
+      (*cl)->length = gfc_copy_expr (current_ts.u.cl->length);
+    }
+      else
+      *cl = current_ts.u.cl;
+
+      *cl_deferred = current_ts.deferred;
+    }
+  return m;
+}
+
 /* Match a variable name with an optional initializer.  When this
    subroutine is called, a variable is expected to be parsed next.
    Depending on what is happening at the moment, updates either the
@@ -2154,7 +2183,7 @@ static match
 variable_decl (int elem)
 {
   char name[GFC_MAX_SYMBOL_LEN + 1];
-  gfc_expr *initializer, *char_len;
+  gfc_expr *initializer;
   gfc_array_spec *as;
   gfc_array_spec *cp_as; /* Extra copy for Cray Pointees.  */
   gfc_charlen *cl;
@@ -2163,6 +2192,7 @@ variable_decl (int elem)
   match m;
   bool t;
   gfc_symbol *sym;
+  match cl_match;
   initializer = NULL;
   as = NULL;
@@ -2177,6 +2207,20 @@ variable_decl (int elem)
   var_locus = gfc_current_locus;
+
+  cl = NULL;
+  cl_deferred = false;
+  cl_match = MATCH_NO;
+
+  /* Check for a character length clause before an array clause */
+  if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && current_ts.type == BT_CHARACTER)
+    {
+      cl_match = match_character_length_clause (&cl, &cl_deferred, elem);
+      if (cl_match == MATCH_ERROR)
+    goto cleanup;
+    }
+
   /* Now we could see the optional array spec. or character length.  */
   m = gfc_match_array_spec (&as, true, true);
   if (m == MATCH_ERROR)
@@ -2268,40 +2312,12 @@ variable_decl (int elem)
     }
     }
-  char_len = NULL;
-  cl = NULL;
-  cl_deferred = false;
-
-  if (current_ts.type == BT_CHARACTER)
+  /* Second chance for a character length clause */
+  if (cl_match == MATCH_NO && current_ts.type == BT_CHARACTER)
     {
-      switch (match_char_length (&char_len, &cl_deferred, false))
-    {
-    case MATCH_YES:
-      cl = gfc_new_charlen (gfc_current_ns, NULL);
-
-      cl->length = char_len;
-      break;
-
-    /* Non-constant lengths need to be copied after the first
-       element.  Also copy assumed lengths.  */
-    case MATCH_NO:
-      if (elem > 1
-          && (current_ts.u.cl->length == NULL
-          || current_ts.u.cl->length->expr_type != EXPR_CONSTANT))
-        {
-          cl = gfc_new_charlen (gfc_current_ns, NULL);
-          cl->length = gfc_copy_expr (current_ts.u.cl->length);
-        }
-      else
-        cl = current_ts.u.cl;
-
-      cl_deferred = current_ts.deferred;
-
-      break;
-
-    case MATCH_ERROR:
-      goto cleanup;
-    }
+      m = match_character_length_clause( &cl, &cl_deferred, elem );
+      if (m == MATCH_ERROR)
+    goto cleanup;
     }
   /* The dummy arguments and result of the abreviated form of MODULE
SOURCES/0011-Allow-character-to-int-conversions-in-DATA-statement.patch
New file
@@ -0,0 +1,25 @@
From ced1b6638459f33dc9f22a0cd959f97c05a62e22 Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Wed, 7 Oct 2015 18:23:31 -0400
Subject: [PATCH 11/23] Allow character-to-int conversions in DATA statements
This feature is enabled by the `-std=extra-legacy` compiler flag.
---
    0011-Allow-character-to-int-conversions-in-DATA-statement.patch
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index f347c75..9982b8d 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -3294,6 +3294,10 @@ gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform,
       || rvalue->ts.type == BT_HOLLERITH)
     return true;
+      if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && gfc_numeric_ts (&lvalue->ts) && rvalue->ts.type == BT_CHARACTER)
+    return true;
+
       if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL)
     return true;
SOURCES/0012-Allow-old-style-initializers-in-derived-types.patch
New file
@@ -0,0 +1,56 @@
From 5d5a6c9d8c5a8db252d972ec32dd70d2510404fb Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Thu, 4 Feb 2016 16:00:30 +0000
Subject: [PATCH 12/23] Allow old-style initializers in derived types
This allows simple declarations in derived types and structures, such as:
    LOGICAL*1      NIL      /0/
Only single value expressions are allowed at the moment.
This feature is enabled by the `-std=extra-legacy` compiler flag.
---
       0012-Allow-old-style-initializers-in-derived-types.patch
        Drop unnecessary whitespace
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index c90f9de..3ad9c2c 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -2437,12 +2437,30 @@ variable_decl (int elem)
          but not components of derived types.  */
       else if (gfc_current_state () == COMP_DERIVED)
     {
-      gfc_error ("Invalid old style initialization for derived type "
-             "component at %C");
-      m = MATCH_ERROR;
-      goto cleanup;
-    }
+      if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+        {
+          /* Attempt to match an old-style initializer which is a simple
+         integer or character expression; this will not work with
+         multiple values. */
+          m = gfc_match_init_expr (&initializer);
+          if (m == MATCH_ERROR)
+        goto cleanup;
+          else if (m == MATCH_YES)
+        {
+          m = gfc_match ("/");
+          if (m != MATCH_YES)
+            goto cleanup;
+        }
+        }
+      else
+        {
+          gfc_error ("Invalid old style initialization for derived type "
+             "component at %C");
+          m = MATCH_ERROR;
+          goto cleanup;
+        }
+    }
       /* For structure components, read the initializer as a special
          expression and let the rest of this function apply the initializer
          as usual.  */
SOURCES/0013-Allow-per-variable-kind-specification.patch
New file
@@ -0,0 +1,95 @@
From 72d3915eadd1121d8b2f0be04fafc17e9232be81 Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Thu, 5 Nov 2015 18:57:53 +0000
Subject: [PATCH 13/23] Allow per-variable kind specification.
      INTEGER*4 x*2, y*8
The per-variable sizes override the kind specified in the type.
At the moment, you can follow this with an array specification, so
INTEGER x*2(10) is OK, but not the other way round.
This feature is enabled by the `-std=extra-legacy` compiler flag.
---
    0013-Allow-per-variable-kind-specification.patch
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index 3ad9c2c..832904a 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -1019,6 +1019,24 @@ syntax:
   return MATCH_ERROR;
 }
+/* This matches the nonstandard kind given after a variable name, like:
+   INTEGER x*2, y*4
+   The per-variable kind will override any kind given in the type
+   declaration.
+*/
+
+static match
+match_per_symbol_kind (int *length)
+{
+  match m;
+
+  m = gfc_match_char ('*');
+  if (m != MATCH_YES)
+    return m;
+
+  m = gfc_match_small_literal_int (length, NULL);
+  return m;
+}
 /* Special subroutine for finding a symbol.  Check if the name is found
    in the current name space.  If not, and we're compiling a function or
@@ -2193,10 +2211,13 @@ variable_decl (int elem)
   bool t;
   gfc_symbol *sym;
   match cl_match;
+  match kind_match;
+  int overridden_kind;
   initializer = NULL;
   as = NULL;
   cp_as = NULL;
+  kind_match = MATCH_NO;
   /* When we get here, we've just matched a list of attributes and
      maybe a type and a double colon.  The next thing we expect to see
@@ -2216,9 +2237,18 @@ variable_decl (int elem)
   if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
       && current_ts.type == BT_CHARACTER)
     {
-      cl_match = match_character_length_clause (&cl, &cl_deferred, elem);
-      if (cl_match == MATCH_ERROR)
-    goto cleanup;
+      if (current_ts.type == BT_CHARACTER)
+    {
+      cl_match = match_character_length_clause (&cl, &cl_deferred, elem);
+      if (cl_match == MATCH_ERROR)
+        goto cleanup;
+    }
+      else
+    {
+      kind_match = match_per_symbol_kind (&overridden_kind);
+      if (kind_match == MATCH_ERROR)
+        goto cleanup;
+    }
     }
   /* Now we could see the optional array spec. or character length.  */
@@ -2412,6 +2442,13 @@ variable_decl (int elem)
       goto cleanup;
     }
+  if (kind_match == MATCH_YES)
+    {
+      gfc_find_symbol (name, gfc_current_ns, 1, &sym);
+      /* sym *must* be found at this point */
+      sym->ts.kind = overridden_kind;
+    }
+
   if (!check_function_name (name))
     {
       m = MATCH_ERROR;
SOURCES/0014-Allow-non-logical-expressions-in-IF-statements.patch
New file
@@ -0,0 +1,68 @@
From 99c791361468b61976d6054e1ec1c81fe43e6559 Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Wed, 11 Nov 2015 15:37:00 +0000
Subject: [PATCH 14/23] Allow non-logical expressions in IF statements
This feature is enabled by the `-std=extra-legacy` compiler flag.
---
    0014-Allow-non-logical-expressions-in-IF-statements.patch
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index 682f7b0..c63b834 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gfortran.h"
 #include "match.h"
 #include "parse.h"
+#include "arith.h"
 int gfc_matching_ptr_assignment = 0;
 int gfc_matching_procptr_assignment = 0;
@@ -1666,7 +1667,17 @@ got_match:
   *p->next = new_st;
   p->next->loc = gfc_current_locus;
-  p->expr1 = expr;
+  if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && expr->ts.type != BT_LOGICAL)
+    {
+      p->expr1 = gfc_ne (expr, gfc_get_int_expr (1, &gfc_current_locus, 0), INTRINSIC_NE);
+      gfc_warning_now (0, "The type of condition in this IF statement isn't LOGICAL; it will be true if it evaluates to nonzero.");
+    }
+  else
+    {
+      p->expr1 = expr;
+    }
+  p->op = EXEC_IF;
   gfc_clear_new_st ();
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index 3aedb1d..e926ba6 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -26,6 +26,7 @@ along with GCC; see the file COPYING3.  If not see
 #include <setjmp.h>
 #include "match.h"
 #include "parse.h"
+#include "arith.h"
 /* Current statement label.  Zero means no statement label.  Because new_st
    can get wiped during statement matching, we have to keep it separate.  */
@@ -4036,6 +4037,14 @@ parse_if_block (void)
   d = add_statement ();
   d->expr1 = top->expr1;
+
+  if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && top->expr1->ts.type != BT_LOGICAL)
+    {
+      d->expr1 = gfc_ne (top->expr1, gfc_get_int_expr (1, &gfc_current_locus, 0), INTRINSIC_NE);
+      gfc_warning_now (0, "The type of condition in this IF statement isn't LOGICAL; it will be true if it evaluates to nonzero.");
+    }
+
   top->expr1 = NULL;
   top->block = d;
SOURCES/0016-Allow-calls-to-intrinsics-with-smaller-types-than-sp.patch
New file
@@ -0,0 +1,281 @@
From 109b1eeba24e5091bf3bdb6caedf7101a9dcaa6a Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Wed, 18 Nov 2015 11:50:41 +0000
Subject: [PATCH 16/23] Allow calls to intrinsics with smaller types than
 specified
This feature is enabled by the `-std=extra-legacy` compiler flag.
---
    0016-Allow-calls-to-intrinsics-with-smaller-types-than-sp.patch
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index a32de3e..e222003 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -646,6 +646,8 @@ enum gfc_reverse
   GFC_INHIBIT_REVERSE
 };
+enum match_type { MATCH_EXACT, MATCH_PROMOTABLE, MATCH_INVALID };
+
 /************************* Structures *****************************/
 /* Used for keeping things in balanced binary trees.  */
@@ -3251,7 +3253,7 @@ bool gfc_add_interface (gfc_symbol *);
 gfc_interface *gfc_current_interface_head (void);
 void gfc_set_current_interface_head (gfc_interface *);
 gfc_symtree* gfc_find_sym_in_symtree (gfc_symbol*);
-bool gfc_arglist_matches_symbol (gfc_actual_arglist**, gfc_symbol*);
+bool gfc_arglist_matches_symbol (gfc_actual_arglist**, gfc_symbol*, enum match_type mtype);
 bool gfc_check_operator_interface (gfc_symbol*, gfc_intrinsic_op, locus);
 bool gfc_has_vector_subscript (gfc_expr*);
 gfc_intrinsic_op gfc_equivalent_op (gfc_intrinsic_op);
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index 162f777..fc73e31 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -682,7 +682,7 @@ gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
 /* Compare two typespecs, recursively if necessary.  */
 bool
-gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
+gfc_compare_types_generic (gfc_typespec *ts1, gfc_typespec *ts2, enum match_type mtype)
 {
   /* See if one of the typespecs is a BT_VOID, which is what is being used
      to allow the funcs like c_f_pointer to accept any pointer type.
@@ -721,12 +721,23 @@ gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
     return compare_union_types (ts1->u.derived, ts2->u.derived);
   if (ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
-    return (ts1->kind == ts2->kind);
+    {
+    if (mtype == MATCH_PROMOTABLE)
+      return (ts1->kind >= ts2->kind);
+    else
+      return (ts1->kind == ts2->kind);
+    }
+
   /* Compare derived types.  */
   return gfc_type_compatible (ts1, ts2);
 }
+bool
+gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
+{
+  return gfc_compare_types_generic (ts1, ts2, MATCH_EXACT);
+}
 static bool
 compare_type (gfc_symbol *s1, gfc_symbol *s2)
@@ -743,7 +754,9 @@ compare_type (gfc_symbol *s1, gfc_symbol *s2)
   return gfc_compare_types (&s1->ts, &s2->ts) || s2->ts.type == BT_ASSUMED;
 }
-
+/* Given two symbols that are formal arguments, compare their ranks
+   and types.  Returns nonzero if they have the same rank and type,
+   zero otherwise.  */
 static bool
 compare_rank (gfc_symbol *s1, gfc_symbol *s2)
 {
@@ -2150,7 +2163,7 @@ argument_rank_mismatch (const char *name, locus *where,
 static bool
 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
-           int ranks_must_agree, int is_elemental, locus *where)
+                   int ranks_must_agree, int is_elemental, locus *where, enum match_type mtype)
 {
   gfc_ref *ref;
   bool rank_check, is_pointer;
@@ -2242,7 +2255,7 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual,
       && actual->ts.type != BT_HOLLERITH
       && formal->ts.type != BT_ASSUMED
       && !(formal->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
-      && !gfc_compare_types (&formal->ts, &actual->ts)
+      && !gfc_compare_types_generic (&formal->ts, &actual->ts, mtype)
       && !(formal->ts.type == BT_DERIVED && actual->ts.type == BT_CLASS
        && gfc_compare_derived_types (formal->ts.u.derived,
                      CLASS_DATA (actual)->ts.u.derived)))
@@ -2792,7 +2805,8 @@ is_procptr_result (gfc_expr *expr)
 static bool
 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
                 int ranks_must_agree, int is_elemental,
-               bool in_statement_function, locus *where)
+               bool in_statement_function, locus *where,
+               enum match_type mtype)
 {
   gfc_actual_arglist **new_arg, *a, *actual;
   gfc_formal_arglist *f;
@@ -2918,7 +2932,7 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
     }
       if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
-                  is_elemental, where))
+                  is_elemental, where, mtype))
     return false;
       /* TS 29113, 6.3p2.  */
@@ -3666,7 +3680,8 @@ gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
   /* For a statement function, check that types and type parameters of actual
      arguments and dummy arguments match.  */
   if (!compare_actual_formal (ap, dummy_args, 0, sym->attr.elemental,
-                  sym->attr.proc == PROC_ST_FUNCTION, where))
+                  sym->attr.proc == PROC_ST_FUNCTION, where,
+                  MATCH_PROMOTABLE))
     return false;
   if (!check_intents (dummy_args, *ap))
@@ -3715,7 +3730,8 @@ gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
     }
   if (!compare_actual_formal (ap, comp->ts.interface->formal, 0,
-                  comp->attr.elemental, false, where))
+                  comp->attr.elemental, false, where,
+                  MATCH_EXACT))
     return;
   check_intents (comp->ts.interface->formal, *ap);
@@ -3729,7 +3745,7 @@ gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
    GENERIC resolution.  */
 bool
-gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
+gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym, enum match_type mtype)
 {
   gfc_formal_arglist *dummy_args;
   bool r;
@@ -3740,7 +3756,7 @@ gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
   dummy_args = gfc_sym_get_dummy_args (sym);
   r = !sym->attr.elemental;
-  if (compare_actual_formal (args, dummy_args, r, !r, false, NULL))
+  if (compare_actual_formal (args, dummy_args, r, !r, false, NULL, mtype))
     {
       check_intents (dummy_args, *args);
       if (warn_aliasing)
@@ -3766,7 +3782,8 @@ gfc_search_interface (gfc_interface *intr, int sub_flag,
   locus null_expr_loc;
   gfc_actual_arglist *a;
   bool has_null_arg = false;
-
+  enum match_type mtypes[] = { MATCH_EXACT, MATCH_PROMOTABLE };
+  int i;
   for (a = *ap; a; a = a->next)
     if (a->expr && a->expr->expr_type == EXPR_NULL
     && a->expr->ts.type == BT_UNKNOWN)
@@ -3776,38 +3793,43 @@ gfc_search_interface (gfc_interface *intr, int sub_flag,
     break;
       }
-  for (; intr; intr = intr->next)
+  for (i = 0; i < 2; i++)
     {
-      if (gfc_fl_struct (intr->sym->attr.flavor))
-    continue;
-      if (sub_flag && intr->sym->attr.function)
-    continue;
-      if (!sub_flag && intr->sym->attr.subroutine)
-    continue;
-
-      if (gfc_arglist_matches_symbol (ap, intr->sym))
+      for (; intr; intr = intr->next)
     {
-      if (has_null_arg && null_sym)
-        {
-          gfc_error ("MOLD= required in NULL() argument at %L: Ambiguity "
-             "between specific functions %s and %s",
-             &null_expr_loc, null_sym->name, intr->sym->name);
-          return NULL;
-        }
-      else if (has_null_arg)
-        {
-          null_sym = intr->sym;
-          continue;
-        }
+      if (intr->sym->attr.flavor == FL_DERIVED)
+        continue;
+      if (gfc_fl_struct (intr->sym->attr.flavor))
+        continue;
+      if (sub_flag && intr->sym->attr.function)
+        continue;
+      if (!sub_flag && intr->sym->attr.subroutine)
+        continue;
-      /* Satisfy 12.4.4.1 such that an elemental match has lower
-         weight than a non-elemental match.  */
-      if (intr->sym->attr.elemental)
+      if (gfc_arglist_matches_symbol (ap, intr->sym, mtypes[i]))
         {
-          elem_sym = intr->sym;
-          continue;
+          if (has_null_arg && null_sym)
+        {
+          gfc_error ("MOLD= required in NULL() argument at %L: Ambiguity "
+                 "between specific functions %s and %s",
+                 &null_expr_loc, null_sym->name, intr->sym->name);
+          return NULL;
+        }
+          else if (has_null_arg)
+        {
+          null_sym = intr->sym;
+          continue;
+        }
+
+          /* Satisfy 12.4.4.1 such that an elemental match has lower
+         weight than a non-elemental match.  */
+          if (intr->sym->attr.elemental)
+        {
+          elem_sym = intr->sym;
+          continue;
+        }
+          return intr->sym;
         }
-      return intr->sym;
     }
     }
@@ -3942,7 +3964,7 @@ matching_typebound_op (gfc_expr** tb_base,
         /* Check if this arglist matches the formal.  */
         argcopy = gfc_copy_actual_arglist (args);
-        matches = gfc_arglist_matches_symbol (&argcopy, target);
+        matches = gfc_arglist_matches_symbol (&argcopy, target, MATCH_EXACT);
         gfc_free_actual_arglist (argcopy);
         /* Return if we found a match.  */
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
index 371f5b8..846492a 100644
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -4229,6 +4229,16 @@ check_arglist (gfc_actual_arglist **ap, gfc_intrinsic_sym *sym,
       if (ts.kind == 0)
     ts.kind = actual->expr->ts.kind;
+      /* ts.kind is the argument spec. actual is what was passed. */
+
+      if (actual->expr->ts.kind < ts.kind
+      && ts.type == BT_INTEGER)
+    {
+      /* If it was OK to overwrite ts.kind in the previous case, it
+         should be fine here... */
+      ts.kind = actual->expr->ts.kind;
+    }
+
       if (!gfc_compare_types (&ts, &actual->expr->ts))
     {
       if (error_flag)
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 33b441a..f82c298 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -6055,7 +6055,7 @@ resolve_typebound_generic_call (gfc_expr* e, const char **name)
                   && gfc_sym_get_dummy_args (target) == NULL);
       /* Check if this arglist matches the formal.  */
-      matches = gfc_arglist_matches_symbol (&args, target);
+      matches = gfc_arglist_matches_symbol (&args, target, MATCH_EXACT);
       /* Clean up and break out of the loop if we've found it.  */
       gfc_free_actual_arglist (args);
SOURCES/0017-Add-the-SEQUENCE-attribute-by-default-if-it-s-not-pr.patch
New file
@@ -0,0 +1,35 @@
From fdda38024c7151ca632cb338085af80ceb63ec4d Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Wed, 18 Nov 2015 15:08:56 +0000
Subject: [PATCH 17/23] Add the SEQUENCE attribute by default if it's not
 present.
This feature is enabled by the `-std=extra-legacy` compiler flag.
        0017-Add-the-SEQUENCE-attribute-by-default-if-it-s-not-pr.patch
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index f82c298..a831f70 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -963,9 +963,16 @@ resolve_common_vars (gfc_common_head *common_block, bool named_common)
       if (!(csym->ts.u.derived->attr.sequence
         || csym->ts.u.derived->attr.is_bind_c))
-    gfc_error_now ("Derived type variable %qs in COMMON at %L "
-               "has neither the SEQUENCE nor the BIND(C) "
-               "attribute", csym->name, &csym->declared_at);
+    {
+      if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+        /* Assume sequence. */
+        csym->ts.u.derived->attr.sequence = 1;
+      else
+        gfc_error_now ("Derived type variable '%s' in COMMON at %L "
+               "has neither the SEQUENCE nor the BIND(C) "
+               "attribute", csym->name, &csym->declared_at);
+    }
+
       if (csym->ts.u.derived->attr.alloc_comp)
     gfc_error_now ("Derived type variable %qs in COMMON at %L "
                "has an ultimate component that is "
SOURCES/0018-Fill-in-missing-array-dimensions-using-the-lower-bou.patch
New file
@@ -0,0 +1,62 @@
From b8527b8f03c4c50869c4f9a063f5c7686e58e5e9 Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Fri, 26 Aug 2016 17:46:05 +0100
Subject: [PATCH 18/23] Fill in missing array dimensions using the lower bound
This feature is enabled by the `-fstd=extra-legacy` compiler flag
---
    0018-Fill-in-missing-array-dimensions-using-the-lower-bou.patch
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index a831f70..ac35357 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -4396,6 +4396,27 @@ compare_spec_to_ref (gfc_array_ref *ar)
   if (ar->type == AR_FULL)
     return true;
+  if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
+      && as->rank > ar->dimen)
+    {
+      /* Add in the missing dimensions, assuming they are the lower bound
+         of that dimension if not specified. */
+      int j;
+      gfc_warning (0, "Using the lower bound for unspecified dimensions "
+                   "in array reference at %L", &ar->where);
+      /* Other parts of the code iterate ar->start and ar->end from 0 to
+     ar->dimen, so it is safe to assume slots from ar->dimen upwards
+     are unused (i.e. there are no gaps; the specified indexes are
+     contiguous and start at zero */
+      for(j = ar->dimen; j <= as->rank; j++)
+        {
+      ar->start[j] = gfc_copy_expr (as->lower[j]);
+      ar->end[j]   = gfc_copy_expr (as->lower[j]);
+      ar->dimen_type[j] = DIMEN_ELEMENT;
+        }
+      ar->dimen = as->rank;
+    }
+
   if (as->rank != ar->dimen)
     {
       gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
diff --git a/gcc/testsuite/gfortran.dg/array_6.f90 b/gcc/testsuite/gfortran.dg/array_6.f90
new file mode 100644
index 0000000..20752a1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/array_6.f90
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! { dg-options "-std=extra-legacy" }!
+! Checks that under-specified arrays (referencing arrays with fewer
+! dimensions than the array spec) generates a warning.
+!
+! Contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
+!
+
+program under_specified_array
+    INTEGER chsbrd(8,8)
+    chsbrd(3,1) = 5
+    print *, chsbrd(3) ! { dg-warning "Using the lower bound for unspecified dimensions in array reference" }
+end program
SOURCES/0019-Add-tests-for-AUTOMATIC-keyword.patch
New file
@@ -0,0 +1,100 @@
From 52e49e5edaf2c4de5974b42dd359c0f57546c640 Mon Sep 17 00:00:00 2001
From: Mark Doffman <mark.doffman@codethink.co.uk>
Date: Thu, 5 Jun 2014 20:47:51 +0000
Subject: [PATCH 19/23] Add tests for AUTOMATIC keyword
These tests were written by Mark Doffman for his own implementation of
the AUTOMATIC keyword. Since then, Fritz Reese's implementation was
merged upstream so we no longer carry Mark's patches but the tests
may add some useful extra test coverage. Or they might not.
---
 gcc/testsuite/gfortran.dg/automatic_1.f90      | 31 ++++++++++++++++++++++++++
 gcc/testsuite/gfortran.dg/automatic_common.f90 |  6 +++++
 gcc/testsuite/gfortran.dg/automatic_repeat.f90 |  8 +++++++
 gcc/testsuite/gfortran.dg/automatic_save.f90   |  8 +++++++
 4 files changed, 53 insertions(+)
 create mode 100644 gcc/testsuite/gfortran.dg/automatic_1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/automatic_common.f90
 create mode 100644 gcc/testsuite/gfortran.dg/automatic_repeat.f90
 create mode 100644 gcc/testsuite/gfortran.dg/automatic_save.f90
diff --git a/gcc/testsuite/gfortran.dg/automatic_1.f90 b/gcc/testsuite/gfortran.dg/automatic_1.f90
new file mode 100644
index 0000000..910dcb1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/automatic_1.f90
@@ -0,0 +1,31 @@
+! { dg-do run }
+! { dg-options "-O2 -fdec-static -fno-automatic" }
+      subroutine foo (b)
+        logical b
+        integer i, j
+        character*24 s
+        automatic i
+        if (b) then
+          i = 26
+          j = 131
+          s = 'This is a test string'
+        else
+          if (i .eq. 26 .or. j .ne. 131) call abort
+          if (s .ne. 'This is a test string') call abort
+        end if
+      end subroutine foo
+      subroutine bar (s)
+        character*42 s
+        if (s .ne. '0123456789012345678901234567890123456') call abort
+        call foo (.false.)
+      end subroutine bar
+      subroutine baz
+        character*42 s
+        ! Just clobber stack a little bit.
+        s = '0123456789012345678901234567890123456'
+        call bar (s)
+      end subroutine baz
+      call foo (.true.)
+      call baz
+      call foo (.false.)
+      end
diff --git a/gcc/testsuite/gfortran.dg/automatic_common.f90 b/gcc/testsuite/gfortran.dg/automatic_common.f90
new file mode 100644
index 0000000..5ec016f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/automatic_common.f90
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! { dg-options "-fdec-static" }
+! A common variable may not have the AUTOMATIC attribute.
+INTEGER, AUTOMATIC :: X
+COMMON /COM/ X ! { dg-error "conflicts with AUTOMATIC attribute" }
+END
diff --git a/gcc/testsuite/gfortran.dg/automatic_repeat.f90 b/gcc/testsuite/gfortran.dg/automatic_repeat.f90
new file mode 100644
index 0000000..5c3133a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/automatic_repeat.f90
@@ -0,0 +1,8 @@
+! { dg-do compile }
+! { dg-options "-fdec-static" }
+! An AUTOMATIC statement cannot duplicated
+FUNCTION X()
+REAL, AUTOMATIC, AUTOMATIC :: Y ! { dg-error "Duplicate AUTOMATIC attribute" }
+y = 1
+END FUNCTION X
+END
diff --git a/gcc/testsuite/gfortran.dg/automatic_save.f90 b/gcc/testsuite/gfortran.dg/automatic_save.f90
new file mode 100644
index 0000000..2455d20
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/automatic_save.f90
@@ -0,0 +1,8 @@
+! { dg-do compile }
+! { dg-options "-fdec-static" }
+! An AUTOMATIC statement cannot be used with SAVE
+FUNCTION X()
+REAL, SAVE, AUTOMATIC :: Y ! { dg-error "AUTOMATIC attribute conflicts with SAVE attribute" }
+y = 1
+END FUNCTION X
+END
--
2.9.5
SOURCES/0020-Add-test-for-STRUCTURE-and-RECORD.patch
New file
@@ -0,0 +1,48 @@
From 74e6e078672546bc8e86296a5b8625e7b78699d8 Mon Sep 17 00:00:00 2001
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
Date: Fri, 5 May 2017 15:11:32 +0100
Subject: [PATCH 20/23] Add test for STRUCTURE and RECORD.
Support for this has been merged upstream and released in GCC 7.1. This
test may provide useful extra testing.
---
 gcc/testsuite/gfortran.dg/vax_structure_1.f90 | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100644 gcc/testsuite/gfortran.dg/vax_structure_1.f90
diff --git a/gcc/testsuite/gfortran.dg/vax_structure_1.f90 b/gcc/testsuite/gfortran.dg/vax_structure_1.f90
new file mode 100644
index 0000000..2658c12
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/vax_structure_1.f90
@@ -0,0 +1,27 @@
+! { dg-do compile }
+! { dg-options "-fdec-structure" }
+! Tests the VAX STRUCTURE and RECORD statements.
+! These are syntactic sugar for TYPE statements.
+
+      program vax_structure_1
+      structure /stocklevel/
+         integer*2   A
+         integer*4   B
+         integer*4   CS(0:15)
+         byte        D(0:15)
+      end structure
+
+      record /stocklevel/ rec1, recs(100)
+      integer x
+      integer*2 y
+
+      rec1.A = 100
+      recs(100).CS(10)=1
+      x = 150
+      y = 150
+
+      print *, rec1.B.eq.100
+      print *, rec1.A.eq.x ! {dg-error "are INTEGER(2)/INTEGER(4)"}
+      print *, rec1.A.eq.y
+      print *, recs(100).CS(10)
+      end program
--
2.9.5
SOURCES/0022-Default-values-for-certain-field-descriptors-in-form.patch
New file
@@ -0,0 +1,516 @@
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index d93dcfa..f47565c 100644
--- a/gcc/fortran/io.c
+++ b/gcc/fortran/io.c
@@ -909,6 +909,13 @@ data_desc:
       if (u != FMT_POSINT)
     {
+      if (flag_dec)
+        {
+          /* Assume a default width based on the variable size.  */
+          saved_token = u;
+          break;
+        }
+
       format_locus.nextc += format_string_pos;
       gfc_error ("Positive width required in format "
              "specifier %s at %L", token_to_string (t),
@@ -1030,6 +1037,13 @@ data_desc:
     goto fail;
       if (t != FMT_ZERO && t != FMT_POSINT)
     {
+      if (flag_dec)
+        {
+          /* Assume the default width is expected here and continue lexing.  */
+          value = 0; /* It doesn't matter what we set the value to here.  */
+          saved_token = t;
+          break;
+        }
       error = nonneg_required;
       goto syntax;
     }
@@ -1099,8 +1113,17 @@ data_desc:
     goto fail;
       if (t != FMT_ZERO && t != FMT_POSINT)
     {
-      error = nonneg_required;
-      goto syntax;
+      if (flag_dec)
+        {
+          /* Assume the default width is expected here and continue lexing.  */
+          value = 0; /* It doesn't matter what we set the value to here.  */
+          saved_token = t;
+        }
+      else
+        {
+          error = nonneg_required;
+          goto syntax;
+        }
     }
       else if (is_input && t == FMT_ZERO)
     {
diff --git a/gcc/testsuite/gfortran.dg/fmt_f_default_field_width.f90 b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width.f90
new file mode 100644
index 0000000..b087b8f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width.f90
@@ -0,0 +1,43 @@
+! { dg-do run }
+! { dg-options -fdec }
+!
+! Test case for the default field widths enabled by the -fdec-format-defaults flag.
+!
+! This feature is not part of any Fortran standard, but it is supported by the
+! Oracle Fortran compiler and others.
+!
+! libgfortran uses printf() internally to implement FORMAT. If you print float
+! values to a higher precision than the type can actually store, the results
+! are implementation dependent: some platforms print zeros, others print random
+! numbers. Don't depend on this behaviour in tests because they will not be
+! portable.
+
+    character(50) :: buffer
+
+    real*4 :: real_4
+    real*8 :: real_8
+    real*16 :: real_16
+    integer :: len
+
+    real_4 = 4.18
+    write(buffer, '(A, F, A)') ':',real_4,':'
+    print *,buffer
+    if (buffer.ne.":      4.1799998:") call abort
+
+    real_4 = 0.00000018
+    write(buffer, '(A, F, A)') ':',real_4,':'
+    print *,buffer
+    if (buffer.ne.":      0.0000002:") call abort
+
+    real_8 = 4.18
+    write(buffer, '(A, F, A)') ':',real_8,':'
+    print *,buffer
+    len = len_trim(buffer)
+    if (len /= 27) call abort
+
+    real_16 = 4.18
+    write(buffer, '(A, F, A)') ':',real_16,':'
+    print *,buffer
+    len = len_trim(buffer)
+    if (len /= 44) call abort
+end
diff --git a/gcc/testsuite/gfortran.dg/fmt_g_default_field_width.f90 b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width.f90
new file mode 100644
index 0000000..3d3a476
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width.f90
@@ -0,0 +1,48 @@
+! { dg-do run }
+! { dg-options -fdec }
+!
+! Test case for the default field widths enabled by the -fdec-format-defaults flag.
+!
+! This feature is not part of any Fortran standard, but it is supported by the
+! Oracle Fortran compiler and others.
+!
+! libgfortran uses printf() internally to implement FORMAT. If you print float
+! values to a higher precision than the type can actually store, the results
+! are implementation dependent: some platforms print zeros, others print random
+! numbers. Don't depend on this behaviour in tests because they will not be
+! portable.
+
+    character(50) :: buffer
+
+    real*4 :: real_4
+    real*8 :: real_8
+    real*16 :: real_16
+    integer :: len
+
+    real_4 = 4.18
+    write(buffer, '(A, G, A)') ':',real_4,':'
+    print *,buffer
+    if (buffer.ne.":   4.180000    :") call abort
+
+    real_4 = 0.00000018
+    write(buffer, '(A, G, A)') ':',real_4,':'
+    print *,buffer
+    if (buffer.ne.":  0.1800000E-06:") call abort
+
+    real_4 = 18000000.4
+    write(buffer, '(A, G, A)') ':',real_4,':'
+    print *,buffer
+    if (buffer.ne.":  0.1800000E+08:") call abort
+
+    real_8 = 4.18
+    write(buffer, '(A, G, A)') ':',real_8,':'
+    print *,buffer
+    len = len_trim(buffer)
+    if (len /= 27) call abort
+
+    real_16 = 4.18
+    write(buffer, '(A, G, A)') ':',real_16,':'
+    print *,buffer
+    len = len_trim(buffer)
+    if (len /= 44) call abort
+end
diff --git a/gcc/testsuite/gfortran.dg/fmt_i_default_field_width.f90 b/gcc/testsuite/gfortran.dg/fmt_i_default_field_width.f90
new file mode 100644
index 0000000..ac4e165
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/fmt_i_default_field_width.f90
@@ -0,0 +1,38 @@
+! { dg-do run }
+! { dg-options -fdec }
+!
+! Test case for the default field widths enabled by the -fdec-format-defaults flag.
+!
+! This feature is not part of any Fortran standard, but it is supported by the
+! Oracle Fortran compiler and others.
+
+    character(50) :: buffer
+    character(1) :: colon
+
+    integer*2 :: integer_2
+    integer*4 :: integer_4
+    integer*8 :: integer_8
+
+    write(buffer, '(A, I, A)') ':',12340,':'
+    print *,buffer
+    if (buffer.ne.":       12340:") call abort
+
+    read(buffer, '(A1, I, A1)') colon, integer_4, colon
+    if (integer_4.ne.12340) call abort
+
+    integer_2 = -99
+    write(buffer, '(A, I, A)') ':',integer_2,':'
+    print *,buffer
+    if (buffer.ne.":    -99:") call abort
+
+    integer_8 = -11112222
+    write(buffer, '(A, I, A)') ':',integer_8,':'
+    print *,buffer
+    if (buffer.ne.":              -11112222:") call abort
+
+! If the width is 7 and there are 7 leading zeroes, the result should be zero.
+    integer_2 = 789
+    buffer = '0000000789'
+    read(buffer, '(I)') integer_2
+    if (integer_2.ne.0) call abort
+end
diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c
index c2abdd7..692b1ff 100644
--- a/libgfortran/io/format.c
+++ b/libgfortran/io/format.c
@@ -956,12 +956,33 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd)
       *seen_dd = true;
       if (u != FMT_POSINT && u != FMT_ZERO)
         {
+          if (dtp->common.flags & IOPARM_DT_DEC_EXT)
+        {
+          tail->u.real.w = DEFAULT_WIDTH;
+          tail->u.real.d = 0;
+          tail->u.real.e = -1;
+          fmt->saved_token = u;
+          break;
+        }
           fmt->error = nonneg_required;
           goto finished;
         }
     }
+      else if (u == FMT_ZERO)
+    {
+      fmt->error = posint_required;
+      goto finished;
+    }
       else if (u != FMT_POSINT)
     {
+      if (dtp->common.flags & IOPARM_DT_DEC_EXT)
+        {
+          tail->u.real.w = DEFAULT_WIDTH;
+          tail->u.real.d = 0;
+          tail->u.real.e = -1;
+          fmt->saved_token = u;
+          break;
+        }
       fmt->error = posint_required;
       goto finished;
     }
@@ -1099,6 +1120,13 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd)
     {
       if (t != FMT_POSINT)
         {
+          if (dtp->common.flags & IOPARM_DT_DEC_EXT)
+        {
+          tail->u.integer.w = DEFAULT_WIDTH;
+          tail->u.integer.m = -1;
+          fmt->saved_token = t;
+          break;
+        }
           fmt->error = posint_required;
           goto finished;
         }
@@ -1107,6 +1135,13 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd)
     {
       if (t != FMT_ZERO && t != FMT_POSINT)
         {
+          if (dtp->common.flags & IOPARM_DT_DEC_EXT)
+        {
+          tail->u.integer.w = DEFAULT_WIDTH;
+          tail->u.integer.m = -1;
+          fmt->saved_token = t;
+          break;
+        }
           fmt->error = nonneg_required;
           goto finished;
         }
diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h
index 5583183..d1d08e8 100644
--- a/libgfortran/io/io.h
+++ b/libgfortran/io/io.h
@@ -981,5 +981,55 @@ memset4 (gfc_char4_t *p, gfc_char4_t c, int k)
     *p++ = c;
 }
+/* Used in width fields to indicate that the default should be used */
+#define DEFAULT_WIDTH -1
+
+/* Defaults for certain format field descriptors. These are decided based on
+ * the type of the value being formatted.
+ *
+ * The behaviour here is modelled on the Oracle Fortran compiler. At the time
+ * of writing, the details were available at this URL:
+ *
+ *   https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnc3/index.html#z4000743746d
+ */
+
+static inline int
+default_width_for_integer (int kind)
+{
+  switch (kind)
+    {
+    case 1:
+    case 2:  return  7;
+    case 4:  return 12;
+    case 8:  return 23;
+    case 16: return 44;
+    default: return  0;
+    }
+}
+
+static inline int
+default_width_for_float (int kind)
+{
+  switch (kind)
+    {
+    case 4:  return 15;
+    case 8:  return 25;
+    case 16: return 42;
+    default: return  0;
+    }
+}
+
+static inline int
+default_precision_for_float (int kind)
+{
+  switch (kind)
+    {
+    case 4:  return 7;
+    case 8:  return 16;
+    case 16: return 33;
+    default: return 0;
+    }
+}
+
 #endif
diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c
index 2c9de48..e911e35 100644
--- a/libgfortran/io/read.c
+++ b/libgfortran/io/read.c
@@ -629,6 +629,12 @@ read_decimal (st_parameter_dt *dtp, const fnode *f, char *dest, int length)
   w = f->u.w;
+  /* This is a legacy extension, and the frontend will only allow such cases
+   * through when -fdec-format-defaults is passed.
+   */
+  if (w == DEFAULT_WIDTH)
+    w = default_width_for_integer (length);
+
   p = read_block_form (dtp, &w);
   if (p == NULL)
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index a7307a8..c8e52fb 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -684,9 +684,8 @@ write_l (st_parameter_dt *dtp, const fnode *f, char *source, int len)
   p[wlen - 1] = (n) ? 'T' : 'F';
 }
-
 static void
-write_boz (st_parameter_dt *dtp, const fnode *f, const char *q, int n)
+write_boz (st_parameter_dt *dtp, const fnode *f, const char *q, int n, int len)
 {
   int w, m, digits, nzero, nblank;
   char *p;
@@ -719,6 +718,9 @@ write_boz (st_parameter_dt *dtp, const fnode *f, const char *q, int n)
   /* Select a width if none was specified.  The idea here is to always
      print something.  */
+  if (w == DEFAULT_WIDTH)
+    w = default_width_for_integer (len);
+
   if (w == 0)
     w = ((digits < m) ? m : digits);
@@ -845,6 +847,8 @@ write_decimal (st_parameter_dt *dtp, const fnode *f, const char *source,
   /* Select a width if none was specified.  The idea here is to always
      print something.  */
+  if (w == DEFAULT_WIDTH)
+    w = default_width_for_integer (len);
   if (w == 0)
     w = ((digits < m) ? m : digits) + nsign;
@@ -1187,13 +1191,13 @@ write_b (st_parameter_dt *dtp, const fnode *f, const char *source, int len)
   if (len > (int) sizeof (GFC_UINTEGER_LARGEST))
     {
       p = btoa_big (source, itoa_buf, len, &n);
-      write_boz (dtp, f, p, n);
+      write_boz (dtp, f, p, n, len);
     }
   else
     {
       n = extract_uint (source, len);
       p = btoa (n, itoa_buf, sizeof (itoa_buf));
-      write_boz (dtp, f, p, n);
+      write_boz (dtp, f, p, n, len);
     }
 }
@@ -1208,13 +1212,13 @@ write_o (st_parameter_dt *dtp, const fnode *f, const char *source, int len)
   if (len > (int) sizeof (GFC_UINTEGER_LARGEST))
     {
       p = otoa_big (source, itoa_buf, len, &n);
-      write_boz (dtp, f, p, n);
+      write_boz (dtp, f, p, n, len);
     }
   else
     {
       n = extract_uint (source, len);
       p = otoa (n, itoa_buf, sizeof (itoa_buf));
-      write_boz (dtp, f, p, n);
+      write_boz (dtp, f, p, n, len);
     }
 }
@@ -1228,13 +1232,13 @@ write_z (st_parameter_dt *dtp, const fnode *f, const char *source, int len)
   if (len > (int) sizeof (GFC_UINTEGER_LARGEST))
     {
       p = ztoa_big (source, itoa_buf, len, &n);
-      write_boz (dtp, f, p, n);
+      write_boz (dtp, f, p, n, len);
     }
   else
     {
       n = extract_uint (source, len);
       p = gfc_xtoa (n, itoa_buf, sizeof (itoa_buf));
-      write_boz (dtp, f, p, n);
+      write_boz (dtp, f, p, n, len);
     }
 }
@@ -1504,7 +1508,7 @@ size_from_kind (st_parameter_dt *dtp, const fnode *f, int kind)
 {
   int size;
-  if (f->format == FMT_F && f->u.real.w == 0)
+  if ((f->format == FMT_F && f->u.real.w == 0) || f->u.real.w == DEFAULT_WIDTH)
     {
       switch (kind)
       {
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def
index 7f0aa1d..73dc910 100644
--- a/libgfortran/io/write_float.def
+++ b/libgfortran/io/write_float.def
@@ -113,7 +113,8 @@ determine_precision (st_parameter_dt * dtp, const fnode * f, int len)
 static void
 build_float_string (st_parameter_dt *dtp, const fnode *f, char *buffer,
             size_t size, int nprinted, int precision, int sign_bit,
-            bool zero_flag, int npad, char *result, size_t *len)
+            bool zero_flag, int npad, int default_width, char *result,
+                    size_t *len)
 {
   char *put;
   char *digits;
@@ -132,8 +133,17 @@ build_float_string (st_parameter_dt *dtp, const fnode *f, char *buffer,
   sign_t sign;
   ft = f->format;
-  w = f->u.real.w;
-  d = f->u.real.d;
+  if (f->u.real.w == DEFAULT_WIDTH)
+    /* This codepath can only be reached with -fdec-format-defaults. */
+    {
+      w = default_width;
+      d = precision;
+    }
+  else
+    {
+      w = f->u.real.w;
+      d = f->u.real.d;
+    }
   p = dtp->u.p.scale_factor;
   rchar = '5';
@@ -958,6 +968,11 @@ determine_en_precision (st_parameter_dt *dtp, const fnode *f,
       int save_scale_factor;\
       volatile GFC_REAL_ ## x temp;\
       save_scale_factor = dtp->u.p.scale_factor;\
+      if (w == DEFAULT_WIDTH)\
+    {\
+      w = default_width;\
+      d = precision;\
+    }\
       switch (dtp->u.p.current_unit->round_status)\
     {\
       case ROUND_ZERO:\
@@ -1033,7 +1048,8 @@ determine_en_precision (st_parameter_dt *dtp, const fnode *f,
       nprinted = FDTOA(y,precision,m);\
     }\
       build_float_string (dtp, &newf, buffer, size, nprinted, precision,\
-                   sign_bit, zero_flag, npad, result, res_len);\
+                   sign_bit, zero_flag, npad, default_width,\
+                   result, res_len);\
       dtp->u.p.scale_factor = save_scale_factor;\
     }\
   else\
@@ -1043,7 +1059,8 @@ determine_en_precision (st_parameter_dt *dtp, const fnode *f,
       else\
     nprinted = DTOA(y,precision,m);\
       build_float_string (dtp, f, buffer, size, nprinted, precision,\
-                   sign_bit, zero_flag, npad, result, res_len);\
+                   sign_bit, zero_flag, npad, default_width,\
+                   result, res_len);\
     }\
 }\
@@ -1057,6 +1074,16 @@ get_float_string (st_parameter_dt *dtp, const fnode *f, const char *source,
 {
   int sign_bit, nprinted;
   bool zero_flag;
+  int default_width = 0;
+
+  if (f->u.real.w == DEFAULT_WIDTH)
+    /* This codepath can only be reached with -fdec-format-defaults. The default
+     * values are based on those used in the Oracle Fortran compiler.
+     */
+    {
+      default_width = default_width_for_float (kind);
+      precision = default_precision_for_float (kind);
+    }
   switch (kind)
     {
SOURCES/gcc7-libstdc++-compat.patch
@@ -505,7 +505,7 @@
+#endif
--- libstdc++-v3/src/nonshared98/misc-inst.cc.jj    2017-05-31 12:11:25.226560721 +0200
+++ libstdc++-v3/src/nonshared98/misc-inst.cc    2017-05-31 15:26:10.372633354 +0200
@@ -0,0 +1,25 @@
@@ -0,0 +1,23 @@
+// Copyright (C) 1997-2017 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
@@ -529,8 +529,6 @@
+// <http://www.gnu.org/licenses/>.
+
+#include "../c++98/misc-inst.cc"
+asm (".hidden _ZNKSt5ctypeIcE8do_widenEc");
+
--- libstdc++-v3/src/nonshared98/decimal-rtti.S.jj    2017-05-31 12:11:25.227560709 +0200
+++ libstdc++-v3/src/nonshared98/decimal-rtti.S    2017-05-31 12:11:25.227560709 +0200
@@ -0,0 +1,274 @@
@@ -954,7 +952,7 @@
+#endif
--- libstdc++-v3/src/nonshared98/locale-inst.cc.jj    2017-05-31 12:11:25.228560696 +0200
+++ libstdc++-v3/src/nonshared98/locale-inst.cc    2017-05-31 15:26:10.371633366 +0200
@@ -0,0 +1,39 @@
@@ -0,0 +1,40 @@
+// Copyright (C) 2012-2017 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
@@ -994,6 +992,7 @@
+                       ios_base::iostate&) const;
+
+}
+asm (".hidden _ZNKSt5ctypeIcE8do_widenEc");
--- libstdc++-v3/src/nonshared98/stdexcept.cc.jj    2017-05-31 12:11:25.227560709 +0200
+++ libstdc++-v3/src/nonshared98/stdexcept.cc    2017-05-31 15:26:10.374633331 +0200
@@ -0,0 +1,44 @@
@@ -2996,7 +2995,7 @@
+#include "../libsupc++/del_opvsa.cc"
--- libstdc++-v3/src/nonshared11/cxx11-wlocale-inst.cc.jj    2017-05-31 12:11:25.239560564 +0200
+++ libstdc++-v3/src/nonshared11/cxx11-wlocale-inst.cc    2017-05-31 15:40:45.362168879 +0200
@@ -0,0 +1,47 @@
@@ -0,0 +1,57 @@
+// Copyright (C) 2012-2017 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
@@ -3044,6 +3043,16 @@
+asm (".hidden _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2ERKNSt7__cxx1112basic_stringIcS1_IcESaIcEEEm");
+#endif
+asm (".hidden _ZNKSt19istreambuf_iteratorIwSt11char_traitsIwEE5equalERKS2_");
+asm (".hidden _ZSt16__convert_from_vRKP15__locale_structPciPKcz");
+asm (".hidden _ZTISt10money_base");
+asm (".hidden _ZTISt13messages_base");
+asm (".hidden _ZTISt9time_base");
+asm (".hidden _ZTSSt10money_base");
+asm (".hidden _ZTSSt13messages_base");
+asm (".hidden _ZTSSt9time_base");
+#ifndef C_is_char
+asm (".hidden _ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv");
+#endif
--- libstdc++-v3/src/nonshared11/limits.cc.jj    2017-05-31 12:11:25.243560516 +0200
+++ libstdc++-v3/src/nonshared11/limits.cc    2017-05-31 15:25:50.422872535 +0200
@@ -0,0 +1,99 @@
@@ -3995,7 +4004,7 @@
+#include "../libsupc++/bad_array_new.cc"
--- libstdc++-v3/src/nonshared11/system_error48.cc.jj    2017-05-31 12:11:25.239560564 +0200
+++ libstdc++-v3/src/nonshared11/system_error48.cc    2017-06-01 13:09:18.313459989 +0200
@@ -0,0 +1,47 @@
@@ -0,0 +1,28 @@
+// <system_error> implementation file
+
+// Copyright (C) 2007-2017 Free Software Foundation, Inc.
@@ -4022,26 +4031,7 @@
+
+#define _GLIBCXX_NONSHARED_CXX11
+#include "../c++11/system_error.cc"
+asm (".hidden _ZNSt12__sso_stringC1EOS_");
+asm (".hidden _ZNSt12__sso_stringC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE");
+asm (".hidden _ZNSt12__sso_stringC1ERKS_");
+asm (".hidden _ZNSt12__sso_stringC1Ev");
+asm (".hidden _ZNSt12__sso_stringC2EOS_");
+asm (".hidden _ZNSt12__sso_stringC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE");
+asm (".hidden _ZNSt12__sso_stringC2ERKS_");
+asm (".hidden _ZNSt12__sso_stringC2Ev");
+asm (".hidden _ZNSt12__sso_stringD1Ev");
+asm (".hidden _ZNSt12__sso_stringD2Ev");
+asm (".hidden _ZNSt12__sso_stringaSEOS_");
+asm (".hidden _ZNSt12__sso_stringaSERKS_");
+asm (".hidden _ZTSNSt3_V214error_categoryE");
+#if defined(__i386__) || (defined(__powerpc__) && !defined(__powerpc64__))
+asm (".hidden _ZNSt12__sso_stringC1EPKcj");
+asm (".hidden _ZNSt12__sso_stringC2EPKcj");
+#else
+asm (".hidden _ZNSt12__sso_stringC1EPKcm");
+asm (".hidden _ZNSt12__sso_stringC2EPKcm");
+#endif
+asm (".hidden _ZSt20__throw_system_errori");
--- libstdc++-v3/src/nonshared11/cow-stdexcept.cc.jj    2017-05-31 12:11:25.238560576 +0200
+++ libstdc++-v3/src/nonshared11/cow-stdexcept.cc    2017-05-31 15:25:50.410872679 +0200
@@ -4317,7 +4307,7 @@
+} // namespace
--- libstdc++-v3/src/nonshared11/system_error44.cc.jj    2017-05-31 12:11:25.233560636 +0200
+++ libstdc++-v3/src/nonshared11/system_error44.cc    2017-06-01 13:09:08.773576729 +0200
@@ -0,0 +1,47 @@
@@ -0,0 +1,28 @@
+// <system_error> implementation file
+
+// Copyright (C) 2007-2017 Free Software Foundation, Inc.
@@ -4344,26 +4334,7 @@
+
+#define _GLIBCXX_NONSHARED_CXX11
+#include "../c++11/system_error.cc"
+asm (".hidden _ZNSt12__sso_stringC1EOS_");
+asm (".hidden _ZNSt12__sso_stringC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE");
+asm (".hidden _ZNSt12__sso_stringC1ERKS_");
+asm (".hidden _ZNSt12__sso_stringC1Ev");
+asm (".hidden _ZNSt12__sso_stringC2EOS_");
+asm (".hidden _ZNSt12__sso_stringC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE");
+asm (".hidden _ZNSt12__sso_stringC2ERKS_");
+asm (".hidden _ZNSt12__sso_stringC2Ev");
+asm (".hidden _ZNSt12__sso_stringD1Ev");
+asm (".hidden _ZNSt12__sso_stringD2Ev");
+asm (".hidden _ZNSt12__sso_stringaSEOS_");
+asm (".hidden _ZNSt12__sso_stringaSERKS_");
+asm (".hidden _ZTSNSt3_V214error_categoryE");
+#if defined(__i386__) || (defined(__powerpc__) && !defined(__powerpc64__))
+asm (".hidden _ZNSt12__sso_stringC1EPKcj");
+asm (".hidden _ZNSt12__sso_stringC2EPKcj");
+#else
+asm (".hidden _ZNSt12__sso_stringC1EPKcm");
+asm (".hidden _ZNSt12__sso_stringC2EPKcm");
+#endif
+asm (".hidden _ZSt20__throw_system_errori");
--- libstdc++-v3/src/nonshared11/eh_throw.cc.jj    2017-06-01 12:19:27.713260414 +0200
+++ libstdc++-v3/src/nonshared11/eh_throw.cc    2017-06-01 12:33:23.639919386 +0200
@@ -5457,7 +5428,7 @@
+asm (".hidden _ZNSt13__future_base7_ResultIvE10_M_destroyEv");
--- libstdc++-v3/src/nonshared11/locale-inst.cc.jj    2017-05-31 12:11:25.243560516 +0200
+++ libstdc++-v3/src/nonshared11/locale-inst.cc    2017-05-31 15:25:50.422872535 +0200
@@ -0,0 +1,93 @@
@@ -0,0 +1,84 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 1999-2017 Free Software Foundation, Inc.
@@ -5529,22 +5500,13 @@
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+
+asm (".hidden _ZSt16__convert_from_vRKP15__locale_structPciPKcz");
+asm (".hidden _ZTISt10money_base");
+asm (".hidden _ZTISt13messages_base");
+asm (".hidden _ZTISt9time_base");
+asm (".hidden _ZTSSt10money_base");
+asm (".hidden _ZTSSt13messages_base");
+asm (".hidden _ZTSSt9time_base");
+#ifdef C_is_char
+asm (".hidden _ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv");
+#if defined(__i386__) || (defined(__powerpc__) && !defined(__powerpc64__))
+asm (".hidden _ZSt14__add_groupingIcEPT_S1_S0_PKcjPKS0_S5_");
+#else
+asm (".hidden _ZSt14__add_groupingIcEPT_S1_S0_PKcmPKS0_S5_");
+#endif
+#else
+asm (".hidden _ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv");
+#if defined(__i386__) || (defined(__powerpc__) && !defined(__powerpc64__))
+asm (".hidden _ZSt14__add_groupingIwEPT_S1_S0_PKcjPKS0_S5_");
+#else
@@ -6264,7 +6226,7 @@
+#endif
--- libstdc++-v3/src/nonshared11/sso_string.cc.jj    2017-05-31 15:22:41.353139321 +0200
+++ libstdc++-v3/src/nonshared11/sso_string.cc    2017-05-31 15:25:50.426872487 +0200
@@ -0,0 +1,29 @@
@@ -0,0 +1,48 @@
+// wide string support -*- C++ -*-
+
+// Copyright (C) 2014-2017 Free Software Foundation, Inc.
@@ -6294,6 +6256,25 @@
+//
+
+#include "../c++11/sso_string.cc"
+asm (".hidden _ZNSt12__sso_stringC1EOS_");
+asm (".hidden _ZNSt12__sso_stringC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE");
+asm (".hidden _ZNSt12__sso_stringC1ERKS_");
+asm (".hidden _ZNSt12__sso_stringC1Ev");
+asm (".hidden _ZNSt12__sso_stringC2EOS_");
+asm (".hidden _ZNSt12__sso_stringC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE");
+asm (".hidden _ZNSt12__sso_stringC2ERKS_");
+asm (".hidden _ZNSt12__sso_stringC2Ev");
+asm (".hidden _ZNSt12__sso_stringD1Ev");
+asm (".hidden _ZNSt12__sso_stringD2Ev");
+asm (".hidden _ZNSt12__sso_stringaSEOS_");
+asm (".hidden _ZNSt12__sso_stringaSERKS_");
+#if defined(__i386__) || (defined(__powerpc__) && !defined(__powerpc64__))
+asm (".hidden _ZNSt12__sso_stringC1EPKcj");
+asm (".hidden _ZNSt12__sso_stringC2EPKcj");
+#else
+asm (".hidden _ZNSt12__sso_stringC1EPKcm");
+asm (".hidden _ZNSt12__sso_stringC2EPKcm");
+#endif
--- libstdc++-v3/src/nonshared11/del_opv.cc.jj    2017-05-31 12:11:25.242560528 +0200
+++ libstdc++-v3/src/nonshared11/del_opv.cc    2017-05-31 15:25:50.415872619 +0200
@@ -0,0 +1,23 @@
@@ -8164,7 +8145,7 @@
+asm (".hidden _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED2Ev");
--- libstdc++-v3/src/nonshared11/cxx11-locale-inst.cc.jj    2017-05-31 12:11:25.230560672 +0200
+++ libstdc++-v3/src/nonshared11/cxx11-locale-inst.cc    2017-05-31 16:18:13.330258216 +0200
@@ -0,0 +1,44 @@
@@ -0,0 +1,54 @@
+// Copyright (C) 2012-2017 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
@@ -8209,6 +8190,16 @@
+asm (".hidden _ZNKSt5ctypeIcE8do_widenEPKcS2_Pc");
+asm (".hidden _ZNKSt5ctypeIcE8do_widenEc");
+asm (".hidden _ZNKSt5ctypeIcE9do_narrowEcc");
+asm (".hidden _ZSt16__convert_from_vRKP15__locale_structPciPKcz");
+asm (".hidden _ZTISt10money_base");
+asm (".hidden _ZTISt13messages_base");
+asm (".hidden _ZTISt9time_base");
+asm (".hidden _ZTSSt10money_base");
+asm (".hidden _ZTSSt13messages_base");
+asm (".hidden _ZTSSt9time_base");
+#ifdef C_is_char
+asm (".hidden _ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv");
+#endif
--- libstdc++-v3/src/nonshared11/random.cc.jj    2017-05-31 12:11:25.236560600 +0200
+++ libstdc++-v3/src/nonshared11/random.cc    2017-05-31 15:25:50.425872499 +0200
@@ -0,0 +1,71 @@
@@ -8901,8 +8892,8 @@
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11604 "configure"
+#line 11606 "configure"
-#line 11606 "configure"
+#line 11608 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -8910,8 +8901,8 @@
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11710 "configure"
+#line 11712 "configure"
-#line 11712 "configure"
+#line 11714 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -8919,8 +8910,8 @@
   # Fake what AC_TRY_COMPILE does.
 
     cat > conftest.$ac_ext << EOF
-#line 15396 "configure"
+#line 15398 "configure"
-#line 15398 "configure"
+#line 15400 "configure"
 int main()
 {
   typedef bool atomic_type;
@@ -8928,8 +8919,8 @@
     rm -f conftest*
 
     cat > conftest.$ac_ext << EOF
-#line 15431 "configure"
+#line 15433 "configure"
-#line 15433 "configure"
+#line 15435 "configure"
 int main()
 {
   typedef short atomic_type;
@@ -8937,8 +8928,8 @@
     rm -f conftest*
 
     cat > conftest.$ac_ext << EOF
-#line 15466 "configure"
+#line 15468 "configure"
-#line 15468 "configure"
+#line 15470 "configure"
 int main()
 {
   // NB: _Atomic_word not necessarily int.
@@ -8946,8 +8937,8 @@
     rm -f conftest*
 
     cat > conftest.$ac_ext << EOF
-#line 15502 "configure"
+#line 15504 "configure"
-#line 15504 "configure"
+#line 15506 "configure"
 int main()
 {
   typedef long long atomic_type;
@@ -8955,8 +8946,8 @@
   # unnecessary for this test.
 
     cat > conftest.$ac_ext << EOF
-#line 15583 "configure"
+#line 15585 "configure"
-#line 15585 "configure"
+#line 15587 "configure"
 int main()
 {
   _Decimal32 d1;
@@ -8964,8 +8955,8 @@
   # unnecessary for this test.
 
     cat > conftest.$ac_ext << EOF
-#line 15625 "configure"
+#line 15627 "configure"
-#line 15627 "configure"
+#line 15629 "configure"
 template<typename T1, typename T2>
   struct same
   { typedef T2 type; };
@@ -8973,8 +8964,8 @@
     rm -f conftest*
 
     cat > conftest.$ac_ext << EOF
-#line 15659 "configure"
+#line 15661 "configure"
-#line 15661 "configure"
+#line 15663 "configure"
 template<typename T1, typename T2>
   struct same
   { typedef T2 type; };
SOURCES/gcc7-libstdc++-docs.patch
@@ -4,7 +4,7 @@
       <a class="link" href="http://www.fsf.org/" target="_top">FSF
       </a>
     </p><p>
+      Release 7.2.1
+      Release 7.3.1
+    </p><p>
       Permission is granted to copy, distribute and/or modify this
       document under the terms of the GNU Free Documentation
@@ -17,7 +17,7 @@
 </p><p>
-  The API documentation, rendered into HTML, can be viewed online
+  The API documentation, rendered into HTML, can be viewed locally
+  <a class="link" href="api/index.html" target="_top">for the 7.2.1 release</a>,
+  <a class="link" href="api/index.html" target="_top">for the 7.3.1 release</a>,
+  online
   <a class="link" href="http://gcc.gnu.org/onlinedocs/" target="_top">for each GCC release</a>
   and
SOURCES/gcc7-ppc32-retaddr.patch
File was deleted
SOURCES/gcc7-pr84128.patch
New file
@@ -0,0 +1,180 @@
    PR target/84128
    * config/i386/i386.c (release_scratch_register_on_entry): Add new
    OFFSET and RELEASE_VIA_POP arguments.  Use SP+OFFSET to restore
    the scratch if RELEASE_VIA_POP is false.
    (ix86_adjust_stack_and_probe_stack_clash): Un-constify SIZE.
    If we have to save a temporary register, decrement SIZE appropriately.
    Pass new arguments to release_scratch_register_on_entry.
    (ix86_adjust_stack_and_probe): Likewise.
    (ix86_emit_probe_stack_range): Pass new arguments to
    release_scratch_register_on_entry.
    PR target/84128
    * gcc.target/i386/pr84128.c: New test.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index fef34a1..3196ac4 100644
--- gcc/config/i386/i386.c
+++ gcc/config/i386/i386.c
@@ -12567,22 +12567,39 @@ get_scratch_register_on_entry (struct scratch_reg *sr)
     }
 }
-/* Release a scratch register obtained from the preceding function.  */
+/* Release a scratch register obtained from the preceding function.
+
+   If RELEASE_VIA_POP is true, we just pop the register off the stack
+   to release it.  This is what non-Linux systems use with -fstack-check.
+
+   Otherwise we use OFFSET to locate the saved register and the
+   allocated stack space becomes part of the local frame and is
+   deallocated by the epilogue.  */
 static void
-release_scratch_register_on_entry (struct scratch_reg *sr)
+release_scratch_register_on_entry (struct scratch_reg *sr, HOST_WIDE_INT offset,
+                   bool release_via_pop)
 {
   if (sr->saved)
     {
-      struct machine_function *m = cfun->machine;
-      rtx x, insn = emit_insn (gen_pop (sr->reg));
+      if (release_via_pop)
+    {
+      struct machine_function *m = cfun->machine;
+      rtx x, insn = emit_insn (gen_pop (sr->reg));
-      /* The RTX_FRAME_RELATED_P mechanism doesn't know about pop.  */
-      RTX_FRAME_RELATED_P (insn) = 1;
-      x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (UNITS_PER_WORD));
-      x = gen_rtx_SET (stack_pointer_rtx, x);
-      add_reg_note (insn, REG_FRAME_RELATED_EXPR, x);
-      m->fs.sp_offset -= UNITS_PER_WORD;
+      /* The RX FRAME_RELATED_P mechanism doesn't know about pop.  */
+      RTX_FRAME_RELATED_P (insn) = 1;
+      x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (UNITS_PER_WORD));
+      x = gen_rtx_SET (stack_pointer_rtx, x);
+      add_reg_note (insn, REG_FRAME_RELATED_EXPR, x);
+      m->fs.sp_offset -= UNITS_PER_WORD;
+    }
+      else
+    {
+      rtx x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (offset));
+      x = gen_rtx_SET (sr->reg, gen_rtx_MEM (word_mode, x));
+      emit_insn (x);
+    }
     }
 }
@@ -12597,7 +12614,7 @@ release_scratch_register_on_entry (struct scratch_reg *sr)
    pushed on the stack.  */
 static void
-ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size,
+ix86_adjust_stack_and_probe_stack_clash (HOST_WIDE_INT size,
                      const bool int_registers_saved)
 {
   struct machine_function *m = cfun->machine;
@@ -12713,6 +12730,12 @@ ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size,
       struct scratch_reg sr;
       get_scratch_register_on_entry (&sr);
+      /* If we needed to save a register, then account for any space
+     that was pushed (we are not going to pop the register when
+     we do the restore).  */
+      if (sr.saved)
+    size -= UNITS_PER_WORD;
+
       /* Step 1: round SIZE down to a multiple of the interval.  */
       HOST_WIDE_INT rounded_size = size & -probe_interval;
@@ -12761,7 +12784,9 @@ ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size,
                    m->fs.cfa_reg == stack_pointer_rtx);
       dump_stack_clash_frame_info (PROBE_LOOP, size != rounded_size);
-      release_scratch_register_on_entry (&sr);
+      /* This does not deallocate the space reserved for the scratch
+     register.  That will be deallocated in the epilogue.  */
+      release_scratch_register_on_entry (&sr, size, false);
     }
   /* Make sure nothing is scheduled before we are done.  */
@@ -12774,7 +12799,7 @@ ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size,
    pushed on the stack.  */
 static void
-ix86_adjust_stack_and_probe (const HOST_WIDE_INT size,
+ix86_adjust_stack_and_probe (HOST_WIDE_INT size,
                  const bool int_registers_saved)
 {
   /* We skip the probe for the first interval + a small dope of 4 words and
@@ -12847,6 +12872,11 @@ ix86_adjust_stack_and_probe (const HOST_WIDE_INT size,
       get_scratch_register_on_entry (&sr);
+      /* If we needed to save a register, then account for any space
+     that was pushed (we are not going to pop the register when
+     we do the restore).  */
+      if (sr.saved)
+    size -= UNITS_PER_WORD;
       /* Step 1: round SIZE to the previous multiple of the interval.  */
@@ -12906,7 +12936,9 @@ ix86_adjust_stack_and_probe (const HOST_WIDE_INT size,
                             (get_probe_interval ()
                              + dope))));
-      release_scratch_register_on_entry (&sr);
+      /* This does not deallocate the space reserved for the scratch
+     register.  That will be deallocated in the epilogue.  */
+      release_scratch_register_on_entry (&sr, size, false);
     }
   /* Even if the stack pointer isn't the CFA register, we need to correctly
@@ -13055,7 +13087,7 @@ ix86_emit_probe_stack_range (HOST_WIDE_INT first, HOST_WIDE_INT size,
                                sr.reg),
                      rounded_size - size));
-      release_scratch_register_on_entry (&sr);
+      release_scratch_register_on_entry (&sr, size, true);
     }
   /* Make sure nothing is scheduled before we are done.  */
diff --git a/gcc/testsuite/gcc.target/i386/pr84128.c b/gcc/testsuite/gcc.target/i386/pr84128.c
new file mode 100644
index 0000000..a8323fd6
--- /dev/null
+++ gcc/testsuite/gcc.target/i386/pr84128.c
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -march=i686 -mtune=generic -fstack-clash-protection" } */
+/* { dg-require-effective-target ia32 } */
+
+__attribute__ ((noinline, noclone, weak, regparm (3)))
+int
+f1 (long arg0, int (*pf) (long, void *))
+{
+  unsigned char buf[32768];
+  return pf (arg0, buf);
+}
+
+__attribute__ ((noinline, noclone, weak))
+int
+f2 (long arg0, void *ignored)
+{
+  if (arg0 != 17)
+    __builtin_abort ();
+  return 19;
+}
+
+int
+main (void)
+{
+  if (f1 (17, f2) != 19)
+    __builtin_abort ();
+  return 0;
+}
+
+
SOURCES/gcc7-pr84524.patch
New file
@@ -0,0 +1,96 @@
2018-02-23  Jakub Jelinek  <jakub@redhat.com>
    PR target/84524
    * config/i386/sse.md (*<code><mode>3): Replace <mask_prefix3> with
    orig,vex.
    (*<plusminus_insn><mode>3): Likewise.  Remove <mask_operand3> uses.
    * gcc.c-torture/execute/pr84524.c: New test.
    * gcc.target/i386/avx512bw-pr84524.c: New test.
--- gcc/config/i386/sse.md.jj    2018-02-13 09:31:24.769607162 +0100
+++ gcc/config/i386/sse.md    2018-02-23 11:51:00.271477979 +0100
@@ -9938,11 +9938,11 @@ (define_insn "*<plusminus_insn><mode>3"
    && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
   "@
    p<plusminus_mnemonic><ssemodesuffix>\t{%2, %0|%0, %2}
-   vp<plusminus_mnemonic><ssemodesuffix>\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}"
+   vp<plusminus_mnemonic><ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
   [(set_attr "isa" "noavx,avx")
    (set_attr "type" "sseiadd")
    (set_attr "prefix_data16" "1,*")
-   (set_attr "prefix" "<mask_prefix3>")
+   (set_attr "prefix" "orig,vex")
    (set_attr "mode" "<sseinsnmode>")])
 (define_insn "*<plusminus_insn><mode>3_mask"
@@ -11822,7 +11822,7 @@ (define_insn "*<code><mode>3"
         (eq_attr "mode" "TI"))
        (const_string "1")
        (const_string "*")))
-   (set_attr "prefix" "<mask_prefix3>")
+   (set_attr "prefix" "orig,vex")
    (set (attr "mode")
     (cond [(and (match_test "<MODE_SIZE> == 16")
             (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
--- gcc/testsuite/gcc.c-torture/execute/pr84524.c.jj    2018-02-23 11:54:51.913492631 +0100
+++ gcc/testsuite/gcc.c-torture/execute/pr84524.c    2018-02-23 11:59:55.467511836 +0100
@@ -0,0 +1,41 @@
+/* PR target/84524 */
+
+__attribute__((noipa)) void
+foo (unsigned short *x)
+{
+  unsigned short i, v;
+  unsigned char j;
+  for (i = 0; i < 256; i++)
+    {
+      v = i << 8;
+      for (j = 0; j < 8; j++)
+    if (v & 0x8000)
+      v = (v << 1) ^ 0x1021;
+    else
+      v = v << 1;
+      x[i] = v;
+    }
+}
+
+int
+main ()
+{
+  unsigned short a[256];
+
+  foo (a);
+  for (int i = 0; i < 256; i++)
+    {
+      unsigned short v = i << 8;
+      for (int j = 0; j < 8; j++)
+    {
+      asm volatile ("" : "+r" (v));
+      if (v & 0x8000)
+        v = (v << 1) ^ 0x1021;
+      else
+        v = v << 1;
+    }
+      if (a[i] != v)
+    __builtin_abort ();
+    }
+  return 0;
+}
--- gcc/testsuite/gcc.target/i386/avx512bw-pr84524.c.jj    2018-02-23 11:58:16.919505601 +0100
+++ gcc/testsuite/gcc.target/i386/avx512bw-pr84524.c    2018-02-23 11:58:57.377508169 +0100
@@ -0,0 +1,14 @@
+/* PR target/84524 */
+/* { dg-do run { target avx512bw } } */
+/* { dg-options "-O3 -mavx512bw" } */
+
+#include "avx512bw-check.h"
+
+#define main() do_main()
+#include "../../gcc.c-torture/execute/pr84524.c"
+
+static void
+avx512bw_test (void)
+{
+  do_main ();
+}
SOURCES/gcc7-rh1512529-aarch64.patch
New file
@@ -0,0 +1,2477 @@
commit 3dfd5ffd7ce1f940e474a0e7718d968b00a2a7c8
Author: Jeff Law <law@redhat.com>
Date:   Wed Nov 22 12:01:56 2017 -0700
    aarch64 support
--- gcc/config/aarch64/aarch64.c
+++ gcc/config/aarch64/aarch64.c
@@ -2747,7 +2747,14 @@ aarch64_output_probe_stack_range (rtx reg1, rtx reg2)
   output_asm_insn ("sub\t%0, %0, %1", xops);
   /* Probe at TEST_ADDR.  */
-  output_asm_insn ("str\txzr, [%0]", xops);
+  if (flag_stack_clash_protection)
+    {
+      gcc_assert (xops[0] == stack_pointer_rtx);
+      xops[1] = GEN_INT (PROBE_INTERVAL - 8);
+      output_asm_insn ("str\txzr, [%0, %1]", xops);
+    }
+  else
+    output_asm_insn ("str\txzr, [%0]", xops);
   /* Test if TEST_ADDR == LAST_ADDR.  */
   xops[1] = reg2;
@@ -3511,6 +3518,127 @@ aarch64_set_handled_components (sbitmap components)
       cfun->machine->reg_is_wrapped_separately[regno] = true;
 }
+/* Allocate SIZE bytes of stack space using SCRATCH_REG as a scratch
+   register.  */
+
+static void
+aarch64_allocate_and_probe_stack_space (int scratchreg, HOST_WIDE_INT size,
+                    bool frame_related_p)
+{
+  HOST_WIDE_INT probe_interval
+    = 1 << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL);
+  HOST_WIDE_INT guard_size
+    = 1 << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE);
+  HOST_WIDE_INT guard_used_by_caller = 1024;
+
+  /* SIZE should be large enough to require probing here.  ie, it
+     must be larger than GUARD_SIZE - GUARD_USED_BY_CALLER.
+
+     We can allocate GUARD_SIZE - GUARD_USED_BY_CALLER as a single chunk
+     without any probing.  */
+  gcc_assert (size >= guard_size - guard_used_by_caller);
+  aarch64_sub_sp (scratchreg, guard_size - guard_used_by_caller,
+          frame_related_p);
+  HOST_WIDE_INT orig_size = size;
+  size -= (guard_size - guard_used_by_caller);
+
+  HOST_WIDE_INT rounded_size = size & -probe_interval;
+  HOST_WIDE_INT residual = size - rounded_size;
+
+  /* We can handle a small number of allocations/probes inline.  Otherwise
+     punt to a loop.  */
+  if (rounded_size && rounded_size <= 4 * probe_interval)
+    {
+      /* We don't use aarch64_sub_sp here because we don't want to
+     repeatedly load SCRATCHREG.  */
+      rtx scratch_rtx = gen_rtx_REG (Pmode, scratchreg);
+      if (probe_interval > ARITH_FACTOR)
+    emit_move_insn (scratch_rtx, GEN_INT (-probe_interval));
+      else
+    scratch_rtx = GEN_INT (-probe_interval);
+
+      for (HOST_WIDE_INT i = 0; i < rounded_size; i += probe_interval)
+    {
+      rtx_insn *insn = emit_insn (gen_add2_insn (stack_pointer_rtx,
+                             scratch_rtx));
+          add_reg_note (insn, REG_STACK_CHECK, const0_rtx);
+
+      if (probe_interval > ARITH_FACTOR)
+        {
+          RTX_FRAME_RELATED_P (insn) = 1;
+          rtx adj = plus_constant (Pmode, stack_pointer_rtx, -probe_interval);
+          add_reg_note (insn, REG_CFA_ADJUST_CFA,
+                gen_rtx_SET (stack_pointer_rtx, adj));
+        }
+
+      emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx,
+                       (probe_interval
+                        - GET_MODE_SIZE (word_mode))));
+      emit_insn (gen_blockage ());
+    }
+      dump_stack_clash_frame_info (PROBE_INLINE, size != rounded_size);
+    }
+  else if (rounded_size)
+    {
+      /* Compute the ending address.  */
+      rtx temp = gen_rtx_REG (word_mode, scratchreg);
+      emit_move_insn (temp, GEN_INT (-rounded_size));
+      rtx_insn *insn
+     = emit_insn (gen_add3_insn (temp, stack_pointer_rtx, temp));
+
+      /* For the initial allocation, we don't have a frame pointer
+     set up, so we always need CFI notes.  If we're doing the
+     final allocation, then we may have a frame pointer, in which
+     case it is the CFA, otherwise we need CFI notes.
+
+     We can determine which allocation we are doing by looking at
+     the temporary register.  IP0 is the initial allocation, IP1
+     is the final allocation.  */
+      if (scratchreg == IP0_REGNUM || !frame_pointer_needed)
+    {
+      /* We want the CFA independent of the stack pointer for the
+         duration of the loop.  */
+      add_reg_note (insn, REG_CFA_DEF_CFA,
+            plus_constant (Pmode, temp,
+                       (rounded_size + (orig_size - size))));
+      RTX_FRAME_RELATED_P (insn) = 1;
+    }
+
+      /* This allocates and probes the stack.
+
+     It also probes at a 4k interval regardless of the value of
+     PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL.  */
+      insn = emit_insn (gen_probe_stack_range (stack_pointer_rtx,
+                           stack_pointer_rtx, temp));
+
+      /* Now reset the CFA register if needed.  */
+      if (scratchreg == IP0_REGNUM || !frame_pointer_needed)
+    {
+      add_reg_note (insn, REG_CFA_DEF_CFA,
+            plus_constant (Pmode, stack_pointer_rtx,
+                       (rounded_size + (orig_size - size))));
+      RTX_FRAME_RELATED_P (insn) = 1;
+    }
+
+      emit_insn (gen_blockage ());
+      dump_stack_clash_frame_info (PROBE_LOOP, size != rounded_size);
+    }
+  else
+    dump_stack_clash_frame_info (PROBE_INLINE, size != rounded_size);
+
+  /* Handle any residuals.
+     Note that any residual must be probed.  */
+  if (residual)
+    {
+      aarch64_sub_sp (scratchreg, residual, frame_related_p);
+      add_reg_note (get_last_insn (), REG_STACK_CHECK, const0_rtx);
+      emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx,
+                       (residual - GET_MODE_SIZE (word_mode))));
+      emit_insn (gen_blockage ());
+    }
+  return;
+}
+
 /* AArch64 stack frames generated by this compiler look like:
     +-------------------------------+
@@ -3592,7 +3720,54 @@ aarch64_expand_prologue (void)
     aarch64_emit_probe_stack_range (get_stack_check_protect (), frame_size);
     }
-  aarch64_sub_sp (IP0_REGNUM, initial_adjust, true);
+  /* We do not fully protect aarch64 against stack clash style attacks
+     as doing so would be prohibitively expensive with less utility over
+     time as newer compilers are deployed.
+
+     We assume the guard is at least 64k.  Furthermore, we assume that
+     the caller has not pushed the stack pointer more than 1k into
+     the guard.  A caller that pushes the stack pointer than 1k into
+     the guard is considered invalid.
+
+     Note that the caller's ability to push the stack pointer into the
+     guard is a function of the number and size of outgoing arguments and/or
+     dynamic stack allocations due to the mandatory save of the link register
+     in the caller's frame.
+
+     With those assumptions the callee can allocate up to 63k of stack
+     space without probing.
+
+     When probing is needed, we emit a probe at the start of the prologue
+     and every PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL bytes thereafter.
+
+     We have to track how much space has been allocated, but we do not
+     track stores into the stack as implicit probes except for the
+     fp/lr store.  */
+  HOST_WIDE_INT guard_size
+    = 1 << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE);
+  HOST_WIDE_INT guard_used_by_caller = 1024;
+  if (flag_stack_clash_protection)
+    {
+      if (frame_size == 0)
+    dump_stack_clash_frame_info (NO_PROBE_NO_FRAME, false);
+      else if (initial_adjust < guard_size - guard_used_by_caller
+           && final_adjust < guard_size - guard_used_by_caller)
+    dump_stack_clash_frame_info (NO_PROBE_SMALL_FRAME, true);
+    }
+
+  /* In theory we should never have both an initial adjustment
+     and a callee save adjustment.  Verify that is the case since the
+     code below does not handle it for -fstack-clash-protection.  */
+  gcc_assert (initial_adjust == 0 || callee_adjust == 0);
+
+  /* Only probe if the initial adjustment is larger than the guard
+     less the amount of the guard reserved for use by the caller's
+     outgoing args.  */
+  if (flag_stack_clash_protection
+      && initial_adjust >= guard_size - guard_used_by_caller)
+    aarch64_allocate_and_probe_stack_space (IP0_REGNUM, initial_adjust, true);
+  else
+    aarch64_sub_sp (IP0_REGNUM, initial_adjust, true);
   if (callee_adjust != 0)
     aarch64_push_regs (reg1, reg2, callee_adjust);
@@ -3613,7 +3788,30 @@ aarch64_expand_prologue (void)
                  callee_adjust != 0 || frame_pointer_needed);
   aarch64_save_callee_saves (DFmode, callee_offset, V0_REGNUM, V31_REGNUM,
                  callee_adjust != 0 || frame_pointer_needed);
-  aarch64_sub_sp (IP1_REGNUM, final_adjust, !frame_pointer_needed);
+
+  /* We may need to probe the final adjustment as well.  */
+  if (flag_stack_clash_protection && final_adjust != 0)
+    {
+      /* First probe if the final adjustment is larger than the guard size
+     less the amount of the guard reserved for use by the caller's
+     outgoing args.  */
+      if (final_adjust >= guard_size - guard_used_by_caller)
+    aarch64_allocate_and_probe_stack_space (IP1_REGNUM, final_adjust,                            !frame_pointer_needed);
+      else
+    aarch64_sub_sp (IP1_REGNUM, final_adjust, !frame_pointer_needed);
+
+      /* We must also probe if the final adjustment is larger than the guard
+     that is assumed used by the caller.  This may be sub-optimal.  */
+      if (final_adjust >= guard_used_by_caller)
+    {
+      if (dump_file)
+        fprintf (dump_file,
+             "Stack clash aarch64 large outgoing arg, probing\n");
+      emit_stack_probe (stack_pointer_rtx);
+    }
+    }
+  else
+    aarch64_sub_sp (IP1_REGNUM, final_adjust, !frame_pointer_needed);
 }
 /* Return TRUE if we can use a simple_return insn.
@@ -3679,7 +3877,11 @@ aarch64_expand_epilogue (bool for_sibcall)
       RTX_FRAME_RELATED_P (insn) = callee_adjust == 0;
     }
   else
-    aarch64_add_sp (IP1_REGNUM, final_adjust, df_regs_ever_live_p (IP1_REGNUM));
+    aarch64_add_sp (IP1_REGNUM, final_adjust,
+            /* A stack clash protection prologue may not have
+               left IP1_REGNUM in a usable state.  */
+            (flag_stack_clash_protection
+             || df_regs_ever_live_p (IP1_REGNUM)));
   aarch64_restore_callee_saves (DImode, callee_offset, R0_REGNUM, R30_REGNUM,
                 callee_adjust != 0, &cfi_ops);
@@ -3702,7 +3904,11 @@ aarch64_expand_epilogue (bool for_sibcall)
       cfi_ops = NULL;
     }
-  aarch64_add_sp (IP0_REGNUM, initial_adjust, df_regs_ever_live_p (IP0_REGNUM));
+  /* A stack clash protection prologue may not have left IP0_REGNUM
+     in a usable state.  */
+  aarch64_add_sp (IP0_REGNUM, initial_adjust,
+          (flag_stack_clash_protection
+           || df_regs_ever_live_p (IP0_REGNUM)));
   if (cfi_ops)
     {
@@ -8696,6 +8902,12 @@ aarch64_override_options_internal (struct gcc_options *opts)
                opts->x_param_values,
                global_options_set.x_param_values);
+  /* We assume the guard page is 64k.  */
+  maybe_set_param_value (PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE,
+             16,
+             opts->x_param_values,
+             global_options_set.x_param_values);
+
   aarch64_override_options_after_change_1 (opts);
 }
@@ -14726,6 +14938,28 @@ aarch64_sched_can_speculate_insn (rtx_insn *insn)
     }
 }
+/* It has been decided that to allow up to 1kb of outgoing argument
+   space to be allocated w/o probing.  If more than 1kb of outgoing
+   argment space is allocated, then it must be probed and the last
+   probe must occur no more than 1kbyte away from the end of the
+   allocated space.
+
+   This implies that the residual part of an alloca allocation may
+   need probing in cases where the generic code might not otherwise
+   think a probe is needed.
+
+   This target hook returns TRUE when allocating RESIDUAL bytes of
+   alloca space requires an additional probe, otherwise FALSE is
+   returned.  */
+
+static bool
+aarch64_stack_clash_protection_final_dynamic_probe (rtx residual)
+{
+  return (residual == CONST0_RTX (Pmode)
+      || GET_CODE (residual) != CONST_INT
+      || INTVAL (residual) >= 1024);
+}
+
 /* Target-specific selftests.  */
 #if CHECKING_P
@@ -15154,6 +15388,10 @@ aarch64_libgcc_floating_mode_supported_p
 #undef TARGET_CUSTOM_FUNCTION_DESCRIPTORS
 #define TARGET_CUSTOM_FUNCTION_DESCRIPTORS 4
+#undef TARGET_STACK_CLASH_PROTECTION_FINAL_DYNAMIC_PROBE
+#define TARGET_STACK_CLASH_PROTECTION_FINAL_DYNAMIC_PROBE \
+  aarch64_stack_clash_protection_final_dynamic_probe
+
 #if CHECKING_P
 #undef TARGET_RUN_TARGET_SELFTESTS
 #define TARGET_RUN_TARGET_SELFTESTS selftest::aarch64_run_selftests
--- gcc/config/aarch64/aarch64.md
+++ gcc/config/aarch64/aarch64.md
@@ -5413,7 +5413,7 @@
 )
 (define_insn "probe_stack_range"
-  [(set (match_operand:DI 0 "register_operand" "=r")
+  [(set (match_operand:DI 0 "register_operand" "=rk")
     (unspec_volatile:DI [(match_operand:DI 1 "register_operand" "0")
                  (match_operand:DI 2 "register_operand" "r")]
                   UNSPECV_PROBE_STACK_RANGE))]
--- gcc/testsuite/gcc.dg/stack-check-16.c
+++ gcc/testsuite/gcc.dg/stack-check-16.c
@@ -0,0 +1,2017 @@
+/* { dg-do compile } */
+/* { dg-options "-fstack-clash-protection -w" } */
+/* { dg-require-effective-target supports_stack_clash_protection } */
+
+int printf (const char *, ...);
+void blah (char *space) { }
+
+__attribute__ ((optimize ("-O0")))
+int do_test (void)
+{
+    blah (alloca (10));
+    mtrace ();
+    printf (
+"%1$s" "%2$s" "%3$s" "%4$s" "%5$s" "%6$s" "%7$s" "%8$s" "%9$s" "%10$s"
+"%11$s" "%12$s" "%13$s" "%14$s" "%15$s" "%16$s" "%17$s" "%18$s" "%19$s" "%20$s"
+"%21$s" "%22$s" "%23$s" "%24$s" "%25$s" "%26$s" "%27$s" "%28$s" "%29$s" "%30$s"
+"%31$s" "%32$s" "%33$s" "%34$s" "%35$s" "%36$s" "%37$s" "%38$s" "%39$s" "%40$s"
+"%41$s" "%42$s" "%43$s" "%44$s" "%45$s" "%46$s" "%47$s" "%48$s" "%49$s" "%50$s"
+"%51$s" "%52$s" "%53$s" "%54$s" "%55$s" "%56$s" "%57$s" "%58$s" "%59$s" "%60$s"
+"%61$s" "%62$s" "%63$s" "%64$s" "%65$s" "%66$s" "%67$s" "%68$s" "%69$s" "%70$s"
+"%71$s" "%72$s" "%73$s" "%74$s" "%75$s" "%76$s" "%77$s" "%78$s" "%79$s" "%80$s"
+"%81$s" "%82$s" "%83$s" "%84$s" "%85$s" "%86$s" "%87$s" "%88$s" "%89$s" "%90$s"
+"%91$s" "%92$s" "%93$s" "%94$s" "%95$s" "%96$s" "%97$s" "%98$s" "%99$s" "%100$s"
+"%101$s" "%102$s" "%103$s" "%104$s" "%105$s" "%106$s" "%107$s" "%108$s" "%109$s" "%110$s"
+"%111$s" "%112$s" "%113$s" "%114$s" "%115$s" "%116$s" "%117$s" "%118$s" "%119$s" "%120$s"
+"%121$s" "%122$s" "%123$s" "%124$s" "%125$s" "%126$s" "%127$s" "%128$s" "%129$s" "%130$s"
+"%131$s" "%132$s" "%133$s" "%134$s" "%135$s" "%136$s" "%137$s" "%138$s" "%139$s" "%140$s"
+"%141$s" "%142$s" "%143$s" "%144$s" "%145$s" "%146$s" "%147$s" "%148$s" "%149$s" "%150$s"
+"%151$s" "%152$s" "%153$s" "%154$s" "%155$s" "%156$s" "%157$s" "%158$s" "%159$s" "%160$s"
+"%161$s" "%162$s" "%163$s" "%164$s" "%165$s" "%166$s" "%167$s" "%168$s" "%169$s" "%170$s"
+"%171$s" "%172$s" "%173$s" "%174$s" "%175$s" "%176$s" "%177$s" "%178$s" "%179$s" "%180$s"
+"%181$s" "%182$s" "%183$s" "%184$s" "%185$s" "%186$s" "%187$s" "%188$s" "%189$s" "%190$s"
+"%191$s" "%192$s" "%193$s" "%194$s" "%195$s" "%196$s" "%197$s" "%198$s" "%199$s" "%200$s"
+"%201$s" "%202$s" "%203$s" "%204$s" "%205$s" "%206$s" "%207$s" "%208$s" "%209$s" "%210$s"
+"%211$s" "%212$s" "%213$s" "%214$s" "%215$s" "%216$s" "%217$s" "%218$s" "%219$s" "%220$s"
+"%221$s" "%222$s" "%223$s" "%224$s" "%225$s" "%226$s" "%227$s" "%228$s" "%229$s" "%230$s"
+"%231$s" "%232$s" "%233$s" "%234$s" "%235$s" "%236$s" "%237$s" "%238$s" "%239$s" "%240$s"
+"%241$s" "%242$s" "%243$s" "%244$s" "%245$s" "%246$s" "%247$s" "%248$s" "%249$s" "%250$s"
+"%251$s" "%252$s" "%253$s" "%254$s" "%255$s" "%256$s" "%257$s" "%258$s" "%259$s" "%260$s"
+"%261$s" "%262$s" "%263$s" "%264$s" "%265$s" "%266$s" "%267$s" "%268$s" "%269$s" "%270$s"
+"%271$s" "%272$s" "%273$s" "%274$s" "%275$s" "%276$s" "%277$s" "%278$s" "%279$s" "%280$s"
+"%281$s" "%282$s" "%283$s" "%284$s" "%285$s" "%286$s" "%287$s" "%288$s" "%289$s" "%290$s"
+"%291$s" "%292$s" "%293$s" "%294$s" "%295$s" "%296$s" "%297$s" "%298$s" "%299$s" "%300$s"
+"%301$s" "%302$s" "%303$s" "%304$s" "%305$s" "%306$s" "%307$s" "%308$s" "%309$s" "%310$s"
+"%311$s" "%312$s" "%313$s" "%314$s" "%315$s" "%316$s" "%317$s" "%318$s" "%319$s" "%320$s"
+"%321$s" "%322$s" "%323$s" "%324$s" "%325$s" "%326$s" "%327$s" "%328$s" "%329$s" "%330$s"
+"%331$s" "%332$s" "%333$s" "%334$s" "%335$s" "%336$s" "%337$s" "%338$s" "%339$s" "%340$s"
+"%341$s" "%342$s" "%343$s" "%344$s" "%345$s" "%346$s" "%347$s" "%348$s" "%349$s" "%350$s"
+"%351$s" "%352$s" "%353$s" "%354$s" "%355$s" "%356$s" "%357$s" "%358$s" "%359$s" "%360$s"
+"%361$s" "%362$s" "%363$s" "%364$s" "%365$s" "%366$s" "%367$s" "%368$s" "%369$s" "%370$s"
+"%371$s" "%372$s" "%373$s" "%374$s" "%375$s" "%376$s" "%377$s" "%378$s" "%379$s" "%380$s"
+"%381$s" "%382$s" "%383$s" "%384$s" "%385$s" "%386$s" "%387$s" "%388$s" "%389$s" "%390$s"
+"%391$s" "%392$s" "%393$s" "%394$s" "%395$s" "%396$s" "%397$s" "%398$s" "%399$s" "%400$s"
+"%401$s" "%402$s" "%403$s" "%404$s" "%405$s" "%406$s" "%407$s" "%408$s" "%409$s" "%410$s"
+"%411$s" "%412$s" "%413$s" "%414$s" "%415$s" "%416$s" "%417$s" "%418$s" "%419$s" "%420$s"
+"%421$s" "%422$s" "%423$s" "%424$s" "%425$s" "%426$s" "%427$s" "%428$s" "%429$s" "%430$s"
+"%431$s" "%432$s" "%433$s" "%434$s" "%435$s" "%436$s" "%437$s" "%438$s" "%439$s" "%440$s"
+"%441$s" "%442$s" "%443$s" "%444$s" "%445$s" "%446$s" "%447$s" "%448$s" "%449$s" "%450$s"
+"%451$s" "%452$s" "%453$s" "%454$s" "%455$s" "%456$s" "%457$s" "%458$s" "%459$s" "%460$s"
+"%461$s" "%462$s" "%463$s" "%464$s" "%465$s" "%466$s" "%467$s" "%468$s" "%469$s" "%470$s"
+"%471$s" "%472$s" "%473$s" "%474$s" "%475$s" "%476$s" "%477$s" "%478$s" "%479$s" "%480$s"
+"%481$s" "%482$s" "%483$s" "%484$s" "%485$s" "%486$s" "%487$s" "%488$s" "%489$s" "%490$s"
+"%491$s" "%492$s" "%493$s" "%494$s" "%495$s" "%496$s" "%497$s" "%498$s" "%499$s" "%500$s"
+"%501$s" "%502$s" "%503$s" "%504$s" "%505$s" "%506$s" "%507$s" "%508$s" "%509$s" "%510$s"
+"%511$s" "%512$s" "%513$s" "%514$s" "%515$s" "%516$s" "%517$s" "%518$s" "%519$s" "%520$s"
+"%521$s" "%522$s" "%523$s" "%524$s" "%525$s" "%526$s" "%527$s" "%528$s" "%529$s" "%530$s"
+"%531$s" "%532$s" "%533$s" "%534$s" "%535$s" "%536$s" "%537$s" "%538$s" "%539$s" "%540$s"
+"%541$s" "%542$s" "%543$s" "%544$s" "%545$s" "%546$s" "%547$s" "%548$s" "%549$s" "%550$s"
+"%551$s" "%552$s" "%553$s" "%554$s" "%555$s" "%556$s" "%557$s" "%558$s" "%559$s" "%560$s"
+"%561$s" "%562$s" "%563$s" "%564$s" "%565$s" "%566$s" "%567$s" "%568$s" "%569$s" "%570$s"
+"%571$s" "%572$s" "%573$s" "%574$s" "%575$s" "%576$s" "%577$s" "%578$s" "%579$s" "%580$s"
+"%581$s" "%582$s" "%583$s" "%584$s" "%585$s" "%586$s" "%587$s" "%588$s" "%589$s" "%590$s"
+"%591$s" "%592$s" "%593$s" "%594$s" "%595$s" "%596$s" "%597$s" "%598$s" "%599$s" "%600$s"
+"%601$s" "%602$s" "%603$s" "%604$s" "%605$s" "%606$s" "%607$s" "%608$s" "%609$s" "%610$s"
+"%611$s" "%612$s" "%613$s" "%614$s" "%615$s" "%616$s" "%617$s" "%618$s" "%619$s" "%620$s"
+"%621$s" "%622$s" "%623$s" "%624$s" "%625$s" "%626$s" "%627$s" "%628$s" "%629$s" "%630$s"
+"%631$s" "%632$s" "%633$s" "%634$s" "%635$s" "%636$s" "%637$s" "%638$s" "%639$s" "%640$s"
+"%641$s" "%642$s" "%643$s" "%644$s" "%645$s" "%646$s" "%647$s" "%648$s" "%649$s" "%650$s"
+"%651$s" "%652$s" "%653$s" "%654$s" "%655$s" "%656$s" "%657$s" "%658$s" "%659$s" "%660$s"
+"%661$s" "%662$s" "%663$s" "%664$s" "%665$s" "%666$s" "%667$s" "%668$s" "%669$s" "%670$s"
+"%671$s" "%672$s" "%673$s" "%674$s" "%675$s" "%676$s" "%677$s" "%678$s" "%679$s" "%680$s"
+"%681$s" "%682$s" "%683$s" "%684$s" "%685$s" "%686$s" "%687$s" "%688$s" "%689$s" "%690$s"
+"%691$s" "%692$s" "%693$s" "%694$s" "%695$s" "%696$s" "%697$s" "%698$s" "%699$s" "%700$s"
+"%701$s" "%702$s" "%703$s" "%704$s" "%705$s" "%706$s" "%707$s" "%708$s" "%709$s" "%710$s"
+"%711$s" "%712$s" "%713$s" "%714$s" "%715$s" "%716$s" "%717$s" "%718$s" "%719$s" "%720$s"
+"%721$s" "%722$s" "%723$s" "%724$s" "%725$s" "%726$s" "%727$s" "%728$s" "%729$s" "%730$s"
+"%731$s" "%732$s" "%733$s" "%734$s" "%735$s" "%736$s" "%737$s" "%738$s" "%739$s" "%740$s"
+"%741$s" "%742$s" "%743$s" "%744$s" "%745$s" "%746$s" "%747$s" "%748$s" "%749$s" "%750$s"
+"%751$s" "%752$s" "%753$s" "%754$s" "%755$s" "%756$s" "%757$s" "%758$s" "%759$s" "%760$s"
+"%761$s" "%762$s" "%763$s" "%764$s" "%765$s" "%766$s" "%767$s" "%768$s" "%769$s" "%770$s"
+"%771$s" "%772$s" "%773$s" "%774$s" "%775$s" "%776$s" "%777$s" "%778$s" "%779$s" "%780$s"
+"%781$s" "%782$s" "%783$s" "%784$s" "%785$s" "%786$s" "%787$s" "%788$s" "%789$s" "%790$s"
+"%791$s" "%792$s" "%793$s" "%794$s" "%795$s" "%796$s" "%797$s" "%798$s" "%799$s" "%800$s"
+"%801$s" "%802$s" "%803$s" "%804$s" "%805$s" "%806$s" "%807$s" "%808$s" "%809$s" "%810$s"
+"%811$s" "%812$s" "%813$s" "%814$s" "%815$s" "%816$s" "%817$s" "%818$s" "%819$s" "%820$s"
+"%821$s" "%822$s" "%823$s" "%824$s" "%825$s" "%826$s" "%827$s" "%828$s" "%829$s" "%830$s"
+"%831$s" "%832$s" "%833$s" "%834$s" "%835$s" "%836$s" "%837$s" "%838$s" "%839$s" "%840$s"
+"%841$s" "%842$s" "%843$s" "%844$s" "%845$s" "%846$s" "%847$s" "%848$s" "%849$s" "%850$s"
+"%851$s" "%852$s" "%853$s" "%854$s" "%855$s" "%856$s" "%857$s" "%858$s" "%859$s" "%860$s"
+"%861$s" "%862$s" "%863$s" "%864$s" "%865$s" "%866$s" "%867$s" "%868$s" "%869$s" "%870$s"
+"%871$s" "%872$s" "%873$s" "%874$s" "%875$s" "%876$s" "%877$s" "%878$s" "%879$s" "%880$s"
+"%881$s" "%882$s" "%883$s" "%884$s" "%885$s" "%886$s" "%887$s" "%888$s" "%889$s" "%890$s"
+"%891$s" "%892$s" "%893$s" "%894$s" "%895$s" "%896$s" "%897$s" "%898$s" "%899$s" "%900$s"
+"%901$s" "%902$s" "%903$s" "%904$s" "%905$s" "%906$s" "%907$s" "%908$s" "%909$s" "%910$s"
+"%911$s" "%912$s" "%913$s" "%914$s" "%915$s" "%916$s" "%917$s" "%918$s" "%919$s" "%920$s"
+"%921$s" "%922$s" "%923$s" "%924$s" "%925$s" "%926$s" "%927$s" "%928$s" "%929$s" "%930$s"
+"%931$s" "%932$s" "%933$s" "%934$s" "%935$s" "%936$s" "%937$s" "%938$s" "%939$s" "%940$s"
+"%941$s" "%942$s" "%943$s" "%944$s" "%945$s" "%946$s" "%947$s" "%948$s" "%949$s" "%950$s"
+"%951$s" "%952$s" "%953$s" "%954$s" "%955$s" "%956$s" "%957$s" "%958$s" "%959$s" "%960$s"
+"%961$s" "%962$s" "%963$s" "%964$s" "%965$s" "%966$s" "%967$s" "%968$s" "%969$s" "%970$s"
+"%971$s" "%972$s" "%973$s" "%974$s" "%975$s" "%976$s" "%977$s" "%978$s" "%979$s" "%980$s"
+"%981$s" "%982$s" "%983$s" "%984$s" "%985$s" "%986$s" "%987$s" "%988$s" "%989$s" "%990$s"
+"%991$s" "%992$s" "%993$s" "%994$s" "%995$s" "%996$s" "%997$s" "%998$s" "%999$s" "%1000$s"
+"%1001$s" "%1002$s" "%1003$s" "%1004$s" "%1005$s" "%1006$s" "%1007$s" "%1008$s" "%1009$s" "%1010$s"
+"%1011$s" "%1012$s" "%1013$s" "%1014$s" "%1015$s" "%1016$s" "%1017$s" "%1018$s" "%1019$s" "%1020$s"
+"%1021$s" "%1022$s" "%1023$s" "%1024$s" "%1025$s" "%1026$s" "%1027$s" "%1028$s" "%1029$s" "%1030$s"
+"%1031$s" "%1032$s" "%1033$s" "%1034$s" "%1035$s" "%1036$s" "%1037$s" "%1038$s" "%1039$s" "%1040$s"
+"%1041$s" "%1042$s" "%1043$s" "%1044$s" "%1045$s" "%1046$s" "%1047$s" "%1048$s" "%1049$s" "%1050$s"
+"%1051$s" "%1052$s" "%1053$s" "%1054$s" "%1055$s" "%1056$s" "%1057$s" "%1058$s" "%1059$s" "%1060$s"
+"%1061$s" "%1062$s" "%1063$s" "%1064$s" "%1065$s" "%1066$s" "%1067$s" "%1068$s" "%1069$s" "%1070$s"
+"%1071$s" "%1072$s" "%1073$s" "%1074$s" "%1075$s" "%1076$s" "%1077$s" "%1078$s" "%1079$s" "%1080$s"
+"%1081$s" "%1082$s" "%1083$s" "%1084$s" "%1085$s" "%1086$s" "%1087$s" "%1088$s" "%1089$s" "%1090$s"
+"%1091$s" "%1092$s" "%1093$s" "%1094$s" "%1095$s" "%1096$s" "%1097$s" "%1098$s" "%1099$s" "%1100$s"
+"%1101$s" "%1102$s" "%1103$s" "%1104$s" "%1105$s" "%1106$s" "%1107$s" "%1108$s" "%1109$s" "%1110$s"
+"%1111$s" "%1112$s" "%1113$s" "%1114$s" "%1115$s" "%1116$s" "%1117$s" "%1118$s" "%1119$s" "%1120$s"
+"%1121$s" "%1122$s" "%1123$s" "%1124$s" "%1125$s" "%1126$s" "%1127$s" "%1128$s" "%1129$s" "%1130$s"
+"%1131$s" "%1132$s" "%1133$s" "%1134$s" "%1135$s" "%1136$s" "%1137$s" "%1138$s" "%1139$s" "%1140$s"
+"%1141$s" "%1142$s" "%1143$s" "%1144$s" "%1145$s" "%1146$s" "%1147$s" "%1148$s" "%1149$s" "%1150$s"
+"%1151$s" "%1152$s" "%1153$s" "%1154$s" "%1155$s" "%1156$s" "%1157$s" "%1158$s" "%1159$s" "%1160$s"
+"%1161$s" "%1162$s" "%1163$s" "%1164$s" "%1165$s" "%1166$s" "%1167$s" "%1168$s" "%1169$s" "%1170$s"
+"%1171$s" "%1172$s" "%1173$s" "%1174$s" "%1175$s" "%1176$s" "%1177$s" "%1178$s" "%1179$s" "%1180$s"
+"%1181$s" "%1182$s" "%1183$s" "%1184$s" "%1185$s" "%1186$s" "%1187$s" "%1188$s" "%1189$s" "%1190$s"
+"%1191$s" "%1192$s" "%1193$s" "%1194$s" "%1195$s" "%1196$s" "%1197$s" "%1198$s" "%1199$s" "%1200$s"
+"%1201$s" "%1202$s" "%1203$s" "%1204$s" "%1205$s" "%1206$s" "%1207$s" "%1208$s" "%1209$s" "%1210$s"
+"%1211$s" "%1212$s" "%1213$s" "%1214$s" "%1215$s" "%1216$s" "%1217$s" "%1218$s" "%1219$s" "%1220$s"
+"%1221$s" "%1222$s" "%1223$s" "%1224$s" "%1225$s" "%1226$s" "%1227$s" "%1228$s" "%1229$s" "%1230$s"
+"%1231$s" "%1232$s" "%1233$s" "%1234$s" "%1235$s" "%1236$s" "%1237$s" "%1238$s" "%1239$s" "%1240$s"
+"%1241$s" "%1242$s" "%1243$s" "%1244$s" "%1245$s" "%1246$s" "%1247$s" "%1248$s" "%1249$s" "%1250$s"
+"%1251$s" "%1252$s" "%1253$s" "%1254$s" "%1255$s" "%1256$s" "%1257$s" "%1258$s" "%1259$s" "%1260$s"
+"%1261$s" "%1262$s" "%1263$s" "%1264$s" "%1265$s" "%1266$s" "%1267$s" "%1268$s" "%1269$s" "%1270$s"
+"%1271$s" "%1272$s" "%1273$s" "%1274$s" "%1275$s" "%1276$s" "%1277$s" "%1278$s" "%1279$s" "%1280$s"
+"%1281$s" "%1282$s" "%1283$s" "%1284$s" "%1285$s" "%1286$s" "%1287$s" "%1288$s" "%1289$s" "%1290$s"
+"%1291$s" "%1292$s" "%1293$s" "%1294$s" "%1295$s" "%1296$s" "%1297$s" "%1298$s" "%1299$s" "%1300$s"
+"%1301$s" "%1302$s" "%1303$s" "%1304$s" "%1305$s" "%1306$s" "%1307$s" "%1308$s" "%1309$s" "%1310$s"
+"%1311$s" "%1312$s" "%1313$s" "%1314$s" "%1315$s" "%1316$s" "%1317$s" "%1318$s" "%1319$s" "%1320$s"
+"%1321$s" "%1322$s" "%1323$s" "%1324$s" "%1325$s" "%1326$s" "%1327$s" "%1328$s" "%1329$s" "%1330$s"
+"%1331$s" "%1332$s" "%1333$s" "%1334$s" "%1335$s" "%1336$s" "%1337$s" "%1338$s" "%1339$s" "%1340$s"
+"%1341$s" "%1342$s" "%1343$s" "%1344$s" "%1345$s" "%1346$s" "%1347$s" "%1348$s" "%1349$s" "%1350$s"
+"%1351$s" "%1352$s" "%1353$s" "%1354$s" "%1355$s" "%1356$s" "%1357$s" "%1358$s" "%1359$s" "%1360$s"
+"%1361$s" "%1362$s" "%1363$s" "%1364$s" "%1365$s" "%1366$s" "%1367$s" "%1368$s" "%1369$s" "%1370$s"
+"%1371$s" "%1372$s" "%1373$s" "%1374$s" "%1375$s" "%1376$s" "%1377$s" "%1378$s" "%1379$s" "%1380$s"
+"%1381$s" "%1382$s" "%1383$s" "%1384$s" "%1385$s" "%1386$s" "%1387$s" "%1388$s" "%1389$s" "%1390$s"
+"%1391$s" "%1392$s" "%1393$s" "%1394$s" "%1395$s" "%1396$s" "%1397$s" "%1398$s" "%1399$s" "%1400$s"
+"%1401$s" "%1402$s" "%1403$s" "%1404$s" "%1405$s" "%1406$s" "%1407$s" "%1408$s" "%1409$s" "%1410$s"
+"%1411$s" "%1412$s" "%1413$s" "%1414$s" "%1415$s" "%1416$s" "%1417$s" "%1418$s" "%1419$s" "%1420$s"
+"%1421$s" "%1422$s" "%1423$s" "%1424$s" "%1425$s" "%1426$s" "%1427$s" "%1428$s" "%1429$s" "%1430$s"
+"%1431$s" "%1432$s" "%1433$s" "%1434$s" "%1435$s" "%1436$s" "%1437$s" "%1438$s" "%1439$s" "%1440$s"
+"%1441$s" "%1442$s" "%1443$s" "%1444$s" "%1445$s" "%1446$s" "%1447$s" "%1448$s" "%1449$s" "%1450$s"
+"%1451$s" "%1452$s" "%1453$s" "%1454$s" "%1455$s" "%1456$s" "%1457$s" "%1458$s" "%1459$s" "%1460$s"
+"%1461$s" "%1462$s" "%1463$s" "%1464$s" "%1465$s" "%1466$s" "%1467$s" "%1468$s" "%1469$s" "%1470$s"
+"%1471$s" "%1472$s" "%1473$s" "%1474$s" "%1475$s" "%1476$s" "%1477$s" "%1478$s" "%1479$s" "%1480$s"
+"%1481$s" "%1482$s" "%1483$s" "%1484$s" "%1485$s" "%1486$s" "%1487$s" "%1488$s" "%1489$s" "%1490$s"
+"%1491$s" "%1492$s" "%1493$s" "%1494$s" "%1495$s" "%1496$s" "%1497$s" "%1498$s" "%1499$s" "%1500$s"
+"%1501$s" "%1502$s" "%1503$s" "%1504$s" "%1505$s" "%1506$s" "%1507$s" "%1508$s" "%1509$s" "%1510$s"
+"%1511$s" "%1512$s" "%1513$s" "%1514$s" "%1515$s" "%1516$s" "%1517$s" "%1518$s" "%1519$s" "%1520$s"
+"%1521$s" "%1522$s" "%1523$s" "%1524$s" "%1525$s" "%1526$s" "%1527$s" "%1528$s" "%1529$s" "%1530$s"
+"%1531$s" "%1532$s" "%1533$s" "%1534$s" "%1535$s" "%1536$s" "%1537$s" "%1538$s" "%1539$s" "%1540$s"
+"%1541$s" "%1542$s" "%1543$s" "%1544$s" "%1545$s" "%1546$s" "%1547$s" "%1548$s" "%1549$s" "%1550$s"
+"%1551$s" "%1552$s" "%1553$s" "%1554$s" "%1555$s" "%1556$s" "%1557$s" "%1558$s" "%1559$s" "%1560$s"
+"%1561$s" "%1562$s" "%1563$s" "%1564$s" "%1565$s" "%1566$s" "%1567$s" "%1568$s" "%1569$s" "%1570$s"
+"%1571$s" "%1572$s" "%1573$s" "%1574$s" "%1575$s" "%1576$s" "%1577$s" "%1578$s" "%1579$s" "%1580$s"
+"%1581$s" "%1582$s" "%1583$s" "%1584$s" "%1585$s" "%1586$s" "%1587$s" "%1588$s" "%1589$s" "%1590$s"
+"%1591$s" "%1592$s" "%1593$s" "%1594$s" "%1595$s" "%1596$s" "%1597$s" "%1598$s" "%1599$s" "%1600$s"
+"%1601$s" "%1602$s" "%1603$s" "%1604$s" "%1605$s" "%1606$s" "%1607$s" "%1608$s" "%1609$s" "%1610$s"
+"%1611$s" "%1612$s" "%1613$s" "%1614$s" "%1615$s" "%1616$s" "%1617$s" "%1618$s" "%1619$s" "%1620$s"
+"%1621$s" "%1622$s" "%1623$s" "%1624$s" "%1625$s" "%1626$s" "%1627$s" "%1628$s" "%1629$s" "%1630$s"
+"%1631$s" "%1632$s" "%1633$s" "%1634$s" "%1635$s" "%1636$s" "%1637$s" "%1638$s" "%1639$s" "%1640$s"
+"%1641$s" "%1642$s" "%1643$s" "%1644$s" "%1645$s" "%1646$s" "%1647$s" "%1648$s" "%1649$s" "%1650$s"
+"%1651$s" "%1652$s" "%1653$s" "%1654$s" "%1655$s" "%1656$s" "%1657$s" "%1658$s" "%1659$s" "%1660$s"
+"%1661$s" "%1662$s" "%1663$s" "%1664$s" "%1665$s" "%1666$s" "%1667$s" "%1668$s" "%1669$s" "%1670$s"
+"%1671$s" "%1672$s" "%1673$s" "%1674$s" "%1675$s" "%1676$s" "%1677$s" "%1678$s" "%1679$s" "%1680$s"
+"%1681$s" "%1682$s" "%1683$s" "%1684$s" "%1685$s" "%1686$s" "%1687$s" "%1688$s" "%1689$s" "%1690$s"
+"%1691$s" "%1692$s" "%1693$s" "%1694$s" "%1695$s" "%1696$s" "%1697$s" "%1698$s" "%1699$s" "%1700$s"
+"%1701$s" "%1702$s" "%1703$s" "%1704$s" "%1705$s" "%1706$s" "%1707$s" "%1708$s" "%1709$s" "%1710$s"
+"%1711$s" "%1712$s" "%1713$s" "%1714$s" "%1715$s" "%1716$s" "%1717$s" "%1718$s" "%1719$s" "%1720$s"
+"%1721$s" "%1722$s" "%1723$s" "%1724$s" "%1725$s" "%1726$s" "%1727$s" "%1728$s" "%1729$s" "%1730$s"
+"%1731$s" "%1732$s" "%1733$s" "%1734$s" "%1735$s" "%1736$s" "%1737$s" "%1738$s" "%1739$s" "%1740$s"
+"%1741$s" "%1742$s" "%1743$s" "%1744$s" "%1745$s" "%1746$s" "%1747$s" "%1748$s" "%1749$s" "%1750$s"
+"%1751$s" "%1752$s" "%1753$s" "%1754$s" "%1755$s" "%1756$s" "%1757$s" "%1758$s" "%1759$s" "%1760$s"
+"%1761$s" "%1762$s" "%1763$s" "%1764$s" "%1765$s" "%1766$s" "%1767$s" "%1768$s" "%1769$s" "%1770$s"
+"%1771$s" "%1772$s" "%1773$s" "%1774$s" "%1775$s" "%1776$s" "%1777$s" "%1778$s" "%1779$s" "%1780$s"
+"%1781$s" "%1782$s" "%1783$s" "%1784$s" "%1785$s" "%1786$s" "%1787$s" "%1788$s" "%1789$s" "%1790$s"
+"%1791$s" "%1792$s" "%1793$s" "%1794$s" "%1795$s" "%1796$s" "%1797$s" "%1798$s" "%1799$s" "%1800$s"
+"%1801$s" "%1802$s" "%1803$s" "%1804$s" "%1805$s" "%1806$s" "%1807$s" "%1808$s" "%1809$s" "%1810$s"
+"%1811$s" "%1812$s" "%1813$s" "%1814$s" "%1815$s" "%1816$s" "%1817$s" "%1818$s" "%1819$s" "%1820$s"
+"%1821$s" "%1822$s" "%1823$s" "%1824$s" "%1825$s" "%1826$s" "%1827$s" "%1828$s" "%1829$s" "%1830$s"
+"%1831$s" "%1832$s" "%1833$s" "%1834$s" "%1835$s" "%1836$s" "%1837$s" "%1838$s" "%1839$s" "%1840$s"
+"%1841$s" "%1842$s" "%1843$s" "%1844$s" "%1845$s" "%1846$s" "%1847$s" "%1848$s" "%1849$s" "%1850$s"
+"%1851$s" "%1852$s" "%1853$s" "%1854$s" "%1855$s" "%1856$s" "%1857$s" "%1858$s" "%1859$s" "%1860$s"
+"%1861$s" "%1862$s" "%1863$s" "%1864$s" "%1865$s" "%1866$s" "%1867$s" "%1868$s" "%1869$s" "%1870$s"
+"%1871$s" "%1872$s" "%1873$s" "%1874$s" "%1875$s" "%1876$s" "%1877$s" "%1878$s" "%1879$s" "%1880$s"
+"%1881$s" "%1882$s" "%1883$s" "%1884$s" "%1885$s" "%1886$s" "%1887$s" "%1888$s" "%1889$s" "%1890$s"
+"%1891$s" "%1892$s" "%1893$s" "%1894$s" "%1895$s" "%1896$s" "%1897$s" "%1898$s" "%1899$s" "%1900$s"
+"%1901$s" "%1902$s" "%1903$s" "%1904$s" "%1905$s" "%1906$s" "%1907$s" "%1908$s" "%1909$s" "%1910$s"
+"%1911$s" "%1912$s" "%1913$s" "%1914$s" "%1915$s" "%1916$s" "%1917$s" "%1918$s" "%1919$s" "%1920$s"
+"%1921$s" "%1922$s" "%1923$s" "%1924$s" "%1925$s" "%1926$s" "%1927$s" "%1928$s" "%1929$s" "%1930$s"
+"%1931$s" "%1932$s" "%1933$s" "%1934$s" "%1935$s" "%1936$s" "%1937$s" "%1938$s" "%1939$s" "%1940$s"
+"%1941$s" "%1942$s" "%1943$s" "%1944$s" "%1945$s" "%1946$s" "%1947$s" "%1948$s" "%1949$s" "%1950$s"
+"%1951$s" "%1952$s" "%1953$s" "%1954$s" "%1955$s" "%1956$s" "%1957$s" "%1958$s" "%1959$s" "%1960$s"
+"%1961$s" "%1962$s" "%1963$s" "%1964$s" "%1965$s" "%1966$s" "%1967$s" "%1968$s" "%1969$s" "%1970$s"
+"%1971$s" "%1972$s" "%1973$s" "%1974$s" "%1975$s" "%1976$s" "%1977$s" "%1978$s" "%1979$s" "%1980$s"
+"%1981$s" "%1982$s" "%1983$s" "%1984$s" "%1985$s" "%1986$s" "%1987$s" "%1988$s" "%1989$s" "%1990$s"
+"%1991$s" "%1992$s" "%1993$s" "%1994$s" "%1995$s" "%1996$s" "%1997$s" "%1998$s" "%1999$s" "%2000$s"
+"%2001$s" "%2002$s" "%2003$s" "%2004$s" "%2005$s" "%2006$s" "%2007$s" "%2008$s" "%2009$s" "%2010$s"
+"%2011$s" "%2012$s" "%2013$s" "%2014$s" "%2015$s" "%2016$s" "%2017$s" "%2018$s" "%2019$s" "%2020$s"
+"%2021$s" "%2022$s" "%2023$s" "%2024$s" "%2025$s" "%2026$s" "%2027$s" "%2028$s" "%2029$s" "%2030$s"
+"%2031$s" "%2032$s" "%2033$s" "%2034$s" "%2035$s" "%2036$s" "%2037$s" "%2038$s" "%2039$s" "%2040$s"
+"%2041$s" "%2042$s" "%2043$s" "%2044$s" "%2045$s" "%2046$s" "%2047$s" "%2048$s" "%2049$s" "%2050$s"
+"%2051$s" "%2052$s" "%2053$s" "%2054$s" "%2055$s" "%2056$s" "%2057$s" "%2058$s" "%2059$s" "%2060$s"
+"%2061$s" "%2062$s" "%2063$s" "%2064$s" "%2065$s" "%2066$s" "%2067$s" "%2068$s" "%2069$s" "%2070$s"
+"%2071$s" "%2072$s" "%2073$s" "%2074$s" "%2075$s" "%2076$s" "%2077$s" "%2078$s" "%2079$s" "%2080$s"
+"%2081$s" "%2082$s" "%2083$s" "%2084$s" "%2085$s" "%2086$s" "%2087$s" "%2088$s" "%2089$s" "%2090$s"
+"%2091$s" "%2092$s" "%2093$s" "%2094$s" "%2095$s" "%2096$s" "%2097$s" "%2098$s" "%2099$s" "%2100$s"
+"%2101$s" "%2102$s" "%2103$s" "%2104$s" "%2105$s" "%2106$s" "%2107$s" "%2108$s" "%2109$s" "%2110$s"
+"%2111$s" "%2112$s" "%2113$s" "%2114$s" "%2115$s" "%2116$s" "%2117$s" "%2118$s" "%2119$s" "%2120$s"
+"%2121$s" "%2122$s" "%2123$s" "%2124$s" "%2125$s" "%2126$s" "%2127$s" "%2128$s" "%2129$s" "%2130$s"
+"%2131$s" "%2132$s" "%2133$s" "%2134$s" "%2135$s" "%2136$s" "%2137$s" "%2138$s" "%2139$s" "%2140$s"
+"%2141$s" "%2142$s" "%2143$s" "%2144$s" "%2145$s" "%2146$s" "%2147$s" "%2148$s" "%2149$s" "%2150$s"
+"%2151$s" "%2152$s" "%2153$s" "%2154$s" "%2155$s" "%2156$s" "%2157$s" "%2158$s" "%2159$s" "%2160$s"
+"%2161$s" "%2162$s" "%2163$s" "%2164$s" "%2165$s" "%2166$s" "%2167$s" "%2168$s" "%2169$s" "%2170$s"
+"%2171$s" "%2172$s" "%2173$s" "%2174$s" "%2175$s" "%2176$s" "%2177$s" "%2178$s" "%2179$s" "%2180$s"
+"%2181$s" "%2182$s" "%2183$s" "%2184$s" "%2185$s" "%2186$s" "%2187$s" "%2188$s" "%2189$s" "%2190$s"
+"%2191$s" "%2192$s" "%2193$s" "%2194$s" "%2195$s" "%2196$s" "%2197$s" "%2198$s" "%2199$s" "%2200$s"
+"%2201$s" "%2202$s" "%2203$s" "%2204$s" "%2205$s" "%2206$s" "%2207$s" "%2208$s" "%2209$s" "%2210$s"
+"%2211$s" "%2212$s" "%2213$s" "%2214$s" "%2215$s" "%2216$s" "%2217$s" "%2218$s" "%2219$s" "%2220$s"
+"%2221$s" "%2222$s" "%2223$s" "%2224$s" "%2225$s" "%2226$s" "%2227$s" "%2228$s" "%2229$s" "%2230$s"
+"%2231$s" "%2232$s" "%2233$s" "%2234$s" "%2235$s" "%2236$s" "%2237$s" "%2238$s" "%2239$s" "%2240$s"
+"%2241$s" "%2242$s" "%2243$s" "%2244$s" "%2245$s" "%2246$s" "%2247$s" "%2248$s" "%2249$s" "%2250$s"
+"%2251$s" "%2252$s" "%2253$s" "%2254$s" "%2255$s" "%2256$s" "%2257$s" "%2258$s" "%2259$s" "%2260$s"
+"%2261$s" "%2262$s" "%2263$s" "%2264$s" "%2265$s" "%2266$s" "%2267$s" "%2268$s" "%2269$s" "%2270$s"
+"%2271$s" "%2272$s" "%2273$s" "%2274$s" "%2275$s" "%2276$s" "%2277$s" "%2278$s" "%2279$s" "%2280$s"
+"%2281$s" "%2282$s" "%2283$s" "%2284$s" "%2285$s" "%2286$s" "%2287$s" "%2288$s" "%2289$s" "%2290$s"
+"%2291$s" "%2292$s" "%2293$s" "%2294$s" "%2295$s" "%2296$s" "%2297$s" "%2298$s" "%2299$s" "%2300$s"
+"%2301$s" "%2302$s" "%2303$s" "%2304$s" "%2305$s" "%2306$s" "%2307$s" "%2308$s" "%2309$s" "%2310$s"
+"%2311$s" "%2312$s" "%2313$s" "%2314$s" "%2315$s" "%2316$s" "%2317$s" "%2318$s" "%2319$s" "%2320$s"
+"%2321$s" "%2322$s" "%2323$s" "%2324$s" "%2325$s" "%2326$s" "%2327$s" "%2328$s" "%2329$s" "%2330$s"
+"%2331$s" "%2332$s" "%2333$s" "%2334$s" "%2335$s" "%2336$s" "%2337$s" "%2338$s" "%2339$s" "%2340$s"
+"%2341$s" "%2342$s" "%2343$s" "%2344$s" "%2345$s" "%2346$s" "%2347$s" "%2348$s" "%2349$s" "%2350$s"
+"%2351$s" "%2352$s" "%2353$s" "%2354$s" "%2355$s" "%2356$s" "%2357$s" "%2358$s" "%2359$s" "%2360$s"
+"%2361$s" "%2362$s" "%2363$s" "%2364$s" "%2365$s" "%2366$s" "%2367$s" "%2368$s" "%2369$s" "%2370$s"
+"%2371$s" "%2372$s" "%2373$s" "%2374$s" "%2375$s" "%2376$s" "%2377$s" "%2378$s" "%2379$s" "%2380$s"
+"%2381$s" "%2382$s" "%2383$s" "%2384$s" "%2385$s" "%2386$s" "%2387$s" "%2388$s" "%2389$s" "%2390$s"
+"%2391$s" "%2392$s" "%2393$s" "%2394$s" "%2395$s" "%2396$s" "%2397$s" "%2398$s" "%2399$s" "%2400$s"
+"%2401$s" "%2402$s" "%2403$s" "%2404$s" "%2405$s" "%2406$s" "%2407$s" "%2408$s" "%2409$s" "%2410$s"
+"%2411$s" "%2412$s" "%2413$s" "%2414$s" "%2415$s" "%2416$s" "%2417$s" "%2418$s" "%2419$s" "%2420$s"
+"%2421$s" "%2422$s" "%2423$s" "%2424$s" "%2425$s" "%2426$s" "%2427$s" "%2428$s" "%2429$s" "%2430$s"
+"%2431$s" "%2432$s" "%2433$s" "%2434$s" "%2435$s" "%2436$s" "%2437$s" "%2438$s" "%2439$s" "%2440$s"
+"%2441$s" "%2442$s" "%2443$s" "%2444$s" "%2445$s" "%2446$s" "%2447$s" "%2448$s" "%2449$s" "%2450$s"
+"%2451$s" "%2452$s" "%2453$s" "%2454$s" "%2455$s" "%2456$s" "%2457$s" "%2458$s" "%2459$s" "%2460$s"
+"%2461$s" "%2462$s" "%2463$s" "%2464$s" "%2465$s" "%2466$s" "%2467$s" "%2468$s" "%2469$s" "%2470$s"
+"%2471$s" "%2472$s" "%2473$s" "%2474$s" "%2475$s" "%2476$s" "%2477$s" "%2478$s" "%2479$s" "%2480$s"
+"%2481$s" "%2482$s" "%2483$s" "%2484$s" "%2485$s" "%2486$s" "%2487$s" "%2488$s" "%2489$s" "%2490$s"
+"%2491$s" "%2492$s" "%2493$s" "%2494$s" "%2495$s" "%2496$s" "%2497$s" "%2498$s" "%2499$s" "%2500$s"
+"%2501$s" "%2502$s" "%2503$s" "%2504$s" "%2505$s" "%2506$s" "%2507$s" "%2508$s" "%2509$s" "%2510$s"
+"%2511$s" "%2512$s" "%2513$s" "%2514$s" "%2515$s" "%2516$s" "%2517$s" "%2518$s" "%2519$s" "%2520$s"
+"%2521$s" "%2522$s" "%2523$s" "%2524$s" "%2525$s" "%2526$s" "%2527$s" "%2528$s" "%2529$s" "%2530$s"
+"%2531$s" "%2532$s" "%2533$s" "%2534$s" "%2535$s" "%2536$s" "%2537$s" "%2538$s" "%2539$s" "%2540$s"
+"%2541$s" "%2542$s" "%2543$s" "%2544$s" "%2545$s" "%2546$s" "%2547$s" "%2548$s" "%2549$s" "%2550$s"
+"%2551$s" "%2552$s" "%2553$s" "%2554$s" "%2555$s" "%2556$s" "%2557$s" "%2558$s" "%2559$s" "%2560$s"
+"%2561$s" "%2562$s" "%2563$s" "%2564$s" "%2565$s" "%2566$s" "%2567$s" "%2568$s" "%2569$s" "%2570$s"
+"%2571$s" "%2572$s" "%2573$s" "%2574$s" "%2575$s" "%2576$s" "%2577$s" "%2578$s" "%2579$s" "%2580$s"
+"%2581$s" "%2582$s" "%2583$s" "%2584$s" "%2585$s" "%2586$s" "%2587$s" "%2588$s" "%2589$s" "%2590$s"
+"%2591$s" "%2592$s" "%2593$s" "%2594$s" "%2595$s" "%2596$s" "%2597$s" "%2598$s" "%2599$s" "%2600$s"
+"%2601$s" "%2602$s" "%2603$s" "%2604$s" "%2605$s" "%2606$s" "%2607$s" "%2608$s" "%2609$s" "%2610$s"
+"%2611$s" "%2612$s" "%2613$s" "%2614$s" "%2615$s" "%2616$s" "%2617$s" "%2618$s" "%2619$s" "%2620$s"
+"%2621$s" "%2622$s" "%2623$s" "%2624$s" "%2625$s" "%2626$s" "%2627$s" "%2628$s" "%2629$s" "%2630$s"
+"%2631$s" "%2632$s" "%2633$s" "%2634$s" "%2635$s" "%2636$s" "%2637$s" "%2638$s" "%2639$s" "%2640$s"
+"%2641$s" "%2642$s" "%2643$s" "%2644$s" "%2645$s" "%2646$s" "%2647$s" "%2648$s" "%2649$s" "%2650$s"
+"%2651$s" "%2652$s" "%2653$s" "%2654$s" "%2655$s" "%2656$s" "%2657$s" "%2658$s" "%2659$s" "%2660$s"
+"%2661$s" "%2662$s" "%2663$s" "%2664$s" "%2665$s" "%2666$s" "%2667$s" "%2668$s" "%2669$s" "%2670$s"
+"%2671$s" "%2672$s" "%2673$s" "%2674$s" "%2675$s" "%2676$s" "%2677$s" "%2678$s" "%2679$s" "%2680$s"
+"%2681$s" "%2682$s" "%2683$s" "%2684$s" "%2685$s" "%2686$s" "%2687$s" "%2688$s" "%2689$s" "%2690$s"
+"%2691$s" "%2692$s" "%2693$s" "%2694$s" "%2695$s" "%2696$s" "%2697$s" "%2698$s" "%2699$s" "%2700$s"
+"%2701$s" "%2702$s" "%2703$s" "%2704$s" "%2705$s" "%2706$s" "%2707$s" "%2708$s" "%2709$s" "%2710$s"
+"%2711$s" "%2712$s" "%2713$s" "%2714$s" "%2715$s" "%2716$s" "%2717$s" "%2718$s" "%2719$s" "%2720$s"
+"%2721$s" "%2722$s" "%2723$s" "%2724$s" "%2725$s" "%2726$s" "%2727$s" "%2728$s" "%2729$s" "%2730$s"
+"%2731$s" "%2732$s" "%2733$s" "%2734$s" "%2735$s" "%2736$s" "%2737$s" "%2738$s" "%2739$s" "%2740$s"
+"%2741$s" "%2742$s" "%2743$s" "%2744$s" "%2745$s" "%2746$s" "%2747$s" "%2748$s" "%2749$s" "%2750$s"
+"%2751$s" "%2752$s" "%2753$s" "%2754$s" "%2755$s" "%2756$s" "%2757$s" "%2758$s" "%2759$s" "%2760$s"
+"%2761$s" "%2762$s" "%2763$s" "%2764$s" "%2765$s" "%2766$s" "%2767$s" "%2768$s" "%2769$s" "%2770$s"
+"%2771$s" "%2772$s" "%2773$s" "%2774$s" "%2775$s" "%2776$s" "%2777$s" "%2778$s" "%2779$s" "%2780$s"
+"%2781$s" "%2782$s" "%2783$s" "%2784$s" "%2785$s" "%2786$s" "%2787$s" "%2788$s" "%2789$s" "%2790$s"
+"%2791$s" "%2792$s" "%2793$s" "%2794$s" "%2795$s" "%2796$s" "%2797$s" "%2798$s" "%2799$s" "%2800$s"
+"%2801$s" "%2802$s" "%2803$s" "%2804$s" "%2805$s" "%2806$s" "%2807$s" "%2808$s" "%2809$s" "%2810$s"
+"%2811$s" "%2812$s" "%2813$s" "%2814$s" "%2815$s" "%2816$s" "%2817$s" "%2818$s" "%2819$s" "%2820$s"
+"%2821$s" "%2822$s" "%2823$s" "%2824$s" "%2825$s" "%2826$s" "%2827$s" "%2828$s" "%2829$s" "%2830$s"
+"%2831$s" "%2832$s" "%2833$s" "%2834$s" "%2835$s" "%2836$s" "%2837$s" "%2838$s" "%2839$s" "%2840$s"
+"%2841$s" "%2842$s" "%2843$s" "%2844$s" "%2845$s" "%2846$s" "%2847$s" "%2848$s" "%2849$s" "%2850$s"
+"%2851$s" "%2852$s" "%2853$s" "%2854$s" "%2855$s" "%2856$s" "%2857$s" "%2858$s" "%2859$s" "%2860$s"
+"%2861$s" "%2862$s" "%2863$s" "%2864$s" "%2865$s" "%2866$s" "%2867$s" "%2868$s" "%2869$s" "%2870$s"
+"%2871$s" "%2872$s" "%2873$s" "%2874$s" "%2875$s" "%2876$s" "%2877$s" "%2878$s" "%2879$s" "%2880$s"
+"%2881$s" "%2882$s" "%2883$s" "%2884$s" "%2885$s" "%2886$s" "%2887$s" "%2888$s" "%2889$s" "%2890$s"
+"%2891$s" "%2892$s" "%2893$s" "%2894$s" "%2895$s" "%2896$s" "%2897$s" "%2898$s" "%2899$s" "%2900$s"
+"%2901$s" "%2902$s" "%2903$s" "%2904$s" "%2905$s" "%2906$s" "%2907$s" "%2908$s" "%2909$s" "%2910$s"
+"%2911$s" "%2912$s" "%2913$s" "%2914$s" "%2915$s" "%2916$s" "%2917$s" "%2918$s" "%2919$s" "%2920$s"
+"%2921$s" "%2922$s" "%2923$s" "%2924$s" "%2925$s" "%2926$s" "%2927$s" "%2928$s" "%2929$s" "%2930$s"
+"%2931$s" "%2932$s" "%2933$s" "%2934$s" "%2935$s" "%2936$s" "%2937$s" "%2938$s" "%2939$s" "%2940$s"
+"%2941$s" "%2942$s" "%2943$s" "%2944$s" "%2945$s" "%2946$s" "%2947$s" "%2948$s" "%2949$s" "%2950$s"
+"%2951$s" "%2952$s" "%2953$s" "%2954$s" "%2955$s" "%2956$s" "%2957$s" "%2958$s" "%2959$s" "%2960$s"
+"%2961$s" "%2962$s" "%2963$s" "%2964$s" "%2965$s" "%2966$s" "%2967$s" "%2968$s" "%2969$s" "%2970$s"
+"%2971$s" "%2972$s" "%2973$s" "%2974$s" "%2975$s" "%2976$s" "%2977$s" "%2978$s" "%2979$s" "%2980$s"
+"%2981$s" "%2982$s" "%2983$s" "%2984$s" "%2985$s" "%2986$s" "%2987$s" "%2988$s" "%2989$s" "%2990$s"
+"%2991$s" "%2992$s" "%2993$s" "%2994$s" "%2995$s" "%2996$s" "%2997$s" "%2998$s" "%2999$s" "%3000$s"
+"%3001$s" "%3002$s" "%3003$s" "%3004$s" "%3005$s" "%3006$s" "%3007$s" "%3008$s" "%3009$s" "%3010$s"
+"%3011$s" "%3012$s" "%3013$s" "%3014$s" "%3015$s" "%3016$s" "%3017$s" "%3018$s" "%3019$s" "%3020$s"
+"%3021$s" "%3022$s" "%3023$s" "%3024$s" "%3025$s" "%3026$s" "%3027$s" "%3028$s" "%3029$s" "%3030$s"
+"%3031$s" "%3032$s" "%3033$s" "%3034$s" "%3035$s" "%3036$s" "%3037$s" "%3038$s" "%3039$s" "%3040$s"
+"%3041$s" "%3042$s" "%3043$s" "%3044$s" "%3045$s" "%3046$s" "%3047$s" "%3048$s" "%3049$s" "%3050$s"
+"%3051$s" "%3052$s" "%3053$s" "%3054$s" "%3055$s" "%3056$s" "%3057$s" "%3058$s" "%3059$s" "%3060$s"
+"%3061$s" "%3062$s" "%3063$s" "%3064$s" "%3065$s" "%3066$s" "%3067$s" "%3068$s" "%3069$s" "%3070$s"
+"%3071$s" "%3072$s" "%3073$s" "%3074$s" "%3075$s" "%3076$s" "%3077$s" "%3078$s" "%3079$s" "%3080$s"
+"%3081$s" "%3082$s" "%3083$s" "%3084$s" "%3085$s" "%3086$s" "%3087$s" "%3088$s" "%3089$s" "%3090$s"
+"%3091$s" "%3092$s" "%3093$s" "%3094$s" "%3095$s" "%3096$s" "%3097$s" "%3098$s" "%3099$s" "%3100$s"
+"%3101$s" "%3102$s" "%3103$s" "%3104$s" "%3105$s" "%3106$s" "%3107$s" "%3108$s" "%3109$s" "%3110$s"
+"%3111$s" "%3112$s" "%3113$s" "%3114$s" "%3115$s" "%3116$s" "%3117$s" "%3118$s" "%3119$s" "%3120$s"
+"%3121$s" "%3122$s" "%3123$s" "%3124$s" "%3125$s" "%3126$s" "%3127$s" "%3128$s" "%3129$s" "%3130$s"
+"%3131$s" "%3132$s" "%3133$s" "%3134$s" "%3135$s" "%3136$s" "%3137$s" "%3138$s" "%3139$s" "%3140$s"
+"%3141$s" "%3142$s" "%3143$s" "%3144$s" "%3145$s" "%3146$s" "%3147$s" "%3148$s" "%3149$s" "%3150$s"
+"%3151$s" "%3152$s" "%3153$s" "%3154$s" "%3155$s" "%3156$s" "%3157$s" "%3158$s" "%3159$s" "%3160$s"
+"%3161$s" "%3162$s" "%3163$s" "%3164$s" "%3165$s" "%3166$s" "%3167$s" "%3168$s" "%3169$s" "%3170$s"
+"%3171$s" "%3172$s" "%3173$s" "%3174$s" "%3175$s" "%3176$s" "%3177$s" "%3178$s" "%3179$s" "%3180$s"
+"%3181$s" "%3182$s" "%3183$s" "%3184$s" "%3185$s" "%3186$s" "%3187$s" "%3188$s" "%3189$s" "%3190$s"
+"%3191$s" "%3192$s" "%3193$s" "%3194$s" "%3195$s" "%3196$s" "%3197$s" "%3198$s" "%3199$s" "%3200$s"
+"%3201$s" "%3202$s" "%3203$s" "%3204$s" "%3205$s" "%3206$s" "%3207$s" "%3208$s" "%3209$s" "%3210$s"
+"%3211$s" "%3212$s" "%3213$s" "%3214$s" "%3215$s" "%3216$s" "%3217$s" "%3218$s" "%3219$s" "%3220$s"
+"%3221$s" "%3222$s" "%3223$s" "%3224$s" "%3225$s" "%3226$s" "%3227$s" "%3228$s" "%3229$s" "%3230$s"
+"%3231$s" "%3232$s" "%3233$s" "%3234$s" "%3235$s" "%3236$s" "%3237$s" "%3238$s" "%3239$s" "%3240$s"
+"%3241$s" "%3242$s" "%3243$s" "%3244$s" "%3245$s" "%3246$s" "%3247$s" "%3248$s" "%3249$s" "%3250$s"
+"%3251$s" "%3252$s" "%3253$s" "%3254$s" "%3255$s" "%3256$s" "%3257$s" "%3258$s" "%3259$s" "%3260$s"
+"%3261$s" "%3262$s" "%3263$s" "%3264$s" "%3265$s" "%3266$s" "%3267$s" "%3268$s" "%3269$s" "%3270$s"
+"%3271$s" "%3272$s" "%3273$s" "%3274$s" "%3275$s" "%3276$s" "%3277$s" "%3278$s" "%3279$s" "%3280$s"
+"%3281$s" "%3282$s" "%3283$s" "%3284$s" "%3285$s" "%3286$s" "%3287$s" "%3288$s" "%3289$s" "%3290$s"
+"%3291$s" "%3292$s" "%3293$s" "%3294$s" "%3295$s" "%3296$s" "%3297$s" "%3298$s" "%3299$s" "%3300$s"
+"%3301$s" "%3302$s" "%3303$s" "%3304$s" "%3305$s" "%3306$s" "%3307$s" "%3308$s" "%3309$s" "%3310$s"
+"%3311$s" "%3312$s" "%3313$s" "%3314$s" "%3315$s" "%3316$s" "%3317$s" "%3318$s" "%3319$s" "%3320$s"
+"%3321$s" "%3322$s" "%3323$s" "%3324$s" "%3325$s" "%3326$s" "%3327$s" "%3328$s" "%3329$s" "%3330$s"
+"%3331$s" "%3332$s" "%3333$s" "%3334$s" "%3335$s" "%3336$s" "%3337$s" "%3338$s" "%3339$s" "%3340$s"
+"%3341$s" "%3342$s" "%3343$s" "%3344$s" "%3345$s" "%3346$s" "%3347$s" "%3348$s" "%3349$s" "%3350$s"
+"%3351$s" "%3352$s" "%3353$s" "%3354$s" "%3355$s" "%3356$s" "%3357$s" "%3358$s" "%3359$s" "%3360$s"
+"%3361$s" "%3362$s" "%3363$s" "%3364$s" "%3365$s" "%3366$s" "%3367$s" "%3368$s" "%3369$s" "%3370$s"
+"%3371$s" "%3372$s" "%3373$s" "%3374$s" "%3375$s" "%3376$s" "%3377$s" "%3378$s" "%3379$s" "%3380$s"
+"%3381$s" "%3382$s" "%3383$s" "%3384$s" "%3385$s" "%3386$s" "%3387$s" "%3388$s" "%3389$s" "%3390$s"
+"%3391$s" "%3392$s" "%3393$s" "%3394$s" "%3395$s" "%3396$s" "%3397$s" "%3398$s" "%3399$s" "%3400$s"
+"%3401$s" "%3402$s" "%3403$s" "%3404$s" "%3405$s" "%3406$s" "%3407$s" "%3408$s" "%3409$s" "%3410$s"
+"%3411$s" "%3412$s" "%3413$s" "%3414$s" "%3415$s" "%3416$s" "%3417$s" "%3418$s" "%3419$s" "%3420$s"
+"%3421$s" "%3422$s" "%3423$s" "%3424$s" "%3425$s" "%3426$s" "%3427$s" "%3428$s" "%3429$s" "%3430$s"
+"%3431$s" "%3432$s" "%3433$s" "%3434$s" "%3435$s" "%3436$s" "%3437$s" "%3438$s" "%3439$s" "%3440$s"
+"%3441$s" "%3442$s" "%3443$s" "%3444$s" "%3445$s" "%3446$s" "%3447$s" "%3448$s" "%3449$s" "%3450$s"
+"%3451$s" "%3452$s" "%3453$s" "%3454$s" "%3455$s" "%3456$s" "%3457$s" "%3458$s" "%3459$s" "%3460$s"
+"%3461$s" "%3462$s" "%3463$s" "%3464$s" "%3465$s" "%3466$s" "%3467$s" "%3468$s" "%3469$s" "%3470$s"
+"%3471$s" "%3472$s" "%3473$s" "%3474$s" "%3475$s" "%3476$s" "%3477$s" "%3478$s" "%3479$s" "%3480$s"
+"%3481$s" "%3482$s" "%3483$s" "%3484$s" "%3485$s" "%3486$s" "%3487$s" "%3488$s" "%3489$s" "%3490$s"
+"%3491$s" "%3492$s" "%3493$s" "%3494$s" "%3495$s" "%3496$s" "%3497$s" "%3498$s" "%3499$s" "%3500$s"
+"%3501$s" "%3502$s" "%3503$s" "%3504$s" "%3505$s" "%3506$s" "%3507$s" "%3508$s" "%3509$s" "%3510$s"
+"%3511$s" "%3512$s" "%3513$s" "%3514$s" "%3515$s" "%3516$s" "%3517$s" "%3518$s" "%3519$s" "%3520$s"
+"%3521$s" "%3522$s" "%3523$s" "%3524$s" "%3525$s" "%3526$s" "%3527$s" "%3528$s" "%3529$s" "%3530$s"
+"%3531$s" "%3532$s" "%3533$s" "%3534$s" "%3535$s" "%3536$s" "%3537$s" "%3538$s" "%3539$s" "%3540$s"
+"%3541$s" "%3542$s" "%3543$s" "%3544$s" "%3545$s" "%3546$s" "%3547$s" "%3548$s" "%3549$s" "%3550$s"
+"%3551$s" "%3552$s" "%3553$s" "%3554$s" "%3555$s" "%3556$s" "%3557$s" "%3558$s" "%3559$s" "%3560$s"
+"%3561$s" "%3562$s" "%3563$s" "%3564$s" "%3565$s" "%3566$s" "%3567$s" "%3568$s" "%3569$s" "%3570$s"
+"%3571$s" "%3572$s" "%3573$s" "%3574$s" "%3575$s" "%3576$s" "%3577$s" "%3578$s" "%3579$s" "%3580$s"
+"%3581$s" "%3582$s" "%3583$s" "%3584$s" "%3585$s" "%3586$s" "%3587$s" "%3588$s" "%3589$s" "%3590$s"
+"%3591$s" "%3592$s" "%3593$s" "%3594$s" "%3595$s" "%3596$s" "%3597$s" "%3598$s" "%3599$s" "%3600$s"
+"%3601$s" "%3602$s" "%3603$s" "%3604$s" "%3605$s" "%3606$s" "%3607$s" "%3608$s" "%3609$s" "%3610$s"
+"%3611$s" "%3612$s" "%3613$s" "%3614$s" "%3615$s" "%3616$s" "%3617$s" "%3618$s" "%3619$s" "%3620$s"
+"%3621$s" "%3622$s" "%3623$s" "%3624$s" "%3625$s" "%3626$s" "%3627$s" "%3628$s" "%3629$s" "%3630$s"
+"%3631$s" "%3632$s" "%3633$s" "%3634$s" "%3635$s" "%3636$s" "%3637$s" "%3638$s" "%3639$s" "%3640$s"
+"%3641$s" "%3642$s" "%3643$s" "%3644$s" "%3645$s" "%3646$s" "%3647$s" "%3648$s" "%3649$s" "%3650$s"
+"%3651$s" "%3652$s" "%3653$s" "%3654$s" "%3655$s" "%3656$s" "%3657$s" "%3658$s" "%3659$s" "%3660$s"
+"%3661$s" "%3662$s" "%3663$s" "%3664$s" "%3665$s" "%3666$s" "%3667$s" "%3668$s" "%3669$s" "%3670$s"
+"%3671$s" "%3672$s" "%3673$s" "%3674$s" "%3675$s" "%3676$s" "%3677$s" "%3678$s" "%3679$s" "%3680$s"
+"%3681$s" "%3682$s" "%3683$s" "%3684$s" "%3685$s" "%3686$s" "%3687$s" "%3688$s" "%3689$s" "%3690$s"
+"%3691$s" "%3692$s" "%3693$s" "%3694$s" "%3695$s" "%3696$s" "%3697$s" "%3698$s" "%3699$s" "%3700$s"
+"%3701$s" "%3702$s" "%3703$s" "%3704$s" "%3705$s" "%3706$s" "%3707$s" "%3708$s" "%3709$s" "%3710$s"
+"%3711$s" "%3712$s" "%3713$s" "%3714$s" "%3715$s" "%3716$s" "%3717$s" "%3718$s" "%3719$s" "%3720$s"
+"%3721$s" "%3722$s" "%3723$s" "%3724$s" "%3725$s" "%3726$s" "%3727$s" "%3728$s" "%3729$s" "%3730$s"
+"%3731$s" "%3732$s" "%3733$s" "%3734$s" "%3735$s" "%3736$s" "%3737$s" "%3738$s" "%3739$s" "%3740$s"
+"%3741$s" "%3742$s" "%3743$s" "%3744$s" "%3745$s" "%3746$s" "%3747$s" "%3748$s" "%3749$s" "%3750$s"
+"%3751$s" "%3752$s" "%3753$s" "%3754$s" "%3755$s" "%3756$s" "%3757$s" "%3758$s" "%3759$s" "%3760$s"
+"%3761$s" "%3762$s" "%3763$s" "%3764$s" "%3765$s" "%3766$s" "%3767$s" "%3768$s" "%3769$s" "%3770$s"
+"%3771$s" "%3772$s" "%3773$s" "%3774$s" "%3775$s" "%3776$s" "%3777$s" "%3778$s" "%3779$s" "%3780$s"
+"%3781$s" "%3782$s" "%3783$s" "%3784$s" "%3785$s" "%3786$s" "%3787$s" "%3788$s" "%3789$s" "%3790$s"
+"%3791$s" "%3792$s" "%3793$s" "%3794$s" "%3795$s" "%3796$s" "%3797$s" "%3798$s" "%3799$s" "%3800$s"
+"%3801$s" "%3802$s" "%3803$s" "%3804$s" "%3805$s" "%3806$s" "%3807$s" "%3808$s" "%3809$s" "%3810$s"
+"%3811$s" "%3812$s" "%3813$s" "%3814$s" "%3815$s" "%3816$s" "%3817$s" "%3818$s" "%3819$s" "%3820$s"
+"%3821$s" "%3822$s" "%3823$s" "%3824$s" "%3825$s" "%3826$s" "%3827$s" "%3828$s" "%3829$s" "%3830$s"
+"%3831$s" "%3832$s" "%3833$s" "%3834$s" "%3835$s" "%3836$s" "%3837$s" "%3838$s" "%3839$s" "%3840$s"
+"%3841$s" "%3842$s" "%3843$s" "%3844$s" "%3845$s" "%3846$s" "%3847$s" "%3848$s" "%3849$s" "%3850$s"
+"%3851$s" "%3852$s" "%3853$s" "%3854$s" "%3855$s" "%3856$s" "%3857$s" "%3858$s" "%3859$s" "%3860$s"
+"%3861$s" "%3862$s" "%3863$s" "%3864$s" "%3865$s" "%3866$s" "%3867$s" "%3868$s" "%3869$s" "%3870$s"
+"%3871$s" "%3872$s" "%3873$s" "%3874$s" "%3875$s" "%3876$s" "%3877$s" "%3878$s" "%3879$s" "%3880$s"
+"%3881$s" "%3882$s" "%3883$s" "%3884$s" "%3885$s" "%3886$s" "%3887$s" "%3888$s" "%3889$s" "%3890$s"
+"%3891$s" "%3892$s" "%3893$s" "%3894$s" "%3895$s" "%3896$s" "%3897$s" "%3898$s" "%3899$s" "%3900$s"
+"%3901$s" "%3902$s" "%3903$s" "%3904$s" "%3905$s" "%3906$s" "%3907$s" "%3908$s" "%3909$s" "%3910$s"
+"%3911$s" "%3912$s" "%3913$s" "%3914$s" "%3915$s" "%3916$s" "%3917$s" "%3918$s" "%3919$s" "%3920$s"
+"%3921$s" "%3922$s" "%3923$s" "%3924$s" "%3925$s" "%3926$s" "%3927$s" "%3928$s" "%3929$s" "%3930$s"
+"%3931$s" "%3932$s" "%3933$s" "%3934$s" "%3935$s" "%3936$s" "%3937$s" "%3938$s" "%3939$s" "%3940$s"
+"%3941$s" "%3942$s" "%3943$s" "%3944$s" "%3945$s" "%3946$s" "%3947$s" "%3948$s" "%3949$s" "%3950$s"
+"%3951$s" "%3952$s" "%3953$s" "%3954$s" "%3955$s" "%3956$s" "%3957$s" "%3958$s" "%3959$s" "%3960$s"
+"%3961$s" "%3962$s" "%3963$s" "%3964$s" "%3965$s" "%3966$s" "%3967$s" "%3968$s" "%3969$s" "%3970$s"
+"%3971$s" "%3972$s" "%3973$s" "%3974$s" "%3975$s" "%3976$s" "%3977$s" "%3978$s" "%3979$s" "%3980$s"
+"%3981$s" "%3982$s" "%3983$s" "%3984$s" "%3985$s" "%3986$s" "%3987$s" "%3988$s" "%3989$s" "%3990$s"
+"%3991$s" "%3992$s" "%3993$s" "%3994$s" "%3995$s" "%3996$s" "%3997$s" "%3998$s" "%3999$s" "%4000$s"
+"%4001$s" "%4002$s" "%4003$s" "%4004$s" "%4005$s" "%4006$s" "%4007$s" "%4008$s" "%4009$s" "%4010$s"
+"%4011$s" "%4012$s" "%4013$s" "%4014$s" "%4015$s" "%4016$s" "%4017$s" "%4018$s" "%4019$s" "%4020$s"
+"%4021$s" "%4022$s" "%4023$s" "%4024$s" "%4025$s" "%4026$s" "%4027$s" "%4028$s" "%4029$s" "%4030$s"
+"%4031$s" "%4032$s" "%4033$s" "%4034$s" "%4035$s" "%4036$s" "%4037$s" "%4038$s" "%4039$s" "%4040$s"
+"%4041$s" "%4042$s" "%4043$s" "%4044$s" "%4045$s" "%4046$s" "%4047$s" "%4048$s" "%4049$s" "%4050$s"
+"%4051$s" "%4052$s" "%4053$s" "%4054$s" "%4055$s" "%4056$s" "%4057$s" "%4058$s" "%4059$s" "%4060$s"
+"%4061$s" "%4062$s" "%4063$s" "%4064$s" "%4065$s" "%4066$s" "%4067$s" "%4068$s" "%4069$s" "%4070$s"
+"%4071$s" "%4072$s" "%4073$s" "%4074$s" "%4075$s" "%4076$s" "%4077$s" "%4078$s" "%4079$s" "%4080$s"
+"%4081$s" "%4082$s" "%4083$s" "%4084$s" "%4085$s" "%4086$s" "%4087$s" "%4088$s" "%4089$s" "%4090$s"
+"%4091$s" "%4092$s" "%4093$s" "%4094$s" "%4095$s" "%4096$s" "%4097$s" "%4098$s" "%4099$s" "%4100$s"
+"%4101$s" "%4102$s" "%4103$s" "%4104$s" "%4105$s" "%4106$s" "%4107$s" "%4108$s" "%4109$s" "%4110$s"
+"%4111$s" "%4112$s" "%4113$s" "%4114$s" "%4115$s" "%4116$s" "%4117$s" "%4118$s" "%4119$s" "%4120$s"
+"%4121$s" "%4122$s" "%4123$s" "%4124$s" "%4125$s" "%4126$s" "%4127$s" "%4128$s" "%4129$s" "%4130$s"
+"%4131$s" "%4132$s" "%4133$s" "%4134$s" "%4135$s" "%4136$s" "%4137$s" "%4138$s" "%4139$s" "%4140$s"
+"%4141$s" "%4142$s" "%4143$s" "%4144$s" "%4145$s" "%4146$s" "%4147$s" "%4148$s" "%4149$s" "%4150$s"
+"%4151$s" "%4152$s" "%4153$s" "%4154$s" "%4155$s" "%4156$s" "%4157$s" "%4158$s" "%4159$s" "%4160$s"
+"%4161$s" "%4162$s" "%4163$s" "%4164$s" "%4165$s" "%4166$s" "%4167$s" "%4168$s" "%4169$s" "%4170$s"
+"%4171$s" "%4172$s" "%4173$s" "%4174$s" "%4175$s" "%4176$s" "%4177$s" "%4178$s" "%4179$s" "%4180$s"
+"%4181$s" "%4182$s" "%4183$s" "%4184$s" "%4185$s" "%4186$s" "%4187$s" "%4188$s" "%4189$s" "%4190$s"
+"%4191$s" "%4192$s" "%4193$s" "%4194$s" "%4195$s" "%4196$s" "%4197$s" "%4198$s" "%4199$s" "%4200$s"
+"%4201$s" "%4202$s" "%4203$s" "%4204$s" "%4205$s" "%4206$s" "%4207$s" "%4208$s" "%4209$s" "%4210$s"
+"%4211$s" "%4212$s" "%4213$s" "%4214$s" "%4215$s" "%4216$s" "%4217$s" "%4218$s" "%4219$s" "%4220$s"
+"%4221$s" "%4222$s" "%4223$s" "%4224$s" "%4225$s" "%4226$s" "%4227$s" "%4228$s" "%4229$s" "%4230$s"
+"%4231$s" "%4232$s" "%4233$s" "%4234$s" "%4235$s" "%4236$s" "%4237$s" "%4238$s" "%4239$s" "%4240$s"
+"%4241$s" "%4242$s" "%4243$s" "%4244$s" "%4245$s" "%4246$s" "%4247$s" "%4248$s" "%4249$s" "%4250$s"
+"%4251$s" "%4252$s" "%4253$s" "%4254$s" "%4255$s" "%4256$s" "%4257$s" "%4258$s" "%4259$s" "%4260$s"
+"%4261$s" "%4262$s" "%4263$s" "%4264$s" "%4265$s" "%4266$s" "%4267$s" "%4268$s" "%4269$s" "%4270$s"
+"%4271$s" "%4272$s" "%4273$s" "%4274$s" "%4275$s" "%4276$s" "%4277$s" "%4278$s" "%4279$s" "%4280$s"
+"%4281$s" "%4282$s" "%4283$s" "%4284$s" "%4285$s" "%4286$s" "%4287$s" "%4288$s" "%4289$s" "%4290$s"
+"%4291$s" "%4292$s" "%4293$s" "%4294$s" "%4295$s" "%4296$s" "%4297$s" "%4298$s" "%4299$s" "%4300$s"
+"%4301$s" "%4302$s" "%4303$s" "%4304$s" "%4305$s" "%4306$s" "%4307$s" "%4308$s" "%4309$s" "%4310$s"
+"%4311$s" "%4312$s" "%4313$s" "%4314$s" "%4315$s" "%4316$s" "%4317$s" "%4318$s" "%4319$s" "%4320$s"
+"%4321$s" "%4322$s" "%4323$s" "%4324$s" "%4325$s" "%4326$s" "%4327$s" "%4328$s" "%4329$s" "%4330$s"
+"%4331$s" "%4332$s" "%4333$s" "%4334$s" "%4335$s" "%4336$s" "%4337$s" "%4338$s" "%4339$s" "%4340$s"
+"%4341$s" "%4342$s" "%4343$s" "%4344$s" "%4345$s" "%4346$s" "%4347$s" "%4348$s" "%4349$s" "%4350$s"
+"%4351$s" "%4352$s" "%4353$s" "%4354$s" "%4355$s" "%4356$s" "%4357$s" "%4358$s" "%4359$s" "%4360$s"
+"%4361$s" "%4362$s" "%4363$s" "%4364$s" "%4365$s" "%4366$s" "%4367$s" "%4368$s" "%4369$s" "%4370$s"
+"%4371$s" "%4372$s" "%4373$s" "%4374$s" "%4375$s" "%4376$s" "%4377$s" "%4378$s" "%4379$s" "%4380$s"
+"%4381$s" "%4382$s" "%4383$s" "%4384$s" "%4385$s" "%4386$s" "%4387$s" "%4388$s" "%4389$s" "%4390$s"
+"%4391$s" "%4392$s" "%4393$s" "%4394$s" "%4395$s" "%4396$s" "%4397$s" "%4398$s" "%4399$s" "%4400$s"
+"%4401$s" "%4402$s" "%4403$s" "%4404$s" "%4405$s" "%4406$s" "%4407$s" "%4408$s" "%4409$s" "%4410$s"
+"%4411$s" "%4412$s" "%4413$s" "%4414$s" "%4415$s" "%4416$s" "%4417$s" "%4418$s" "%4419$s" "%4420$s"
+"%4421$s" "%4422$s" "%4423$s" "%4424$s" "%4425$s" "%4426$s" "%4427$s" "%4428$s" "%4429$s" "%4430$s"
+"%4431$s" "%4432$s" "%4433$s" "%4434$s" "%4435$s" "%4436$s" "%4437$s" "%4438$s" "%4439$s" "%4440$s"
+"%4441$s" "%4442$s" "%4443$s" "%4444$s" "%4445$s" "%4446$s" "%4447$s" "%4448$s" "%4449$s" "%4450$s"
+"%4451$s" "%4452$s" "%4453$s" "%4454$s" "%4455$s" "%4456$s" "%4457$s" "%4458$s" "%4459$s" "%4460$s"
+"%4461$s" "%4462$s" "%4463$s" "%4464$s" "%4465$s" "%4466$s" "%4467$s" "%4468$s" "%4469$s" "%4470$s"
+"%4471$s" "%4472$s" "%4473$s" "%4474$s" "%4475$s" "%4476$s" "%4477$s" "%4478$s" "%4479$s" "%4480$s"
+"%4481$s" "%4482$s" "%4483$s" "%4484$s" "%4485$s" "%4486$s" "%4487$s" "%4488$s" "%4489$s" "%4490$s"
+"%4491$s" "%4492$s" "%4493$s" "%4494$s" "%4495$s" "%4496$s" "%4497$s" "%4498$s" "%4499$s" "%4500$s"
+"%4501$s" "%4502$s" "%4503$s" "%4504$s" "%4505$s" "%4506$s" "%4507$s" "%4508$s" "%4509$s" "%4510$s"
+"%4511$s" "%4512$s" "%4513$s" "%4514$s" "%4515$s" "%4516$s" "%4517$s" "%4518$s" "%4519$s" "%4520$s"
+"%4521$s" "%4522$s" "%4523$s" "%4524$s" "%4525$s" "%4526$s" "%4527$s" "%4528$s" "%4529$s" "%4530$s"
+"%4531$s" "%4532$s" "%4533$s" "%4534$s" "%4535$s" "%4536$s" "%4537$s" "%4538$s" "%4539$s" "%4540$s"
+"%4541$s" "%4542$s" "%4543$s" "%4544$s" "%4545$s" "%4546$s" "%4547$s" "%4548$s" "%4549$s" "%4550$s"
+"%4551$s" "%4552$s" "%4553$s" "%4554$s" "%4555$s" "%4556$s" "%4557$s" "%4558$s" "%4559$s" "%4560$s"
+"%4561$s" "%4562$s" "%4563$s" "%4564$s" "%4565$s" "%4566$s" "%4567$s" "%4568$s" "%4569$s" "%4570$s"
+"%4571$s" "%4572$s" "%4573$s" "%4574$s" "%4575$s" "%4576$s" "%4577$s" "%4578$s" "%4579$s" "%4580$s"
+"%4581$s" "%4582$s" "%4583$s" "%4584$s" "%4585$s" "%4586$s" "%4587$s" "%4588$s" "%4589$s" "%4590$s"
+"%4591$s" "%4592$s" "%4593$s" "%4594$s" "%4595$s" "%4596$s" "%4597$s" "%4598$s" "%4599$s" "%4600$s"
+"%4601$s" "%4602$s" "%4603$s" "%4604$s" "%4605$s" "%4606$s" "%4607$s" "%4608$s" "%4609$s" "%4610$s"
+"%4611$s" "%4612$s" "%4613$s" "%4614$s" "%4615$s" "%4616$s" "%4617$s" "%4618$s" "%4619$s" "%4620$s"
+"%4621$s" "%4622$s" "%4623$s" "%4624$s" "%4625$s" "%4626$s" "%4627$s" "%4628$s" "%4629$s" "%4630$s"
+"%4631$s" "%4632$s" "%4633$s" "%4634$s" "%4635$s" "%4636$s" "%4637$s" "%4638$s" "%4639$s" "%4640$s"
+"%4641$s" "%4642$s" "%4643$s" "%4644$s" "%4645$s" "%4646$s" "%4647$s" "%4648$s" "%4649$s" "%4650$s"
+"%4651$s" "%4652$s" "%4653$s" "%4654$s" "%4655$s" "%4656$s" "%4657$s" "%4658$s" "%4659$s" "%4660$s"
+"%4661$s" "%4662$s" "%4663$s" "%4664$s" "%4665$s" "%4666$s" "%4667$s" "%4668$s" "%4669$s" "%4670$s"
+"%4671$s" "%4672$s" "%4673$s" "%4674$s" "%4675$s" "%4676$s" "%4677$s" "%4678$s" "%4679$s" "%4680$s"
+"%4681$s" "%4682$s" "%4683$s" "%4684$s" "%4685$s" "%4686$s" "%4687$s" "%4688$s" "%4689$s" "%4690$s"
+"%4691$s" "%4692$s" "%4693$s" "%4694$s" "%4695$s" "%4696$s" "%4697$s" "%4698$s" "%4699$s" "%4700$s"
+"%4701$s" "%4702$s" "%4703$s" "%4704$s" "%4705$s" "%4706$s" "%4707$s" "%4708$s" "%4709$s" "%4710$s"
+"%4711$s" "%4712$s" "%4713$s" "%4714$s" "%4715$s" "%4716$s" "%4717$s" "%4718$s" "%4719$s" "%4720$s"
+"%4721$s" "%4722$s" "%4723$s" "%4724$s" "%4725$s" "%4726$s" "%4727$s" "%4728$s" "%4729$s" "%4730$s"
+"%4731$s" "%4732$s" "%4733$s" "%4734$s" "%4735$s" "%4736$s" "%4737$s" "%4738$s" "%4739$s" "%4740$s"
+"%4741$s" "%4742$s" "%4743$s" "%4744$s" "%4745$s" "%4746$s" "%4747$s" "%4748$s" "%4749$s" "%4750$s"
+"%4751$s" "%4752$s" "%4753$s" "%4754$s" "%4755$s" "%4756$s" "%4757$s" "%4758$s" "%4759$s" "%4760$s"
+"%4761$s" "%4762$s" "%4763$s" "%4764$s" "%4765$s" "%4766$s" "%4767$s" "%4768$s" "%4769$s" "%4770$s"
+"%4771$s" "%4772$s" "%4773$s" "%4774$s" "%4775$s" "%4776$s" "%4777$s" "%4778$s" "%4779$s" "%4780$s"
+"%4781$s" "%4782$s" "%4783$s" "%4784$s" "%4785$s" "%4786$s" "%4787$s" "%4788$s" "%4789$s" "%4790$s"
+"%4791$s" "%4792$s" "%4793$s" "%4794$s" "%4795$s" "%4796$s" "%4797$s" "%4798$s" "%4799$s" "%4800$s"
+"%4801$s" "%4802$s" "%4803$s" "%4804$s" "%4805$s" "%4806$s" "%4807$s" "%4808$s" "%4809$s" "%4810$s"
+"%4811$s" "%4812$s" "%4813$s" "%4814$s" "%4815$s" "%4816$s" "%4817$s" "%4818$s" "%4819$s" "%4820$s"
+"%4821$s" "%4822$s" "%4823$s" "%4824$s" "%4825$s" "%4826$s" "%4827$s" "%4828$s" "%4829$s" "%4830$s"
+"%4831$s" "%4832$s" "%4833$s" "%4834$s" "%4835$s" "%4836$s" "%4837$s" "%4838$s" "%4839$s" "%4840$s"
+"%4841$s" "%4842$s" "%4843$s" "%4844$s" "%4845$s" "%4846$s" "%4847$s" "%4848$s" "%4849$s" "%4850$s"
+"%4851$s" "%4852$s" "%4853$s" "%4854$s" "%4855$s" "%4856$s" "%4857$s" "%4858$s" "%4859$s" "%4860$s"
+"%4861$s" "%4862$s" "%4863$s" "%4864$s" "%4865$s" "%4866$s" "%4867$s" "%4868$s" "%4869$s" "%4870$s"
+"%4871$s" "%4872$s" "%4873$s" "%4874$s" "%4875$s" "%4876$s" "%4877$s" "%4878$s" "%4879$s" "%4880$s"
+"%4881$s" "%4882$s" "%4883$s" "%4884$s" "%4885$s" "%4886$s" "%4887$s" "%4888$s" "%4889$s" "%4890$s"
+"%4891$s" "%4892$s" "%4893$s" "%4894$s" "%4895$s" "%4896$s" "%4897$s" "%4898$s" "%4899$s" "%4900$s"
+"%4901$s" "%4902$s" "%4903$s" "%4904$s" "%4905$s" "%4906$s" "%4907$s" "%4908$s" "%4909$s" "%4910$s"
+"%4911$s" "%4912$s" "%4913$s" "%4914$s" "%4915$s" "%4916$s" "%4917$s" "%4918$s" "%4919$s" "%4920$s"
+"%4921$s" "%4922$s" "%4923$s" "%4924$s" "%4925$s" "%4926$s" "%4927$s" "%4928$s" "%4929$s" "%4930$s"
+"%4931$s" "%4932$s" "%4933$s" "%4934$s" "%4935$s" "%4936$s" "%4937$s" "%4938$s" "%4939$s" "%4940$s"
+"%4941$s" "%4942$s" "%4943$s" "%4944$s" "%4945$s" "%4946$s" "%4947$s" "%4948$s" "%4949$s" "%4950$s"
+"%4951$s" "%4952$s" "%4953$s" "%4954$s" "%4955$s" "%4956$s" "%4957$s" "%4958$s" "%4959$s" "%4960$s"
+"%4961$s" "%4962$s" "%4963$s" "%4964$s" "%4965$s" "%4966$s" "%4967$s" "%4968$s" "%4969$s" "%4970$s"
+"%4971$s" "%4972$s" "%4973$s" "%4974$s" "%4975$s" "%4976$s" "%4977$s" "%4978$s" "%4979$s" "%4980$s"
+"%4981$s" "%4982$s" "%4983$s" "%4984$s" "%4985$s" "%4986$s" "%4987$s" "%4988$s" "%4989$s" "%4990$s"
+"%4991$s" "%4992$s" "%4993$s" "%4994$s" "%4995$s" "%4996$s" "%4997$s" "%4998$s" "%4999$s" "%5000$s"
+"%5001$s" "%5002$s" "%5003$s" "%5004$s" "%5005$s" "%5006$s" "%5007$s" "%5008$s" "%5009$s" "%5010$s"
+"%5011$s" "%5012$s" "%5013$s" "%5014$s" "%5015$s" "%5016$s" "%5017$s" "%5018$s" "%5019$s" "%5020$s"
+"%5021$s" "%5022$s" "%5023$s" "%5024$s" "%5025$s" "%5026$s" "%5027$s" "%5028$s" "%5029$s" "%5030$s"
+"%5031$s" "%5032$s" "%5033$s" "%5034$s" "%5035$s" "%5036$s" "%5037$s" "%5038$s" "%5039$s" "%5040$s"
+"%5041$s" "%5042$s" "%5043$s" "%5044$s" "%5045$s" "%5046$s" "%5047$s" "%5048$s" "%5049$s" "%5050$s"
+"%5051$s" "%5052$s" "%5053$s" "%5054$s" "%5055$s" "%5056$s" "%5057$s" "%5058$s" "%5059$s" "%5060$s"
+"%5061$s" "%5062$s" "%5063$s" "%5064$s" "%5065$s" "%5066$s" "%5067$s" "%5068$s" "%5069$s" "%5070$s"
+"%5071$s" "%5072$s" "%5073$s" "%5074$s" "%5075$s" "%5076$s" "%5077$s" "%5078$s" "%5079$s" "%5080$s"
+"%5081$s" "%5082$s" "%5083$s" "%5084$s" "%5085$s" "%5086$s" "%5087$s" "%5088$s" "%5089$s" "%5090$s"
+"%5091$s" "%5092$s" "%5093$s" "%5094$s" "%5095$s" "%5096$s" "%5097$s" "%5098$s" "%5099$s" "%5100$s"
+"%5101$s" "%5102$s" "%5103$s" "%5104$s" "%5105$s" "%5106$s" "%5107$s" "%5108$s" "%5109$s" "%5110$s"
+"%5111$s" "%5112$s" "%5113$s" "%5114$s" "%5115$s" "%5116$s" "%5117$s" "%5118$s" "%5119$s" "%5120$s"
+"%5121$s" "%5122$s" "%5123$s" "%5124$s" "%5125$s" "%5126$s" "%5127$s" "%5128$s" "%5129$s" "%5130$s"
+"%5131$s" "%5132$s" "%5133$s" "%5134$s" "%5135$s" "%5136$s" "%5137$s" "%5138$s" "%5139$s" "%5140$s"
+"%5141$s" "%5142$s" "%5143$s" "%5144$s" "%5145$s" "%5146$s" "%5147$s" "%5148$s" "%5149$s" "%5150$s"
+"%5151$s" "%5152$s" "%5153$s" "%5154$s" "%5155$s" "%5156$s" "%5157$s" "%5158$s" "%5159$s" "%5160$s"
+"%5161$s" "%5162$s" "%5163$s" "%5164$s" "%5165$s" "%5166$s" "%5167$s" "%5168$s" "%5169$s" "%5170$s"
+"%5171$s" "%5172$s" "%5173$s" "%5174$s" "%5175$s" "%5176$s" "%5177$s" "%5178$s" "%5179$s" "%5180$s"
+"%5181$s" "%5182$s" "%5183$s" "%5184$s" "%5185$s" "%5186$s" "%5187$s" "%5188$s" "%5189$s" "%5190$s"
+"%5191$s" "%5192$s" "%5193$s" "%5194$s" "%5195$s" "%5196$s" "%5197$s" "%5198$s" "%5199$s" "%5200$s"
+"%5201$s" "%5202$s" "%5203$s" "%5204$s" "%5205$s" "%5206$s" "%5207$s" "%5208$s" "%5209$s" "%5210$s"
+"%5211$s" "%5212$s" "%5213$s" "%5214$s" "%5215$s" "%5216$s" "%5217$s" "%5218$s" "%5219$s" "%5220$s"
+"%5221$s" "%5222$s" "%5223$s" "%5224$s" "%5225$s" "%5226$s" "%5227$s" "%5228$s" "%5229$s" "%5230$s"
+"%5231$s" "%5232$s" "%5233$s" "%5234$s" "%5235$s" "%5236$s" "%5237$s" "%5238$s" "%5239$s" "%5240$s"
+"%5241$s" "%5242$s" "%5243$s" "%5244$s" "%5245$s" "%5246$s" "%5247$s" "%5248$s" "%5249$s" "%5250$s"
+"%5251$s" "%5252$s" "%5253$s" "%5254$s" "%5255$s" "%5256$s" "%5257$s" "%5258$s" "%5259$s" "%5260$s"
+"%5261$s" "%5262$s" "%5263$s" "%5264$s" "%5265$s" "%5266$s" "%5267$s" "%5268$s" "%5269$s" "%5270$s"
+"%5271$s" "%5272$s" "%5273$s" "%5274$s" "%5275$s" "%5276$s" "%5277$s" "%5278$s" "%5279$s" "%5280$s"
+"%5281$s" "%5282$s" "%5283$s" "%5284$s" "%5285$s" "%5286$s" "%5287$s" "%5288$s" "%5289$s" "%5290$s"
+"%5291$s" "%5292$s" "%5293$s" "%5294$s" "%5295$s" "%5296$s" "%5297$s" "%5298$s" "%5299$s" "%5300$s"
+"%5301$s" "%5302$s" "%5303$s" "%5304$s" "%5305$s" "%5306$s" "%5307$s" "%5308$s" "%5309$s" "%5310$s"
+"%5311$s" "%5312$s" "%5313$s" "%5314$s" "%5315$s" "%5316$s" "%5317$s" "%5318$s" "%5319$s" "%5320$s"
+"%5321$s" "%5322$s" "%5323$s" "%5324$s" "%5325$s" "%5326$s" "%5327$s" "%5328$s" "%5329$s" "%5330$s"
+"%5331$s" "%5332$s" "%5333$s" "%5334$s" "%5335$s" "%5336$s" "%5337$s" "%5338$s" "%5339$s" "%5340$s"
+"%5341$s" "%5342$s" "%5343$s" "%5344$s" "%5345$s" "%5346$s" "%5347$s" "%5348$s" "%5349$s" "%5350$s"
+"%5351$s" "%5352$s" "%5353$s" "%5354$s" "%5355$s" "%5356$s" "%5357$s" "%5358$s" "%5359$s" "%5360$s"
+"%5361$s" "%5362$s" "%5363$s" "%5364$s" "%5365$s" "%5366$s" "%5367$s" "%5368$s" "%5369$s" "%5370$s"
+"%5371$s" "%5372$s" "%5373$s" "%5374$s" "%5375$s" "%5376$s" "%5377$s" "%5378$s" "%5379$s" "%5380$s"
+"%5381$s" "%5382$s" "%5383$s" "%5384$s" "%5385$s" "%5386$s" "%5387$s" "%5388$s" "%5389$s" "%5390$s"
+"%5391$s" "%5392$s" "%5393$s" "%5394$s" "%5395$s" "%5396$s" "%5397$s" "%5398$s" "%5399$s" "%5400$s"
+"%5401$s" "%5402$s" "%5403$s" "%5404$s" "%5405$s" "%5406$s" "%5407$s" "%5408$s" "%5409$s" "%5410$s"
+"%5411$s" "%5412$s" "%5413$s" "%5414$s" "%5415$s" "%5416$s" "%5417$s" "%5418$s" "%5419$s" "%5420$s"
+"%5421$s" "%5422$s" "%5423$s" "%5424$s" "%5425$s" "%5426$s" "%5427$s" "%5428$s" "%5429$s" "%5430$s"
+"%5431$s" "%5432$s" "%5433$s" "%5434$s" "%5435$s" "%5436$s" "%5437$s" "%5438$s" "%5439$s" "%5440$s"
+"%5441$s" "%5442$s" "%5443$s" "%5444$s" "%5445$s" "%5446$s" "%5447$s" "%5448$s" "%5449$s" "%5450$s"
+"%5451$s" "%5452$s" "%5453$s" "%5454$s" "%5455$s" "%5456$s" "%5457$s" "%5458$s" "%5459$s" "%5460$s"
+"%5461$s" "%5462$s" "%5463$s" "%5464$s" "%5465$s" "%5466$s" "%5467$s" "%5468$s" "%5469$s" "%5470$s"
+"%5471$s" "%5472$s" "%5473$s" "%5474$s" "%5475$s" "%5476$s" "%5477$s" "%5478$s" "%5479$s" "%5480$s"
+"%5481$s" "%5482$s" "%5483$s" "%5484$s" "%5485$s" "%5486$s" "%5487$s" "%5488$s" "%5489$s" "%5490$s"
+"%5491$s" "%5492$s" "%5493$s" "%5494$s" "%5495$s" "%5496$s" "%5497$s" "%5498$s" "%5499$s" "%5500$s"
+"%5501$s" "%5502$s" "%5503$s" "%5504$s" "%5505$s" "%5506$s" "%5507$s" "%5508$s" "%5509$s" "%5510$s"
+"%5511$s" "%5512$s" "%5513$s" "%5514$s" "%5515$s" "%5516$s" "%5517$s" "%5518$s" "%5519$s" "%5520$s"
+"%5521$s" "%5522$s" "%5523$s" "%5524$s" "%5525$s" "%5526$s" "%5527$s" "%5528$s" "%5529$s" "%5530$s"
+"%5531$s" "%5532$s" "%5533$s" "%5534$s" "%5535$s" "%5536$s" "%5537$s" "%5538$s" "%5539$s" "%5540$s"
+"%5541$s" "%5542$s" "%5543$s" "%5544$s" "%5545$s" "%5546$s" "%5547$s" "%5548$s" "%5549$s" "%5550$s"
+"%5551$s" "%5552$s" "%5553$s" "%5554$s" "%5555$s" "%5556$s" "%5557$s" "%5558$s" "%5559$s" "%5560$s"
+"%5561$s" "%5562$s" "%5563$s" "%5564$s" "%5565$s" "%5566$s" "%5567$s" "%5568$s" "%5569$s" "%5570$s"
+"%5571$s" "%5572$s" "%5573$s" "%5574$s" "%5575$s" "%5576$s" "%5577$s" "%5578$s" "%5579$s" "%5580$s"
+"%5581$s" "%5582$s" "%5583$s" "%5584$s" "%5585$s" "%5586$s" "%5587$s" "%5588$s" "%5589$s" "%5590$s"
+"%5591$s" &qu