Merge branch 'devel' into leaflistdefaults
diff --git a/src/parser_yang.c b/src/parser_yang.c
index 1aa4d1e..672d597 100644
--- a/src/parser_yang.c
+++ b/src/parser_yang.c
@@ -1638,6 +1638,12 @@
     deviation->deviation = dev;
     deviation->target = dev_target;
 
+    deviation->dflt_check = ly_set_new();
+    if (!deviation->dflt_check) {
+        LOGMEM;
+        goto error;
+    }
+
     return deviation;
 
 error:
@@ -1863,105 +1869,73 @@
 }
 
 int
-yang_read_deviate_default(struct ly_ctx *ctx, struct type_deviation *dev, char *value)
+yang_read_deviate_default(struct lys_module *module, struct type_deviation *dev, uint8_t c_dflt)
 {
-    int rc;
-    struct lys_node_choice *choice;
-    struct lys_node_leaf *leaf;
-    struct lys_node *node;
+    int i;
+    struct lys_node_leaflist *llist;
 
-    if (dev->deviate->dflt) {
-        LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "default", "deviate");
-        free(value);
+    /* check target node type */
+    if (module->version < 2 && dev->target->nodetype == LYS_LEAFLIST) {
+        LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
+        LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow \"default\" property.");
+        goto error;
+    } else if (c_dflt > 1 && dev->target->nodetype != LYS_LEAFLIST) { /* from YANG 1.1 */
+        LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
+        LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow multiple \"default\" properties.");
+        goto error;
+    } else if (!(dev->target->nodetype & (LYS_LEAF | LYS_LEAFLIST | LYS_CHOICE))) {
+        LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
+        LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow \"default\" property.");
         goto error;
     }
 
-    dev->deviate->dflt = lydict_insert_zc(ctx, value);
-
-    if (dev->target->nodetype == LYS_CHOICE) {
-        choice = (struct lys_node_choice *)dev->target;
-
-        rc = resolve_choice_default_schema_nodeid(dev->deviate->dflt, choice->child, (const struct lys_node **)&node);
-        if (rc || !node) {
-            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, dev->deviate->dflt, "default");
+    if (dev->deviate->mod == LY_DEVIATE_ADD) {
+        /* check that there is no current value */
+        if ((dev->target->nodetype == LYS_LEAF && ((struct lys_node_leaf *)dev->target)->dflt) ||
+                (dev->target->nodetype == LYS_CHOICE && ((struct lys_node_choice *)dev->target)->dflt)) {
+            LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
+            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Adding property that already exists.");
             goto error;
         }
-        if (dev->deviate->mod == LY_DEVIATE_DEL) {
-            if (!choice->dflt || (choice->dflt != node)) {
-                LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, dev->deviate->dflt, "default");
-                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Value differs from the target being deleted.");
-                goto error;
-            }
-            choice->dflt = NULL;
-        } else {
-            if (dev->deviate->mod == LY_DEVIATE_ADD) {
-                /* check that there is no current value */
-                if (choice->dflt) {
-                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
-                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Adding property that already exists.");
-                    goto error;
-                } else if (choice->flags & LYS_MAND_TRUE) {
-                    LOGVAL(LYE_INCHILDSTMT, LY_VLOG_NONE, NULL, "default", "choice");
-                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "The \"default\" statement is forbidden on choices with \"mandatory\".");
-                    goto error;
-                }
-            } else { /* replace*/
-                if (!choice->dflt) {
-                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
-                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Replacing a property that does not exist.");
-                    goto error;
-                }
-            }
 
-            choice->dflt = node;
-            if (!choice->dflt) {
-                /* default branch not found */
-                LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, dev->deviate->dflt, "default");
-                goto error;
-            }
+        /* check collision with mandatory/min-elements */
+        if ((dev->target->flags & LYS_MAND_TRUE) ||
+                (dev->target->nodetype == LYS_LEAFLIST && ((struct lys_node_leaflist *)dev->target)->min)) {
+            LOGVAL(LYE_INCHILDSTMT, LY_VLOG_NONE, NULL, "default", "deviation");
+            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL,
+                   "Adding the \"default\" statement is forbidden on %s statement.",
+                   (dev->target->flags & LYS_MAND_TRUE) ? "nodes with the \"mandatory\"" : "leaflists with non-zero \"min-elements\"");
+            goto error;
         }
-    } else if (dev->target->nodetype == LYS_LEAF) {
-        leaf = (struct lys_node_leaf *)dev->target;
-
-        if (dev->deviate->mod == LY_DEVIATE_DEL) {
-            if (!leaf->dflt || !ly_strequal(leaf->dflt, dev->deviate->dflt, 1)) {
-                LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, dev->deviate->dflt, "default");
-                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Value differs from the target being deleted.");
-                goto error;
-            }
-            /* remove value */
-            lydict_remove(ctx, leaf->dflt);
-            leaf->dflt = NULL;
-        } else {
-            if (dev->deviate->mod == LY_DEVIATE_ADD) {
-                /* check that there is no current value */
-                if (leaf->dflt) {
-                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
-                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Adding property that already exists.");
-                    goto error;
-                } else if (leaf->flags & LYS_MAND_TRUE) {
-                    /* RFC 6020, 7.6.4 - default statement must not with mandatory true */
-                    LOGVAL(LYE_INCHILDSTMT, LY_VLOG_NONE, NULL, "default", "leaf");
-                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "The \"default\" statement is forbidden on leaf with \"mandatory\".");
-                    goto error;
-                }
-            } else { /* replace*/
-                if (!leaf->dflt) {
-                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
-                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Replacing a property that does not exist.");
-                    goto error;
-                }
-            }
-            /* remove value */
-            lydict_remove(ctx, leaf->dflt);
-
-            /* set new value */
-            leaf->dflt = lydict_insert(ctx, dev->deviate->dflt, 0);
+    } else if (dev->deviate->mod == LY_DEVIATE_RPL) {
+        /* check that there was a value before */
+        if (((dev->target->nodetype & (LYS_LEAF | LYS_LEAFLIST)) && !((struct lys_node_leaf *)dev->target)->dflt) ||
+                (dev->target->nodetype == LYS_CHOICE && !((struct lys_node_choice *)dev->target)->dflt)) {
+            LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
+            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Replacing a property that does not exist.");
+            goto error;
         }
-    } else {
-        /* invalid target for default value */
-        LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
-        LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow \"default\" property.");
+    }
+
+    if (dev->target->nodetype == LYS_LEAFLIST) {
+        /* reallocate default list in the target */
+        llist = (struct lys_node_leaflist *)dev->target;
+        if (dev->deviate->mod == LY_DEVIATE_ADD) {
+            /* reallocate (enlarge) the unique array of the target */
+            llist->dflt = ly_realloc(llist->dflt, (c_dflt + llist->dflt_size) * sizeof *dev->deviate->dflt);
+        } else if (dev->deviate->mod == LY_DEVIATE_RPL) {
+            /* reallocate (replace) the unique array of the target */
+            for (i = 0; i < llist->dflt_size; i++) {
+                lydict_remove(llist->module->ctx, llist->dflt[i]);
+            }
+            llist->dflt = ly_realloc(llist->dflt, c_dflt * sizeof *dev->deviate->dflt);
+            llist->dflt_size = 0;
+        }
+    }
+
+    dev->deviate->dflt = calloc(c_dflt, sizeof *dev->deviate->dflt);
+    if (!dev->deviate->dflt) {
+        LOGMEM;
         goto error;
     }
 
@@ -1972,6 +1946,105 @@
 }
 
 int
+yang_fill_deviate_default(struct ly_ctx *ctx, struct type_deviation *dev, char *exp)
+{
+    struct lys_node *node;
+    struct lys_node_choice *choice;
+    struct lys_node_leaf *leaf;
+    struct lys_node_leaflist *llist;
+    int rc, i;
+    unsigned int u;
+    const char *value;
+
+    value = lydict_insert_zc(ctx, exp);
+    u = strlen(value);
+    dev->deviate->dflt[dev->deviate->dflt_size++] = value;
+
+    if (dev->target->nodetype == LYS_CHOICE) {
+        choice = (struct lys_node_choice *)dev->target;
+        rc = resolve_choice_default_schema_nodeid(value, choice->child, (const struct lys_node **)&node);
+        if (rc || !node) {
+            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+            goto error;
+        }
+        if (dev->deviate->mod == LY_DEVIATE_DEL) {
+            if (!choice->dflt || (choice->dflt != node)) {
+                LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Value differs from the target being deleted.");
+                goto error;
+            }
+        } else { /* add or replace */
+            choice->dflt = node;
+            if (!choice->dflt) {
+                /* default branch not found */
+                LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                goto error;
+            }
+        }
+    } else if (dev->target->nodetype == LYS_LEAF) {
+        leaf = (struct lys_node_leaf *)dev->target;
+        if (dev->deviate->mod == LY_DEVIATE_DEL) {
+            if (!leaf->dflt || !ly_strequal(leaf->dflt, value, 1)) {
+                LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Value differs from the target being deleted.");
+                goto error;
+            }
+            /* remove value */
+            lydict_remove(ctx, leaf->dflt);
+            leaf->dflt = NULL;
+        } else { /* add (already checked) and replace */
+            /* remove value */
+            lydict_remove(ctx, leaf->dflt);
+
+            /* set new value */
+            leaf->dflt = lydict_insert(ctx, value, u);
+
+            /* remember to check it later (it may not fit now, but the type can be deviated too) */
+            ly_set_add(dev->dflt_check, dev->target, 0);
+        }
+    } else { /* LYS_LEAFLIST */
+        llist = (struct lys_node_leaflist *)dev->target;
+        if (dev->deviate->mod == LY_DEVIATE_DEL) {
+            /* find and remove the value in target list */
+            for (i = 0; i < llist->dflt_size; i++) {
+                if (llist->dflt[i] && ly_strequal(llist->dflt[i], value, 1)) {
+                    /* match, remove the value */
+                    lydict_remove(llist->module->ctx, llist->dflt[i]);
+                    llist->dflt[i] = NULL;
+                    break;
+                }
+            }
+            if (i == llist->dflt_size) {
+                LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "The default value to delete not found in the target node.");
+                goto error;
+            }
+        } else {
+            /* add or replace, anyway we place items into the deviate's list
+               which propagates to the target */
+            /* we just want to check that the value isn't already in the list */
+            for (i = 0; i < llist->dflt_size; i++) {
+                if (ly_strequal(llist->dflt[i], value, 1)) {
+                    LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Duplicated default value \"%s\".", value);
+                    goto error;
+                }
+            }
+            /* store it in target node */
+            llist->dflt[llist->dflt_size++] = lydict_insert(ctx, value, u);
+
+            /* remember to check it later (it may not fit now, but the type can be deviated too) */
+            ly_set_add(dev->dflt_check, dev->target, 0);
+        }
+    }
+
+    return EXIT_SUCCESS;
+error:
+    return EXIT_FAILURE;
+}
+
+
+int
 yang_read_deviate_config(struct type_deviation *dev, uint8_t value)
 {
     if (dev->deviate->flags & LYS_CONFIG_MASK) {
@@ -2237,25 +2310,43 @@
 }
 
 int
-yang_check_deviation(struct lys_module *module, struct type_deviation *dev, struct unres_schema *unres)
+yang_check_deviation(struct lys_module *module, struct ly_set *dflt_check, struct unres_schema *unres)
 {
     int i, rc;
+    unsigned int u;
+    const char *value, *target_name;
+    struct lys_node_leaflist *llist;
+    struct lys_node_leaf *leaf;
 
-    if (dev->target->nodetype == LYS_LEAF) {
-        for(i = 0; i < dev->deviation->deviate_size; ++i) {
-            if (dev->deviation->deviate[i].mod != LY_DEVIATE_DEL) {
-                if (dev->deviation->deviate[i].dflt || dev->deviation->deviate[i].type) {
-                    rc = unres_schema_add_str(module, unres, &((struct lys_node_leaf *)dev->target)->type, UNRES_TYPE_DFLT, ((struct lys_node_leaf *)dev->target)->dflt);
-                    if (rc == -1) {
-                        LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Leaf \"%s\" default value no longer matches its type.", dev->deviation->target_name);
-                        return EXIT_FAILURE;
-                    }
+    /* now check whether default value, if any, matches the type */
+    for (u = 0; u < dflt_check->number; ++u) {
+        value = NULL;
+        rc = EXIT_SUCCESS;
+        if (dflt_check->set.s[u]->nodetype == LYS_LEAF) {
+            leaf = (struct lys_node_leaf *)dflt_check->set.s[u];
+            target_name = leaf->name;
+            rc = unres_schema_add_str(module, unres, &leaf->type, UNRES_TYPE_DFLT, value = leaf->dflt);
+        } else { /* LYS_LEAFLIST */
+            llist = (struct lys_node_leaflist *)dflt_check->set.s[u];
+            target_name = llist->name;
+            for (i = 0; i < llist->dflt_size; i++) {
+                rc = unres_schema_add_str(module, unres, &llist->type, UNRES_TYPE_DFLT, value = llist->dflt[i]);
+                if (rc == -1) {
                     break;
                 }
             }
         }
+        if (rc == -1) {
+            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL,
+                   "The default value \"%s\" of the deviated node \"%s\"no longer matches its type.",
+                   target_name);
+            return EXIT_FAILURE;
+        }
     }
+
     return EXIT_SUCCESS;
+
 }
 
 int
diff --git a/src/parser_yang.h b/src/parser_yang.h
index 13054b7..66b1e3a 100644
--- a/src/parser_yang.h
+++ b/src/parser_yang.h
@@ -39,8 +39,11 @@
 struct lys_node_array{
     uint8_t if_features;
     uint8_t must;
+    union {
+        uint8_t tpdf;
+        uint8_t dflt;
+    };
     uint8_t unique;
-    uint8_t tpdf;
     union {
         uint uni;
         uint16_t flags;
@@ -97,6 +100,7 @@
     struct lys_deviate *deviate;
     struct lys_restr **trg_must;
     uint8_t *trg_must_size;
+    struct ly_set *dflt_check;
 };
 
 struct type_uses {
@@ -222,7 +226,9 @@
 
 int yang_read_deviate_unique(struct type_deviation *dev, uint8_t c_uniq);
 
-int yang_read_deviate_default(struct ly_ctx *ctx, struct type_deviation *dev, char *value);
+int yang_read_deviate_default(struct lys_module *module, struct type_deviation *dev, uint8_t c_dflt);
+
+int yang_fill_deviate_default(struct ly_ctx *ctx, struct type_deviation *dev, char *exp);
 
 int yang_read_deviate_config(struct type_deviation *dev, uint8_t value);
 
@@ -237,7 +243,7 @@
 
 int yang_check_deviate_unique(struct lys_module *module, struct type_deviation *dev, char *value);
 
-int yang_check_deviation(struct lys_module *module, struct type_deviation *dev, struct unres_schema *unres);
+int yang_check_deviation(struct lys_module *module, struct ly_set *dflt_check, struct unres_schema *unres);
 
 int yang_fill_include(struct lys_module *module, struct lys_submodule *submodule, char *value,
                       struct lys_include *inc, struct unres_schema *unres);
diff --git a/src/parser_yang_bis.c b/src/parser_yang_bis.c
index 0b0c397..79dd119 100644
--- a/src/parser_yang_bis.c
+++ b/src/parser_yang_bis.c
@@ -523,16 +523,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3471
+#define YYLAST   3251
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  109
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  344
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  763
+#define YYNRULES  764
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  1228
+#define YYNSTATES  1229
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -588,83 +588,83 @@
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   254,   254,   255,   276,   276,   295,   297,   296,   328,
-     341,   328,   350,   351,   359,   360,   363,   376,   363,   387,
-     388,   394,   394,   403,   405,   407,   430,   431,   434,   434,
-     454,   455,   461,   472,   483,   492,   494,   494,   517,   518,
-     522,   523,   534,   545,   554,   566,   577,   566,   586,   588,
-     589,   590,   591,   596,   602,   604,   606,   608,   610,   618,
-     621,   621,   630,   631,   631,   636,   637,   642,   649,   649,
-     658,   664,   705,   708,   709,   710,   711,   712,   713,   714,
-     720,   721,   722,   724,   724,   743,   744,   748,   749,   756,
-     763,   774,   786,   786,   788,   789,   793,   795,   796,   797,
-     808,   810,   811,   810,   814,   815,   816,   817,   834,   834,
-     843,   844,   849,   868,   881,   887,   892,   898,   900,   900,
-     909,   910,   915,   955,   964,   973,   979,   984,   990,   994,
-     992,  1009,  1019,  1019,  1026,  1029,  1029,  1044,  1045,  1051,
-    1057,  1062,  1068,  1069,  1075,  1080,  1081,  1082,  1089,  1097,
-    1102,  1106,  1136,  1137,  1141,  1142,  1143,  1151,  1164,  1170,
-    1171,  1189,  1193,  1203,  1204,  1209,  1221,  1226,  1231,  1236,
-    1242,  1251,  1264,  1265,  1269,  1270,  1282,  1287,  1292,  1297,
-    1303,  1316,  1316,  1335,  1336,  1339,  1351,  1361,  1362,  1367,
-    1391,  1400,  1409,  1415,  1420,  1426,  1438,  1439,  1457,  1462,
-    1463,  1468,  1470,  1472,  1476,  1480,  1495,  1495,  1514,  1515,
-    1517,  1528,  1538,  1539,  1544,  1568,  1577,  1586,  1592,  1597,
-    1603,  1615,  1616,  1631,  1633,  1635,  1637,  1639,  1639,  1646,
-    1647,  1652,  1672,  1678,  1683,  1688,  1689,  1696,  1697,  1700,
-    1701,  1702,  1703,  1704,  1705,  1706,  1707,  1710,  1710,  1718,
-    1719,  1724,  1758,  1758,  1760,  1767,  1767,  1775,  1776,  1782,
-    1788,  1793,  1798,  1798,  1803,  1803,  1808,  1808,  1816,  1816,
-    1823,  1830,  1823,  1848,  1876,  1876,  1878,  1885,  1890,  1885,
-    1900,  1901,  1901,  1909,  1912,  1918,  1924,  1930,  1935,  1941,
-    1948,  1941,  1967,  1995,  1995,  1997,  2004,  2009,  2004,  2019,
-    2020,  2020,  2028,  2034,  2048,  2062,  2074,  2080,  2085,  2091,
-    2098,  2091,  2123,  2166,  2166,  2168,  2175,  2175,  2183,  2196,
-    2204,  2210,  2224,  2238,  2250,  2256,  2261,  2266,  2266,  2274,
-    2274,  2279,  2279,  2284,  2284,  2292,  2292,  2303,  2305,  2304,
-    2322,  2343,  2343,  2345,  2358,  2370,  2378,  2386,  2394,  2403,
-    2412,  2412,  2422,  2423,  2426,  2427,  2428,  2429,  2430,  2431,
-    2434,  2434,  2442,  2443,  2447,  2467,  2467,  2469,  2476,  2482,
-    2487,  2492,  2492,  2499,  2499,  2511,  2511,  2523,  2524,  2528,
-    2555,  2555,  2557,  2564,  2564,  2572,  2579,  2586,  2593,  2598,
-    2604,  2604,  2620,  2621,  2625,  2660,  2660,  2662,  2669,  2675,
-    2680,  2685,  2685,  2693,  2693,  2708,  2708,  2717,  2718,  2723,
-    2724,  2727,  2747,  2754,  2778,  2802,  2821,  2840,  2863,  2886,
-    2891,  2897,  2906,  2897,  2913,  2914,  2917,  2926,  2917,  2938,
-    2959,  2959,  2961,  2968,  2977,  2982,  2987,  2987,  2995,  2995,
-    3003,  3003,  3013,  3014,  3017,  3017,  3028,  3028,  3039,  3040,
-    3045,  3073,  3080,  3086,  3091,  3096,  3096,  3104,  3104,  3109,
-    3109,  3121,  3121,  3134,  3148,  3134,  3155,  3186,  3186,  3194,
-    3194,  3202,  3202,  3207,  3207,  3217,  3231,  3217,  3238,  3238,
-    3248,  3252,  3257,  3295,  3295,  3303,  3310,  3316,  3321,  3326,
-    3326,  3334,  3334,  3339,  3339,  3346,  3355,  3346,  3368,  3387,
-    3394,  3401,  3411,  3412,  3414,  3419,  3421,  3422,  3423,  3426,
-    3428,  3428,  3434,  3435,  3439,  3461,  3469,  3477,  3493,  3501,
-    3508,  3515,  3526,  3538,  3538,  3544,  3545,  3549,  3571,  3579,
-    3590,  3600,  3609,  3609,  3615,  3616,  3620,  3625,  3631,  3639,
-    3647,  3654,  3661,  3672,  3684,  3684,  3687,  3688,  3692,  3693,
-    3698,  3704,  3706,  3707,  3706,  3710,  3711,  3712,  3727,  3729,
-    3730,  3729,  3733,  3734,  3735,  3750,  3752,  3754,  3755,  3776,
-    3778,  3779,  3780,  3801,  3803,  3804,  3805,  3817,  3817,  3825,
-    3826,  3831,  3833,  3834,  3836,  3837,  3839,  3841,  3841,  3850,
-    3853,  3853,  3864,  3867,  3877,  3898,  3900,  3901,  3904,  3904,
-    3923,  3923,  3932,  3932,  3941,  3944,  3946,  3948,  3949,  3951,
-    3953,  3955,  3956,  3958,  3960,  3961,  3963,  3964,  3966,  3968,
-    3971,  3975,  3977,  3978,  3980,  3981,  3983,  3985,  3996,  3997,
-    4000,  4001,  4013,  4014,  4016,  4017,  4019,  4020,  4026,  4027,
-    4030,  4031,  4032,  4058,  4059,  4062,  4063,  4064,  4067,  4067,
-    4075,  4077,  4078,  4080,  4081,  4082,  4084,  4085,  4087,  4088,
-    4090,  4091,  4093,  4094,  4096,  4097,  4100,  4101,  4104,  4106,
-    4107,  4110,  4110,  4119,  4121,  4122,  4123,  4124,  4125,  4126,
-    4127,  4129,  4130,  4131,  4132,  4133,  4134,  4135,  4136,  4137,
-    4138,  4139,  4140,  4141,  4142,  4143,  4144,  4145,  4146,  4147,
-    4148,  4149,  4150,  4151,  4152,  4153,  4154,  4155,  4156,  4157,
-    4158,  4159,  4160,  4161,  4162,  4163,  4164,  4165,  4166,  4167,
-    4168,  4169,  4170,  4171,  4172,  4173,  4174,  4175,  4176,  4177,
-    4178,  4179,  4180,  4181,  4182,  4183,  4184,  4185,  4186,  4187,
-    4188,  4189,  4190,  4191,  4192,  4193,  4194,  4195,  4196,  4197,
-    4198,  4199,  4200,  4201,  4202,  4203,  4204,  4205,  4206,  4207,
-    4208,  4209,  4212,  4221
+       0,   255,   255,   256,   277,   277,   296,   298,   297,   329,
+     342,   329,   351,   352,   360,   361,   364,   377,   364,   388,
+     389,   395,   395,   404,   406,   408,   431,   432,   435,   435,
+     455,   456,   462,   473,   484,   493,   495,   495,   518,   519,
+     523,   524,   535,   546,   555,   567,   578,   567,   587,   589,
+     590,   591,   592,   597,   603,   605,   607,   609,   611,   619,
+     622,   622,   631,   632,   632,   637,   638,   643,   650,   650,
+     659,   665,   706,   709,   710,   711,   712,   713,   714,   715,
+     721,   722,   723,   725,   725,   744,   745,   749,   750,   757,
+     764,   775,   787,   787,   789,   790,   794,   796,   797,   798,
+     809,   811,   812,   811,   815,   816,   817,   818,   835,   835,
+     844,   845,   850,   869,   882,   888,   893,   899,   901,   901,
+     910,   911,   916,   956,   965,   974,   980,   985,   991,   995,
+     993,  1010,  1020,  1020,  1027,  1030,  1030,  1045,  1046,  1052,
+    1058,  1063,  1069,  1070,  1076,  1081,  1082,  1083,  1090,  1098,
+    1103,  1107,  1137,  1138,  1142,  1143,  1144,  1152,  1165,  1171,
+    1172,  1190,  1194,  1204,  1205,  1210,  1222,  1227,  1232,  1237,
+    1243,  1252,  1265,  1266,  1270,  1271,  1283,  1288,  1293,  1298,
+    1304,  1317,  1317,  1336,  1337,  1340,  1352,  1362,  1363,  1368,
+    1392,  1401,  1410,  1416,  1421,  1427,  1439,  1440,  1458,  1463,
+    1464,  1469,  1471,  1473,  1477,  1481,  1496,  1496,  1515,  1516,
+    1518,  1529,  1539,  1540,  1545,  1569,  1578,  1587,  1593,  1598,
+    1604,  1616,  1617,  1632,  1634,  1636,  1638,  1640,  1640,  1647,
+    1648,  1653,  1673,  1679,  1684,  1689,  1690,  1697,  1698,  1701,
+    1702,  1703,  1704,  1705,  1706,  1707,  1708,  1711,  1711,  1719,
+    1720,  1725,  1759,  1759,  1761,  1768,  1768,  1776,  1777,  1783,
+    1789,  1794,  1799,  1799,  1804,  1804,  1809,  1809,  1817,  1817,
+    1824,  1831,  1824,  1849,  1877,  1877,  1879,  1886,  1891,  1886,
+    1901,  1902,  1902,  1910,  1913,  1919,  1925,  1931,  1936,  1942,
+    1949,  1942,  1984,  2023,  2023,  2025,  2032,  2037,  2032,  2047,
+    2064,  2065,  2065,  2073,  2079,  2093,  2107,  2119,  2125,  2130,
+    2136,  2143,  2136,  2168,  2211,  2211,  2213,  2220,  2220,  2228,
+    2241,  2249,  2255,  2269,  2283,  2295,  2301,  2306,  2311,  2311,
+    2319,  2319,  2324,  2324,  2329,  2329,  2337,  2337,  2348,  2350,
+    2349,  2367,  2388,  2388,  2390,  2403,  2415,  2423,  2431,  2439,
+    2448,  2457,  2457,  2467,  2468,  2471,  2472,  2473,  2474,  2475,
+    2476,  2479,  2479,  2487,  2488,  2492,  2512,  2512,  2514,  2521,
+    2527,  2532,  2537,  2537,  2544,  2544,  2556,  2556,  2568,  2569,
+    2573,  2600,  2600,  2602,  2609,  2609,  2617,  2624,  2631,  2638,
+    2643,  2649,  2649,  2665,  2666,  2670,  2705,  2705,  2707,  2714,
+    2720,  2725,  2730,  2730,  2738,  2738,  2753,  2753,  2762,  2763,
+    2768,  2769,  2772,  2822,  2829,  2853,  2873,  2892,  2911,  2934,
+    2957,  2962,  2968,  2977,  2968,  2984,  2985,  2988,  2997,  2988,
+    3009,  3030,  3030,  3032,  3039,  3048,  3053,  3058,  3058,  3066,
+    3066,  3074,  3074,  3084,  3085,  3088,  3088,  3099,  3099,  3110,
+    3111,  3116,  3144,  3151,  3157,  3162,  3167,  3167,  3175,  3175,
+    3180,  3180,  3192,  3192,  3205,  3219,  3205,  3226,  3257,  3257,
+    3265,  3265,  3273,  3273,  3278,  3278,  3288,  3302,  3288,  3309,
+    3309,  3319,  3323,  3328,  3366,  3366,  3374,  3381,  3387,  3392,
+    3397,  3397,  3405,  3405,  3410,  3410,  3417,  3426,  3417,  3440,
+    3460,  3468,  3476,  3486,  3487,  3489,  3494,  3496,  3497,  3498,
+    3501,  3503,  3503,  3509,  3510,  3514,  3541,  3549,  3557,  3573,
+    3583,  3590,  3597,  3608,  3620,  3620,  3626,  3627,  3647,  3674,
+    3682,  3693,  3703,  3714,  3714,  3720,  3721,  3725,  3742,  3749,
+    3757,  3767,  3774,  3781,  3792,  3804,  3804,  3807,  3808,  3812,
+    3813,  3818,  3824,  3826,  3827,  3826,  3830,  3831,  3832,  3847,
+    3849,  3850,  3849,  3853,  3854,  3855,  3870,  3872,  3874,  3875,
+    3896,  3898,  3899,  3900,  3921,  3923,  3924,  3925,  3937,  3937,
+    3945,  3946,  3951,  3953,  3954,  3956,  3957,  3959,  3961,  3961,
+    3970,  3973,  3973,  3984,  3987,  3997,  4018,  4020,  4021,  4024,
+    4024,  4043,  4043,  4052,  4052,  4061,  4064,  4066,  4068,  4069,
+    4071,  4073,  4075,  4076,  4078,  4080,  4081,  4083,  4084,  4086,
+    4088,  4091,  4095,  4097,  4098,  4100,  4101,  4103,  4105,  4116,
+    4117,  4120,  4121,  4133,  4134,  4136,  4137,  4139,  4140,  4146,
+    4147,  4150,  4151,  4152,  4178,  4179,  4182,  4183,  4184,  4187,
+    4187,  4195,  4197,  4198,  4200,  4201,  4202,  4204,  4205,  4207,
+    4208,  4210,  4211,  4213,  4214,  4216,  4217,  4220,  4221,  4224,
+    4226,  4227,  4230,  4230,  4239,  4241,  4242,  4243,  4244,  4245,
+    4246,  4247,  4249,  4250,  4251,  4252,  4253,  4254,  4255,  4256,
+    4257,  4258,  4259,  4260,  4261,  4262,  4263,  4264,  4265,  4266,
+    4267,  4268,  4269,  4270,  4271,  4272,  4273,  4274,  4275,  4276,
+    4277,  4278,  4279,  4280,  4281,  4282,  4283,  4284,  4285,  4286,
+    4287,  4288,  4289,  4290,  4291,  4292,  4293,  4294,  4295,  4296,
+    4297,  4298,  4299,  4300,  4301,  4302,  4303,  4304,  4305,  4306,
+    4307,  4308,  4309,  4310,  4311,  4312,  4313,  4314,  4315,  4316,
+    4317,  4318,  4319,  4320,  4321,  4322,  4323,  4324,  4325,  4326,
+    4327,  4328,  4329,  4332,  4341
 };
 #endif
 
@@ -802,12 +802,12 @@
 };
 # endif
 
-#define YYPACT_NINF -1027
+#define YYPACT_NINF -946
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-1027)))
+  (!!((Yystate) == (-946)))
 
-#define YYTABLE_NINF -617
+#define YYTABLE_NINF -618
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -816,129 +816,129 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-   -1027,    61, -1027, -1027,   193, -1027, -1027, -1027,    43,    43,
-   -1027, -1027,  3278,  3278,    43, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027,   -68,    43,   -63,    43, -1027, -1027,     6,
-     194,   194, -1027, -1027,   181, -1027, -1027,    15,   312,    43,
-      43,    43,    43, -1027, -1027, -1027, -1027, -1027,   120, -1027,
-   -1027,    24,  2245, -1027,  2613,  3278,  2613,    37,    37,    43,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027,    34, -1027, -1027,    34,
-   -1027,    34,    43,    43, -1027, -1027,   179,   179,  3278,    43,
-    2708,    43, -1027, -1027, -1027, -1027, -1027,    43, -1027,  3278,
-    3278,    43,    43,    43,    43, -1027, -1027, -1027, -1027,    91,
-      91, -1027, -1027,    43,    63, -1027,   109,    47,   194,    43,
-   -1027, -1027, -1027,  2613,  2613,  2613,  2613,    43, -1027,   343,
-    1255,    90,    69, -1027, -1027, -1027,   116,    86,    34,    34,
-      34,    34,    70,   194,    43,    43,    43,    43,    43,    43,
-      43,    43,    43,    43,    43,    43,    43,    43,    43,    43,
-      43, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027,   325,   194, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,  3278,
-       7,  3278,  3278,  3278,     7,  3278,  3278,  3278,  3278,  3278,
-    3278,  3278,  3278,  3278,  2803,  3278,    43,   194,    43,   180,
-    2708,    43, -1027,   194,   194,   194, -1027,   154, -1027,  3373,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,   158, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027,   174,    43,   285,
-     525,    43, -1027, -1027, -1027,   170, -1027,   191,   195,    43,
-     239,   273,   297,   215,    43,   301,   302,   318,   222,   225,
-     236,   324,   327, -1027,   335,    43,    43,   170,   178, -1027,
-      43, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-     194, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027,   194, -1027, -1027, -1027, -1027, -1027,
-      43,    70,   194, -1027,   194,   194,   194,   194,   194,   194,
-     194,   194,   194,   194,   194,   194,   194,   194,   564,   194,
-     194,    34,     0,   287,   383,  1358,  1172,   101,   175,   365,
-     744,   108,   936,  1524,  1494,  1278,   774,    43,    43,    43,
-   -1027, -1027, -1027,   242,   288, -1027, -1027,   720, -1027, -1027,
-   -1027, -1027,    43,    43,    43,    43,    43,    43, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027,    43,    43, -1027,
-   -1027, -1027, -1027, -1027, -1027,   269, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027,   284, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027,    43, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-      43, -1027, -1027, -1027, -1027, -1027,    43, -1027, -1027,   291,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027,    43, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027,   305,   288, -1027, -1027,
-   -1027, -1027,    43,    43,    43, -1027, -1027, -1027, -1027, -1027,
-     310,   288, -1027, -1027, -1027, -1027, -1027, -1027,    43,    43,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027,   316, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027,  2613,    66,  2613,
-   -1027,    43, -1027,    43,    43, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027,  2613, -1027,  2613, -1027,  2613, -1027,
-   -1027,  3278,  3278, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027,  2613, -1027, -1027, -1027, -1027, -1027, -1027,  3278,   182,
-   -1027,   194,   194,   194,   194,  2803, -1027, -1027, -1027, -1027,
-      17,   196,    14, -1027, -1027, -1027, -1027,  2898,  2898, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-      43,    43, -1027, -1027, -1027, -1027,    34, -1027, -1027, -1027,
-   -1027,    34,    34,  2803,   194,  2898,  2898, -1027, -1027, -1027,
-      32,    34,    45, -1027,    66, -1027,   194,   194, -1027, -1027,
-     194,   194,   194,   194,   194,   194,    34,   194,   194,   194,
-     194,   194,   194, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027,    34, -1027,   194,   194, -1027, -1027,
-   -1027,    34, -1027, -1027, -1027,    34, -1027, -1027, -1027, -1027,
-   -1027,    34, -1027,   194,   194,    34, -1027, -1027,    34, -1027,
-      42, -1027,   194,   194,   194,   194,   194,   194,   194,   194,
-     194,   194,   274,   323,   194,   194,   194,   194, -1027,    43,
-      43,    43, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027,   194,   194,   194, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027,   345, -1027,   346,   349,   327, -1027,   361,
-      43,    43,    42,    43,    43, -1027,   194,    43, -1027,    43,
-   -1027,    43,    43,    43, -1027,   194, -1027,    42, -1027, -1027,
-   -1027,  3373, -1027, -1027, -1027,   378,   334,    43,   386,    43,
-      43,    43,    34,    43,    43,    34, -1027, -1027, -1027,    34,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-     411,   434, -1027,   452, -1027, -1027,  3373,    42,   195,   194,
-     194, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-     194, -1027,   194,   194,   165,   194, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027,   585,   585,   630,
-     194,   194,   194,   409,    82,  1182,    43,   338,   194,   194,
-     194,    42, -1027, -1027, -1027,   351, -1027,   357,    43,    43,
-   -1027,   364,   282, -1027,   443, -1027, -1027, -1027,   458,   383,
-     188,    43,    43, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,    64, -1027,
-     747,    21,   447, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-     203,    67, -1027,    43,    43,    43,    43,   288, -1027, -1027,
-   -1027, -1027,    43, -1027,    43, -1027,   384,    43,    43, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,  2613,
-    2613, -1027, -1027, -1027, -1027, -1027,    34, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,   194,
-     194,   194,   194, -1027,    34,   394,   487, -1027, -1027, -1027,
-      34,    51,  2613,  2613,  2613, -1027,   194,  2613,   194,  3278,
-     458, -1027,    32,    45,   194,    34,    34,   194,   194,    43,
-      43, -1027,   194,   194,   194, -1027,  3373, -1027, -1027,   404,
-   -1027, -1027,    43,    43, -1027, -1027,    34, -1027,   460, -1027,
-     461, -1027,   476, -1027,   194,   477, -1027,   443,   521, -1027,
-   -1027,    34,    34, -1027, -1027, -1027,   394, -1027,  2993, -1027,
-      43, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,   449,
-   -1027, -1027, -1027,   255,   194,   194,   194,   194,   194,   194,
-     194,   194,   194,   533, -1027,   388,   426,   226,   456,   309,
-     304, -1027,  3373, -1027, -1027,    43, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027,    43, -1027, -1027, -1027, -1027, -1027, -1027,
-      43, -1027, -1027, -1027, -1027, -1027, -1027,   533,   533,  2613,
-     176,   196,   442,   474,    34, -1027, -1027, -1027, -1027,    34,
-   -1027, -1027, -1027,    34, -1027, -1027,   533, -1027, -1027,    43,
-   -1027,    43,   479,   533, -1027,   533,   481,   464,   533,   533,
-     475,   579, -1027,   533, -1027, -1027,   494,  3088,   533, -1027,
-   -1027, -1027,  3183, -1027,   495,   533,  3373, -1027
+    -946,    21,  -946,  -946,   247,  -946,  -946,  -946,   124,   124,
+    -946,  -946,  3058,  3058,   124,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,   -76,   124,   -71,   124,  -946,  -946,   -37,
+     115,   115,  -946,  -946,   392,  -946,  -946,   -10,   306,   124,
+     124,   124,   124,  -946,  -946,  -946,  -946,  -946,    60,  -946,
+    -946,   112,  2025,  -946,  2393,  3058,  2393,   118,   118,   124,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,   165,  -946,  -946,   165,
+    -946,   165,   124,   124,  -946,  -946,   421,   421,  3058,   124,
+    2488,   124,  -946,  -946,  -946,  -946,  -946,   124,  -946,  3058,
+    3058,   124,   124,   124,   124,  -946,  -946,  -946,  -946,    43,
+      43,  -946,  -946,   124,    69,  -946,   106,    37,   115,   124,
+    -946,  -946,  -946,  2393,  2393,  2393,  2393,   124,  -946,   363,
+     577,   116,   269,  -946,  -946,  -946,   138,   272,   165,   165,
+     165,   165,   141,   115,   124,   124,   124,   124,   124,   124,
+     124,   124,   124,   124,   124,   124,   124,   124,   124,   124,
+     124,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,   323,   115,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  3058,
+       3,  3058,  3058,  3058,     3,  3058,  3058,  3058,  3058,  3058,
+    3058,  3058,  3058,  3058,  2583,  3058,   124,   115,   124,    59,
+    2488,   124,  -946,   115,   115,   115,  -946,   281,  -946,  3153,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,   142,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,   147,   124,   219,
+     232,   124,  -946,  -946,  -946,   305,  -946,   151,   155,   124,
+     365,   375,   385,   164,   124,   425,   428,   434,   185,   195,
+     200,   452,   455,  -946,   461,   124,   124,   305,   207,  -946,
+     124,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+     115,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,   115,  -946,  -946,  -946,  -946,  -946,
+     124,   141,   115,  -946,   115,   115,   115,   115,   115,   115,
+     115,   115,   115,   115,   115,   115,   115,   115,   133,   115,
+     115,   165,    54,   669,  1379,  1074,   262,   140,   287,   333,
+    1322,   108,  1108,  1545,  1670,   871,   634,   124,   124,   124,
+    -946,  -946,  -946,   215,   244,  -946,  -946,   284,  -946,  -946,
+    -946,  -946,   124,   124,   124,   124,   124,   124,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,   124,   124,  -946,
+    -946,  -946,  -946,  -946,  -946,   222,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,   235,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,   124,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+     124,  -946,  -946,  -946,  -946,  -946,   124,  -946,  -946,   238,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,   124,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,   241,   244,  -946,  -946,
+    -946,  -946,   124,   124,   124,  -946,  -946,  -946,  -946,  -946,
+    -946,   252,   244,  -946,  -946,  -946,  -946,  -946,  -946,   124,
+     124,  -946,  -946,  -946,  -946,  -946,  -946,  -946,   255,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  2393,   111,
+    2393,  -946,   124,  -946,   124,   124,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  2393,  -946,  2393,  -946,  2393,
+    -946,  -946,  3058,  3058,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  2393,  -946,  -946,  -946,  -946,  -946,  -946,  3058,
+     113,  -946,   115,   115,   115,   115,  2583,  -946,  -946,  -946,
+    -946,    42,    61,    12,  -946,  -946,  -946,  -946,  2678,  2678,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,   124,   124,  -946,  -946,  -946,  -946,   165,  -946,  -946,
+    -946,  -946,   165,   165,  2583,   115,  2678,  2678,  -946,  -946,
+    -946,    49,   165,    52,  -946,   111,  -946,   115,   115,  -946,
+    -946,   115,   115,   115,   115,   115,   115,   165,   115,   115,
+     115,   115,   115,   115,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,   165,  -946,   115,   115,  -946,
+    -946,  -946,   165,  -946,  -946,  -946,   165,  -946,  -946,  -946,
+    -946,  -946,   165,  -946,   115,   115,   165,  -946,  -946,   165,
+    -946,    25,  -946,   115,   115,   115,   115,   115,   115,   115,
+     115,   115,   115,   277,   282,   115,   115,   115,   115,  -946,
+     124,   124,   124,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,   115,   115,   115,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,   499,  -946,   500,   505,   455,  -946,
+     520,   124,   124,    25,   124,   124,  -946,   115,   124,  -946,
+     124,  -946,   124,   124,   124,  -946,   115,  -946,    25,  -946,
+    -946,  -946,  3153,  -946,  -946,  -946,   533,   294,   124,   544,
+     124,   124,   124,   165,   124,   124,   165,  -946,  -946,  -946,
+     165,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,   552,   559,  -946,   562,  -946,  -946,  3153,    25,   155,
+     115,   115,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,   115,  -946,   115,   115,   177,   115,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,   383,   383,
+     237,   115,   115,   115,   206,   301,   590,   124,   314,   115,
+     115,   115,    25,  -946,  -946,  -946,   336,  -946,   340,   124,
+     124,  -946,   356,   611,  -946,   431,  -946,  -946,  -946,   436,
+    1379,  1079,   124,   124,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,    53,
+    -946,   748,   114,   295,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,   179,    55,  -946,   124,   124,   124,   124,   244,  -946,
+    -946,  -946,  -946,   124,  -946,   124,  -946,   381,   124,   124,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    2393,  2393,  -946,  -946,  -946,  -946,  -946,   165,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+     115,   115,   115,   115,  -946,   165,   373,   472,  -946,  -946,
+    -946,   165,    95,  2393,  2393,  2393,  -946,   115,  2393,   115,
+    3058,   436,  -946,    49,    52,   115,   165,   165,   115,   115,
+     124,   124,  -946,   115,   115,   115,  -946,  3153,  -946,  -946,
+     388,  -946,  -946,   124,   124,  -946,  -946,   165,  -946,   580,
+    -946,   581,  -946,   593,  -946,   115,   612,  -946,   431,   625,
+    -946,  -946,   165,   165,  -946,  -946,  -946,   373,  -946,  2773,
+    -946,   124,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+     362,  -946,  -946,  -946,    -5,   115,   115,   115,   115,   115,
+     115,   115,   115,   115,   509,  -946,    48,   391,   152,   412,
+     313,   377,  -946,  3153,  -946,  -946,   124,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,   124,  -946,  -946,  -946,  -946,  -946,
+    -946,   124,  -946,  -946,  -946,  -946,  -946,  -946,   509,   509,
+    2393,   239,    61,   414,   423,   165,  -946,  -946,  -946,  -946,
+     165,  -946,  -946,  -946,   165,  -946,  -946,   509,  -946,  -946,
+     124,  -946,   124,   435,   509,  -946,   509,   449,   459,   509,
+     509,   430,   551,  -946,   509,  -946,  -946,   473,  2868,   509,
+    -946,  -946,  -946,  2963,  -946,   476,   509,  3153,  -946
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -946,169 +946,169 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-     666,     0,     2,     3,     0,     1,   664,   665,     0,     0,
-     667,   666,     0,     0,   668,   682,     4,   681,   683,   684,
-     685,   686,   687,   688,   689,   690,   691,   692,   693,   694,
-     695,   696,   697,   698,   699,   700,   701,   702,   703,   704,
-     705,   706,   707,   708,   709,   710,   711,   712,   713,   714,
-     715,   716,   717,   718,   719,   720,   721,   722,   723,   724,
-     725,   726,   727,   728,   729,   730,   731,   732,   733,   734,
-     735,   736,   737,   738,   739,   740,   741,   742,   743,   744,
-     745,   746,   747,   748,   749,   750,   751,   752,   753,   754,
-     755,   756,   757,   758,   759,   760,   761,   637,     9,   762,
-     666,    16,   666,     0,   636,     0,     6,   645,   645,     5,
-      12,    19,   666,   648,    10,   647,   646,    17,     0,   651,
+     667,     0,     2,     3,     0,     1,   665,   666,     0,     0,
+     668,   667,     0,     0,   669,   683,     4,   682,   684,   685,
+     686,   687,   688,   689,   690,   691,   692,   693,   694,   695,
+     696,   697,   698,   699,   700,   701,   702,   703,   704,   705,
+     706,   707,   708,   709,   710,   711,   712,   713,   714,   715,
+     716,   717,   718,   719,   720,   721,   722,   723,   724,   725,
+     726,   727,   728,   729,   730,   731,   732,   733,   734,   735,
+     736,   737,   738,   739,   740,   741,   742,   743,   744,   745,
+     746,   747,   748,   749,   750,   751,   752,   753,   754,   755,
+     756,   757,   758,   759,   760,   761,   762,   638,     9,   763,
+     667,    16,   667,     0,   637,     0,     6,   646,   646,     5,
+      12,    19,   667,   649,    10,   648,   647,    17,     0,   652,
        0,     0,     0,    25,    13,    14,    15,    25,     0,    20,
-       7,     0,   653,   652,     0,     0,     0,    49,    49,     0,
-      22,   666,   666,   658,   649,   666,   674,   677,   675,   679,
-     680,   678,   650,   654,   676,   673,     0,   671,   634,     0,
-     666,     0,     0,     0,    26,    27,    58,    58,     0,     8,
-     660,   656,   645,   645,    24,   666,    48,   635,    23,     0,
+       7,     0,   654,   653,     0,     0,     0,    49,    49,     0,
+      22,   667,   667,   659,   650,   667,   675,   678,   676,   680,
+     681,   679,   651,   655,   677,   674,     0,   672,   635,     0,
+     667,     0,     0,     0,    26,    27,    58,    58,     0,     8,
+     661,   657,   646,   646,    24,   667,    48,   636,    23,     0,
        0,     0,     0,     0,     0,    50,    51,    52,    53,    71,
-      71,    45,   639,   651,     0,   638,   655,     0,   643,   672,
-      28,    35,    36,     0,     0,     0,     0,     0,   645,     0,
-       0,     0,     0,   659,   666,   645,     0,     0,     0,     0,
+      71,    45,   640,   652,     0,   639,   656,     0,   644,   673,
+      28,    35,    36,     0,     0,     0,     0,     0,   646,     0,
+       0,     0,     0,   660,   667,   646,     0,     0,     0,     0,
        0,     0,     0,    59,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   666,   645,    73,    74,    75,    76,    77,    78,   239,
+       0,   667,   646,    73,    74,    75,    76,    77,    78,   239,
      240,   241,   242,   243,   244,   245,   246,    79,    80,    81,
-      82,   666,   645,   666,   666,   661,     0,   644,   645,   645,
-      38,   645,    55,    56,    54,    57,    68,    70,    60,     0,
+      82,   667,   646,   667,   667,   662,     0,   645,   646,   646,
+      38,   646,    55,    56,    54,    57,    68,    70,    60,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    11,    72,    18,     0,
-     660,   662,   666,    30,    40,    37,   666,     0,   373,     0,
-     443,   426,   596,   666,   335,   247,    83,   503,   495,   666,
-     108,   227,   118,   270,   289,   309,   478,   446,     0,   131,
-     763,   642,   390,   666,   666,   375,    46,     0,   657,     0,
-       0,    69,   645,    62,    61,     0,   594,     0,   595,   442,
-       0,     0,     0,     0,   502,     0,     0,     0,     0,     0,
-       0,     0,     0,   645,     0,   640,   641,     0,     0,   666,
-       0,   645,    34,    31,    32,    33,    39,    43,    41,    42,
-      63,   645,   377,   374,   645,   597,   645,   337,   336,   645,
-     249,   248,   645,    85,    84,   645,   645,   110,   109,   645,
-     229,   228,   645,   120,   119,   645,   645,   645,   645,   480,
-     479,   645,   448,   447,   134,   645,   392,   391,   376,   645,
-     663,     0,    29,    65,   379,   429,   340,   251,    87,   498,
-     112,   231,   122,   273,   292,   312,   482,   450,   129,   394,
-      47,     0,     0,     0,   427,   338,     0,     0,   496,     0,
-       0,     0,   271,   290,   310,     0,     0,     0,     0,     0,
+     661,   663,   667,    30,    40,    37,   667,     0,   374,     0,
+     444,   427,   597,   667,   336,   247,    83,   504,   496,   667,
+     108,   227,   118,   270,   289,   310,   479,   447,     0,   131,
+     764,   643,   391,   667,   667,   376,    46,     0,   658,     0,
+       0,    69,   646,    62,    61,     0,   595,     0,   596,   443,
+       0,     0,     0,     0,   503,     0,     0,     0,     0,     0,
+       0,     0,     0,   646,     0,   641,   642,     0,     0,   667,
+       0,   646,    34,    31,    32,    33,    39,    43,    41,    42,
+      63,   646,   378,   375,   646,   598,   646,   338,   337,   646,
+     249,   248,   646,    85,    84,   646,   646,   110,   109,   646,
+     229,   228,   646,   120,   119,   646,   646,   646,   646,   481,
+     480,   646,   449,   448,   134,   646,   393,   392,   377,   646,
+     664,     0,    29,    65,   380,   430,   341,   251,    87,   499,
+     112,   231,   122,   273,   292,   313,   483,   451,   129,   395,
+      47,     0,     0,     0,   428,   339,     0,     0,   497,     0,
+       0,     0,   271,   290,   311,     0,     0,     0,     0,     0,
      140,   141,   139,     0,     0,   137,   138,     0,    44,    64,
-      66,    67,     0,     0,     0,     0,     0,     0,   378,   388,
-     389,   387,   382,   380,   385,   386,   383,     0,     0,   434,
-     435,   433,   432,   436,   440,     0,   438,   430,   348,   349,
-     347,   343,   344,   354,   355,   356,   357,     0,   350,   352,
-     353,   358,   359,   341,   345,   346,     0,   250,   260,   261,
+      66,    67,     0,     0,     0,     0,     0,     0,   379,   389,
+     390,   388,   383,   381,   386,   387,   384,     0,     0,   435,
+     436,   434,   433,   437,   441,     0,   439,   431,   349,   350,
+     348,   344,   345,   355,   356,   357,   358,     0,   351,   353,
+     354,   359,   360,   342,   346,   347,     0,   250,   260,   261,
      259,   254,   266,   262,   268,   264,   252,   258,   257,   255,
-       0,    86,    90,    91,    88,    89,     0,   499,   500,     0,
-     111,   115,   116,   114,   113,   230,   233,   234,   232,   645,
-     645,   645,   645,     0,   121,   126,   127,   125,   124,   123,
+       0,    86,    90,    91,    88,    89,     0,   500,   501,     0,
+     111,   115,   116,   114,   113,   230,   233,   234,   232,   646,
+     646,   646,   646,     0,   121,   126,   127,   125,   124,   123,
      287,   288,   286,   276,   280,   283,     0,     0,   274,   284,
-     285,   281,     0,     0,     0,   307,   308,   306,   295,   299,
-       0,     0,   293,   302,   303,   304,   305,   300,     0,     0,
-     325,   326,   324,   315,   327,   329,   333,     0,   331,   313,
-     320,   321,   322,   323,   316,   319,   318,   481,   487,   488,
-     486,   485,   489,   491,   493,   483,   666,   666,   449,   453,
-     454,   452,   451,   455,   457,   459,   461,     0,     0,     0,
-     130,     0,   645,     0,     0,   393,   399,   400,   398,   397,
-     401,   403,   395,   552,     0,   559,     0,   101,     0,   645,
-     645,     0,     0,   645,   645,   428,   645,   645,   339,   645,
-     645,     0,   645,   645,   645,   645,   645,   645,     0,     0,
-     497,   236,   235,   237,   238,     0,   272,   278,   645,   645,
-       0,     0,     0,   291,   297,   645,   645,     0,     0,   645,
-     645,   645,   311,   645,   645,   645,   645,   645,   645,   645,
-     463,   475,   645,   645,   645,   645,     0,   666,   666,   666,
-     107,     0,     0,     0,   136,     0,     0,   645,   645,   645,
-       0,     0,     0,   577,     0,   544,   381,   384,   360,   444,
-     437,   441,   439,   431,   351,   342,     0,   267,   263,   269,
-     265,   253,   256,    92,   666,   666,   666,   666,   501,   666,
-     504,   506,   508,   507,     0,   645,   275,   282,   627,   666,
-     572,     0,   666,   628,   568,     0,   629,   666,   666,   666,
-     576,     0,   645,   294,   301,     0,   586,   587,     0,   581,
-       0,   598,   328,   330,   334,   332,   314,   317,   490,   492,
-     494,   484,     0,     0,   456,   458,   460,   462,   226,   104,
-     106,   105,   100,   225,   132,   425,   421,   666,   410,   405,
-     666,   402,   404,   396,   666,   666,   557,   553,   117,   666,
-     666,   564,   560,     0,   102,     0,     0,     0,   565,     0,
-     510,   523,     0,   532,   505,   128,   279,   570,   569,   571,
-     566,   567,   575,   574,   573,   298,   589,     0,   583,   582,
-     585,     0,   596,   645,   645,     0,     0,   424,     0,   409,
-     556,   555,     0,   563,   562,     0,   645,   579,   578,     0,
-     645,   546,   545,   645,   362,   361,   445,   645,    94,   645,
-       0,     0,   509,     0,   588,   592,     0,     0,   599,   466,
-     466,   645,   142,   133,   645,   645,   407,   406,   554,   561,
-     165,   103,   548,   364,     0,    93,   645,   512,   511,   645,
-     525,   524,   645,   534,   533,   590,   584,   464,   476,   151,
-     144,   429,   411,     0,     0,     0,     0,     0,   514,   527,
-     536,     0,   469,   471,   473,     0,   467,     0,     0,     0,
-     148,     0,   145,   146,     0,   147,   149,   150,     0,   422,
-       0,     0,     0,   580,   168,   169,   166,   167,   547,   549,
-     550,   363,   369,   370,   368,   367,   371,   365,     0,    95,
-       0,     0,     0,   591,   645,   645,   645,   465,   645,   477,
-     600,     0,   143,     0,     0,     0,     0,     0,   154,   152,
-     153,   645,     0,   645,     0,   208,     0,     0,     0,   408,
-     419,   420,   414,   415,   416,   413,   417,   418,   645,     0,
-       0,   645,   645,   666,   666,    99,     0,   513,   515,   518,
-     519,   520,   521,   522,   645,   517,   526,   528,   531,   645,
-     530,   535,   645,   538,   539,   540,   541,   542,   543,   470,
-     472,   474,   468,   604,     0,     0,     0,   666,   666,   205,
-       0,     0,     0,     0,     0,   645,   155,     0,   183,     0,
-     207,   423,     0,     0,   412,     0,     0,   372,   366,    98,
-      97,    96,   516,   529,   537,   201,     0,   607,   601,     0,
-     603,   611,   204,   203,   202,   160,     0,   666,     0,   162,
-       0,   171,     0,   593,   156,     0,   186,   182,     0,   211,
-     209,     0,     0,   224,   223,   616,   606,   610,     0,   158,
-     159,   645,   163,   645,   645,   172,   645,   645,   199,   198,
-     645,   187,   185,   645,   645,   212,   645,   551,   558,   605,
-     608,   612,   609,   614,   165,   161,   174,   170,   165,   189,
-     184,   214,   210,   669,   613,     0,     0,     0,     0,     0,
-       0,   670,     0,   615,   164,     0,   173,   178,   179,   175,
-     176,   177,   200,     0,   188,   193,   194,   192,   190,   191,
-       0,   213,   218,   219,   217,   215,   216,   669,   669,     0,
-       0,     0,     0,     0,     0,   632,   633,   630,   197,     0,
-     666,   631,   222,     0,   666,   617,   669,   180,   195,   196,
-     220,   221,     0,   669,   618,   669,     0,     0,   669,   669,
-       0,     0,   626,   669,   619,   622,     0,     0,   669,   623,
-     624,   621,   669,   620,     0,   669,     0,   625
+     285,   281,     0,     0,     0,   308,   309,   307,   295,   300,
+     299,     0,     0,   293,   303,   304,   305,   306,   301,     0,
+       0,   326,   327,   325,   316,   328,   330,   334,     0,   332,
+     314,   321,   322,   323,   324,   317,   320,   319,   482,   488,
+     489,   487,   486,   490,   492,   494,   484,   667,   667,   450,
+     454,   455,   453,   452,   456,   458,   460,   462,     0,     0,
+       0,   130,     0,   646,     0,     0,   394,   400,   401,   399,
+     398,   402,   404,   396,   553,     0,   560,     0,   101,     0,
+     646,   646,     0,     0,   646,   646,   429,   646,   646,   340,
+     646,   646,     0,   646,   646,   646,   646,   646,   646,     0,
+       0,   498,   236,   235,   237,   238,     0,   272,   278,   646,
+     646,     0,     0,     0,   291,   297,   646,   646,     0,     0,
+     646,   646,   646,   312,   646,   646,   646,   646,   646,   646,
+     646,   464,   476,   646,   646,   646,   646,     0,   667,   667,
+     667,   107,     0,     0,     0,   136,     0,     0,   646,   646,
+     646,     0,     0,     0,   578,     0,   545,   382,   385,   361,
+     445,   438,   442,   440,   432,   352,   343,     0,   267,   263,
+     269,   265,   253,   256,    92,   667,   667,   667,   667,   502,
+     667,   505,   507,   509,   508,     0,   646,   275,   282,   628,
+     667,   573,     0,   667,   629,   569,     0,   630,   667,   667,
+     667,   577,     0,   646,   294,   302,     0,   587,   588,     0,
+     582,     0,   599,   329,   331,   335,   333,   315,   318,   491,
+     493,   495,   485,     0,     0,   457,   459,   461,   463,   226,
+     104,   106,   105,   100,   225,   132,   426,   422,   667,   411,
+     406,   667,   403,   405,   397,   667,   667,   558,   554,   117,
+     667,   667,   565,   561,     0,   102,     0,     0,     0,   566,
+       0,   511,   524,     0,   533,   506,   128,   279,   571,   570,
+     572,   567,   568,   576,   575,   574,   298,   590,     0,   584,
+     583,   586,     0,   597,   646,   646,     0,     0,   425,     0,
+     410,   557,   556,     0,   564,   563,     0,   646,   580,   579,
+       0,   646,   547,   546,   646,   363,   362,   446,   646,    94,
+     646,     0,     0,   510,     0,   589,   593,     0,     0,   600,
+     467,   467,   646,   142,   133,   646,   646,   408,   407,   555,
+     562,   165,   103,   549,   365,     0,    93,   646,   513,   512,
+     646,   526,   525,   646,   535,   534,   591,   585,   465,   477,
+     151,   144,   430,   412,     0,     0,     0,     0,     0,   515,
+     528,   537,     0,   470,   472,   474,     0,   468,     0,     0,
+       0,   148,     0,   145,   146,     0,   147,   149,   150,     0,
+     423,     0,     0,     0,   581,   168,   169,   166,   167,   548,
+     550,   551,   364,   370,   371,   369,   368,   372,   366,     0,
+      95,     0,     0,     0,   592,   646,   646,   646,   466,   646,
+     478,   601,     0,   143,     0,     0,     0,     0,     0,   154,
+     152,   153,   646,     0,   646,     0,   208,     0,     0,     0,
+     409,   420,   421,   415,   416,   417,   414,   418,   419,   646,
+       0,     0,   646,   646,   667,   667,    99,     0,   514,   516,
+     519,   520,   521,   522,   523,   646,   518,   527,   529,   532,
+     646,   531,   536,   646,   539,   540,   541,   542,   543,   544,
+     471,   473,   475,   469,   605,     0,     0,     0,   667,   667,
+     205,     0,     0,     0,     0,     0,   646,   155,     0,   183,
+       0,   207,   424,     0,     0,   413,     0,     0,   373,   367,
+      98,    97,    96,   517,   530,   538,   201,     0,   608,   602,
+       0,   604,   612,   204,   203,   202,   160,     0,   667,     0,
+     162,     0,   171,     0,   594,   156,     0,   186,   182,     0,
+     211,   209,     0,     0,   224,   223,   617,   607,   611,     0,
+     158,   159,   646,   163,   646,   646,   172,   646,   646,   199,
+     198,   646,   187,   185,   646,   646,   212,   646,   552,   559,
+     606,   609,   613,   610,   615,   165,   161,   174,   170,   165,
+     189,   184,   214,   210,   670,   614,     0,     0,     0,     0,
+       0,     0,   671,     0,   616,   164,     0,   173,   178,   179,
+     175,   176,   177,   200,     0,   188,   193,   194,   192,   190,
+     191,     0,   213,   218,   219,   217,   215,   216,   670,   670,
+       0,     0,     0,     0,     0,     0,   633,   634,   631,   197,
+       0,   667,   632,   222,     0,   667,   618,   670,   180,   195,
+     196,   220,   221,     0,   670,   619,   670,     0,     0,   670,
+     670,     0,     0,   627,   670,   620,   623,     0,     0,   670,
+     624,   625,   622,   670,   621,     0,   670,     0,   626
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-   -1027, -1027,   465, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027,   485, -1027,   483, -1027, -1027,
-   -1027,   423, -1027, -1027, -1027, -1027,   275, -1027, -1027, -1027,
-    -235,   478, -1027, -1027,  -143,   446,   453, -1027, -1027, -1027,
-   -1027, -1027,   207, -1027,   444, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027,  -436,  -360, -1027, -1027,  -100,
-   -1027, -1027, -1027, -1027,  -410, -1027, -1027, -1027, -1027,  -281,
-    -327, -1027, -1027,  -551, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1026, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027,  -453, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-    -415, -1027, -1027, -1027, -1027, -1027,  -499,  -498,  -397,  -431,
-    -309, -1027, -1027, -1027,  -367,   205, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027,   206, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027,   208, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027,   210, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-     211, -1027, -1027, -1027, -1027, -1027,   212, -1027,   213, -1027,
-     298, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027,  -255, -1027, -1027, -1027, -1027, -1027,  -185,
-   -1027, -1027, -1027,  -160, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027,  -218, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,
-   -1027, -1027, -1027, -1027, -1027, -1027, -1027, -1027,  -383, -1027,
-   -1027, -1027,  -644,    50, -1027, -1027,  -388,  -329,  -379, -1027,
-   -1027,  -387,  -273,  -442, -1027,  -441, -1027,   228, -1027,  -426,
-   -1027, -1027,  -450, -1027,  -203, -1027, -1027, -1027,  -246, -1027,
-   -1027,  -342,   402,  -164,  -697, -1027, -1027, -1027, -1027,  -417,
-    -452, -1027, -1027,  -413, -1027, -1027, -1027,  -435, -1027, -1027,
-   -1027,  -517, -1027, -1027, -1027,  -671,  -479, -1027, -1027, -1027,
-      -5,  -169,  -610,   951,  1492, -1027, -1027,   510, -1027, -1027,
-   -1027, -1027,   405, -1027,    -4,   253,   497,  -272,    46, -1027,
-     574,   401,  -132, -1027
+    -946,  -946,   583,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,   458,  -946,   453,  -946,  -946,
+    -946,   403,  -946,  -946,  -946,  -946,   250,  -946,  -946,  -946,
+    -283,   446,  -946,  -946,    51,   867,   420,  -946,  -946,  -946,
+    -946,  -946,   170,  -946,   418,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -435,  -359,  -946,  -946,  -121,
+    -946,  -946,  -946,  -946,  -418,  -946,  -946,  -946,  -946,  -309,
+    -345,  -946,  -946,  -541,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -945,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -484,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -438,  -946,  -946,  -946,  -946,  -946,  -522,  -519,  -413,  -430,
+    -322,  -946,  -946,  -946,  -373,   191,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,   194,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,   198,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,   202,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+     203,  -946,  -946,  -946,  -946,  -946,   210,  -946,   221,  -946,
+     300,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -271,  -946,  -946,  -946,  -946,  -946,  -366,
+    -946,  -946,  -946,  -156,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -207,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,
+    -946,  -946,  -946,  -946,  -946,  -946,  -946,  -946,  -378,  -946,
+    -946,  -946,  -576,    70,  -946,  -946,  -364,  -281,  -394,  -946,
+    -946,  -361,  -243,  -440,  -946,  -407,  -946,   259,  -946,  -400,
+    -946,  -946,  -462,  -946,  -179,  -946,  -946,  -946,  -211,  -946,
+    -946,  -342,   438,  -127,  -698,  -946,  -946,  -946,  -946,  -377,
+    -415,  -946,  -946,  -372,  -946,  -946,  -946,  -396,  -946,  -946,
+    -946,  -479,  -946,  -946,  -946,  -673,  -442,  -946,  -946,  -946,
+     -11,  -153,  -669,   687,  1271,  -946,  -946,   548,  -946,  -946,
+    -946,  -946,   443,  -946,    -4,   276,   584,   283,   223,  -946,
+     613,    40,  -126,  -946
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
@@ -1117,37 +1117,37 @@
       -1,     1,    97,   102,   109,   141,     2,   103,   123,   114,
        3,   105,   127,   117,   128,   124,   125,   137,   164,   216,
      339,   200,   165,   217,   271,   340,   372,   140,   211,   368,
-     126,   166,   185,   186,   954,   955,   189,   208,   307,   344,
+     126,   166,   185,   186,   955,   956,   189,   208,   307,   344,
      423,   442,   278,   306,   209,   242,   243,   352,   394,   447,
-     534,   829,   879,   927,  1016,   491,   481,   724,   869,   711,
+     534,   830,   880,   928,  1017,   491,   481,   725,   870,   712,
      244,   355,   398,   449,   492,   245,   357,   404,   451,   559,
-     246,   463,   328,   632,   855,   438,   464,   893,   919,   941,
-     942,   987,   988,  1086,   989,  1088,  1113,   923,   990,  1090,
-    1116,  1147,  1159,   943,   944,  1097,   993,  1095,  1122,  1149,
-    1169,  1189,   991,  1119,   945,   946,  1050,   947,   948,  1060,
-     995,  1098,  1126,  1150,  1176,  1193,   956,   957,   465,   466,
-     247,   356,   401,   450,   248,   249,   351,   391,   446,   666,
-     667,   663,   665,   662,   664,   250,   358,   566,   452,   678,
-     567,   755,   679,   251,   359,   580,   453,   685,   581,   772,
-     686,   252,   360,   597,   454,   694,   695,   689,   690,   693,
-     691,   253,   350,   388,   507,   445,   660,   659,   508,   509,
-     494,   826,   875,   925,  1012,  1011,   254,   345,   255,   367,
-     383,   443,   649,   650,   256,   364,   417,   467,   719,   717,
-     718,   640,   858,   897,   809,   950,   641,   856,   996,   806,
-     257,   347,   495,   444,   657,   653,   656,   654,   311,   496,
-     827,   258,   362,   413,   456,   702,   703,   704,   705,   625,
-     792,   935,   917,   978,   974,   975,   976,   626,   793,   937,
-     259,   361,   410,   455,   699,   696,   697,   698,   260,   353,
-     539,   448,   318,   748,   749,   750,   751,   880,   908,   970,
-     752,   881,   911,   971,   753,   883,   914,   972,   497,   825,
-     872,   924,  1003,   484,   720,   862,   817,  1004,   485,   722,
-     865,   822,   528,   584,   765,   585,   761,   586,   771,   936,
-     823,   868,   605,   779,   849,   606,   776,   847,   884,   931,
-    1092,   312,   313,   348,   780,   852,  1044,  1045,  1046,  1077,
-    1078,  1106,  1080,  1081,  1108,  1132,  1144,  1129,  1177,  1204,
-    1214,  1215,  1217,  1222,  1205,   766,   767,  1190,  1191,   159,
-     201,   781,   332,   850,   110,   115,   119,   131,   132,   152,
-     196,   144,   194,   265,   116,     4,   133,  1152,   156,   175,
+     246,   463,   328,   633,   856,   438,   464,   894,   920,   942,
+     943,   988,   989,  1087,   990,  1089,  1114,   924,   991,  1091,
+    1117,  1148,  1160,   944,   945,  1098,   994,  1096,  1123,  1150,
+    1170,  1190,   992,  1120,   946,   947,  1051,   948,   949,  1061,
+     996,  1099,  1127,  1151,  1177,  1194,   957,   958,   465,   466,
+     247,   356,   401,   450,   248,   249,   351,   391,   446,   667,
+     668,   664,   666,   663,   665,   250,   358,   566,   452,   679,
+     567,   756,   680,   251,   359,   581,   453,   686,   582,   773,
+     687,   252,   360,   598,   454,   695,   696,   690,   691,   694,
+     692,   253,   350,   388,   507,   445,   661,   660,   508,   509,
+     494,   827,   876,   926,  1013,  1012,   254,   345,   255,   367,
+     383,   443,   650,   651,   256,   364,   417,   467,   720,   718,
+     719,   641,   859,   898,   810,   951,   642,   857,   997,   807,
+     257,   347,   495,   444,   658,   654,   657,   655,   311,   496,
+     828,   258,   362,   413,   456,   703,   704,   705,   706,   626,
+     793,   936,   918,   979,   975,   976,   977,   627,   794,   938,
+     259,   361,   410,   455,   700,   697,   698,   699,   260,   353,
+     539,   448,   318,   749,   750,   751,   752,   881,   909,   971,
+     753,   882,   912,   972,   754,   884,   915,   973,   497,   826,
+     873,   925,  1004,   484,   721,   863,   818,  1005,   485,   723,
+     866,   823,   528,   585,   766,   586,   762,   587,   772,   937,
+     824,   869,   606,   780,   850,   607,   777,   848,   885,   932,
+    1093,   312,   313,   348,   781,   853,  1045,  1046,  1047,  1078,
+    1079,  1107,  1081,  1082,  1109,  1133,  1145,  1130,  1178,  1205,
+    1215,  1216,  1218,  1223,  1206,   767,   768,  1191,  1192,   159,
+     201,   782,   332,   851,   110,   115,   119,   131,   132,   152,
+     196,   144,   194,   265,   116,     4,   133,  1153,   156,   175,
      157,    99,   100,   334
 };
 
@@ -1156,233 +1156,211 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      10,   193,   462,   160,    11,    11,   385,    98,   101,   762,
-      10,   535,   601,   602,   502,    16,   677,   486,   807,   810,
-     529,   565,    16,   187,   187,    16,   571,   587,   604,   615,
-     684,   182,   107,   482,   758,   501,   521,   108,   -21,   544,
-      16,   558,   563,   578,   593,   611,   622,     6,     6,     7,
-       7,   457,     6,    16,     7,   564,   579,   639,   113,    16,
-     483,     5,   513,   526,   336,   754,   515,   184,   758,   568,
-     582,   599,    16,   570,    16,    16,   475,   493,    16,   524,
-     162,   163,   276,   551,   642,   500,   520,   596,   614,   543,
-     548,   557,   562,   577,   592,   610,   621,   122,   589,   459,
-      10,   469,    10,   804,   373,   112,   768,   638,  1146,   769,
-     309,   759,  1148,   182,    10,    11,    11,    11,    11,   522,
-     814,   530,  1026,   549,   142,   815,   143,   594,   612,   623,
-     553,   193,   182,   819,   172,    11,   173,   523,   820,   182,
-     346,   550,   172,   139,   173,   595,   613,   624,   215,   184,
-     473,   707,  1013,   708,   887,  1047,   709,  1014,    11,    11,
-    1048,   207,   333,   191,   213,    10,    10,    10,   184,   263,
-       6,   264,     7,    10,   458,   184,   113,    11,    11,    11,
-      11,   476,   161,   958,    16,     6,   269,     7,   270,    11,
-     262,   113,  1185,  1186,  1187,    10,   374,   378,     6,     6,
-       7,     7,   531,    11,    16,   113,   182,   181,   214,   554,
-     182,    16,   536,   758,   763,   997,   268,  -602,   457,   182,
+      10,    98,   101,   462,    11,    11,   385,   755,   763,   160,
+      10,    16,   535,   -21,   602,   502,   336,   193,   808,   811,
+      16,     5,   565,   580,   107,   482,   678,   501,   521,   108,
+       6,   544,     7,   558,   563,   578,   594,   612,   623,   564,
+     579,   685,     6,   486,     7,   805,   529,   603,   113,   640,
+      16,   515,   571,   588,   605,   616,   373,    16,   570,   759,
+      16,    16,   112,    16,     6,   483,     7,   513,   526,    16,
+     113,   493,   122,   524,   568,   583,   600,   551,   759,   764,
+     525,   597,   615,   139,   552,   182,   500,   520,   599,   643,
+     543,   548,   557,   562,   577,   593,   611,   622,  -617,  -617,
+      10,   522,    10,    16,   769,   549,   309,   770,   639,   595,
+     613,   624,   759,   207,    10,    11,    11,    11,    11,    16,
+       6,   184,     7,   121,   523,   172,   113,   173,   550,     6,
+     553,     7,   596,   614,   625,    11,   760,   815,   215,   182,
+     820,  1014,   816,  1048,   457,   821,  1015,   193,  1049,    16,
+     473,  1077,  1144,   276,   888,   469,   346,   191,    11,    11,
+     530,   162,   163,   457,   182,    10,    10,    10,   333,   475,
+     213,   182,   154,    10,   154,   184,   154,    11,    11,    11,
+      11,   476,     6,   182,     7,   952,   953,    16,   113,    11,
+    1147,   590,   459,  -603,  1149,    10,   708,   745,   709,   746,
+     184,   710,   747,    11,   748,   214,   458,   184,  -135,   554,
+     195,   459,   142,   458,   143,  1027,   262,   187,   187,   184,
       11,    11,    11,    11,    11,    11,    11,    11,    11,    11,
-      11,    11,    11,    11,    11,    11,    11,   120,   183,   998,
-     572,   573,   184,   475,   121,   121,   184,     8,   926,   218,
-     219,   220,   221,   516,   342,   184,   343,   182,   363,   951,
-     952,   525,    10,   122,    14,   552,   744,     9,   745,   598,
-     381,   746,   382,   747,   308,   369,   314,   315,   316,   419,
-     320,   321,   322,   323,   324,   325,   326,   327,   329,   999,
-     335,   384,    10,   184,    10,   460,    10,    10,   309,   470,
-     479,   489,   498,   518,   532,   537,   541,   546,   555,   560,
-     575,   590,   608,   619,   472,   395,   182,     6,   182,     7,
-     130,   983,   405,  1155,   636,   406,  1020,  1156,  1035,   473,
-       6,   984,     7,   302,    10,   182,   407,    10,   474,   386,
-     182,   387,   475,   630,   985,    10,   473,   224,   986,   121,
-      10,   473,   184,   104,   184,   106,   370,  -157,  -616,  -616,
-     476,    10,    10,   631,   225,   118,    11,  1170,   477,   226,
-     655,   184,   227,   389,   853,   390,   184,   458,   228,   229,
-    1087,   230,   458,   231,   232,   658,   371,   224,   478,  1163,
-     233,   234,   670,   235,   169,   170,   182,   392,   171,   393,
-     236,   396,   399,   397,   400,  1171,   676,   473,   487,   226,
-    1164,   683,   227,   177,   182,   237,    10,   692,   402,   238,
-     403,  1032,   239,   854,   408,   473,   409,   411,   199,   412,
-     233,   234,   184,   235,   894,   415,  1055,   416,   476,   969,
-     182,   240,   951,   952,   241,   866,   870,   867,   871,   873,
-     184,   874,   977,    11,    11,    11,   458,   182,   979,   951,
-     952,   877,   239,   878,   477,   982,   540,   266,    11,    11,
-      11,    11,    11,    11,   997,   992,   184,   457,   891,   488,
-     892,   240,   994,    11,    11,  1061,   895,   182,   896,   951,
-     952,  1076,  1143,   184,   296,   514,   527,  1076,   998,   572,
-     573,  1079,   569,   583,   600,    12,    13,  1107,  1006,  1007,
-     953,   906,    11,   907,   298,   965,   300,   301,   777,  1002,
-    1025,  1030,   631,   184,  1008,   459,    11,  1154,  1022,  1023,
-    1037,  1038,    11,   154,   909,   154,   910,   154,  1151,  1019,
-    1028,  1034,   967,   333,  1024,  1029,   385,  1195,  1031,    11,
-     934,   934,   912,  1143,   913,   338,   182,  1162,   966,   341,
-    1111,  1114,  1112,  1115,  1203,   964,   349,  1209,    11,    11,
-      11,   195,   354,  1018,  1027,  1033,  1117,  1120,  1118,  1121,
-    1196,   333,   493,  1212,    11,    11,   365,   366,  1208,   224,
-     932,   932,   184,  1213,   457,   182,   370,  1218,  1225,   155,
-     158,   155,   129,   202,   154,   154,   154,   154,   933,   933,
-     138,   226,   188,   188,   227,   377,   167,   134,   135,   136,
-     190,  1124,   420,  1125,   824,   231,   376,    11,   441,    11,
-      11,   184,   233,   234,   210,   235,   168,   458,   940,  -135,
-     475,  1021,   459,  1036,  1123,  1100,   728,   729,  1160,  1161,
-     503,   504,   553,   505,  -206,   506,   510,   511,   512,   179,
-     180,   238,  -181,   743,   239,   418,   949,   876,   155,   155,
-     155,   155,   918,   706,  1101,   712,  1102,  1005,   203,   204,
-     205,   206,   603,   240,   916,   973,   319,   277,   888,  1130,
-     721,   938,   723,  1153,   725,  1131,    10,    10,  1145,   939,
-    1219,   195,  1194,   212,   222,   337,   153,   736,     0,     0,
-     195,     0,     0,  1167,  1174,     0,     0,   915,     0,     0,
-       0,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,     0,  1168,
-    1175,   633,     0,     0,     0,   310,     0,     0,   224,   317,
-       0,   182,     0,     0,     0,     0,     0,     0,     0,   331,
-       0,     0,   473,     0,     0,     0,     0,     0,     0,     0,
-     226,     0,     0,   227,   997,   182,    11,   457,     0,     0,
-       0,   959,   962,     0,   231,   375,   379,   184,   634,     0,
-       0,   233,   234,   476,   235,    10,    10,    10,   998,   572,
-     573,   477,   475,     0,     0,   182,   489,  1000,     0,     0,
-       0,   184,     0,     0,   231,     0,   473,   476,     0,   616,
-     238,   635,     0,   239,   589,   459,    10,    10,    10,    10,
-      10,     0,     0,    10,   617,    10,     0,    10,    10,    10,
-     488,   184,   240,    11,     0,   545,     0,   476,  1017,     0,
-     238,     0,     0,    10,     0,    10,    10,    10,     0,    10,
-      10,     0,     0,     0,     0,     0,     0,   421,     0,   700,
-     701,     0,     0,     0,     0,   618,     0,     0,     0,     0,
-       0,     0,     0,    11,   461,     0,   277,     0,   471,   480,
-     490,   499,   519,   533,   538,   542,   547,   556,   561,   576,
-     591,   609,   620,     0,     0,  1182,  1183,  1105,     0,     0,
-       0,     0,     0,   637,     0,     0,     0,     0,     0,     0,
-       0,     0,    11,     0,  1202,     0,     0,    11,     0,     0,
-       0,  1206,     0,  1207,    11,    11,  1210,  1211,     0,  1133,
-       0,  1216,     0,     0,     0,     0,  1221,    11,    11,     0,
-    1224,     0,     0,  1226,   627,   628,   629,     0,     0,     0,
-     799,   800,   801,   472,     0,     0,   457,   182,     0,   643,
-     644,   645,   646,   647,   648,     0,     0,     0,   473,    11,
-      11,    11,    11,  1178,   651,   652,     0,   474,    11,     0,
-      11,   475,     0,    11,    11,     0,     0,   830,   831,   832,
-     833,     0,   834,   184,  1157,     0,  1165,  1172,     0,   476,
-       0,  -277,   837,   661,   459,   839,     0,   477,     0,     0,
-     841,   842,   843,     0,     0,     0,     0,   668,   154,     0,
-     154,     0,     0,   669,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   154,     0,   154,  1220,   154,
-     675,     0,     0,  1223,  1099,  1065,  1066,  1227,     0,     0,
-     857,     0,   154,   859,     0,    10,    10,   860,   861,   680,
-     681,   682,   863,   864,     0,     0,     0,     0,    10,    10,
-       0,     0,     0,     0,     0,   687,   688,     0,   195,   195,
-       0,     0,   155,   710,   155,     0,     0,     0,  1089,  1091,
-    1093,     0,     0,  1096,     0,     0,    10,   174,     0,   155,
-     176,   155,   178,   155,     0,     0,   195,   195,     0,     0,
-       0,     0,     0,     0,     0,     0,   155,     0,   713,     0,
-     715,   716,     0,     0,     0,     0,     0,     0,     0,     0,
-     331,     0,     0,     0,     0,   760,   764,   770,     0,     0,
-       0,    11,   775,   778,     0,     0,     0,     0,     0,    11,
-       0,     0,     0,     0,     0,     0,    11,     0,     0,   272,
-     273,   274,   275,     0,     0,     0,   224,     0,   331,     0,
-     805,   808,     0,     0,     0,   816,   224,   821,     0,   710,
-       0,     0,     0,     0,     0,    10,     0,    10,   226,   472,
-       0,   227,     0,   182,     0,     0,     0,     0,   226,     0,
-       0,   227,   231,   182,   473,     0,     0,     0,     0,   233,
-     234,     0,   235,     0,   473,  1184,     0,   475,     0,   233,
-     234,     0,   235,     0,     0,     0,     0,   516,     0,   184,
-       0,     0,     0,     0,     0,   476,     0,     0,   238,   184,
-       0,   239,   195,   477,     0,   476,     0,     0,     0,   224,
-       0,   239,     0,   477,     0,     0,  1069,  1070,   488,     0,
-     240,     0,     0,   517,     0,     0,   225,   851,     0,     0,
-     240,   226,   224,   961,   227,     0,     0,   195,     0,     0,
-     228,   229,     0,   230,     0,   231,   232,     0,     0,     0,
-    1082,  1083,   233,   234,   226,   235,     0,   227,     0,   182,
-       0,     0,   236,     0,     0,     0,     0,     0,   231,     0,
-     473,     0,     0,     0,     0,   233,   234,   237,   235,     0,
-       0,   238,     0,   475,   239,     0,     0,     0,     0,     0,
-    1110,     0,     0,     0,   886,   184,     0,     0,     0,     0,
-       0,   476,     0,   240,   238,     0,   261,   239,     0,     0,
-       0,     0,   224,     0,     0,     0,     0,     0,     0,     0,
-     960,   963,     0,     0,     0,     0,   240,     0,     0,   607,
-       0,     0,     0,   487,   851,   472,     0,   227,   457,   182,
-       0,     0,   468,     0,     0,   490,  1001,     0,     0,     0,
-     473,     0,     0,     0,     0,   233,   234,     0,   235,   474,
-     154,   154,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   968,     0,   184,     0,     0,   886,     0,
-       0,   476,     0,  1015,     0,   980,   981,     0,     0,   477,
-       0,     0,     0,  1199,     0,  1043,  1049,  1201,  1009,  1010,
-       0,     0,     0,   154,   154,   154,   240,     0,   154,     0,
+      11,    11,    11,    11,    11,    11,    11,   182,   268,   952,
+     953,   531,   363,   154,   154,   154,   154,    16,   369,  1156,
+     182,   384,     6,  1157,     7,  1186,  1187,  1188,   309,   553,
+     927,  -206,    10,   182,   395,   172,   224,   173,   308,  -181,
+     314,   315,   316,   184,   320,   321,   322,   323,   324,   325,
+     326,   327,   329,   121,   335,   405,   184,    14,   226,   472,
+     370,   227,    10,   182,    10,   406,    10,    10,   939,   184,
+     407,     8,   231,   370,   473,   634,   940,   954,   419,   233,
+     234,     6,   235,     7,   130,   182,   631,   475,   182,   632,
+     371,     9,   998,   656,   536,   457,   473,   516,     6,   184,
+       7,   302,   182,   376,    10,   476,   659,    10,   238,   671,
+     195,   239,   677,   477,   182,    10,   999,   572,   573,   195,
+      10,   184,   635,   684,   184,   473,   693,   476,   488,   161,
+     240,    10,    10,   517,   182,   477,    11,   224,   184,   263,
+     632,   264,   269,   459,   270,   473,   104,   854,   106,  1088,
+     184,   342,   855,   343,   225,   636,   458,   224,   118,   226,
+     374,   378,   227,  1164,   895,  1021,  1032,  1036,   228,   229,
+     184,   230,   959,   231,   232,   381,   476,   382,   182,   226,
+     233,   234,   227,   235,  1165,   970,    10,   169,   170,   473,
+     236,   171,   182,   231,   952,   953,   218,   219,   220,   221,
+     233,   234,  1033,   235,   540,   237,   177,   978,   475,   238,
+    1171,   980,   239,   182,   184,   952,   953,  1056,   120,   181,
+     458,   199,   182,    11,    11,    11,   121,   983,   184,   238,
+     995,   240,   239,   993,   241,   386,  1144,   387,    11,    11,
+      11,    11,    11,    11,   122,   389,  1077,   390,  1172,   184,
+     183,   240,  1062,    11,    11,   392,  1080,   393,   184,   460,
+     266,  1108,  1155,   470,   479,   489,   498,   518,   532,   537,
+     541,   546,   555,   560,   575,   591,   609,   620,   966,  1026,
+    1031,  1007,    11,  1163,  1152,   514,   527,   296,   637,  1196,
+    1204,  1003,   569,   584,   601,   396,    11,   397,   399,  1197,
+     400,  1023,    11,  1038,   402,   778,   403,   298,  1213,   300,
+     301,  1020,  1029,  1035,  1008,   935,   935,   385,   968,    11,
+     333,  1009,   408,   967,   409,   411,  1209,   412,  1019,  1028,
+    1034,   415,  1210,   416,  1024,  1214,  1039,   965,    11,    11,
+      11,  1025,  1030,   933,   933,   129,  1219,   493,   338,  1226,
+     138,   224,   341,   202,   167,    11,    11,   190,   333,   349,
+     377,   441,    12,    13,   224,   354,   934,   934,   225,   867,
+     871,   868,   872,   226,   825,   874,   227,   875,   210,   365,
+     366,   941,   228,   229,  1124,   230,   226,   231,   232,   227,
+     878,   182,   879,  1101,   233,   234,  1161,   235,    11,  1162,
+      11,    11,   473,   892,   236,   893,   503,   233,   234,   504,
+     235,   729,   730,   505,   896,   420,   897,   506,   510,   237,
+     984,   950,   907,   238,   908,   511,   239,   184,   744,   910,
+     985,   911,   913,   476,   914,   182,   512,   418,   154,   239,
+     154,   477,   877,   986,   231,   240,   473,   987,   261,   617,
+    1112,  1115,  1113,  1116,   919,   154,  -157,   154,   240,   154,
+    1022,   962,  1037,  1118,   618,  1119,   472,    10,    10,  1102,
+     182,   184,   154,  1103,   134,   135,   136,   476,  1006,   917,
+     238,   473,  1121,   604,  1122,  1168,  1175,   155,   158,   155,
+     474,   974,   319,   168,   475,  1125,   889,  1126,   195,   195,
+    1131,  1154,  1169,  1176,   916,   619,   184,  1132,  1146,  1220,
+    1195,   212,   476,   337,     0,   153,   179,   180,     0,     0,
+     477,     0,     0,     0,     0,     0,   195,   195,     0,     0,
+       0,     0,     0,     0,     0,   203,   204,   205,   206,     0,
+     478,     0,     0,     0,     0,   998,     0,    11,   457,     0,
+       0,     0,     0,     0,     0,     0,   155,   155,   155,   155,
+       0,   222,     0,     0,     0,     0,    10,    10,    10,   999,
+     572,   573,     0,   475,     0,   277,     0,     0,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   590,   459,    10,    10,    10,
+      10,    10,     0,     0,    10,     0,    10,     0,    10,    10,
+      10,     0,     0,   174,    11,     0,   176,     0,   178,  1018,
+       0,   707,     0,   713,    10,     0,    10,    10,    10,     0,
+      10,    10,     0,   310,     0,     0,     0,   317,   722,     0,
+     724,     0,   726,     0,     0,   224,     0,   331,     0,     0,
+       0,     0,     0,     0,    11,   737,     0,     0,     0,     0,
+       0,     0,   195,   701,   702,     0,     0,   226,     0,     0,
+     227,     0,   182,     0,     0,   272,   273,   274,   275,     0,
+       0,   231,     0,   473,     0,     0,     0,     0,   233,   234,
+       0,   235,     0,    11,  1106,     0,   475,   195,    11,     0,
+       0,     0,     0,     0,     0,    11,    11,     0,   184,     0,
+       0,     0,     0,     0,   476,     0,     0,   238,    11,    11,
+     239,     0,     0,     0,   421,     0,  1134,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   240,
+       0,     0,   608,     0,     0,     0,   960,   963,     0,     0,
+      11,    11,    11,    11,   800,   801,   802,     0,     0,    11,
+       0,    11,     0,     0,    11,    11,     0,     0,     0,     0,
+    1179,   489,  1001,     0,   277,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   155,   155,     0,   195,     0,     0,
-    1051,  1052,  1053,  1054,     0,     0,     0,     0,     0,  1057,
-       0,  1059,     0,     0,  1062,  1063,     0,     0,   224,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   195,
-       0,     0,     0,     0,     0,     0,  1085,   155,   155,   155,
-     226,   472,   155,   227,     0,   182,     0,   816,   821,     0,
-       0,     0,     0,     0,   231,     0,   473,     0,     0,     0,
-     588,   233,   234,     0,   235,     0,   572,   573,     0,   475,
-       0,   472,   574,   195,     0,   182,     0,     0,     0,     0,
-       0,   184,     0,     0,     0,     0,   473,   476,     0,     0,
-     238,   589,     0,   239,     0,   477,   572,   573,     0,   475,
-     154,     0,   574,     0,     0,     0,     0,     0,     0,     0,
-     488,   184,   240,  1158,     0,  1166,  1173,   476,     0,  -296,
-     111,     0,   459,     0,     0,   477,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   195,     0,
-       0,     0,     0,   195,     0,     0,     0,   195,     0,     0,
+       0,   831,   832,   833,   834,     0,   835,     0,     0,     0,
+       0,     0,     0,   188,   188,     0,   838,     0,     0,   840,
+       0,   628,   629,   630,   842,   843,   844,     0,     0,  1100,
+     154,   154,     0,     0,     0,     0,   644,   645,   646,   647,
+     648,   649,     0,     0,     0,  1221,    10,    10,     0,     0,
+    1224,   652,   653,     0,  1228,     0,     0,     0,   224,    10,
+      10,     0,     0,     0,   858,     0,     0,   860,     0,     0,
+       0,   861,   862,   154,   154,   154,   864,   865,   154,   487,
+     662,   472,     0,   227,   457,   182,   998,    10,     0,   457,
+     182,     0,     0,     0,   669,     0,   473,   195,     0,     0,
+     670,   233,   234,     0,   235,   474,     0,     0,   468,     0,
+     999,   572,   573,     0,   475,   472,     0,   676,   457,   182,
+       0,   184,     0,     0,   516,     0,   184,   476,     0,   195,
+     473,     0,    11,     0,     0,   477,   681,   682,   683,   474,
+      11,     0,     0,   475,     0,     0,     0,    11,     0,     0,
+       0,     0,   240,   688,   689,   184,     0,     0,     0,     0,
+    1000,   476,     0,  -277,     0,     0,   459,     0,     0,   477,
+       0,     0,     0,   195,     0,     0,    10,     0,    10,  1158,
+       0,  1166,  1173,     0,     0,     0,   375,   379,     0,     0,
+       0,   155,   711,   155,     0,     0,   714,     0,   716,   717,
+     154,     0,     0,     0,     0,     0,     0,     0,   155,     0,
+     155,     0,   155,  1066,  1067,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   155,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   195,   331,
+       0,     0,     0,   195,   761,   765,   771,   195,     0,     0,
+       0,   776,   779,     0,     0,     0,  1090,  1092,  1094,     0,
+       0,  1097,     0,     0,     0,     0,     0,     0,     0,     0,
+    1070,  1071,     0,     0,     0,     0,     0,   331,     0,   806,
+     809,     0,     0,     0,   817,   461,   822,     0,   711,   471,
+     480,   490,   499,   519,   533,   538,   542,   547,   556,   561,
+     576,   592,   610,   621,  1083,  1084,   224,     0,     0,     0,
+       0,     0,     0,     0,   638,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   226,     0,
+       0,   227,     0,   182,     0,     0,     0,     0,     0,     0,
+       0,     0,   231,     0,  1111,   852,     0,     0,     0,   233,
+     234,     0,   235,     0,     0,     0,     0,     0,     0,   111,
+       0,     0,     0,   224,     0,     0,     0,     0,     0,   184,
+       0,     0,     0,     0,   799,   476,     0,     0,   238,   803,
+     804,   239,     0,  1185,   487,   226,     0,     0,   227,   819,
+     182,     0,     0,     0,     0,     0,     0,     0,   488,     0,
+     240,   473,     0,   545,   829,     0,   233,   234,     0,   235,
+       0,     0,   887,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   836,   197,   198,     0,   184,     0,     0,   839,
+       0,     0,   458,   841,     0,     0,     0,     0,   239,   845,
+     477,  1183,  1184,   847,     0,     0,   849,  1200,     0,     0,
+       0,  1202,   852,     0,     0,   488,     0,   240,     0,   223,
+    1203,     0,     0,     0,     0,     0,   267,  1207,     0,  1208,
+       0,     0,  1211,  1212,     0,     0,     0,  1217,     0,     0,
+       0,     0,  1222,     0,     0,     0,  1225,     0,     0,  1227,
+       0,   969,     0,   297,     0,     0,   887,     0,     0,     0,
+     883,     0,     0,   981,   982,     0,     0,     0,     0,     0,
+       0,     0,     0,   299,     0,   886,  1010,  1011,     0,   303,
+     304,     0,   305,     0,     0,     0,     0,     0,     0,     0,
+     899,     0,  1016,   900,     0,     0,     0,   902,     0,     0,
+       0,     0,     0,     0,  1044,  1050,     0,     0,  1052,  1053,
+    1054,  1055,   472,     0,     0,   457,   182,  1058,     0,  1060,
+       0,     0,  1063,  1064,     0,     0,     0,   473,     0,     0,
+       0,     0,     0,   155,   155,     0,     0,   572,   573,     0,
+     475,     0,     0,   574,     0,     0,     0,     0,     0,     0,
+       0,     0,   184,   380,     0,     0,     0,     0,   476,   886,
+    -296,     0,     0,   459,     0,     0,   477,     0,     0,     0,
+       0,     0,     0,     0,   414,  1086,   155,   155,   155,     0,
+       0,   155,   422,     0,     0,     0,   817,   822,     0,     0,
+       0,     0,   424,     0,     0,   425,     0,   426,     0,     0,
+     427,     0,     0,   428,     0,     0,   429,   430,     0,     0,
+     431,     0,     0,   432,   224,     0,   433,   434,   435,   436,
+       0,     0,   437,     0,     0,     0,   439,     0,     0,     0,
+     440,     0,     0,     0,     0,     0,   226,   472,     0,   227,
+       0,   182,     0,     0,  1072,     0,     0,     0,     0,     0,
+     231,     0,   473,     0,     0,     0,   589,   233,   234,     0,
+     235,     0,   572,   573,     0,   475,     0,     0,   574,     0,
+       0,     0,  1076,     0,     0,     0,     0,   184,  1085,     0,
+    1180,     0,     0,   476,     0,     0,   238,   590,  1181,   239,
+       0,   477,     0,  1104,  1105,  1182,     0,     0,     0,     0,
+       0,     0,     0,   155,  1189,  1193,   488,     0,   240,     0,
+       0,     0,     0,     0,  1110,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,  1128,
+    1129,     0,   961,   964,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   155,  1188,  1192,     0,     0,     0,
-       0,     0,  1179,     0,     0,     0,     0,   798,     0,     0,
-    1180,     0,   802,   803,   197,   198,     0,  1181,     0,     0,
-       0,     0,   818,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   828,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     223,     0,     0,     0,     0,   835,     0,   267,     0,     0,
-       0,     0,   838,     0,     0,     0,   840,     0,     0,     0,
-       0,     0,   844,     0,     0,     0,   846,     0,     0,   848,
-       0,     0,     0,     0,   297,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   299,     0,     0,     0,     0,     0,
-     303,   304,     0,   305,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   882,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   885,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   898,     0,     0,   899,     0,     0,     0,
-     901,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   380,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   414,     0,     0,     0,     0,
-       0,     0,     0,   422,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   424,     0,     0,   425,     0,   426,     0,
-       0,   427,   885,     0,   428,     0,     0,   429,   430,     0,
-       0,   431,     0,     0,   432,     0,     0,   433,   434,   435,
-     436,     0,     0,   437,     0,     0,     0,   439,     0,     0,
-       0,   440,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   490,  1002,     0,
+     672,   673,   674,   675,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1071,     0,     0,
+       0,     0,  1198,     0,     0,     0,     0,  1199,     0,     0,
+       0,  1201,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   715,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1075,     0,     0,     0,     0,
-       0,  1084,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1103,  1104,     0,     0,
+       0,   727,   728,     0,     0,   731,   732,     0,   733,   734,
+       0,   735,   736,     0,   738,   739,   740,   741,   742,   743,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1109,     0,     0,
-       0,   671,   672,   673,   674,     0,     0,     0,     0,     0,
-       0,     0,  1127,  1128,     0,     0,     0,     0,     0,     0,
+     757,   758,     0,     0,     0,     0,     0,   774,   775,     0,
+       0,   783,   784,   785,     0,   786,   787,   788,   789,   790,
+     791,   792,     0,     0,   795,   796,   797,   798,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   812,
+     813,   814,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   714,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1197,     0,     0,     0,     0,
-    1198,   726,   727,     0,  1200,   730,   731,     0,   732,   733,
-       0,   734,   735,     0,   737,   738,   739,   740,   741,   742,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     756,   757,     0,     0,     0,     0,     0,   773,   774,     0,
-       0,   782,   783,   784,     0,   785,   786,   787,   788,   789,
-     790,   791,     0,     0,   794,   795,   796,   797,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   811,
-     812,   813,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   836,     0,    15,
+       0,     0,     0,     0,     0,  1159,     0,  1167,  1174,     0,
+       0,     0,     0,     0,     0,     0,     0,   837,     0,    15,
        0,     0,     0,   145,   146,    17,   147,   148,     0,     0,
-       0,   149,   150,   151,   845,    18,    19,    20,    21,    22,
+       0,   149,   150,   151,   846,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
@@ -1390,34 +1368,34 @@
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,     0,   889,   890,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   900,     0,
-       0,     0,   902,     0,     0,   903,     0,     0,     0,   904,
-       0,   905,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   920,     0,     0,   921,   922,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   928,     0,
-       0,   929,     0,     0,   930,     0,     0,     0,     0,     0,
+      93,    94,    95,    96,     0,   890,   891,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   901,     0,
+       0,     0,   903,     0,     0,   904,     0,     0,     0,   905,
+       0,   906,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   921,     0,     0,   922,   923,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   929,     0,
+       0,   930,     0,     0,   931,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1039,  1040,  1041,     0,
-    1042,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1056,     0,  1058,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1040,  1041,  1042,     0,
+    1043,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1057,     0,  1059,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1064,     0,     0,  1067,  1068,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1072,     0,     0,     0,
-       0,  1073,     0,     0,  1074,     0,     0,     0,     0,     0,
+    1065,     0,     0,  1068,  1069,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1073,     0,     0,     0,
+       0,  1074,     0,     0,  1075,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1094,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1095,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1134,     0,  1135,  1136,     0,  1137,  1138,
-       0,     0,  1139,     0,     0,  1140,  1141,    15,  1142,     0,
+       0,     0,     0,  1135,     0,  1136,  1137,     0,  1138,  1139,
+       0,     0,  1140,     0,     0,  1141,  1142,    15,  1143,     0,
        0,    16,   146,    17,   147,   148,     0,     0,     0,   149,
      150,   151,     0,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
@@ -1456,7 +1434,7 @@
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
       90,    91,    92,    93,    94,    95,    96,    15,     0,     0,
-       0,     0,     0,    17,   192,     0,     0,  1079,     0,     0,
+       0,     0,     0,    17,   192,     0,     0,  1080,     0,     0,
        0,     0,     0,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
@@ -1466,7 +1444,7 @@
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    15,     0,     0,     0,     0,     0,    17,   192,
-       0,     0,  1213,     0,     0,     0,     0,     0,    18,    19,
+       0,     0,  1214,     0,     0,     0,     0,     0,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
@@ -1474,7 +1452,7 @@
       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    15,  1151,     0,
+      90,    91,    92,    93,    94,    95,    96,    15,  1152,     0,
        0,     0,     0,    17,   192,     0,     0,     0,     0,     0,
        0,     0,     0,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
@@ -1508,233 +1486,211 @@
 
 static const yytype_int16 yycheck[] =
 {
-       4,   170,   438,   135,     8,     9,   348,    12,    13,   680,
-      14,   447,   454,   454,   445,     8,   567,   443,   715,   716,
-     446,   452,     8,   166,   167,     8,   452,   453,   454,   455,
-     581,    31,   100,   443,    17,   445,   446,   100,    23,   449,
-       8,   451,   452,   453,   454,   455,   456,     5,     5,     7,
-       7,    30,     5,     8,     7,   452,   453,   467,    11,     8,
-     443,     0,   445,   446,   299,   675,   445,    67,    17,   452,
-     453,   454,     8,   452,     8,     8,    55,   444,     8,   446,
-      43,    44,    12,   450,   467,   445,   446,   454,   455,   449,
-     450,   451,   452,   453,   454,   455,   456,    82,    77,    78,
-     104,   101,   106,   713,   339,    99,    92,   467,  1134,    95,
-     103,    94,  1138,    31,   118,   119,   120,   121,   122,   446,
-      88,    20,   101,   450,   100,    93,   102,   454,   455,   456,
-      22,   300,    31,    88,   100,   139,   102,   446,    93,    31,
-     309,   450,   100,    23,   102,   454,   455,   456,   101,    67,
-      42,    85,    88,    87,   851,    88,    90,    93,   162,   163,
-      93,    70,   294,   168,   101,   169,   170,   171,    67,   100,
-       5,   102,     7,   177,    73,    67,    11,   181,   182,   183,
-     184,    73,   136,   101,     8,     5,   100,     7,   102,   193,
-     100,    11,    16,    17,    18,   199,   339,   340,     5,     5,
-       7,     7,   101,   207,     8,    11,    31,    28,    99,   101,
-      31,     8,    37,    17,    18,    27,   100,    14,    30,    31,
+       4,    12,    13,   438,     8,     9,   348,   676,   681,   135,
+      14,     8,   447,    23,   454,   445,   299,   170,   716,   717,
+       8,     0,   452,   453,   100,   443,   567,   445,   446,   100,
+       5,   449,     7,   451,   452,   453,   454,   455,   456,   452,
+     453,   582,     5,   443,     7,   714,   446,   454,    11,   467,
+       8,   445,   452,   453,   454,   455,   339,     8,   452,    17,
+       8,     8,    99,     8,     5,   443,     7,   445,   446,     8,
+      11,   444,    82,   446,   452,   453,   454,   450,    17,    18,
+     446,   454,   455,    23,   450,    31,   445,   446,   454,   467,
+     449,   450,   451,   452,   453,   454,   455,   456,   103,   104,
+     104,   446,   106,     8,    92,   450,   103,    95,   467,   454,
+     455,   456,    17,    70,   118,   119,   120,   121,   122,     8,
+       5,    67,     7,    64,   446,   100,    11,   102,   450,     5,
+      22,     7,   454,   455,   456,   139,    94,    88,   101,    31,
+      88,    88,    93,    88,    30,    93,    93,   300,    93,     8,
+      42,   103,   104,    12,   852,   101,   309,   168,   162,   163,
+      20,    43,    44,    30,    31,   169,   170,   171,   294,    55,
+     101,    31,   132,   177,   134,    67,   136,   181,   182,   183,
+     184,    73,     5,    31,     7,    33,    34,     8,    11,   193,
+    1135,    77,    78,    14,  1139,   199,    85,    84,    87,    86,
+      67,    90,    89,   207,    91,    99,    73,    67,    75,   101,
+     170,    78,   100,    73,   102,   101,   100,   166,   167,    67,
      224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,    56,    59,    51,
-      52,    53,    67,    55,    64,    64,    67,    54,    83,   203,
-     204,   205,   206,    65,   100,    67,   102,    31,   100,    33,
-      34,   446,   266,    82,    11,   450,    84,    74,    86,   454,
-     100,    89,   102,    91,   279,   101,   281,   282,   283,   101,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   101,
-     295,   100,   296,    67,   298,   438,   300,   301,   103,   442,
+     234,   235,   236,   237,   238,   239,   240,    31,   100,    33,
+      34,   101,   100,   203,   204,   205,   206,     8,   101,    97,
+      31,   100,     5,   101,     7,    16,    17,    18,   103,    22,
+      83,    24,   266,    31,   100,   100,     4,   102,   279,    32,
+     281,   282,   283,    67,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,    64,   295,   100,    67,    11,    26,    27,
+      71,    29,   296,    31,   298,   100,   300,   301,    61,    67,
+     100,    54,    40,    71,    42,    21,    69,   101,   101,    47,
+      48,     5,    50,     7,     8,    31,   101,    55,    31,    75,
+     101,    74,    27,   101,    37,    30,    42,    65,     5,    67,
+       7,     8,    31,   101,   338,    73,   101,   341,    76,   101,
+     300,    79,   101,    81,    31,   349,    51,    52,    53,   309,
+     354,    67,    68,   101,    67,    42,   101,    73,    96,   136,
+      98,   365,   366,   101,    31,    81,   370,     4,    67,   100,
+      75,   102,   100,    78,   102,    42,   100,   100,   102,  1052,
+      67,   100,   100,   102,    21,   101,    73,     4,   112,    26,
+     339,   340,    29,    80,   100,   971,   101,   973,    35,    36,
+      67,    38,   101,    40,    41,   100,    73,   102,    31,    26,
+      47,    48,    29,    50,   101,   101,   420,   141,   142,    42,
+      57,   145,    31,    40,    33,    34,   203,   204,   205,   206,
+      47,    48,   973,    50,   101,    72,   160,   101,    55,    76,
+      63,   101,    79,    31,    67,    33,    34,   988,    56,    28,
+      73,   175,    31,   457,   458,   459,    64,   101,    67,    76,
+      24,    98,    79,    32,   101,   100,   104,   102,   472,   473,
+     474,   475,   476,   477,    82,   100,   103,   102,   101,    67,
+      59,    98,   101,   487,   488,   100,    14,   102,    67,   438,
+     214,   103,   101,   442,   443,   444,   445,   446,   447,   448,
+     449,   450,   451,   452,   453,   454,   455,   456,   926,   971,
+     972,   951,   516,   101,     5,   445,   446,   241,   467,   105,
+      85,   951,   452,   453,   454,   100,   530,   102,   100,   106,
+     102,   971,   536,   973,   100,   688,   102,   261,   108,   263,
+     264,   971,   972,   973,   951,   918,   919,   889,   926,   553,
+     676,   951,   100,   926,   102,   100,   107,   102,   971,   972,
+     973,   100,   103,   102,   971,    14,   973,   926,   572,   573,
+     574,   971,   972,   918,   919,   117,   103,   950,   302,   103,
+     127,     4,   306,   180,   138,   589,   590,   167,   714,   313,
+     340,   421,     8,     9,     4,   319,   918,   919,    21,   100,
+     100,   102,   102,    26,   725,   100,    29,   102,   190,   333,
+     334,   920,    35,    36,  1098,    38,    26,    40,    41,    29,
+     100,    31,   102,  1061,    47,    48,  1148,    50,   632,  1148,
+     634,   635,    42,   100,    57,   102,   445,    47,    48,   445,
+      50,   652,   653,   445,   100,   369,   102,   445,   445,    72,
+      39,   922,   100,    76,   102,   445,    79,    67,   669,   100,
+      49,   102,   100,    73,   102,    31,   445,   367,   628,    79,
+     630,    81,   828,    62,    40,    98,    42,    66,   101,    45,
+     100,   100,   102,   102,   891,   645,    75,   647,    98,   649,
+     971,   101,   973,   100,    60,   102,    27,   701,   702,  1063,
+      31,    67,   662,  1064,   120,   121,   122,    73,   951,   888,
+      76,    42,   100,   454,   102,  1150,  1151,   134,   135,   136,
+      51,   932,   284,   139,    55,   100,   853,   102,   688,   689,
+    1107,  1146,  1150,  1151,   887,   101,    67,  1109,  1134,  1218,
+    1182,   193,    73,   300,    -1,   132,   162,   163,    -1,    -1,
+      81,    -1,    -1,    -1,    -1,    -1,   716,   717,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   181,   182,   183,   184,    -1,
+     101,    -1,    -1,    -1,    -1,    27,    -1,   781,    30,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   203,   204,   205,   206,
+      -1,   207,    -1,    -1,    -1,    -1,   800,   801,   802,    51,
+      52,    53,    -1,    55,    -1,   222,    -1,    -1,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,    77,    78,   831,   832,   833,
+     834,   835,    -1,    -1,   838,    -1,   840,    -1,   842,   843,
+     844,    -1,    -1,   156,   848,    -1,   159,    -1,   161,   101,
+      -1,   628,    -1,   630,   858,    -1,   860,   861,   862,    -1,
+     864,   865,    -1,   280,    -1,    -1,    -1,   284,   645,    -1,
+     647,    -1,   649,    -1,    -1,     4,    -1,   294,    -1,    -1,
+      -1,    -1,    -1,    -1,   888,   662,    -1,    -1,    -1,    -1,
+      -1,    -1,   852,   617,   618,    -1,    -1,    26,    -1,    -1,
+      29,    -1,    31,    -1,    -1,   218,   219,   220,   221,    -1,
+      -1,    40,    -1,    42,    -1,    -1,    -1,    -1,    47,    48,
+      -1,    50,    -1,   927,  1077,    -1,    55,   887,   932,    -1,
+      -1,    -1,    -1,    -1,    -1,   939,   940,    -1,    67,    -1,
+      -1,    -1,    -1,    -1,    73,    -1,    -1,    76,   952,   953,
+      79,    -1,    -1,    -1,   370,    -1,  1109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,
+      -1,    -1,   101,    -1,    -1,    -1,   925,   926,    -1,    -1,
+     984,   985,   986,   987,   708,   709,   710,    -1,    -1,   993,
+      -1,   995,    -1,    -1,   998,   999,    -1,    -1,    -1,    -1,
+    1153,   950,   951,    -1,   421,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   745,   746,   747,   748,    -1,   750,    -1,    -1,    -1,
+      -1,    -1,    -1,   166,   167,    -1,   760,    -1,    -1,   763,
+      -1,   457,   458,   459,   768,   769,   770,    -1,    -1,  1060,
+    1010,  1011,    -1,    -1,    -1,    -1,   472,   473,   474,   475,
+     476,   477,    -1,    -1,    -1,  1218,  1070,  1071,    -1,    -1,
+    1223,   487,   488,    -1,  1227,    -1,    -1,    -1,     4,  1083,
+    1084,    -1,    -1,    -1,   808,    -1,    -1,   811,    -1,    -1,
+      -1,   815,   816,  1053,  1054,  1055,   820,   821,  1058,    25,
+     516,    27,    -1,    29,    30,    31,    27,  1111,    -1,    30,
+      31,    -1,    -1,    -1,   530,    -1,    42,  1077,    -1,    -1,
+     536,    47,    48,    -1,    50,    51,    -1,    -1,   441,    -1,
+      51,    52,    53,    -1,    55,    27,    -1,   553,    30,    31,
+      -1,    67,    -1,    -1,    65,    -1,    67,    73,    -1,  1109,
+      42,    -1,  1156,    -1,    -1,    81,   572,   573,   574,    51,
+    1164,    -1,    -1,    55,    -1,    -1,    -1,  1171,    -1,    -1,
+      -1,    -1,    98,   589,   590,    67,    -1,    -1,    -1,    -1,
+     101,    73,    -1,    75,    -1,    -1,    78,    -1,    -1,    81,
+      -1,    -1,    -1,  1153,    -1,    -1,  1200,    -1,  1202,  1148,
+      -1,  1150,  1151,    -1,    -1,    -1,   339,   340,    -1,    -1,
+      -1,   628,   629,   630,    -1,    -1,   632,    -1,   634,   635,
+    1180,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   645,    -1,
+     647,    -1,   649,  1010,  1011,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1218,   676,
+      -1,    -1,    -1,  1223,   681,   682,   683,  1227,    -1,    -1,
+      -1,   688,   689,    -1,    -1,    -1,  1053,  1054,  1055,    -1,
+      -1,  1058,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1014,  1015,    -1,    -1,    -1,    -1,    -1,   714,    -1,   716,
+     717,    -1,    -1,    -1,   721,   438,   723,    -1,   725,   442,
      443,   444,   445,   446,   447,   448,   449,   450,   451,   452,
-     453,   454,   455,   456,    27,   100,    31,     5,    31,     7,
-       8,    39,   100,    97,   467,   100,   970,   101,   972,    42,
-       5,    49,     7,     8,   338,    31,   100,   341,    51,   100,
-      31,   102,    55,   101,    62,   349,    42,     4,    66,    64,
-     354,    42,    67,   100,    67,   102,    71,    75,   103,   104,
-      73,   365,   366,    75,    21,   112,   370,    63,    81,    26,
-     101,    67,    29,   100,   100,   102,    67,    73,    35,    36,
-    1051,    38,    73,    40,    41,   101,   101,     4,   101,    80,
-      47,    48,   101,    50,   141,   142,    31,   100,   145,   102,
-      57,   100,   100,   102,   102,   101,   101,    42,    25,    26,
-     101,   101,    29,   160,    31,    72,   420,   101,   100,    76,
-     102,   972,    79,   100,   100,    42,   102,   100,   175,   102,
-      47,    48,    67,    50,   100,   100,   987,   102,    73,   101,
-      31,    98,    33,    34,   101,   100,   100,   102,   102,   100,
-      67,   102,   101,   457,   458,   459,    73,    31,   101,    33,
-      34,   100,    79,   102,    81,   101,   101,   214,   472,   473,
-     474,   475,   476,   477,    27,    32,    67,    30,   100,    96,
-     102,    98,    24,   487,   488,   101,   100,    31,   102,    33,
-      34,   103,   104,    67,   241,   445,   446,   103,    51,    52,
-      53,    14,   452,   453,   454,     8,     9,   103,   950,   950,
-     101,   100,   516,   102,   261,   925,   263,   264,   687,   950,
-     970,   971,    75,    67,   950,    78,   530,   101,   970,   970,
-     972,   972,   536,   132,   100,   134,   102,   136,     5,   970,
-     971,   972,   925,   675,   970,   971,   888,   105,   101,   553,
-     917,   918,   100,   104,   102,   302,    31,   101,   925,   306,
-     100,   100,   102,   102,    85,   925,   313,   103,   572,   573,
-     574,   170,   319,   970,   971,   972,   100,   100,   102,   102,
-     106,   713,   949,   108,   588,   589,   333,   334,   107,     4,
-     917,   918,    67,    14,    30,    31,    71,   103,   103,   134,
-     135,   136,   117,   180,   203,   204,   205,   206,   917,   918,
-     127,    26,   166,   167,    29,   340,   138,   120,   121,   122,
-     167,   100,   369,   102,   724,    40,   101,   631,   421,   633,
-     634,    67,    47,    48,   190,    50,   139,    73,   919,    75,
-      55,   970,    78,   972,  1097,  1060,   651,   652,  1147,  1147,
-     445,   445,    22,   445,    24,   445,   445,   445,   445,   162,
-     163,    76,    32,   668,    79,   367,   921,   827,   203,   204,
-     205,   206,   890,   627,  1062,   629,  1063,   950,   181,   182,
-     183,   184,   454,    98,   887,   931,   284,   222,   852,  1106,
-     644,    61,   646,  1145,   648,  1108,   700,   701,  1133,    69,
-    1217,   300,  1181,   193,   207,   300,   132,   661,    -1,    -1,
-     309,    -1,    -1,  1149,  1150,    -1,    -1,   886,    -1,    -1,
-      -1,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,    -1,  1149,
-    1150,    21,    -1,    -1,    -1,   280,    -1,    -1,     4,   284,
-      -1,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   294,
-      -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      26,    -1,    -1,    29,    27,    31,   780,    30,    -1,    -1,
-      -1,   924,   925,    -1,    40,   339,   340,    67,    68,    -1,
-      -1,    47,    48,    73,    50,   799,   800,   801,    51,    52,
-      53,    81,    55,    -1,    -1,    31,   949,   950,    -1,    -1,
-      -1,    67,    -1,    -1,    40,    -1,    42,    73,    -1,    45,
-      76,   101,    -1,    79,    77,    78,   830,   831,   832,   833,
-     834,    -1,    -1,   837,    60,   839,    -1,   841,   842,   843,
-      96,    67,    98,   847,    -1,   101,    -1,    73,   101,    -1,
-      76,    -1,    -1,   857,    -1,   859,   860,   861,    -1,   863,
-     864,    -1,    -1,    -1,    -1,    -1,    -1,   370,    -1,   616,
-     617,    -1,    -1,    -1,    -1,   101,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   887,   438,    -1,   421,    -1,   442,   443,
-     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
-     454,   455,   456,    -1,    -1,  1177,  1178,  1076,    -1,    -1,
-      -1,    -1,    -1,   467,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   926,    -1,  1196,    -1,    -1,   931,    -1,    -1,
-      -1,  1203,    -1,  1205,   938,   939,  1208,  1209,    -1,  1108,
-      -1,  1213,    -1,    -1,    -1,    -1,  1218,   951,   952,    -1,
-    1222,    -1,    -1,  1225,   457,   458,   459,    -1,    -1,    -1,
-     707,   708,   709,    27,    -1,    -1,    30,    31,    -1,   472,
-     473,   474,   475,   476,   477,    -1,    -1,    -1,    42,   983,
-     984,   985,   986,  1152,   487,   488,    -1,    51,   992,    -1,
-     994,    55,    -1,   997,   998,    -1,    -1,   744,   745,   746,
-     747,    -1,   749,    67,  1147,    -1,  1149,  1150,    -1,    73,
-      -1,    75,   759,   516,    78,   762,    -1,    81,    -1,    -1,
-     767,   768,   769,    -1,    -1,    -1,    -1,   530,   627,    -1,
-     629,    -1,    -1,   536,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   644,    -1,   646,  1217,   648,
-     553,    -1,    -1,  1222,  1059,  1009,  1010,  1226,    -1,    -1,
-     807,    -1,   661,   810,    -1,  1069,  1070,   814,   815,   572,
-     573,   574,   819,   820,    -1,    -1,    -1,    -1,  1082,  1083,
-      -1,    -1,    -1,    -1,    -1,   588,   589,    -1,   687,   688,
-      -1,    -1,   627,   628,   629,    -1,    -1,    -1,  1052,  1053,
-    1054,    -1,    -1,  1057,    -1,    -1,  1110,   156,    -1,   644,
-     159,   646,   161,   648,    -1,    -1,   715,   716,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   661,    -1,   631,    -1,
-     633,   634,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     675,    -1,    -1,    -1,    -1,   680,   681,   682,    -1,    -1,
-      -1,  1155,   687,   688,    -1,    -1,    -1,    -1,    -1,  1163,
-      -1,    -1,    -1,    -1,    -1,    -1,  1170,    -1,    -1,   218,
-     219,   220,   221,    -1,    -1,    -1,     4,    -1,   713,    -1,
-     715,   716,    -1,    -1,    -1,   720,     4,   722,    -1,   724,
-      -1,    -1,    -1,    -1,    -1,  1199,    -1,  1201,    26,    27,
-      -1,    29,    -1,    31,    -1,    -1,    -1,    -1,    26,    -1,
-      -1,    29,    40,    31,    42,    -1,    -1,    -1,    -1,    47,
-      48,    -1,    50,    -1,    42,  1179,    -1,    55,    -1,    47,
-      48,    -1,    50,    -1,    -1,    -1,    -1,    65,    -1,    67,
-      -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    76,    67,
-      -1,    79,   851,    81,    -1,    73,    -1,    -1,    -1,     4,
-      -1,    79,    -1,    81,    -1,    -1,  1013,  1014,    96,    -1,
-      98,    -1,    -1,   101,    -1,    -1,    21,   780,    -1,    -1,
-      98,    26,     4,   101,    29,    -1,    -1,   886,    -1,    -1,
-      35,    36,    -1,    38,    -1,    40,    41,    -1,    -1,    -1,
-    1047,  1048,    47,    48,    26,    50,    -1,    29,    -1,    31,
-      -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,    40,    -1,
-      42,    -1,    -1,    -1,    -1,    47,    48,    72,    50,    -1,
-      -1,    76,    -1,    55,    79,    -1,    -1,    -1,    -1,    -1,
-    1087,    -1,    -1,    -1,   847,    67,    -1,    -1,    -1,    -1,
-      -1,    73,    -1,    98,    76,    -1,   101,    79,    -1,    -1,
-      -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     924,   925,    -1,    -1,    -1,    -1,    98,    -1,    -1,   101,
-      -1,    -1,    -1,    25,   887,    27,    -1,    29,    30,    31,
-      -1,    -1,   441,    -1,    -1,   949,   950,    -1,    -1,    -1,
-      42,    -1,    -1,    -1,    -1,    47,    48,    -1,    50,    51,
-    1009,  1010,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   926,    -1,    67,    -1,    -1,   931,    -1,
-      -1,    73,    -1,   968,    -1,   938,   939,    -1,    -1,    81,
-      -1,    -1,    -1,  1190,    -1,   980,   981,  1194,   951,   952,
-      -1,    -1,    -1,  1052,  1053,  1054,    98,    -1,  1057,    -1,
+     453,   454,   455,   456,  1048,  1049,     4,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   467,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    26,    -1,
+      -1,    29,    -1,    31,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    40,    -1,  1088,   781,    -1,    -1,    -1,    47,
+      48,    -1,    50,    -1,    -1,    -1,    -1,    -1,    -1,   108,
+      -1,    -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,    67,
+      -1,    -1,    -1,    -1,   707,    73,    -1,    -1,    76,   712,
+     713,    79,    -1,  1180,    25,    26,    -1,    -1,    29,   722,
+      31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,    -1,
+      98,    42,    -1,   101,   737,    -1,    47,    48,    -1,    50,
+      -1,    -1,   848,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   755,   172,   173,    -1,    67,    -1,    -1,   762,
+      -1,    -1,    73,   766,    -1,    -1,    -1,    -1,    79,   772,
+      81,  1178,  1179,   776,    -1,    -1,   779,  1191,    -1,    -1,
+      -1,  1195,   888,    -1,    -1,    96,    -1,    98,    -1,   208,
+    1197,    -1,    -1,    -1,    -1,    -1,   215,  1204,    -1,  1206,
+      -1,    -1,  1209,  1210,    -1,    -1,    -1,  1214,    -1,    -1,
+      -1,    -1,  1219,    -1,    -1,    -1,  1223,    -1,    -1,  1226,
+      -1,   927,    -1,   242,    -1,    -1,   932,    -1,    -1,    -1,
+     833,    -1,    -1,   939,   940,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   262,    -1,   848,   952,   953,    -1,   268,
+     269,    -1,   271,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     863,    -1,   969,   866,    -1,    -1,    -1,   870,    -1,    -1,
+      -1,    -1,    -1,    -1,   981,   982,    -1,    -1,   984,   985,
+     986,   987,    27,    -1,    -1,    30,    31,   993,    -1,   995,
+      -1,    -1,   998,   999,    -1,    -1,    -1,    42,    -1,    -1,
+      -1,    -1,    -1,  1010,  1011,    -1,    -1,    52,    53,    -1,
+      55,    -1,    -1,    58,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,   342,    -1,    -1,    -1,    -1,    73,   932,
+      75,    -1,    -1,    78,    -1,    -1,    81,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   363,  1052,  1053,  1054,  1055,    -1,
+      -1,  1058,   371,    -1,    -1,    -1,  1063,  1064,    -1,    -1,
+      -1,    -1,   381,    -1,    -1,   384,    -1,   386,    -1,    -1,
+     389,    -1,    -1,   392,    -1,    -1,   395,   396,    -1,    -1,
+     399,    -1,    -1,   402,     4,    -1,   405,   406,   407,   408,
+      -1,    -1,   411,    -1,    -1,    -1,   415,    -1,    -1,    -1,
+     419,    -1,    -1,    -1,    -1,    -1,    26,    27,    -1,    29,
+      -1,    31,    -1,    -1,  1017,    -1,    -1,    -1,    -1,    -1,
+      40,    -1,    42,    -1,    -1,    -1,    46,    47,    48,    -1,
+      50,    -1,    52,    53,    -1,    55,    -1,    -1,    58,    -1,
+      -1,    -1,  1045,    -1,    -1,    -1,    -1,    67,  1051,    -1,
+    1156,    -1,    -1,    73,    -1,    -1,    76,    77,  1164,    79,
+      -1,    81,    -1,  1066,  1067,  1171,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1180,  1181,  1182,    96,    -1,    98,    -1,
+      -1,    -1,    -1,    -1,  1087,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1102,
+    1103,    -1,   925,   926,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1009,  1010,    -1,  1076,    -1,    -1,
-     983,   984,   985,   986,    -1,    -1,    -1,    -1,    -1,   992,
-      -1,   994,    -1,    -1,   997,   998,    -1,    -1,     4,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1108,
-      -1,    -1,    -1,    -1,    -1,    -1,  1051,  1052,  1053,  1054,
-      26,    27,  1057,    29,    -1,    31,    -1,  1062,  1063,    -1,
-      -1,    -1,    -1,    -1,    40,    -1,    42,    -1,    -1,    -1,
-      46,    47,    48,    -1,    50,    -1,    52,    53,    -1,    55,
-      -1,    27,    58,  1152,    -1,    31,    -1,    -1,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    42,    73,    -1,    -1,
-      76,    77,    -1,    79,    -1,    81,    52,    53,    -1,    55,
-    1179,    -1,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      96,    67,    98,  1147,    -1,  1149,  1150,    73,    -1,    75,
-     108,    -1,    78,    -1,    -1,    81,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1217,    -1,
-      -1,    -1,    -1,  1222,    -1,    -1,    -1,  1226,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1179,  1180,  1181,    -1,    -1,    -1,
-      -1,    -1,  1155,    -1,    -1,    -1,    -1,   706,    -1,    -1,
-    1163,    -1,   711,   712,   172,   173,    -1,  1170,    -1,    -1,
-      -1,    -1,   721,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   736,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     208,    -1,    -1,    -1,    -1,   754,    -1,   215,    -1,    -1,
-      -1,    -1,   761,    -1,    -1,    -1,   765,    -1,    -1,    -1,
-      -1,    -1,   771,    -1,    -1,    -1,   775,    -1,    -1,   778,
-      -1,    -1,    -1,    -1,   242,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   262,    -1,    -1,    -1,    -1,    -1,
-     268,   269,    -1,   271,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   832,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   847,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   862,    -1,    -1,   865,    -1,    -1,    -1,
-     869,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   342,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   371,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   381,    -1,    -1,   384,    -1,   386,    -1,
-      -1,   389,   931,    -1,   392,    -1,    -1,   395,   396,    -1,
-      -1,   399,    -1,    -1,   402,    -1,    -1,   405,   406,   407,
-     408,    -1,    -1,   411,    -1,    -1,    -1,   415,    -1,    -1,
-      -1,   419,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   950,   951,    -1,
+     549,   550,   551,   552,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1016,    -1,    -1,
+      -1,    -1,  1185,    -1,    -1,    -1,    -1,  1190,    -1,    -1,
+      -1,  1194,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   633,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1044,    -1,    -1,    -1,    -1,
-      -1,  1050,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1065,  1066,    -1,    -1,
+      -1,   650,   651,    -1,    -1,   654,   655,    -1,   657,   658,
+      -1,   660,   661,    -1,   663,   664,   665,   666,   667,   668,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1086,    -1,    -1,
-      -1,   549,   550,   551,   552,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1101,  1102,    -1,    -1,    -1,    -1,    -1,    -1,
+     679,   680,    -1,    -1,    -1,    -1,    -1,   686,   687,    -1,
+      -1,   690,   691,   692,    -1,   694,   695,   696,   697,   698,
+     699,   700,    -1,    -1,   703,   704,   705,   706,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   718,
+     719,   720,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   632,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1184,    -1,    -1,    -1,    -1,
-    1189,   649,   650,    -1,  1193,   653,   654,    -1,   656,   657,
-      -1,   659,   660,    -1,   662,   663,   664,   665,   666,   667,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     678,   679,    -1,    -1,    -1,    -1,    -1,   685,   686,    -1,
-      -1,   689,   690,   691,    -1,   693,   694,   695,   696,   697,
-     698,   699,    -1,    -1,   702,   703,   704,   705,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   717,
-     718,   719,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   755,    -1,     4,
+      -1,    -1,    -1,    -1,    -1,  1148,    -1,  1150,  1151,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   756,    -1,     4,
       -1,    -1,    -1,     8,     9,    10,    11,    12,    -1,    -1,
-      -1,    16,    17,    18,   772,    20,    21,    22,    23,    24,
+      -1,    16,    17,    18,   773,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
@@ -1742,34 +1698,34 @@
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    -1,   853,   854,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   866,    -1,
-      -1,    -1,   870,    -1,    -1,   873,    -1,    -1,    -1,   877,
-      -1,   879,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   891,    -1,    -1,   894,   895,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   906,    -1,
-      -1,   909,    -1,    -1,   912,    -1,    -1,    -1,    -1,    -1,
+      95,    96,    97,    98,    -1,   854,   855,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   867,    -1,
+      -1,    -1,   871,    -1,    -1,   874,    -1,    -1,    -1,   878,
+      -1,   880,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   892,    -1,    -1,   895,   896,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   907,    -1,
+      -1,   910,    -1,    -1,   913,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   974,   975,   976,    -1,
-     978,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   991,    -1,   993,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   975,   976,   977,    -1,
+     979,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   992,    -1,   994,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1008,    -1,    -1,  1011,  1012,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1024,    -1,    -1,    -1,
-      -1,  1029,    -1,    -1,  1032,    -1,    -1,    -1,    -1,    -1,
+    1009,    -1,    -1,  1012,  1013,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1025,    -1,    -1,    -1,
+      -1,  1030,    -1,    -1,  1033,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1055,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1056,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1111,    -1,  1113,  1114,    -1,  1116,  1117,
-      -1,    -1,  1120,    -1,    -1,  1123,  1124,     4,  1126,    -1,
+      -1,    -1,    -1,  1112,    -1,  1114,  1115,    -1,  1117,  1118,
+      -1,    -1,  1121,    -1,    -1,  1124,  1125,     4,  1127,    -1,
       -1,     8,     9,    10,    11,    12,    -1,    -1,    -1,    16,
       17,    18,    -1,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
@@ -1920,71 +1876,71 @@
      229,   233,   318,    22,   101,   143,   144,   165,   173,   178,
      143,   144,   165,   173,   227,   228,   246,   249,   367,   372,
      377,   388,    52,    53,    58,   143,   144,   165,   173,   227,
-     254,   257,   367,   372,   382,   384,   386,   388,    46,    77,
-     143,   144,   165,   173,   179,   229,   233,   262,   318,   367,
-     372,   382,   384,   386,   388,   391,   394,   101,   143,   144,
-     165,   173,   179,   229,   233,   388,    45,    60,   101,   143,
-     144,   165,   173,   179,   229,   328,   336,   445,   445,   445,
-     101,    75,   182,    21,    68,   101,   143,   144,   165,   173,
-     300,   305,   367,   445,   445,   445,   445,   445,   445,   291,
-     292,   445,   445,   314,   316,   101,   315,   313,   101,   276,
-     275,   445,   242,   240,   243,   241,   238,   239,   445,   445,
-     101,   433,   433,   433,   433,   445,   101,   182,   248,   251,
-     445,   445,   445,   101,   182,   256,   259,   445,   445,   266,
-     267,   269,   101,   268,   264,   265,   344,   345,   346,   343,
-     444,   444,   324,   325,   326,   327,   447,    85,    87,    90,
-     111,   168,   447,   445,   433,   445,   445,   298,   299,   297,
-     373,   447,   378,   447,   166,   447,   433,   433,   429,   429,
-     433,   433,   433,   433,   433,   433,   447,   433,   433,   433,
-     433,   433,   433,   429,    84,    86,    89,    91,   352,   353,
-     354,   355,   359,   363,   431,   250,   433,   433,    17,    94,
-     111,   385,   424,    18,   111,   383,   424,   425,    92,    95,
-     111,   387,   258,   433,   433,   111,   395,   430,   111,   392,
-     403,   430,   433,   433,   433,   433,   433,   433,   433,   433,
-     433,   433,   329,   337,   433,   433,   433,   433,   432,   444,
-     444,   444,   432,   432,   431,   111,   308,   403,   111,   303,
-     403,   433,   433,   433,    88,    93,   111,   375,   432,    88,
-      93,   111,   380,   389,   168,   368,   280,   319,   432,   160,
-     444,   444,   444,   444,   444,   432,   433,   444,   432,   444,
-     432,   444,   444,   444,   432,   433,   432,   396,   432,   393,
-     432,   445,   404,   100,   100,   183,   306,   444,   301,   444,
-     444,   444,   374,   444,   444,   379,   100,   102,   390,   167,
-     100,   102,   369,   100,   102,   281,   322,   100,   102,   161,
-     356,   360,   432,   364,   397,   432,   445,   403,   402,   433,
-     433,   100,   102,   186,   100,   100,   102,   302,   432,   432,
-     433,   432,   433,   433,   433,   433,   100,   102,   357,   100,
-     102,   361,   100,   102,   365,   430,   393,   331,   331,   187,
-     433,   433,   433,   196,   370,   282,    83,   162,   433,   433,
-     433,   398,   179,   229,   233,   330,   388,   338,    61,    69,
-     178,   188,   189,   202,   203,   213,   214,   216,   217,   312,
-     304,    33,    34,   101,   143,   144,   225,   226,   101,   143,
-     144,   101,   143,   144,   165,   173,   233,   367,   445,   101,
-     358,   362,   366,   397,   333,   334,   335,   101,   332,   101,
-     445,   445,   101,    39,    49,    62,    66,   190,   191,   193,
-     197,   211,    32,   205,    24,   219,   307,    27,    51,   101,
-     143,   144,   228,   371,   376,   381,   382,   384,   388,   445,
-     445,   284,   283,    88,    93,   111,   163,   101,   227,   228,
-     371,   376,   382,   384,   388,   391,   101,   227,   228,   388,
-     391,   101,   182,   227,   228,   371,   376,   382,   384,   433,
-     433,   433,   433,   111,   405,   406,   407,    88,    93,   111,
-     215,   445,   445,   445,   445,   182,   433,   445,   433,   445,
-     218,   101,   445,   445,   433,   447,   447,   433,   433,   444,
-     444,   432,   433,   433,   433,   432,   103,   408,   409,    14,
-     411,   412,   444,   444,   432,   111,   192,   424,   194,   447,
-     198,   447,   399,   447,   433,   206,   447,   204,   220,   429,
-     219,   375,   380,   432,   432,   430,   410,   103,   413,   432,
-     444,   100,   102,   195,   100,   102,   199,   100,   102,   212,
-     100,   102,   207,   205,   100,   102,   221,   432,   432,   416,
-     408,   412,   414,   430,   433,   433,   433,   433,   433,   433,
-     433,   433,   433,   104,   415,   416,   196,   200,   196,   208,
-     222,     5,   446,   409,   101,    97,   101,   143,   144,   201,
-     225,   226,   101,    80,   101,   143,   144,   164,   173,   209,
-      63,   101,   143,   144,   164,   173,   223,   417,   430,   445,
-     445,   445,   446,   446,   447,    16,    17,    18,   111,   210,
-     426,   427,   111,   224,   425,   105,   106,   432,   432,   444,
-     432,   444,   446,    85,   418,   423,   446,   446,   107,   103,
-     446,   446,   108,    14,   419,   420,   446,   421,   103,   420,
-     430,   446,   422,   430,   446,   103,   446,   430
+     228,   254,   257,   367,   372,   382,   384,   386,   388,    46,
+      77,   143,   144,   165,   173,   179,   229,   233,   262,   318,
+     367,   372,   382,   384,   386,   388,   391,   394,   101,   143,
+     144,   165,   173,   179,   229,   233,   388,    45,    60,   101,
+     143,   144,   165,   173,   179,   229,   328,   336,   445,   445,
+     445,   101,    75,   182,    21,    68,   101,   143,   144,   165,
+     173,   300,   305,   367,   445,   445,   445,   445,   445,   445,
+     291,   292,   445,   445,   314,   316,   101,   315,   313,   101,
+     276,   275,   445,   242,   240,   243,   241,   238,   239,   445,
+     445,   101,   433,   433,   433,   433,   445,   101,   182,   248,
+     251,   445,   445,   445,   101,   182,   256,   259,   445,   445,
+     266,   267,   269,   101,   268,   264,   265,   344,   345,   346,
+     343,   444,   444,   324,   325,   326,   327,   447,    85,    87,
+      90,   111,   168,   447,   445,   433,   445,   445,   298,   299,
+     297,   373,   447,   378,   447,   166,   447,   433,   433,   429,
+     429,   433,   433,   433,   433,   433,   433,   447,   433,   433,
+     433,   433,   433,   433,   429,    84,    86,    89,    91,   352,
+     353,   354,   355,   359,   363,   431,   250,   433,   433,    17,
+      94,   111,   385,   424,    18,   111,   383,   424,   425,    92,
+      95,   111,   387,   258,   433,   433,   111,   395,   430,   111,
+     392,   403,   430,   433,   433,   433,   433,   433,   433,   433,
+     433,   433,   433,   329,   337,   433,   433,   433,   433,   432,
+     444,   444,   444,   432,   432,   431,   111,   308,   403,   111,
+     303,   403,   433,   433,   433,    88,    93,   111,   375,   432,
+      88,    93,   111,   380,   389,   168,   368,   280,   319,   432,
+     160,   444,   444,   444,   444,   444,   432,   433,   444,   432,
+     444,   432,   444,   444,   444,   432,   433,   432,   396,   432,
+     393,   432,   445,   404,   100,   100,   183,   306,   444,   301,
+     444,   444,   444,   374,   444,   444,   379,   100,   102,   390,
+     167,   100,   102,   369,   100,   102,   281,   322,   100,   102,
+     161,   356,   360,   432,   364,   397,   432,   445,   403,   402,
+     433,   433,   100,   102,   186,   100,   100,   102,   302,   432,
+     432,   433,   432,   433,   433,   433,   433,   100,   102,   357,
+     100,   102,   361,   100,   102,   365,   430,   393,   331,   331,
+     187,   433,   433,   433,   196,   370,   282,    83,   162,   433,
+     433,   433,   398,   179,   229,   233,   330,   388,   338,    61,
+      69,   178,   188,   189,   202,   203,   213,   214,   216,   217,
+     312,   304,    33,    34,   101,   143,   144,   225,   226,   101,
+     143,   144,   101,   143,   144,   165,   173,   233,   367,   445,
+     101,   358,   362,   366,   397,   333,   334,   335,   101,   332,
+     101,   445,   445,   101,    39,    49,    62,    66,   190,   191,
+     193,   197,   211,    32,   205,    24,   219,   307,    27,    51,
+     101,   143,   144,   228,   371,   376,   381,   382,   384,   388,
+     445,   445,   284,   283,    88,    93,   111,   163,   101,   227,
+     228,   371,   376,   382,   384,   388,   391,   101,   227,   228,
+     388,   391,   101,   182,   227,   228,   371,   376,   382,   384,
+     433,   433,   433,   433,   111,   405,   406,   407,    88,    93,
+     111,   215,   445,   445,   445,   445,   182,   433,   445,   433,
+     445,   218,   101,   445,   445,   433,   447,   447,   433,   433,
+     444,   444,   432,   433,   433,   433,   432,   103,   408,   409,
+      14,   411,   412,   444,   444,   432,   111,   192,   424,   194,
+     447,   198,   447,   399,   447,   433,   206,   447,   204,   220,
+     429,   219,   375,   380,   432,   432,   430,   410,   103,   413,
+     432,   444,   100,   102,   195,   100,   102,   199,   100,   102,
+     212,   100,   102,   207,   205,   100,   102,   221,   432,   432,
+     416,   408,   412,   414,   430,   433,   433,   433,   433,   433,
+     433,   433,   433,   433,   104,   415,   416,   196,   200,   196,
+     208,   222,     5,   446,   409,   101,    97,   101,   143,   144,
+     201,   225,   226,   101,    80,   101,   143,   144,   164,   173,
+     209,    63,   101,   143,   144,   164,   173,   223,   417,   430,
+     445,   445,   445,   446,   446,   447,    16,    17,    18,   111,
+     210,   426,   427,   111,   224,   425,   105,   106,   432,   432,
+     444,   432,   444,   446,    85,   418,   423,   446,   446,   107,
+     103,   446,   446,   108,    14,   419,   420,   446,   421,   103,
+     420,   430,   446,   422,   430,   446,   103,   446,   430
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -2020,45 +1976,45 @@
      245,   246,   244,   247,   248,   247,   247,   249,   250,   247,
      247,   251,   247,   247,   247,   247,   247,   247,   247,   253,
      254,   252,   255,   256,   255,   255,   257,   258,   255,   255,
-     259,   255,   255,   255,   255,   255,   255,   255,   255,   261,
-     262,   260,   263,   264,   263,   263,   265,   263,   263,   263,
-     263,   263,   263,   263,   263,   263,   263,   266,   263,   267,
-     263,   268,   263,   269,   263,   271,   270,   272,   273,   272,
-     274,   275,   274,   274,   274,   274,   274,   274,   274,   274,
-     276,   274,   277,   277,   278,   278,   278,   278,   278,   278,
-     280,   279,   281,   281,   282,   283,   282,   282,   282,   282,
-     282,   284,   282,   286,   285,   288,   287,   289,   289,   290,
-     291,   290,   290,   292,   290,   290,   290,   290,   290,   290,
-     294,   293,   295,   295,   296,   297,   296,   296,   296,   296,
-     296,   298,   296,   299,   296,   301,   300,   302,   302,   303,
-     303,   304,   304,   304,   304,   304,   304,   304,   304,   304,
-     304,   306,   307,   305,   308,   308,   310,   311,   309,   312,
-     313,   312,   312,   312,   312,   312,   314,   312,   315,   312,
-     316,   312,   317,   317,   319,   318,   321,   320,   322,   322,
-     323,   323,   323,   323,   323,   324,   323,   325,   323,   326,
-     323,   327,   323,   329,   330,   328,   331,   332,   331,   333,
-     331,   334,   331,   335,   331,   337,   338,   336,   340,   339,
-     341,   341,   342,   343,   342,   342,   342,   342,   342,   344,
-     342,   345,   342,   346,   342,   348,   349,   347,   350,   350,
-     350,   350,   351,   351,   352,   352,   353,   353,   353,   354,
-     356,   355,   357,   357,   358,   358,   358,   358,   358,   358,
-     358,   358,   358,   360,   359,   361,   361,   362,   362,   362,
-     362,   362,   364,   363,   365,   365,   366,   366,   366,   366,
-     366,   366,   366,   366,   368,   367,   369,   369,   370,   370,
-     370,   371,   373,   374,   372,   375,   375,   375,   376,   378,
-     379,   377,   380,   380,   380,   381,   382,   383,   383,   384,
-     385,   385,   385,   386,   387,   387,   387,   389,   388,   390,
-     390,   391,   392,   392,   393,   393,   394,   396,   395,   395,
-     398,   397,   397,   399,   400,   401,   402,   402,   404,   403,
-     406,   405,   407,   405,   405,   408,   409,   410,   410,   411,
-     412,   413,   413,   414,   415,   415,   416,   416,   417,   418,
-     419,   420,   421,   421,   422,   422,   423,   424,   425,   425,
-     426,   426,   427,   427,   428,   428,   429,   429,   430,   430,
-     431,   431,   431,   432,   432,   433,   433,   433,   435,   434,
-     436,   437,   437,   438,   438,   438,   439,   439,   440,   440,
-     441,   441,   442,   442,   443,   443,   444,   444,   445,   446,
-     446,   448,   447,   447,   449,   449,   449,   449,   449,   449,
-     449,   450,   450,   450,   450,   450,   450,   450,   450,   450,
+     255,   259,   255,   255,   255,   255,   255,   255,   255,   255,
+     261,   262,   260,   263,   264,   263,   263,   265,   263,   263,
+     263,   263,   263,   263,   263,   263,   263,   263,   266,   263,
+     267,   263,   268,   263,   269,   263,   271,   270,   272,   273,
+     272,   274,   275,   274,   274,   274,   274,   274,   274,   274,
+     274,   276,   274,   277,   277,   278,   278,   278,   278,   278,
+     278,   280,   279,   281,   281,   282,   283,   282,   282,   282,
+     282,   282,   284,   282,   286,   285,   288,   287,   289,   289,
+     290,   291,   290,   290,   292,   290,   290,   290,   290,   290,
+     290,   294,   293,   295,   295,   296,   297,   296,   296,   296,
+     296,   296,   298,   296,   299,   296,   301,   300,   302,   302,
+     303,   303,   304,   304,   304,   304,   304,   304,   304,   304,
+     304,   304,   306,   307,   305,   308,   308,   310,   311,   309,
+     312,   313,   312,   312,   312,   312,   312,   314,   312,   315,
+     312,   316,   312,   317,   317,   319,   318,   321,   320,   322,
+     322,   323,   323,   323,   323,   323,   324,   323,   325,   323,
+     326,   323,   327,   323,   329,   330,   328,   331,   332,   331,
+     333,   331,   334,   331,   335,   331,   337,   338,   336,   340,
+     339,   341,   341,   342,   343,   342,   342,   342,   342,   342,
+     344,   342,   345,   342,   346,   342,   348,   349,   347,   350,
+     350,   350,   350,   351,   351,   352,   352,   353,   353,   353,
+     354,   356,   355,   357,   357,   358,   358,   358,   358,   358,
+     358,   358,   358,   358,   360,   359,   361,   361,   362,   362,
+     362,   362,   362,   364,   363,   365,   365,   366,   366,   366,
+     366,   366,   366,   366,   366,   368,   367,   369,   369,   370,
+     370,   370,   371,   373,   374,   372,   375,   375,   375,   376,
+     378,   379,   377,   380,   380,   380,   381,   382,   383,   383,
+     384,   385,   385,   385,   386,   387,   387,   387,   389,   388,
+     390,   390,   391,   392,   392,   393,   393,   394,   396,   395,
+     395,   398,   397,   397,   399,   400,   401,   402,   402,   404,
+     403,   406,   405,   407,   405,   405,   408,   409,   410,   410,
+     411,   412,   413,   413,   414,   415,   415,   416,   416,   417,
+     418,   419,   420,   421,   421,   422,   422,   423,   424,   425,
+     425,   426,   426,   427,   427,   428,   428,   429,   429,   430,
+     430,   431,   431,   431,   432,   432,   433,   433,   433,   435,
+     434,   436,   437,   437,   438,   438,   438,   439,   439,   440,
+     440,   441,   441,   442,   442,   443,   443,   444,   444,   445,
+     446,   446,   448,   447,   447,   449,   449,   449,   449,   449,
+     449,   449,   450,   450,   450,   450,   450,   450,   450,   450,
      450,   450,   450,   450,   450,   450,   450,   450,   450,   450,
      450,   450,   450,   450,   450,   450,   450,   450,   450,   450,
      450,   450,   450,   450,   450,   450,   450,   450,   450,   450,
@@ -2066,7 +2022,7 @@
      450,   450,   450,   450,   450,   450,   450,   450,   450,   450,
      450,   450,   450,   450,   450,   450,   450,   450,   450,   450,
      450,   450,   450,   450,   450,   450,   450,   450,   450,   450,
-     450,   450,   451,   452
+     450,   450,   450,   451,   452
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -2102,44 +2058,44 @@
        0,     0,     9,     0,     0,     4,     2,     0,     0,     5,
        2,     0,     4,     2,     2,     2,     2,     2,     2,     0,
        0,     9,     0,     0,     4,     2,     0,     0,     5,     2,
-       0,     4,     2,     2,     2,     2,     2,     2,     2,     0,
-       0,     9,     0,     0,     4,     2,     0,     4,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     5,     1,     0,     5,
-       0,     0,     4,     2,     2,     2,     2,     2,     2,     2,
-       0,     4,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     5,     1,     4,     0,     0,     4,     2,     2,     2,
-       2,     0,     4,     0,     5,     0,     5,     1,     4,     0,
-       0,     4,     2,     0,     4,     2,     2,     2,     2,     2,
-       0,     5,     1,     4,     0,     0,     4,     2,     2,     2,
-       2,     0,     4,     0,     4,     0,     5,     1,     4,     2,
-       1,     0,     3,     2,     2,     2,     2,     2,     2,     2,
-       2,     0,     0,     9,     2,     1,     0,     0,     9,     0,
-       0,     4,     2,     2,     2,     2,     0,     4,     0,     4,
-       0,     4,     2,     1,     0,     5,     0,     5,     1,     4,
-       0,     2,     2,     2,     2,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     0,     8,     0,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     0,     8,     0,     5,
-       1,     4,     0,     0,     4,     2,     2,     2,     2,     0,
-       4,     0,     4,     0,     4,     0,     0,     9,     0,     2,
-       2,     4,     2,     1,     1,     2,     1,     1,     1,     3,
-       0,     4,     1,     4,     0,     2,     3,     2,     2,     2,
-       2,     2,     2,     0,     4,     1,     4,     0,     2,     3,
-       2,     2,     0,     4,     1,     4,     0,     3,     2,     2,
-       2,     2,     2,     2,     0,     5,     1,     4,     0,     2,
-       2,     4,     0,     0,     6,     2,     2,     1,     4,     0,
-       0,     6,     2,     2,     1,     4,     4,     2,     1,     4,
-       2,     2,     1,     4,     2,     2,     1,     0,     5,     1,
-       4,     3,     2,     2,     3,     1,     3,     0,     3,     2,
-       0,     4,     1,     1,     2,     2,     0,     2,     0,     3,
-       0,     2,     0,     2,     1,     3,     2,     0,     2,     3,
-       2,     0,     2,     2,     0,     2,     0,     6,     5,     5,
-       5,     4,     0,     2,     0,     5,     5,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     2,     1,     1,     1,
-       2,     2,     1,     2,     4,     0,     2,     2,     0,     4,
-       2,     0,     1,     0,     1,     3,     0,     5,     1,     4,
-       0,     3,     2,     5,     1,     1,     0,     2,     2,     0,
-       1,     0,     3,     1,     1,     1,     1,     1,     1,     1,
+       2,     0,     4,     2,     2,     2,     2,     2,     2,     2,
+       0,     0,     9,     0,     0,     4,     2,     0,     4,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     5,     1,     0,
+       5,     0,     0,     4,     2,     2,     2,     2,     2,     2,
+       2,     0,     4,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     5,     1,     4,     0,     0,     4,     2,     2,
+       2,     2,     0,     4,     0,     5,     0,     5,     1,     4,
+       0,     0,     4,     2,     0,     4,     2,     2,     2,     2,
+       2,     0,     5,     1,     4,     0,     0,     4,     2,     2,
+       2,     2,     0,     4,     0,     4,     0,     5,     1,     4,
+       2,     1,     0,     3,     2,     2,     2,     2,     2,     2,
+       2,     2,     0,     0,     9,     2,     1,     0,     0,     9,
+       0,     0,     4,     2,     2,     2,     2,     0,     4,     0,
+       4,     0,     4,     2,     1,     0,     5,     0,     5,     1,
+       4,     0,     2,     2,     2,     2,     0,     4,     0,     4,
+       0,     4,     0,     4,     0,     0,     8,     0,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     0,     8,     0,
+       5,     1,     4,     0,     0,     4,     2,     2,     2,     2,
+       0,     4,     0,     4,     0,     4,     0,     0,     9,     0,
+       2,     2,     4,     2,     1,     1,     2,     1,     1,     1,
+       3,     0,     4,     1,     4,     0,     2,     3,     2,     2,
+       2,     2,     2,     2,     0,     4,     1,     4,     0,     2,
+       3,     2,     2,     0,     4,     1,     4,     0,     3,     2,
+       2,     2,     2,     2,     2,     0,     5,     1,     4,     0,
+       2,     2,     4,     0,     0,     6,     2,     2,     1,     4,
+       0,     0,     6,     2,     2,     1,     4,     4,     2,     1,
+       4,     2,     2,     1,     4,     2,     2,     1,     0,     5,
+       1,     4,     3,     2,     2,     3,     1,     3,     0,     3,
+       2,     0,     4,     1,     1,     2,     2,     0,     2,     0,
+       3,     0,     2,     0,     2,     1,     3,     2,     0,     2,
+       3,     2,     0,     2,     2,     0,     2,     0,     6,     5,
+       5,     5,     4,     0,     2,     0,     5,     5,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     1,     1,
+       1,     2,     2,     1,     2,     4,     0,     2,     2,     0,
+       4,     2,     0,     1,     0,     1,     3,     0,     5,     1,
+       4,     0,     3,     2,     5,     1,     1,     0,     2,     2,
+       0,     1,     0,     3,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -2148,7 +2104,7 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1
+       1,     1,     1,     1,     1
 };
 
 
@@ -2682,6 +2638,7 @@
     case 350: /* deviation_opt_stmt  */
 
       { if (read_all) {
+                ly_set_free(((*yyvaluep).nodes).deviation->dflt_check);
                 free(((*yyvaluep).nodes).deviation);
               }
             }
@@ -5329,22 +5286,38 @@
   case 290:
 
     { if (read_all) {
+                                             int i;
+
                                              if ((yyvsp[0].nodes).node.ptr_leaflist->flags & LYS_CONFIG_R) {
                                                /* RFC 6020, 7.7.5 - ignore ordering when the list represents state data
                                                 * ignore oredering MASK - 0x7F
                                                 */
-                                             (yyvsp[0].nodes).node.ptr_leaflist->flags &= 0x7F;
-                                           }
+                                               (yyvsp[0].nodes).node.ptr_leaflist->flags &= 0x7F;
+                                             }
                                            if ((yyvsp[0].nodes).node.ptr_leaflist->max && (yyvsp[0].nodes).node.ptr_leaflist->min > (yyvsp[0].nodes).node.ptr_leaflist->max) {
                                              LOGVAL(LYE_SPEC, LY_VLOG_LYS, (yyvsp[0].nodes).node.ptr_leaflist, "\"min-elements\" is bigger than \"max-elements\".");
                                              YYABORT;
                                            }
-                                           if (!((yyvsp[0].nodes).node.flag & LYS_TYPE_DEF)) {
-                                             LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_LYS, (yyvsp[0].nodes).node.ptr_leaflist, "type", "leaf-list");
-                                             YYABORT;
+                                             if (!((yyvsp[0].nodes).node.flag & LYS_TYPE_DEF)) {
+                                               LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_LYS, (yyvsp[0].nodes).node.ptr_leaflist, "type", "leaf-list");
+                                               YYABORT;
+                                             }
+                                             if ((yyvsp[0].nodes).node.ptr_leaflist->dflt_size && (yyvsp[0].nodes).node.ptr_leaflist->min) {
+                                               LOGVAL(LYE_INCHILDSTMT, LY_VLOG_NONE, NULL, "min-elements", "leaf-list");
+                                               LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL,
+                                                      "The \"min-elements\" statement with non-zero value is forbidden on leaf-lists with the \"default\" statement.");
+                                               YYABORT;
+                                             }
+
+                                             /* check default value (if not defined, there still could be some restrictions
+                                              * that need to be checked against a default value from a derived type) */
+                                             for (i = 0; i < (yyvsp[0].nodes).node.ptr_leaflist->dflt_size; i++) {
+                                               if (unres_schema_add_str(module, unres, &(yyvsp[0].nodes).node.ptr_leaflist->type, UNRES_TYPE_DFLT, (yyvsp[0].nodes).node.ptr_leaflist->dflt[i]) == -1) {
+                                                 YYABORT;
+                                               }
+                                             }
                                            }
                                          }
-                                       }
 
     break;
 
@@ -5368,6 +5341,17 @@
                                    YYABORT;
                                  }
                                }
+                               if (size_arrays->node[size_arrays->next].dflt) {
+                                 if (trg->version < 2) {
+                                   LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
+                                   YYABORT;
+                                 }
+                                 (yyval.nodes).node.ptr_leaflist->dflt = calloc(size_arrays->node[size_arrays->next].dflt, sizeof *(yyval.nodes).node.ptr_leaflist->dflt);
+                                 if (!(yyval.nodes).node.ptr_leaflist->dflt) {
+                                   LOGMEM;
+                                   YYABORT;
+                                 }
+                               }
                                store_flags((struct lys_node *)(yyval.nodes).node.ptr_leaflist, size_arrays->node[size_arrays->next].flags, config_inherit);
                                size_arrays->next++;
                              } else {
@@ -5431,12 +5415,34 @@
 
   case 299:
 
-    { if (read_all && yang_read_units(trg, (yyvsp[-1].nodes).node.ptr_leaflist, s, LEAF_LIST_KEYWORD)) {YYABORT;} s = NULL; }
+    { if (read_all) {
+                                         int i;
+
+                                         /* check for duplicity */
+                                         for (i = 0; i < (yyvsp[-1].nodes).node.ptr_leaflist->dflt_size; i++) {
+                                           if (ly_strequal((yyvsp[-1].nodes).node.ptr_leaflist->dflt[i], s, 0)) {
+                                             LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, s, "default");
+                                             LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Duplicated default value \"%s\".", s);
+                                             free(s);
+                                             YYABORT;
+                                           }
+                                         }
+                                         (yyvsp[-1].nodes).node.ptr_leaflist->dflt[(yyvsp[-1].nodes).node.ptr_leaflist->dflt_size++] = lydict_insert_zc(module->ctx, s);
+                                       } else {
+                                         size_arrays->node[(yyvsp[-1].nodes).index].dflt++;
+                                       }
+                                     }
 
     break;
 
   case 300:
 
+    { if (read_all && yang_read_units(trg, (yyvsp[-1].nodes).node.ptr_leaflist, s, LEAF_LIST_KEYWORD)) {YYABORT;} s = NULL; }
+
+    break;
+
+  case 301:
+
     { if (read_all) {
                                       actual = (yyvsp[-1].nodes).node.ptr_leaflist;
                                       actual_type = LEAF_LIST_KEYWORD;
@@ -5447,7 +5453,7 @@
 
     break;
 
-  case 302:
+  case 303:
 
     { if (!read_all) {
                                              if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_CONFIG_MASK, "config", "leaf-list", (yyvsp[0].i), 0)) {
@@ -5458,7 +5464,7 @@
 
     break;
 
-  case 303:
+  case 304:
 
     { if (read_all) {
                                               if ((yyvsp[-1].nodes).node.flag & LYS_MIN_ELEMENTS) {
@@ -5477,7 +5483,7 @@
 
     break;
 
-  case 304:
+  case 305:
 
     { if (read_all) {
                                               if ((yyvsp[-1].nodes).node.flag & LYS_MAX_ELEMENTS) {
@@ -5496,7 +5502,7 @@
 
     break;
 
-  case 305:
+  case 306:
 
     { if (read_all) {
                                             if ((yyvsp[-1].nodes).node.flag & LYS_ORDERED_MASK) {
@@ -5513,7 +5519,7 @@
 
     break;
 
-  case 306:
+  case 307:
 
     { if (!read_all) {
                                              if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_STATUS_MASK, "status", "leaf-list", (yyvsp[0].i), 0)) {
@@ -5524,7 +5530,7 @@
 
     break;
 
-  case 307:
+  case 308:
 
     { if (read_all && yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_leaflist, s, "leaf-list")) {
                                              YYABORT;
@@ -5534,7 +5540,7 @@
 
     break;
 
-  case 308:
+  case 309:
 
     { if (read_all && yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_leaflist, s, "leaf-list")) {
                                            YYABORT;
@@ -5544,7 +5550,7 @@
 
     break;
 
-  case 309:
+  case 310:
 
     { if (read_all) {
                                                    if (!(actual = yang_read_node(trg,actual,s,LYS_LIST,sizeof(struct lys_node_list)))) {YYABORT;}
@@ -5555,7 +5561,7 @@
 
     break;
 
-  case 310:
+  case 311:
 
     { if (read_all) {
                                  if ((yyvsp[0].nodes).node.ptr_list->flags & LYS_CONFIG_R) {
@@ -5583,7 +5589,7 @@
 
     break;
 
-  case 312:
+  case 313:
 
     { if (read_all) {
                           (yyval.nodes).node.ptr_list = actual;
@@ -5631,13 +5637,13 @@
 
     break;
 
-  case 313:
+  case 314:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list; actual_type = LIST_KEYWORD; }
 
     break;
 
-  case 315:
+  case 316:
 
     { if (read_all) {
                                        if (yang_read_if_feature(trg, (yyvsp[-1].nodes).node.ptr_list, s, unres, LIST_KEYWORD)) {YYABORT;}
@@ -5649,7 +5655,7 @@
 
     break;
 
-  case 316:
+  case 317:
 
     { if (read_all) {
                                  actual = (yyvsp[-1].nodes).node.ptr_list;
@@ -5661,7 +5667,7 @@
 
     break;
 
-  case 318:
+  case 319:
 
     { if (read_all) {
                                 if ((yyvsp[-1].nodes).node.ptr_list->keys) {
@@ -5679,7 +5685,7 @@
 
     break;
 
-  case 319:
+  case 320:
 
     { if (read_all) {
                                    (yyvsp[-1].nodes).node.ptr_list->unique[(yyvsp[-1].nodes).node.ptr_list->unique_size++].expr = (const char **)s;
@@ -5692,7 +5698,7 @@
 
     break;
 
-  case 320:
+  case 321:
 
     { if (!read_all) {
                                         if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_CONFIG_MASK, "config", "list", (yyvsp[0].i), 0)) {
@@ -5703,7 +5709,7 @@
 
     break;
 
-  case 321:
+  case 322:
 
     { if (read_all) {
                                          if ((yyvsp[-1].nodes).node.flag & LYS_MIN_ELEMENTS) {
@@ -5722,7 +5728,7 @@
 
     break;
 
-  case 322:
+  case 323:
 
     { if (read_all) {
                                          if ((yyvsp[-1].nodes).node.flag & LYS_MAX_ELEMENTS) {
@@ -5741,7 +5747,7 @@
 
     break;
 
-  case 323:
+  case 324:
 
     { if (read_all) {
                                        if ((yyvsp[-1].nodes).node.flag & LYS_ORDERED_MASK) {
@@ -5758,7 +5764,7 @@
 
     break;
 
-  case 324:
+  case 325:
 
     { if (!read_all) {
                                         if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_STATUS_MASK, "status", "list", (yyvsp[0].i), 0)) {
@@ -5769,7 +5775,7 @@
 
     break;
 
-  case 325:
+  case 326:
 
     { if (read_all && yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_list, s, "list")) {
                                         YYABORT;
@@ -5779,7 +5785,7 @@
 
     break;
 
-  case 326:
+  case 327:
 
     { if (read_all && yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_list, s, "list")) {
                                       YYABORT;
@@ -5789,7 +5795,7 @@
 
     break;
 
-  case 327:
+  case 328:
 
     { if (read_all) {
                                             actual = (yyvsp[-1].nodes).node.ptr_list;
@@ -5801,7 +5807,7 @@
 
     break;
 
-  case 329:
+  case 330:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                    actual_type = LIST_KEYWORD;
@@ -5810,7 +5816,7 @@
 
     break;
 
-  case 331:
+  case 332:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                  actual_type = LIST_KEYWORD;
@@ -5819,7 +5825,7 @@
 
     break;
 
-  case 333:
+  case 334:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                    actual_type = LIST_KEYWORD;
@@ -5829,13 +5835,13 @@
 
     break;
 
-  case 334:
+  case 335:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 335:
+  case 336:
 
     { if (read_all) {
                                                        if (!(actual = yang_read_node(trg,actual,s,LYS_CHOICE,sizeof(struct lys_node_choice)))) {YYABORT;}
@@ -5849,7 +5855,7 @@
 
     break;
 
-  case 338:
+  case 339:
 
     { if (read_all) {
                               if ((yyvsp[0].nodes).choice.s && ((yyvsp[0].nodes).choice.ptr_choice->flags & LYS_MAND_TRUE)) {
@@ -5869,7 +5875,7 @@
 
     break;
 
-  case 340:
+  case 341:
 
     { if (read_all) {
                             (yyval.nodes).choice.ptr_choice = actual;
@@ -5895,19 +5901,19 @@
 
     break;
 
-  case 341:
+  case 342:
 
     { actual = (yyvsp[-1].nodes).choice.ptr_choice; actual_type = CHOICE_KEYWORD; }
 
     break;
 
-  case 342:
+  case 343:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 343:
+  case 344:
 
     { if (read_all) {
                                          if (yang_read_if_feature(trg, (yyvsp[-1].nodes).choice.ptr_choice,s, unres, CHOICE_KEYWORD)) {
@@ -5925,7 +5931,7 @@
 
     break;
 
-  case 344:
+  case 345:
 
     { if (read_all) {
                                       if ((yyvsp[-1].nodes).choice.s) {
@@ -5942,7 +5948,7 @@
 
     break;
 
-  case 345:
+  case 346:
 
     { if (!read_all) {
                                            if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_CONFIG_MASK, "config", "choice", (yyvsp[0].i), 0)) {
@@ -5955,7 +5961,7 @@
 
     break;
 
-  case 346:
+  case 347:
 
     { if (!read_all) {
                                       if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_MAND_MASK, "mandatory", "choice", (yyvsp[0].i), 0)) {
@@ -5968,7 +5974,7 @@
 
     break;
 
-  case 347:
+  case 348:
 
     { if (!read_all) {
                                           if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_STATUS_MASK, "status", "choice", (yyvsp[0].i), 0)) {
@@ -5981,7 +5987,7 @@
 
     break;
 
-  case 348:
+  case 349:
 
     { if (read_all) {
                                           if (yang_read_description(trg, (yyvsp[-1].nodes).choice.ptr_choice, s, "choice")) {
@@ -5995,7 +6001,7 @@
 
     break;
 
-  case 349:
+  case 350:
 
     { if (read_all) {
                                         if (yang_read_reference(trg, (yyvsp[-1].nodes).choice.ptr_choice, s, "choice")) {
@@ -6009,7 +6015,7 @@
 
     break;
 
-  case 350:
+  case 351:
 
     { actual = (yyvsp[-1].nodes).choice.ptr_choice;
                                             actual_type = CHOICE_KEYWORD;
@@ -6021,13 +6027,13 @@
 
     break;
 
-  case 351:
+  case 352:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 360:
+  case 361:
 
     { if (read_all) {
                                                    if (!(actual = yang_read_node(trg,actual,s,LYS_CASE,sizeof(struct lys_node_case)))) {YYABORT;}
@@ -6038,7 +6044,7 @@
 
     break;
 
-  case 364:
+  case 365:
 
     { if (read_all) {
                           (yyval.nodes).cs = actual;
@@ -6063,13 +6069,13 @@
 
     break;
 
-  case 365:
+  case 366:
 
     { actual = (yyvsp[-1].nodes).cs; actual_type = CASE_KEYWORD; }
 
     break;
 
-  case 367:
+  case 368:
 
     { if (read_all) {
                                        if (yang_read_if_feature(trg, (yyvsp[-1].nodes).cs, s, unres, CASE_KEYWORD)) {YYABORT;}
@@ -6081,7 +6087,7 @@
 
     break;
 
-  case 368:
+  case 369:
 
     { if (!read_all) {
                                         if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_STATUS_MASK, "status", "case", (yyvsp[0].i), 0)) {
@@ -6092,7 +6098,7 @@
 
     break;
 
-  case 369:
+  case 370:
 
     { if (read_all && yang_read_description(trg, (yyvsp[-1].nodes).cs, s, "case")) {
                                         YYABORT;
@@ -6102,7 +6108,7 @@
 
     break;
 
-  case 370:
+  case 371:
 
     { if (read_all && yang_read_reference(trg, (yyvsp[-1].nodes).cs, s, "case")) {
                                       YYABORT;
@@ -6112,7 +6118,7 @@
 
     break;
 
-  case 371:
+  case 372:
 
     { actual = (yyvsp[-1].nodes).cs;
                                    actual_type = CASE_KEYWORD;
@@ -6121,7 +6127,7 @@
 
     break;
 
-  case 373:
+  case 374:
 
     { if (read_all) {
                                                        if (!(actual = yang_read_node(trg,actual,s,LYS_ANYXML,sizeof(struct lys_node_anydata)))) {YYABORT;}
@@ -6136,7 +6142,7 @@
 
     break;
 
-  case 375:
+  case 376:
 
     { if (read_all) {
                                                          if (!(actual = yang_read_node(trg, actual, s, LYS_ANYDATA, sizeof(struct lys_node_anydata)))) {YYABORT;}
@@ -6151,7 +6157,7 @@
 
     break;
 
-  case 379:
+  case 380:
 
     { if (read_all) {
                             (yyval.nodes).node.ptr_anydata = actual;
@@ -6183,13 +6189,13 @@
 
     break;
 
-  case 380:
+  case 381:
 
     { actual = (yyvsp[-1].nodes).node.ptr_anydata; actual_type = (yyvsp[-1].nodes).node.flag; }
 
     break;
 
-  case 382:
+  case 383:
 
     { if (read_all) {
                                          if (yang_read_if_feature(trg, (yyvsp[-1].nodes).node.ptr_anydata, s, unres, (yyvsp[-1].nodes).node.flag)) {YYABORT;}
@@ -6201,7 +6207,7 @@
 
     break;
 
-  case 383:
+  case 384:
 
     { if (read_all) {
                                    actual = (yyvsp[-1].nodes).node.ptr_anydata;
@@ -6213,7 +6219,7 @@
 
     break;
 
-  case 385:
+  case 386:
 
     { if (!read_all) {
                                           if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_CONFIG_MASK, "config",
@@ -6225,7 +6231,7 @@
 
     break;
 
-  case 386:
+  case 387:
 
     { if (!read_all) {
                                              if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_MAND_MASK, "mandatory",
@@ -6237,7 +6243,7 @@
 
     break;
 
-  case 387:
+  case 388:
 
     { if (!read_all) {
                                           if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_STATUS_MASK, "status",
@@ -6249,7 +6255,7 @@
 
     break;
 
-  case 388:
+  case 389:
 
     { if (read_all && yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_anydata, s, ((yyvsp[-1].nodes).node.flag == ANYXML_KEYWORD) ? "anyxml" : "anydata")) {
                                           YYABORT;
@@ -6259,7 +6265,7 @@
 
     break;
 
-  case 389:
+  case 390:
 
     { if (read_all && yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_anydata, s, ((yyvsp[-1].nodes).node.flag == ANYXML_KEYWORD) ? "anyxml" : "anydata")) {
                                         YYABORT;
@@ -6269,7 +6275,7 @@
 
     break;
 
-  case 390:
+  case 391:
 
     { if (read_all) {
                                                        if (!(actual = yang_read_node(trg,actual,s,LYS_USES,sizeof(struct lys_node_uses)))) {YYABORT;}
@@ -6283,7 +6289,7 @@
 
     break;
 
-  case 391:
+  case 392:
 
     { if (read_all) {
                         if (unres_schema_add_node(trg, unres, actual, UNRES_USES, NULL) == -1) {
@@ -6294,7 +6300,7 @@
 
     break;
 
-  case 394:
+  case 395:
 
     { if (read_all) {
                           (yyval.nodes).uses.ptr_uses = actual;
@@ -6334,13 +6340,13 @@
 
     break;
 
-  case 395:
+  case 396:
 
     { actual = (yyvsp[-1].nodes).uses.ptr_uses; actual_type = USES_KEYWORD; }
 
     break;
 
-  case 397:
+  case 398:
 
     { if (read_all) {
                                        if (yang_read_if_feature(trg, (yyvsp[-1].nodes).uses.ptr_uses, s, unres, USES_KEYWORD)) {YYABORT;}
@@ -6352,7 +6358,7 @@
 
     break;
 
-  case 398:
+  case 399:
 
     { if (!read_all) {
                                         if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_STATUS_MASK, "status", "uses", (yyvsp[0].i), 0)) {
@@ -6363,7 +6369,7 @@
 
     break;
 
-  case 399:
+  case 400:
 
     { if (read_all && yang_read_description(trg, (yyvsp[-1].nodes).uses.ptr_uses, s, "uses")) {
                                         YYABORT;
@@ -6373,7 +6379,7 @@
 
     break;
 
-  case 400:
+  case 401:
 
     { if (read_all && yang_read_reference(trg, (yyvsp[-1].nodes).uses.ptr_uses, s, "uses")) {
                                       YYABORT;
@@ -6383,7 +6389,7 @@
 
     break;
 
-  case 401:
+  case 402:
 
     { if (read_all) {
                                    actual = (yyvsp[-1].nodes).uses.ptr_uses;
@@ -6395,7 +6401,7 @@
 
     break;
 
-  case 403:
+  case 404:
 
     { if (read_all) {
                                          actual = (yyvsp[-1].nodes).uses.ptr_uses;
@@ -6412,7 +6418,7 @@
 
     break;
 
-  case 405:
+  case 406:
 
     { if (read_all) {
                                                    if (!(actual = yang_read_refine(trg, actual, s))) {
@@ -6424,7 +6430,7 @@
 
     break;
 
-  case 411:
+  case 412:
 
     { if (read_all) {
                                   (yyval.nodes).refine = actual;
@@ -6437,6 +6443,36 @@
                                     }
                                     (yyval.nodes).refine->target_type = LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYXML;
                                   }
+                                  if (size_arrays->node[size_arrays->next].dflt) {
+                                    (yyval.nodes).refine->dflt = calloc(size_arrays->node[size_arrays->next].dflt, sizeof *(yyval.nodes).refine->dflt);
+                                    if (!(yyval.nodes).refine->dflt) {
+                                      LOGMEM;
+                                      YYABORT;
+                                    }
+                                    if (size_arrays->node[size_arrays->next].dflt > 1) {
+                                      if (trg->version < 2) {
+                                        LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "default", "refine");
+                                        YYABORT;
+                                      }
+                                      (yyval.nodes).refine->target_type = LYS_LEAFLIST;
+                                    } else {
+                                      if ((yyval.nodes).refine->target_type) {
+                                        if (trg->version < 2) {
+                                          (yyval.nodes).refine->target_type &= (LYS_LEAF | LYS_CHOICE);
+                                        } else {
+                                          /* YANG 1.1 */
+                                          (yyval.nodes).refine->target_type &= (LYS_LEAF | LYS_LEAFLIST | LYS_CHOICE);
+                                        }
+                                      } else {
+                                        if (trg->version < 2) {
+                                          (yyval.nodes).refine->target_type = LYS_LEAF | LYS_CHOICE;
+                                        } else {
+                                          /* YANG 1.1 */
+                                          (yyval.nodes).refine->target_type = LYS_LEAF | LYS_LEAFLIST | LYS_CHOICE;
+                                        }
+                                      }
+                                    }
+                                  }
                                   size_arrays->next++;
                                 } else {
                                   (yyval.nodes).index = size_arrays->size;
@@ -6449,7 +6485,7 @@
 
     break;
 
-  case 412:
+  case 413:
 
     { if (read_all) {
                                          actual = (yyvsp[-2].nodes).refine;
@@ -6461,7 +6497,7 @@
 
     break;
 
-  case 413:
+  case 414:
 
     { if (read_all) {
                                              if ((yyvsp[-1].nodes).refine->target_type) {
@@ -6490,36 +6526,32 @@
 
     break;
 
-  case 414:
+  case 415:
 
     { if (read_all) {
-                                            if ((yyvsp[-1].nodes).refine->target_type) {
-                                              if ((yyvsp[-1].nodes).refine->target_type & (LYS_LEAF | LYS_CHOICE)) {
-                                                (yyvsp[-1].nodes).refine->target_type &= (LYS_LEAF | LYS_CHOICE);
-                                                if ((yyvsp[-1].nodes).refine->mod.dflt) {
-                                                  LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "default", "refine");
-                                                  free(s);
-                                                  YYABORT;
+                                            int i;
+
+                                            (yyvsp[-1].nodes).refine->dflt[(yyvsp[-1].nodes).refine->dflt_size] = lydict_insert_zc(trg->ctx, s);
+                                            /* check for duplicity */
+                                            for (i = 0; i < (yyvsp[-1].nodes).refine->dflt_size; ++i) {
+                                                if (ly_strequal((yyvsp[-1].nodes).refine->dflt[i], (yyvsp[-1].nodes).refine->dflt[(yyvsp[-1].nodes).refine->dflt_size], 1)) {
+                                                    LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, (yyvsp[-1].nodes).refine->dflt[(yyvsp[-1].nodes).refine->dflt_size], "default");
+                                                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Duplicated default value \"%s\".", (yyvsp[-1].nodes).refine->dflt[(yyvsp[-1].nodes).refine->dflt_size]);
+                                                    (yyvsp[-1].nodes).refine->dflt_size++;
+                                                    YYABORT;
                                                 }
-                                                (yyvsp[-1].nodes).refine->mod.dflt = lydict_insert_zc(trg->ctx, s);
-                                              } else {
-                                                free(s);
-                                                LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "default", "refine");
-                                                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Invalid refine target nodetype for the substatements.");
-                                                YYABORT;
-                                              }
-                                            } else {
-                                              (yyvsp[-1].nodes).refine->target_type = LYS_LEAF | LYS_CHOICE;
-                                              (yyvsp[-1].nodes).refine->mod.dflt = lydict_insert_zc(trg->ctx, s);
                                             }
+                                            (yyvsp[-1].nodes).refine->dflt_size++;
                                             s = NULL;
                                             (yyval.nodes) = (yyvsp[-1].nodes);
+                                          } else {
+                                            size_arrays->node[(yyvsp[-1].nodes).index].dflt++;
                                           }
                                         }
 
     break;
 
-  case 415:
+  case 416:
 
     { if (read_all) {
                                            if ((yyvsp[-1].nodes).refine->target_type) {
@@ -6543,7 +6575,7 @@
 
     break;
 
-  case 416:
+  case 417:
 
     { if (read_all) {
                                               if ((yyvsp[-1].nodes).refine->target_type) {
@@ -6567,7 +6599,7 @@
 
     break;
 
-  case 417:
+  case 418:
 
     { if (read_all) {
                                                  if ((yyvsp[-1].nodes).refine->target_type) {
@@ -6595,7 +6627,7 @@
 
     break;
 
-  case 418:
+  case 419:
 
     { if (read_all) {
                                                  if ((yyvsp[-1].nodes).refine->target_type) {
@@ -6623,7 +6655,7 @@
 
     break;
 
-  case 419:
+  case 420:
 
     { if (read_all && yang_read_description(trg, (yyvsp[-1].nodes).refine, s, "refine")) {
                                                 YYABORT;
@@ -6633,7 +6665,7 @@
 
     break;
 
-  case 420:
+  case 421:
 
     { if (read_all && yang_read_reference(trg, (yyvsp[-1].nodes).refine, s, "refine")) {
                                               YYABORT;
@@ -6643,7 +6675,7 @@
 
     break;
 
-  case 421:
+  case 422:
 
     { if (read_all) {
                                                                 if (!(actual = yang_read_augment(trg, actual, s))) {
@@ -6656,7 +6688,7 @@
 
     break;
 
-  case 422:
+  case 423:
 
     { if (read_all && !((yyvsp[0].nodes).node.flag & LYS_DATADEF)){
                                             LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "data-def or case", "uses/augment");
@@ -6666,7 +6698,7 @@
 
     break;
 
-  case 426:
+  case 427:
 
     { if (read_all) {
                                                       if (!(actual = yang_read_augment(trg, NULL, s))) {
@@ -6679,7 +6711,7 @@
 
     break;
 
-  case 427:
+  case 428:
 
     { if (read_all) {
                                        if (!((yyvsp[0].nodes).node.flag & LYS_DATADEF)){
@@ -6694,7 +6726,7 @@
 
     break;
 
-  case 429:
+  case 430:
 
     { if (read_all) {
                              (yyval.nodes).node.ptr_augment = actual;
@@ -6720,13 +6752,13 @@
 
     break;
 
-  case 430:
+  case 431:
 
     { actual = (yyvsp[-1].nodes).node.ptr_augment; actual_type = AUGMENT_KEYWORD; }
 
     break;
 
-  case 432:
+  case 433:
 
     { if (read_all) {
                                           if (yang_read_if_feature(trg, (yyvsp[-1].nodes).node.ptr_augment, s, unres, AUGMENT_KEYWORD)) {YYABORT;}
@@ -6738,7 +6770,7 @@
 
     break;
 
-  case 433:
+  case 434:
 
     { if (read_all) {
                                       /* hack - flags is bit field, so its address is taken as a member after
@@ -6752,7 +6784,7 @@
 
     break;
 
-  case 434:
+  case 435:
 
     { if (read_all && yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_augment, s, "augment")) {
                                            YYABORT;
@@ -6762,7 +6794,7 @@
 
     break;
 
-  case 435:
+  case 436:
 
     { if (read_all && yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_augment, s, "augment")) {
                                          YYABORT;
@@ -6772,7 +6804,7 @@
 
     break;
 
-  case 436:
+  case 437:
 
     { if (read_all) {
                                         actual = (yyvsp[-1].nodes).node.ptr_augment;
@@ -6784,13 +6816,13 @@
 
     break;
 
-  case 437:
+  case 438:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 438:
+  case 439:
 
     { if (read_all) {
                                       actual = (yyvsp[-1].nodes).node.ptr_augment;
@@ -6802,13 +6834,13 @@
 
     break;
 
-  case 439:
+  case 440:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 440:
+  case 441:
 
     { if (read_all) {
                                     actual = (yyvsp[-1].nodes).node.ptr_augment;
@@ -6820,13 +6852,13 @@
 
     break;
 
-  case 441:
+  case 442:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 444:
+  case 445:
 
     { if (read_all) {
                                                  if (!(actual = yang_read_action(trg, actual, s))) {
@@ -6840,13 +6872,13 @@
 
     break;
 
-  case 445:
+  case 446:
 
     { config_inherit = ENABLE_INHERIT; }
 
     break;
 
-  case 446:
+  case 447:
 
     { if (read_all) {
                                                  if (!(actual = yang_read_node(trg, NULL, s, LYS_RPC, sizeof(struct lys_node_rpc_action)))) {
@@ -6860,13 +6892,13 @@
 
     break;
 
-  case 447:
+  case 448:
 
     { config_inherit = ENABLE_INHERIT; }
 
     break;
 
-  case 450:
+  case 451:
 
     { if (read_all) {
                          (yyval.nodes).node.ptr_rpc = actual;
@@ -6899,7 +6931,7 @@
 
     break;
 
-  case 451:
+  case 452:
 
     { if (read_all) {
                                       if (yang_read_if_feature(trg, (yyvsp[-1].nodes).node.ptr_rpc, s, unres, RPC_KEYWORD)) {YYABORT;}
@@ -6911,7 +6943,7 @@
 
     break;
 
-  case 452:
+  case 453:
 
     { if (!read_all) {
                                        if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_STATUS_MASK, "status", "rpc", (yyvsp[0].i), 0)) {
@@ -6922,7 +6954,7 @@
 
     break;
 
-  case 453:
+  case 454:
 
     { if (read_all && yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_rpc, s, "rpc")) {
                                        YYABORT;
@@ -6932,7 +6964,7 @@
 
     break;
 
-  case 454:
+  case 455:
 
     { if (read_all && yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_rpc, s, "rpc")) {
                                      YYABORT;
@@ -6942,7 +6974,7 @@
 
     break;
 
-  case 455:
+  case 456:
 
     { if (read_all) {
                                            actual = (yyvsp[-1].nodes).node.ptr_rpc;
@@ -6954,7 +6986,7 @@
 
     break;
 
-  case 457:
+  case 458:
 
     { actual = (yyvsp[-1].nodes).node.ptr_rpc;
                                   actual_type = RPC_KEYWORD;
@@ -6963,7 +6995,7 @@
 
     break;
 
-  case 459:
+  case 460:
 
     { if (read_all) {
                                  if ((yyvsp[-1].nodes).node.flag & LYS_RPC_INPUT) {
@@ -6979,13 +7011,13 @@
 
     break;
 
-  case 460:
+  case 461:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 461:
+  case 462:
 
     { if (read_all) {
                                   if ((yyvsp[-1].nodes).node.flag & LYS_RPC_OUTPUT) {
@@ -7001,13 +7033,13 @@
 
     break;
 
-  case 462:
+  case 463:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 463:
+  case 464:
 
     { if (read_all) {
                                      s = strdup("input");
@@ -7025,7 +7057,7 @@
 
     break;
 
-  case 464:
+  case 465:
 
     { if (read_all && !((yyvsp[0].nodes).node.flag & LYS_DATADEF)) {
                                           LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, "data-def", "input");
@@ -7035,7 +7067,7 @@
 
     break;
 
-  case 466:
+  case 467:
 
     { if (read_all) {
                                   (yyval.nodes).node.ptr_inout = actual;
@@ -7071,7 +7103,7 @@
 
     break;
 
-  case 467:
+  case 468:
 
     { if (read_all) {
                                          actual = (yyvsp[-1].nodes).node.ptr_inout;
@@ -7083,7 +7115,7 @@
 
     break;
 
-  case 469:
+  case 470:
 
     { if (read_all) {
                                                     actual = (yyvsp[-1].nodes).node.ptr_inout;
@@ -7095,7 +7127,7 @@
 
     break;
 
-  case 471:
+  case 472:
 
     { actual = (yyvsp[-1].nodes).node.ptr_inout;
                                            actual_type = INPUT_KEYWORD;
@@ -7104,7 +7136,7 @@
 
     break;
 
-  case 473:
+  case 474:
 
     { if (read_all) {
                                              actual = (yyvsp[-1].nodes).node.ptr_inout;
@@ -7116,13 +7148,13 @@
 
     break;
 
-  case 474:
+  case 475:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 475:
+  case 476:
 
     { if (read_all) {
                                        s = strdup("output");
@@ -7140,7 +7172,7 @@
 
     break;
 
-  case 476:
+  case 477:
 
     { if (read_all && !((yyvsp[0].nodes).node.flag & LYS_DATADEF)) {
                                            LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, "data-def", "output");
@@ -7150,7 +7182,7 @@
 
     break;
 
-  case 478:
+  case 479:
 
     { if (read_all) {
                                                                    if (!(actual = yang_read_node(trg, NULL, s, LYS_NOTIF, sizeof(struct lys_node_notif)))) {
@@ -7163,13 +7195,13 @@
 
     break;
 
-  case 479:
+  case 480:
 
     { config_inherit = ENABLE_INHERIT; }
 
     break;
 
-  case 480:
+  case 481:
 
     { if (read_all) {
                           size_arrays->next++;
@@ -7178,7 +7210,7 @@
 
     break;
 
-  case 482:
+  case 483:
 
     { if (read_all) {
                                   (yyval.nodes).notif = actual;
@@ -7221,7 +7253,7 @@
 
     break;
 
-  case 483:
+  case 484:
 
     { if (read_all) {
                                       actual = (yyvsp[-1].nodes).notif;
@@ -7233,7 +7265,7 @@
 
     break;
 
-  case 485:
+  case 486:
 
     { if (read_all) {
                                                if (yang_read_if_feature(trg, (yyvsp[-1].nodes).notif, s, unres, NOTIFICATION_KEYWORD)) {YYABORT;}
@@ -7245,7 +7277,7 @@
 
     break;
 
-  case 486:
+  case 487:
 
     { if (!read_all) {
                                                 if (yang_check_flags(&size_arrays->node[(yyvsp[-1].nodes).index].flags, LYS_STATUS_MASK, "status", "notification", (yyvsp[0].i), 0)) {
@@ -7256,7 +7288,7 @@
 
     break;
 
-  case 487:
+  case 488:
 
     { if (read_all && yang_read_description(trg, (yyvsp[-1].nodes).notif, s, "notification")) {
                                                 YYABORT;
@@ -7266,7 +7298,7 @@
 
     break;
 
-  case 488:
+  case 489:
 
     { if (read_all && yang_read_reference(trg, (yyvsp[-1].nodes).notif, s, "notification")) {
                                               YYABORT;
@@ -7276,7 +7308,7 @@
 
     break;
 
-  case 489:
+  case 490:
 
     { if (read_all) {
                                                     actual = (yyvsp[-1].nodes).notif;
@@ -7288,7 +7320,7 @@
 
     break;
 
-  case 491:
+  case 492:
 
     { actual = (yyvsp[-1].nodes).notif;
                                            actual_type = NOTIFICATION_KEYWORD;
@@ -7297,7 +7329,7 @@
 
     break;
 
-  case 493:
+  case 494:
 
     { actual = (yyvsp[-1].nodes).notif;
                                            actual_type = NOTIFICATION_KEYWORD;
@@ -7306,7 +7338,7 @@
 
     break;
 
-  case 495:
+  case 496:
 
     { if (read_all) {
                                                             if (!(actual = yang_read_deviation(trg, s))) {
@@ -7319,23 +7351,24 @@
 
     break;
 
-  case 496:
+  case 497:
 
     { if (read_all) {
                                             if (actual_type == DEVIATION_KEYWORD) {
                                               LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "deviate", "deviation");
                                               YYABORT;
                                             }
-                                            if (yang_check_deviation(trg, actual, unres)) {
+                                            if (yang_check_deviation(trg, (yyvsp[0].nodes).deviation->dflt_check, unres)) {
                                               YYABORT;
                                             }
+                                            ly_set_free((yyvsp[0].nodes).deviation->dflt_check);
                                             free((yyvsp[0].nodes).deviation);
                                           }
                                         }
 
     break;
 
-  case 498:
+  case 499:
 
     { if (read_all) {
                                (yyval.nodes).deviation = actual;
@@ -7344,6 +7377,7 @@
                                  (yyval.nodes).deviation->deviation->deviate = calloc(size_arrays->node[size_arrays->next].deviate, sizeof *(yyval.nodes).deviation->deviation->deviate);
                                  if (!(yyval.nodes).deviation->deviation->deviate) {
                                    LOGMEM;
+                                   ly_set_free((yyval.nodes).deviation->dflt_check);
                                    YYABORT;
                                  }
                                }
@@ -7359,9 +7393,10 @@
 
     break;
 
-  case 499:
+  case 500:
 
     { if (read_all && yang_read_description(trg, (yyvsp[-1].nodes).deviation->deviation, s, "deviation")) {
+                                             ly_set_free((yyvsp[-1].nodes).deviation->dflt_check);
                                              free((yyvsp[-1].nodes).deviation);
                                              YYABORT;
                                            }
@@ -7371,9 +7406,10 @@
 
     break;
 
-  case 500:
+  case 501:
 
     { if (read_all && yang_read_reference(trg, (yyvsp[-1].nodes).deviation->deviation, s, "deviation")) {
+                                           ly_set_free((yyvsp[-1].nodes).deviation->dflt_check);
                                            free((yyvsp[-1].nodes).deviation);
                                            YYABORT;
                                          }
@@ -7383,7 +7419,7 @@
 
     break;
 
-  case 501:
+  case 502:
 
     { if (read_all) {
                                                                   actual = (yyvsp[-3].nodes).deviation;
@@ -7397,7 +7433,7 @@
 
     break;
 
-  case 504:
+  case 505:
 
     { if (read_all && yang_read_deviate_unsupported(actual)) {
                        YYABORT;
@@ -7406,7 +7442,7 @@
 
     break;
 
-  case 510:
+  case 511:
 
     { if (read_all && yang_read_deviate(actual, LY_DEVIATE_ADD)) {
                                          YYABORT;
@@ -7415,7 +7451,7 @@
 
     break;
 
-  case 514:
+  case 515:
 
     { if (read_all) {
                                  (yyval.nodes).deviation = actual;
@@ -7430,6 +7466,11 @@
                                       YYABORT;
                                     }
                                   }
+                                  if (size_arrays->node[size_arrays->next].dflt) {
+                                    if (yang_read_deviate_default(trg, actual, size_arrays->node[size_arrays->next].dflt)) {
+                                      YYABORT;
+                                    }
+                                  }
                                   size_arrays->next++;
                                } else {
                                  (yyval.nodes).index = size_arrays->size;
@@ -7442,7 +7483,7 @@
 
     break;
 
-  case 515:
+  case 516:
 
     { if (read_all) {
                                          if (yang_read_deviate_units(trg->ctx, (yyvsp[-1].nodes).deviation, s)) {
@@ -7455,7 +7496,7 @@
 
     break;
 
-  case 516:
+  case 517:
 
     { if (read_all) {
                                         actual = (yyvsp[-2].nodes).deviation;
@@ -7468,7 +7509,7 @@
 
     break;
 
-  case 517:
+  case 518:
 
     { if (read_all) {
                                           struct lys_node_list *list;
@@ -7489,20 +7530,22 @@
 
     break;
 
-  case 518:
+  case 519:
 
     { if (read_all) {
-                                           if (yang_read_deviate_default(trg->ctx, (yyvsp[-1].nodes).deviation, s)) {
+                                           if (yang_fill_deviate_default(trg->ctx, (yyvsp[-1].nodes).deviation, s)) {
                                              YYABORT;
                                            }
                                            s = NULL;
                                            (yyval.nodes) = (yyvsp[-1].nodes);
+                                         } else {
+                                           size_arrays->node[(yyvsp[-1].nodes).index].dflt++;
                                          }
                                        }
 
     break;
 
-  case 519:
+  case 520:
 
     { if (read_all) {
                                           if (yang_read_deviate_config((yyvsp[-1].nodes).deviation, (yyvsp[0].i))) {
@@ -7514,7 +7557,7 @@
 
     break;
 
-  case 520:
+  case 521:
 
     { if (read_all) {
                                              if (yang_read_deviate_mandatory((yyvsp[-1].nodes).deviation, (yyvsp[0].i))) {
@@ -7526,7 +7569,7 @@
 
     break;
 
-  case 521:
+  case 522:
 
     { if (read_all) {
                                                 if ((yyvsp[-1].nodes).deviation->deviate->min_set) {
@@ -7542,7 +7585,7 @@
 
     break;
 
-  case 522:
+  case 523:
 
     { if (read_all) {
                                                 if ((yyvsp[-1].nodes).deviation->deviate->max_set) {
@@ -7558,7 +7601,7 @@
 
     break;
 
-  case 523:
+  case 524:
 
     { if (read_all && yang_read_deviate(actual, LY_DEVIATE_DEL)) {
                                                YYABORT;
@@ -7570,6 +7613,28 @@
   case 527:
 
     { if (read_all) {
+              struct lys_node_leaflist *llist;
+              int i,j;
+
+              if ((yyvsp[-1].nodes).deviation->deviate->dflt_size && (yyvsp[-1].nodes).deviation->target->nodetype == LYS_LEAFLIST) {
+                /* consolidate the final list in the target after removing items from it */
+                llist = (struct lys_node_leaflist *)(yyvsp[-1].nodes).deviation->target;
+                for (i = j = 0; j < llist->dflt_size; j++) {
+                  llist->dflt[i] = llist->dflt[j];
+                  if (llist->dflt[i]) {
+                    i++;
+                  }
+                }
+                llist->dflt_size = i + 1;
+              }
+            }
+          }
+
+    break;
+
+  case 528:
+
+    { if (read_all) {
                                     (yyval.nodes).deviation = actual;
                                     actual_type = DELETE_KEYWORD;
                                     if (size_arrays->node[size_arrays->next].must) {
@@ -7582,6 +7647,11 @@
                                         YYABORT;
                                       }
                                     }
+                                    if (size_arrays->node[size_arrays->next].dflt) {
+                                      if (yang_read_deviate_default(trg, actual, size_arrays->node[size_arrays->next].dflt)) {
+                                        YYABORT;
+                                      }
+                                    }
                                     size_arrays->next++;
                                   } else {
                                     (yyval.nodes).index = size_arrays->size;
@@ -7594,7 +7664,7 @@
 
     break;
 
-  case 528:
+  case 529:
 
     { if (read_all) {
                                             if (yang_read_deviate_units(trg->ctx, (yyvsp[-1].nodes).deviation, s)) {
@@ -7607,7 +7677,7 @@
 
     break;
 
-  case 529:
+  case 530:
 
     { if (read_all) {
                                            if (yang_check_deviate_must(trg->ctx, (yyvsp[-2].nodes).deviation)) {
@@ -7623,7 +7693,7 @@
 
     break;
 
-  case 530:
+  case 531:
 
     { if (read_all) {
                                              if (yang_check_deviate_unique(trg, (yyvsp[-1].nodes).deviation, s)) {
@@ -7638,20 +7708,22 @@
 
     break;
 
-  case 531:
+  case 532:
 
     { if (read_all) {
-                                              if (yang_read_deviate_default(trg->ctx, (yyvsp[-1].nodes).deviation, s)) {
+                                              if (yang_fill_deviate_default(trg->ctx, (yyvsp[-1].nodes).deviation, s)) {
                                                 YYABORT;
                                               }
                                               s = NULL;
                                               (yyval.nodes) = (yyvsp[-1].nodes);
+                                            } else {
+                                              size_arrays->node[(yyvsp[-1].nodes).index].dflt++;
                                             }
                                           }
 
     break;
 
-  case 532:
+  case 533:
 
     { if (read_all && yang_read_deviate(actual, LY_DEVIATE_RPL)) {
                                                  YYABORT;
@@ -7660,28 +7732,41 @@
 
     break;
 
-  case 536:
+  case 537:
 
     { if (read_all) {
-                                    (yyval.nodes).deviation = actual;
-                                    actual_type = REPLACE_KEYWORD;
-                                  }
-                                }
+                                         (yyval.nodes).deviation = actual;
+                                         actual_type = REPLACE_KEYWORD;
+                                         if (size_arrays->node[size_arrays->next].dflt) {
+                                           if (yang_read_deviate_default(trg, actual, size_arrays->node[size_arrays->next].dflt)) {
+                                             YYABORT;
+                                           }
+                                        }
+                                        size_arrays->next++;
+                                      } else {
+                                        (yyval.nodes).index = size_arrays->size;
+                                        if (yang_add_elem(&size_arrays->node, &size_arrays->size)) {
+                                          LOGMEM;
+                                          YYABORT;
+                                        }
+                                      }
+                                    }
 
     break;
 
-  case 537:
+  case 538:
 
     { if (read_all) {
                                             if (unres_schema_add_node(trg, unres, (yyvsp[-2].nodes).deviation->deviate->type, UNRES_TYPE_DER, (yyvsp[-2].nodes).deviation->target) == -1) {
                                               YYABORT;
                                             }
+                                            ly_set_add((yyvsp[-2].nodes).deviation->dflt_check, (yyvsp[-2].nodes).deviation->target, 0);
                                           }
                                         }
 
     break;
 
-  case 538:
+  case 539:
 
     { if (read_all) {
                                              if (yang_read_deviate_units(trg->ctx, (yyvsp[-1].nodes).deviation, s)) {
@@ -7694,20 +7779,22 @@
 
     break;
 
-  case 539:
+  case 540:
 
     { if (read_all) {
-                                               if (yang_read_deviate_default(trg->ctx, (yyvsp[-1].nodes).deviation, s)) {
+                                               if (yang_fill_deviate_default(trg->ctx, (yyvsp[-1].nodes).deviation, s)) {
                                                  YYABORT;
                                                }
                                                s = NULL;
                                                (yyval.nodes) = (yyvsp[-1].nodes);
+                                             } else {
+                                               size_arrays->node[(yyvsp[-1].nodes).index].dflt++;
                                              }
                                            }
 
     break;
 
-  case 540:
+  case 541:
 
     { if (read_all) {
                                               if (yang_read_deviate_config((yyvsp[-1].nodes).deviation, (yyvsp[0].i))) {
@@ -7719,7 +7806,7 @@
 
     break;
 
-  case 541:
+  case 542:
 
     { if (read_all) {
                                                  if (yang_read_deviate_mandatory((yyvsp[-1].nodes).deviation, (yyvsp[0].i))) {
@@ -7731,7 +7818,7 @@
 
     break;
 
-  case 542:
+  case 543:
 
     { if (read_all) {
                                                     if ((yyvsp[-1].nodes).deviation->deviate->min_set) {
@@ -7747,7 +7834,7 @@
 
     break;
 
-  case 543:
+  case 544:
 
     { if (read_all) {
                                                     if ((yyvsp[-1].nodes).deviation->deviate->max_set) {
@@ -7763,13 +7850,13 @@
 
     break;
 
-  case 544:
+  case 545:
 
     { if (read_all && !(actual=yang_read_when(trg, actual, actual_type, s))) {YYABORT;} s=NULL; actual_type=WHEN_KEYWORD;}
 
     break;
 
-  case 549:
+  case 550:
 
     { if (read_all && yang_read_description(trg, actual, s, "when")) {
                                         YYABORT;
@@ -7779,7 +7866,7 @@
 
     break;
 
-  case 550:
+  case 551:
 
     { if (read_all && yang_read_reference(trg, actual, s, "when")) {
                                       YYABORT;
@@ -7789,15 +7876,9 @@
 
     break;
 
-  case 551:
-
-    { (yyval.i) = (yyvsp[-1].i); }
-
-    break;
-
   case 552:
 
-    { read_all = (read_all) ? LY_READ_ONLY_SIZE : LY_READ_ALL; }
+    { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
@@ -7809,24 +7890,30 @@
 
   case 554:
 
-    { (yyval.i) = (yyvsp[-2].i); }
+    { read_all = (read_all) ? LY_READ_ONLY_SIZE : LY_READ_ALL; }
 
     break;
 
   case 555:
 
-    { (yyval.i) = LYS_CONFIG_W | LYS_CONFIG_SET; }
+    { (yyval.i) = (yyvsp[-2].i); }
 
     break;
 
   case 556:
 
-    { (yyval.i) = LYS_CONFIG_R | LYS_CONFIG_SET; }
+    { (yyval.i) = LYS_CONFIG_W | LYS_CONFIG_SET; }
 
     break;
 
   case 557:
 
+    { (yyval.i) = LYS_CONFIG_R | LYS_CONFIG_SET; }
+
+    break;
+
+  case 558:
+
     { if (read_all) {
                   if (!strcmp(s, "true")) {
                     (yyval.i) = LYS_CONFIG_W | LYS_CONFIG_SET;
@@ -7844,15 +7931,9 @@
 
     break;
 
-  case 558:
-
-    { (yyval.i) = (yyvsp[-1].i); }
-
-    break;
-
   case 559:
 
-    { read_all = (read_all) ? LY_READ_ONLY_SIZE : LY_READ_ALL; }
+    { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
@@ -7864,24 +7945,30 @@
 
   case 561:
 
-    { (yyval.i) = (yyvsp[-2].i); }
+    { read_all = (read_all) ? LY_READ_ONLY_SIZE : LY_READ_ALL; }
 
     break;
 
   case 562:
 
-    { (yyval.i) = LYS_MAND_TRUE; }
+    { (yyval.i) = (yyvsp[-2].i); }
 
     break;
 
   case 563:
 
-    { (yyval.i) = LYS_MAND_FALSE; }
+    { (yyval.i) = LYS_MAND_TRUE; }
 
     break;
 
   case 564:
 
+    { (yyval.i) = LYS_MAND_FALSE; }
+
+    break;
+
+  case 565:
+
     { if (read_all) {
                   if (!strcmp(s, "true")) {
                     (yyval.i) = LYS_MAND_TRUE;
@@ -7899,12 +7986,6 @@
 
     break;
 
-  case 566:
-
-    { (yyval.uint) = (yyvsp[-1].uint); }
-
-    break;
-
   case 567:
 
     { (yyval.uint) = (yyvsp[-1].uint); }
@@ -7913,6 +7994,12 @@
 
   case 568:
 
+    { (yyval.uint) = (yyvsp[-1].uint); }
+
+    break;
+
+  case 569:
+
     { if (read_all) {
                   if (strlen(s) == 1 && s[0] == '0') {
                     (yyval.uint) = 0;
@@ -7936,26 +8023,26 @@
 
     break;
 
-  case 569:
-
-    { (yyval.uint) = (yyvsp[-1].uint); }
-
-    break;
-
   case 570:
 
-    { (yyval.uint) = 0; }
+    { (yyval.uint) = (yyvsp[-1].uint); }
 
     break;
 
   case 571:
 
-    { (yyval.uint) = (yyvsp[-1].uint); }
+    { (yyval.uint) = 0; }
 
     break;
 
   case 572:
 
+    { (yyval.uint) = (yyvsp[-1].uint); }
+
+    break;
+
+  case 573:
+
     { if (read_all) {
                   if (!strcmp(s, "unbounded")) {
                     (yyval.uint) = 0;
@@ -7979,25 +8066,25 @@
 
     break;
 
-  case 573:
+  case 574:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 574:
+  case 575:
 
     { (yyval.i) = LYS_USERORDERED; }
 
     break;
 
-  case 575:
+  case 576:
 
     { (yyval.i) = LYS_SYSTEMORDERED; }
 
     break;
 
-  case 576:
+  case 577:
 
     { if (!strcmp(s, "user")) {
                   (yyval.i) = LYS_USERORDERED;
@@ -8013,7 +8100,7 @@
 
     break;
 
-  case 577:
+  case 578:
 
     { if (read_all) {
                                        if (!(actual=yang_read_must(trg, actual, s, actual_type))) {YYABORT;}
@@ -8024,7 +8111,7 @@
 
     break;
 
-  case 587:
+  case 588:
 
     { if (read_all){
                                  s = strdup(yyget_text(scanner));
@@ -8037,7 +8124,7 @@
 
     break;
 
-  case 590:
+  case 591:
 
     { if (read_all) {
                                  s = ly_realloc(s,strlen(s) + yyget_leng(scanner) + 2);
@@ -8052,7 +8139,7 @@
 
     break;
 
-  case 593:
+  case 594:
 
     { if (read_all) {
                           (yyval.v) = actual;
@@ -8066,7 +8153,7 @@
 
     break;
 
-  case 594:
+  case 595:
 
     { if (read_all) {
                                                 if (s) {
@@ -8091,7 +8178,7 @@
 
     break;
 
-  case 598:
+  case 599:
 
     { if (read_all)  {
                                               if (s) {
@@ -8113,13 +8200,13 @@
 
     break;
 
-  case 600:
+  case 601:
 
     { tmp_s = yyget_text(scanner); }
 
     break;
 
-  case 601:
+  case 602:
 
     { if (read_all) {
                                                      s = strdup(tmp_s);
@@ -8133,13 +8220,13 @@
 
     break;
 
-  case 602:
+  case 603:
 
     { tmp_s = yyget_text(scanner); }
 
     break;
 
-  case 603:
+  case 604:
 
     { if (read_all) {
                                            s = strdup(tmp_s);
@@ -8153,7 +8240,7 @@
 
     break;
 
-  case 627:
+  case 628:
 
     { /* convert it to uint32_t */
                                                 unsigned long val;
@@ -8168,25 +8255,25 @@
 
     break;
 
-  case 628:
+  case 629:
 
     { (yyval.uint) = 0; }
 
     break;
 
-  case 629:
+  case 630:
 
     { (yyval.uint) = (yyvsp[0].uint); }
 
     break;
 
-  case 630:
+  case 631:
 
     { (yyval.i) = 0; }
 
     break;
 
-  case 631:
+  case 632:
 
     { /* convert it to int32_t */
                int64_t val;
@@ -8201,7 +8288,7 @@
 
     break;
 
-  case 637:
+  case 638:
 
     { if (read_all && lyp_check_identifier(s, LY_IDENT_SIMPLE, trg, NULL)) {
                     free(s);
@@ -8211,7 +8298,7 @@
 
     break;
 
-  case 642:
+  case 643:
 
     { if (read_all) {
                  char *tmp;
@@ -8241,7 +8328,7 @@
 
     break;
 
-  case 648:
+  case 649:
 
     { if (read_all ) {
                                        if (yang_use_extension(trg, data_node, actual, yyget_text(scanner))) {
@@ -8252,7 +8339,7 @@
 
     break;
 
-  case 671:
+  case 672:
 
     { if (read_all){
                     s = strdup(yyget_text(scanner));
@@ -8265,7 +8352,7 @@
 
     break;
 
-  case 762:
+  case 763:
 
     { if (read_all) {
                             s = strdup(yyget_text(scanner));
@@ -8278,7 +8365,7 @@
 
     break;
 
-  case 763:
+  case 764:
 
     { if (read_all) {
                                       s = strdup(yyget_text(scanner));
diff --git a/src/parser_yin.c b/src/parser_yin.c
index 9b7d1c1..8da8846 100644
--- a/src/parser_yin.c
+++ b/src/parser_yin.c
@@ -1543,17 +1543,20 @@
 {
     const char *value, **stritem;
     struct lyxml_elem *next, *child, *develem;
-    int c_dev = 0, c_must, c_uniq;
+    int c_dev = 0, c_must, c_uniq, c_dflt;
     int f_min = 0, f_max = 0; /* flags */
     int i, j, rc;
+    unsigned int u;
     struct ly_ctx *ctx;
     struct lys_deviate *d = NULL;
     struct lys_node *node = NULL, *parent, *dev_target = NULL;
     struct lys_node_choice *choice = NULL;
-    struct lys_node_leaf *leaf = NULL, **leaf_dflt_check = NULL;
+    struct lys_node_leaf *leaf = NULL;
+    struct ly_set *dflt_check = ly_set_new();
     struct lys_node_list *list = NULL;
+    struct lys_node_leaflist *llist = NULL;
     struct lys_type *t = NULL;
-    uint8_t *trg_must_size = NULL, leaf_dflt_check_count = 0;
+    uint8_t *trg_must_size = NULL;
     struct lys_restr **trg_must = NULL;
     struct unres_schema tmp_unres;
 
@@ -1633,6 +1636,7 @@
         f_max = 0;
         c_must = 0;
         c_uniq = 0;
+        c_dflt = 0;
 
         /* get deviation type */
         GETVAL(value, develem, "value");
@@ -1669,6 +1673,7 @@
             dev->orig_node = dev_target;
 
             dev->deviate_size = 1;
+            ly_set_free(dflt_check);
             return EXIT_SUCCESS;
         } else if (!strcmp(value, "add")) {
             dev->deviate[dev->deviate_size].mod = LY_DEVIATE_ADD;
@@ -1735,107 +1740,26 @@
                     dev_target->flags |= d->flags & LYS_CONFIG_MASK;
                 }
             } else if (!strcmp(child->name, "default")) {
-                if (d->dflt) {
-                    LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, child->name, yin->name);
+                c_dflt++;
+
+                /* check target node type */
+                if (module->version < 2 && dev_target->nodetype == LYS_LEAFLIST) {
+                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow \"default\" property.");
+                    goto error;
+                } else if (c_dflt > 1 && dev_target->nodetype != LYS_LEAFLIST) { /* from YANG 1.1 */
+                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow multiple \"default\" properties.");
+                    goto error;
+                } else if (c_dflt == 1 && (!(dev_target->nodetype & (LYS_LEAF | LYS_LEAFLIST | LYS_CHOICE)))) {
+                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow \"default\" property.");
                     goto error;
                 }
-                GETVAL(value, child, "value");
-                d->dflt = lydict_insert(ctx, value, 0);
 
-                if (dev_target->nodetype == LYS_CHOICE) {
-                    choice = (struct lys_node_choice *)dev_target;
+                /* skip lyxml_free() at the end of the loop, this node will be processed later */
+                continue;
 
-                    if (d->mod == LY_DEVIATE_ADD) {
-                        /* check that there is no current value */
-                        if (choice->dflt) {
-                            LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, child->name);
-                            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Adding property that already exists.");
-                            goto error;
-                        }
-                        /* check collision with mandatory */
-                        if (choice->flags & LYS_MAND_TRUE) {
-                            LOGVAL(LYE_INCHILDSTMT, LY_VLOG_NONE, NULL, child->name, child->parent->name);
-                            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL,
-                                   "Adding the \"default\" statement is forbidden on choice with the \"mandatory\" statement.");
-                            goto error;
-                        }
-                    } else if (d->mod == LY_DEVIATE_RPL) {
-                        /* check that there was a value before */
-                        if (!choice->dflt) {
-                            LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, child->name);
-                            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Replacing a property that does not exist.");
-                            goto error;
-                        }
-                    }
-
-                    rc = resolve_choice_default_schema_nodeid(d->dflt, choice->child, (const struct lys_node **)&node);
-                    if (rc || !node) {
-                        LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, child->name);
-                        goto error;
-                    }
-                    if (d->mod == LY_DEVIATE_DEL) {
-                        if (!choice->dflt || (choice->dflt != node)) {
-                            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, child->name);
-                            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Value differs from the target being deleted.");
-                            goto error;
-                        }
-                    } else { /* add (already checked) and replace */
-                        choice->dflt = node;
-                        if (!choice->dflt) {
-                            /* default branch not found */
-                            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
-                            goto error;
-                        }
-                    }
-                } else if (dev_target->nodetype == LYS_LEAF) {
-                    leaf = (struct lys_node_leaf *)dev_target;
-
-                    if (d->mod == LY_DEVIATE_ADD) {
-                        /* check that there is no current value */
-                        if (leaf->dflt) {
-                            LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, child->name);
-                            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Adding property that already exists.");
-                            goto error;
-                        }
-                        /* check collision with mandatory */
-                        if (leaf->flags & LYS_MAND_TRUE) {
-                            LOGVAL(LYE_INCHILDSTMT, LY_VLOG_NONE, NULL, child->name, child->parent->name);
-                            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL,
-                                   "Adding the \"default\" statement is forbidden on leaf with the \"mandatory\" statement.");
-                            goto error;
-                        }
-                    }
-
-                    if (d->mod == LY_DEVIATE_DEL) {
-                        if (!leaf->dflt || !ly_strequal(leaf->dflt, d->dflt, 1)) {
-                            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, child->name);
-                            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Value differs from the target being deleted.");
-                            goto error;
-                        }
-                        /* remove value */
-                        lydict_remove(ctx, leaf->dflt);
-                        leaf->dflt = NULL;
-                    } else { /* add (already checked) and replace */
-                        /* remove value */
-                        lydict_remove(ctx, leaf->dflt);
-
-                        /* set new value */
-                        leaf->dflt = lydict_insert(ctx, d->dflt, 0);
-
-                        /* remember to check it later (it may not fit now, but the type can be deviated too) */
-                        leaf_dflt_check = ly_realloc(leaf_dflt_check, ++leaf_dflt_check_count * sizeof *leaf_dflt_check);
-                        if (!leaf_dflt_check) {
-                            LOGMEM;
-                            goto error;
-                        }
-                        leaf_dflt_check[leaf_dflt_check_count - 1] = leaf;
-                    }
-                } else {
-                    /* invalid target for default value */
-                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, child->name);
-                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow \"%s\" property.", child->name);
-                    goto error;
-                }
             } else if (!strcmp(child->name, "mandatory")) {
                 if (d->flags & LYS_MAND_MASK) {
                     LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, child->name, yin->name);
@@ -1978,13 +1902,8 @@
                 d->type = t;
 
                 /* check leaf default later (type may not fit now, but default can be deviated later too) */
-                if (dev_target->nodetype == LYS_LEAF) {
-                    leaf_dflt_check = ly_realloc(leaf_dflt_check, ++leaf_dflt_check_count * sizeof *leaf_dflt_check);
-                    if (!leaf_dflt_check) {
-                        LOGMEM;
-                        goto error;
-                    }
-                    leaf_dflt_check[leaf_dflt_check_count - 1] = (struct lys_node_leaf *)dev_target;
+                if (dev_target->nodetype & (LYS_LEAF | LYS_LEAFLIST)) {
+                    ly_set_add(dflt_check, dev_target, 0);
                 }
             } else if (!strcmp(child->name, "unique")) {
                 c_uniq++;
@@ -2074,8 +1993,8 @@
                 trg_must_size = &((struct lys_node_anydata *)dev_target)->must_size;
                 break;
             default:
-                LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, child->name);
-                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow \"%s\" property.", child->name);
+                LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "must");
+                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow \"must\" property.");
                 goto error;
             }
 
@@ -2110,8 +2029,8 @@
 
             /* check target node type */
             if (dev_target->nodetype != LYS_LIST) {
-                LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, child->name);
-                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow \"%s\" property.", child->name);
+                LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "unique");
+                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Target node does not allow \"unique\" property.");
                 goto error;
             }
 
@@ -2130,6 +2049,56 @@
                 goto error;
             }
         }
+        if (c_dflt) {
+            if (d->mod == LY_DEVIATE_ADD) {
+                /* check that there is no current value */
+                if ((dev_target->nodetype == LYS_LEAF && ((struct lys_node_leaf *)dev_target)->dflt) ||
+                        (dev_target->nodetype == LYS_CHOICE && ((struct lys_node_choice *)dev_target)->dflt)) {
+                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Adding property that already exists.");
+                    goto error;
+                }
+
+                /* check collision with mandatory/min-elements */
+                if ((dev_target->flags & LYS_MAND_TRUE) ||
+                        (dev_target->nodetype == LYS_LEAFLIST && ((struct lys_node_leaflist *)dev_target)->min)) {
+                    LOGVAL(LYE_INCHILDSTMT, LY_VLOG_NONE, NULL, child->name, child->parent->name);
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL,
+                           "Adding the \"default\" statement is forbidden on %s statement.",
+                           (dev_target->flags & LYS_MAND_TRUE) ? "nodes with the \"mandatory\"" : "leaflists with non-zero \"min-elements\"");
+                    goto error;
+                }
+            } else if (d->mod == LY_DEVIATE_RPL) {
+                /* check that there was a value before */
+                if (((dev_target->nodetype & (LYS_LEAF | LYS_LEAFLIST)) && !((struct lys_node_leaf *)dev_target)->dflt) ||
+                        (dev_target->nodetype == LYS_CHOICE && !((struct lys_node_choice *)dev_target)->dflt)) {
+                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, child->name);
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Replacing a property that does not exist.");
+                    goto error;
+                }
+            }
+
+            if (dev_target->nodetype == LYS_LEAFLIST) {
+                /* reallocate default list in the target */
+                llist = (struct lys_node_leaflist *)dev_target;
+                if (d->mod == LY_DEVIATE_ADD) {
+                    /* reallocate (enlarge) the unique array of the target */
+                    llist->dflt = ly_realloc(llist->dflt, (c_dflt + llist->dflt_size) * sizeof *d->dflt);
+                } else if (d->mod == LY_DEVIATE_RPL) {
+                    /* reallocate (replace) the unique array of the target */
+                    for (i = 0; i < llist->dflt_size; i++) {
+                        lydict_remove(llist->module->ctx, llist->dflt[i]);
+                    }
+                    llist->dflt = ly_realloc(llist->dflt, c_dflt * sizeof *d->dflt);
+                    llist->dflt_size = 0;
+                }
+            }
+            d->dflt = calloc(c_dflt, sizeof *d->dflt);
+            if (!d->dflt) {
+                LOGMEM;
+                goto error;
+            }
+        }
 
         /* process deviation properties with 0..n cardinality */
         LY_TREE_FOR(develem->child, child) {
@@ -2244,27 +2213,135 @@
                         goto error;
                     }
                 }
+            } else if (!strcmp(child->name, "default")) {
+                GETVAL(value, child, "value");
+                u = strlen(value);
+                d->dflt[d->dflt_size++] = lydict_insert(module->ctx, value, u);
+
+                if (dev_target->nodetype == LYS_CHOICE) {
+                    choice = (struct lys_node_choice *)dev_target;
+                    rc = resolve_choice_default_schema_nodeid(value, choice->child, (const struct lys_node **)&node);
+                    if (rc || !node) {
+                        LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                        goto error;
+                    }
+                    if (d->mod == LY_DEVIATE_DEL) {
+                        if (!choice->dflt || (choice->dflt != node)) {
+                            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Value differs from the target being deleted.");
+                            goto error;
+                        }
+                    } else { /* add or replace */
+                        choice->dflt = node;
+                        if (!choice->dflt) {
+                            /* default branch not found */
+                            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                            goto error;
+                        }
+                    }
+                } else if (dev_target->nodetype == LYS_LEAF) {
+                    leaf = (struct lys_node_leaf *)dev_target;
+                    if (d->mod == LY_DEVIATE_DEL) {
+                        if (!leaf->dflt || !ly_strequal(leaf->dflt, value, 1)) {
+                            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Value differs from the target being deleted.");
+                            goto error;
+                        }
+                        /* remove value */
+                        lydict_remove(ctx, leaf->dflt);
+                        leaf->dflt = NULL;
+                    } else { /* add (already checked) and replace */
+                        /* remove value */
+                        lydict_remove(ctx, leaf->dflt);
+
+                        /* set new value */
+                        leaf->dflt = lydict_insert(ctx, value, u);
+
+                        /* remember to check it later (it may not fit now, but the type can be deviated too) */
+                        ly_set_add(dflt_check, dev_target, 0);
+                    }
+                } else { /* LYS_LEAFLIST */
+                    llist = (struct lys_node_leaflist *)dev_target;
+                    if (d->mod == LY_DEVIATE_DEL) {
+                        /* find and remove the value in target list */
+                        for (i = 0; i < llist->dflt_size; i++) {
+                            if (llist->dflt[i] && ly_strequal(llist->dflt[i], value, 1)) {
+                                /* match, remove the value */
+                                lydict_remove(llist->module->ctx, llist->dflt[i]);
+                                llist->dflt[i] = NULL;
+                                break;
+                            }
+                        }
+                        if (i == llist->dflt_size) {
+                            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "The default value to delete not found in the target node.");
+                            goto error;
+                        }
+                    } else {
+                        /* add or replace, anyway we place items into the deviate's list
+                           which propagates to the target */
+                        /* we just want to check that the value isn't already in the list */
+                        for (i = 0; i < llist->dflt_size; i++) {
+                            if (ly_strequal(llist->dflt[i], value, 1)) {
+                                LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Duplicated default value \"%s\".", value);
+                                goto error;
+                            }
+                        }
+                        /* store it in target node */
+                        llist->dflt[llist->dflt_size++] = lydict_insert(module->ctx, value, u);
+
+                        /* remember to check it later (it may not fit now, but the type can be deviated too) */
+                        ly_set_add(dflt_check, dev_target, 0);
+                    }
+                }
             }
         }
+
+        if (c_dflt && dev_target->nodetype == LYS_LEAFLIST && d->mod == LY_DEVIATE_DEL) {
+            /* consolidate the final list in the target after removing items from it */
+            llist = (struct lys_node_leaflist *)dev_target;
+            for (i = j = 0; j < llist->dflt_size; j++) {
+                llist->dflt[i] = llist->dflt[j];
+                if (llist->dflt[i]) {
+                    i++;
+                }
+            }
+            llist->dflt_size = i + 1;
+        }
     }
 
     /* now check whether default value, if any, matches the type */
-    for (i = 0; i < leaf_dflt_check_count; ++i) {
-        if (leaf_dflt_check[i]->dflt) {
-            rc = unres_schema_add_str(module, unres, &leaf_dflt_check[i]->type, UNRES_TYPE_DFLT, leaf_dflt_check[i]->dflt);
-            if (rc == -1) {
-                LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, leaf_dflt_check[i]->dflt, "default");
-                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Leaf \"%s\" default value no longer matches its type.", dev->target_name);
-                goto error;
+    for (u = 0; u < dflt_check->number; ++u) {
+        value = NULL;
+        rc = EXIT_SUCCESS;
+        if (dflt_check->set.s[u]->nodetype == LYS_LEAF) {
+            leaf = (struct lys_node_leaf *)dflt_check->set.s[u];
+            rc = unres_schema_add_str(module, unres, &leaf->type, UNRES_TYPE_DFLT, value = leaf->dflt);
+        } else { /* LYS_LEAFLIST */
+            llist = (struct lys_node_leaflist *)dflt_check->set.s[u];
+            for (j = 0; j < llist->dflt_size; j++) {
+                rc = unres_schema_add_str(module, unres, &llist->type, UNRES_TYPE_DFLT, value = llist->dflt[j]);
+                if (rc == -1) {
+                    break;
+                }
             }
+
+        }
+        if (rc == -1) {
+            LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+            LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL,
+                   "The default value \"%s\" of the deviated node \"%s\"no longer matches its type.",
+                   dev->target_name);
+            goto error;
         }
     }
-    free(leaf_dflt_check);
 
+    ly_set_free(dflt_check);
     return EXIT_SUCCESS;
 
 error:
-    free(leaf_dflt_check);
+    ly_set_free(dflt_check);
     return EXIT_FAILURE;
 }
 
@@ -2395,7 +2472,7 @@
     const char *value;
     char *endptr;
     int f_mand = 0, f_min = 0, f_max = 0;
-    int c_must = 0, c_ftrs = 0;
+    int c_must = 0, c_ftrs = 0, c_dflt = 0;
     int r;
     unsigned long int val;
 
@@ -2421,26 +2498,41 @@
 
         /* limited applicability */
         if (!strcmp(sub->name, "default")) {
-            /* leaf or choice */
-            if (rfn->mod.dflt) {
-                LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, sub->name, yin->name);
-                goto error;
-            }
+            /* leaf, leaf-list or choice */
 
             /* check possibility of statements combination */
             if (rfn->target_type) {
-                rfn->target_type &= (LYS_LEAF | LYS_CHOICE);
+                if (c_dflt) {
+                    /* multiple defaults are allowed only in leaf-list */
+                    if (module->version < 2) {
+                        LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, sub->name, yin->name);
+                        goto error;
+                    }
+                    rfn->target_type &= LYS_LEAFLIST;
+                } else {
+                    if (module->version < 2) {
+                        rfn->target_type &= (LYS_LEAF | LYS_CHOICE);
+                    } else {
+                        /* YANG 1.1 */
+                        rfn->target_type &= (LYS_LEAFLIST | LYS_LEAF | LYS_CHOICE);
+                    }
+                }
                 if (!rfn->target_type) {
                     LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, sub->name, yin->name);
                     LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Invalid refine target nodetype for the substatements.");
                     goto error;
                 }
             } else {
-                rfn->target_type = LYS_LEAF | LYS_CHOICE;
+                if (module->version < 2) {
+                    rfn->target_type = LYS_LEAF | LYS_CHOICE;
+                } else {
+                    /* YANG 1.1 */
+                    rfn->target_type = LYS_LEAFLIST | LYS_LEAF | LYS_CHOICE;
+                }
             }
 
-            GETVAL(value, sub, "value");
-            rfn->mod.dflt = lydict_insert(module->ctx, value, strlen(value));
+            c_dflt++;
+            continue;
         } else if (!strcmp(sub->name, "mandatory")) {
             /* leaf, choice or anyxml */
             if (f_mand) {
@@ -2624,6 +2716,13 @@
             goto error;
         }
     }
+    if (c_dflt) {
+        rfn->dflt = calloc(c_dflt, sizeof *rfn->dflt);
+        if (!rfn->dflt) {
+            LOGMEM;
+            goto error;
+        }
+    }
 
     LY_TREE_FOR(yin->child, sub) {
         if (!strcmp(sub->name, "if-feature")) {
@@ -2632,12 +2731,24 @@
             if (r) {
                 goto error;
             }
-        } else {
+        } else if (!strcmp(sub->name, "must")) {
             r = fill_yin_must(module, sub, &rfn->must[rfn->must_size]);
             rfn->must_size++;
             if (r) {
                 goto error;
             }
+        } else { /* default */
+            GETVAL(value, sub, "value");
+
+            /* check for duplicity */
+            for (r = 0; r < rfn->dflt_size; r++) {
+                if (ly_strequal(rfn->dflt[r], value, 1)) {
+                    LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Duplicated default value \"%s\".", value);
+                    goto error;
+                }
+            }
+            rfn->dflt[rfn->dflt_size++] = lydict_insert(module->ctx, value, strlen(value));
         }
     }
 
@@ -3566,7 +3677,7 @@
     char *endptr;
     unsigned long val;
     int r, has_type = 0;
-    int c_must = 0, c_ftrs = 0;
+    int c_must = 0, c_ftrs = 0, c_dflt = 0;
     int f_ordr = 0, f_min = 0, f_max = 0;
 
     llist = calloc(1, sizeof *llist);
@@ -3649,6 +3760,9 @@
         } else if (!strcmp(sub->name, "if-feature")) {
             c_ftrs++;
             continue;
+        } else if ((module->version >= 2) && !strcmp(sub->name, "default")) {
+            c_dflt++;
+            continue;
 
         } else if (!strcmp(sub->name, "min-elements")) {
             if (f_min) {
@@ -3745,6 +3859,13 @@
             goto error;
         }
     }
+    if (c_dflt) {
+        llist->dflt = calloc(c_dflt, sizeof *llist->dflt);
+        if (!llist->dflt) {
+            LOGMEM;
+            goto error;
+        }
+    }
 
     LY_TREE_FOR(yin->child, sub) {
         if (!strcmp(sub->name, "must")) {
@@ -3759,6 +3880,33 @@
             if (r) {
                 goto error;
             }
+        } else if (!strcmp(sub->name, "default")) {
+            GETVAL(value, sub, "value");
+
+            /* check for duplicity */
+            for (r = 0; r < llist->dflt_size; r++) {
+                if (ly_strequal(llist->dflt[r], value, 1)) {
+                    LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, "default");
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Duplicated default value \"%s\".", value);
+                    goto error;
+                }
+            }
+            llist->dflt[llist->dflt_size++] = lydict_insert(module->ctx, value, strlen(value));
+        }
+    }
+
+    if (llist->dflt_size && llist->min) {
+        LOGVAL(LYE_INCHILDSTMT, LY_VLOG_NONE, NULL, "min-elements", "leaf-list");
+        LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL,
+               "The \"min-elements\" statement with non-zero value is forbidden on leaf-lists with the \"default\" statement.");
+        goto error;
+    }
+
+    /* check default value (if not defined, there still could be some restrictions
+     * that need to be checked against a default value from a derived type) */
+    for (r = 0; r < llist->dflt_size; r++) {
+        if (unres_schema_add_str(module, unres, &llist->type, UNRES_TYPE_DFLT, llist->dflt[r]) == -1) {
+            goto error;
         }
     }
 
diff --git a/src/printer_yang.c b/src/printer_yang.c
index 5fa5c40..28dac18 100644
--- a/src/printer_yang.c
+++ b/src/printer_yang.c
@@ -531,12 +531,11 @@
     for (i = 0; i < refine->iffeature_size; i++) {
         yang_print_iffeature(out, level, module, &refine->iffeature[i]);
     }
+    for (i = 0; i < refine->dflt_size; ++i) {
+        ly_print(out, "%*sdefault \"%s\";\n", LEVEL, INDENT, refine->dflt[i]);
+    }
 
-    if (refine->target_type & (LYS_LEAF | LYS_CHOICE)) {
-        if (refine->mod.dflt != NULL) {
-            ly_print(out, "%*sdefault \"%s\";\n", LEVEL, INDENT, refine->mod.dflt);
-        }
-    } else if (refine->target_type == LYS_CONTAINER) {
+    if (refine->target_type == LYS_CONTAINER) {
         if (refine->mod.presence != NULL) {
             yang_print_text(out, level, "presence", refine->mod.presence, 1);
         }
@@ -561,7 +560,7 @@
 yang_print_deviation(struct lyout *out, int level, const struct lys_module *module,
                      const struct lys_deviation *deviation)
 {
-    int i, j;
+    int i, j, k;
     const char *str;
 
     str = transform_json2schema(module, deviation->target_name);
@@ -602,8 +601,8 @@
             ly_print(out, "%*smandatory false;\n", LEVEL, INDENT);
         }
 
-        if (deviation->deviate[i].dflt) {
-            ly_print(out, "%*sdefault \"%s\";\n", LEVEL, INDENT, deviation->deviate[i].dflt);
+        for (k = 0; k < deviation->deviate[i].dflt_size; ++k) {
+            ly_print(out, "%*sdefault \"%s\";\n", LEVEL, INDENT, deviation->deviate[i].dflt[k]);
         }
 
         if (deviation->deviate[i].min_set) {
@@ -927,6 +926,9 @@
     }
     yang_print_snode_common2(out, level, node, NULL);
     yang_print_type(out, level, node->module, &llist->type);
+    for (i = 0; i < llist->dflt_size; ++i) {
+        ly_print(out, "%*sdefault \"%s\";\n", LEVEL, INDENT, llist->dflt[i]);
+    }
     if (llist->units != NULL) {
         ly_print(out, "%*sunits \"%s\";\n", LEVEL, INDENT, llist->units);
     }
diff --git a/src/printer_yin.c b/src/printer_yin.c
index 344a912..098fae3 100644
--- a/src/printer_yin.c
+++ b/src/printer_yin.c
@@ -551,12 +551,11 @@
     for (i = 0; i < refine->iffeature_size; i++) {
         yin_print_iffeature(out, level, module, &refine->iffeature[i]);
     }
+    for (i = 0; i < refine->dflt_size; ++i) {
+        yin_print_open(out, level, "default", "value", refine->dflt[i], 1);
+    }
 
-    if (refine->target_type & (LYS_LEAF | LYS_CHOICE)) {
-        if (refine->mod.dflt) {
-            yin_print_open(out, level, "default", "value", refine->mod.dflt, 1);
-        }
-    } else if (refine->target_type == LYS_CONTAINER) {
+    if (refine->target_type == LYS_CONTAINER) {
         if (refine->mod.presence) {
             yin_print_open(out, level, "presence", "value", refine->mod.presence, 1);
         }
@@ -622,8 +621,8 @@
             yin_print_open(out, level, "mandatory", "value", "false", 1);
         }
 
-        if (deviation->deviate[i].dflt) {
-            yin_print_open(out, level, "default", "value", deviation->deviate[i].dflt, 1);
+        for (j = 0; j < deviation->deviate[i].dflt_size; j++) {
+            yin_print_open(out, level, "default", "value", deviation->deviate[i].dflt[j], 1);
         }
 
         if (deviation->deviate[i].min_set) {
@@ -953,6 +952,9 @@
     if (llist->units) {
         yin_print_open(out, level, "units", "name", llist->units, 1);
     }
+    for (i = 0; i < llist->dflt_size; i++) {
+        yin_print_open(out, level, "default", "value", llist->dflt[i], 1);
+    }
     if (llist->min > 0) {
         yin_print_unsigned(out, level, "min-elements", "value", llist->min);
     }
diff --git a/src/resolve.c b/src/resolve.c
index 99e27a4..e913ab9 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -4024,6 +4024,8 @@
     struct ly_ctx *ctx;
     struct lys_node *node = NULL, *next, *iter;
     struct lys_node *node_aux, *parent, *tmp;
+    struct lys_node_leaflist *llist;
+    struct lys_node_leaf *leaf;
     struct lys_refine *rfn;
     struct lys_restr *must, **old_must;
     struct lys_iffeature *iff, **old_iff;
@@ -4171,19 +4173,49 @@
         }
 
         /* default value ... */
-        if (rfn->mod.dflt) {
+        if (rfn->dflt_size) {
             if (node->nodetype == LYS_LEAF) {
                 /* leaf */
-                lydict_remove(ctx, ((struct lys_node_leaf *)node)->dflt);
-                ((struct lys_node_leaf *)node)->dflt = lydict_insert(ctx, rfn->mod.dflt, 0);
+                leaf = (struct lys_node_leaf *)node;
+
+                lydict_remove(ctx, leaf->dflt);
+                leaf->dflt = lydict_insert(ctx, rfn->dflt[0], 0);
+
+                /* check the default value */
+                if (unres_schema_add_str(leaf->module, unres, &leaf->type, UNRES_TYPE_DFLT, leaf->dflt) == -1) {
+                    return -1;
+                }
             } else if (node->nodetype == LYS_CHOICE) {
                 /* choice */
-                rc = resolve_choice_default_schema_nodeid(rfn->mod.dflt, node->child,
+                rc = resolve_choice_default_schema_nodeid(rfn->dflt[0], node->child,
                                                           (const struct lys_node **)&((struct lys_node_choice *)node)->dflt);
                 if (rc || !((struct lys_node_choice *)node)->dflt) {
-                    LOGVAL(LYE_INARG, LY_VLOG_LYS, uses, rfn->mod.dflt, "default");
+                    LOGVAL(LYE_INARG, LY_VLOG_LYS, uses, rfn->dflt[0], "default");
                     return -1;
                 }
+            } else if (node->nodetype == LYS_LEAFLIST) {
+                /* leaf-list */
+                llist = (struct lys_node_leaflist *)node;
+
+                /* remove complete set of defaults in target */
+                for (i = 0; i < llist->dflt_size; i++) {
+                    lydict_remove(ctx, llist->dflt[i]);
+                }
+                free(llist->dflt);
+
+                /* copy the default set from refine */
+                llist->dflt_size = rfn->dflt_size;
+                llist->dflt = malloc(llist->dflt_size * sizeof *llist->dflt);
+                for (i = 0; i < llist->dflt_size; i++) {
+                    llist->dflt[i] = lydict_insert(ctx, rfn->dflt[i], 0);
+                }
+
+                /* check default value */
+                for (i = 0; i < llist->dflt_size; i++) {
+                    if (unres_schema_add_str(llist->module, unres, &llist->type, UNRES_TYPE_DFLT, llist->dflt[i]) == -1) {
+                        return -1;
+                    }
+                }
             }
         }
 
@@ -4297,6 +4329,17 @@
             *old_iff = iff;
             *old_size = size;
         }
+
+        /* additional checks */
+        if (node->nodetype == LYS_LEAFLIST) {
+            llist = (struct lys_node_leaflist *)node;
+            if (llist->dflt_size && llist->min) {
+                LOGVAL(LYE_INCHILDSTMT, LY_VLOG_NONE, NULL, rfn->dflt_size ? "default" : "min-elements", "refine");
+                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL,
+                       "The \"min-elements\" statement with non-zero value is forbidden on leaf-lists with the \"default\" statement.");
+                return -1;
+            }
+        }
     }
 
     /* apply augments */
diff --git a/src/tree_data.c b/src/tree_data.c
index ddfcc91..d4c8ece 100644
--- a/src/tree_data.c
+++ b/src/tree_data.c
@@ -3374,7 +3374,7 @@
  * pointer to the default value
  */
 const char *
-lyd_get_default(const char* unique_expr, struct lyd_node *list)
+lyd_get_unique_default(const char* unique_expr, struct lyd_node *list)
 {
     const struct lys_node *parent;
     const struct lys_node_leaf *sleaf = NULL;
@@ -3620,7 +3620,7 @@
                         val1 = ((struct lyd_node_leaf_list *)diter)->value_str;
                     } else {
                         /* use default value */
-                        val1 = lyd_get_default(slist->unique[i].expr[j], first);
+                        val1 = lyd_get_unique_default(slist->unique[i].expr[j], first);
                         if (ly_errno) {
                             return -1;
                         }
@@ -3632,7 +3632,7 @@
                         val2 = ((struct lyd_node_leaf_list *)diter)->value_str;
                     } else {
                         /* use default value */
-                        val2 = lyd_get_default(slist->unique[i].expr[j], second);
+                        val2 = lyd_get_unique_default(slist->unique[i].expr[j], second);
                         if (ly_errno) {
                             return -1;
                         }
@@ -4220,6 +4220,99 @@
 }
 
 static struct lyd_node *
+lyd_wd_add_leaflist(struct ly_ctx *ctx, struct lyd_node *parent, struct lys_node_leaflist *llist,
+                    const char *path, struct unres_data *unres, int options, int check_existence)
+{
+    struct lyd_node *ret = NULL, *iter, *last;
+    struct lys_tpdf *tpdf;
+    const char **dflt;
+    uint8_t dflt_size, i;
+    struct ly_set *nodeset;
+
+    if (llist->module->version < 2) {
+        /* default values on leaf-lists are allowed from YANG 1.1 */
+        return NULL;
+    } else if ((options & LYD_WD_MASK) == LYD_WD_EXPLICIT && (llist->flags & LYS_CONFIG_W)) {
+        /* do not process config data in explicit mode */
+        return NULL;
+    } else if (lys_is_disabled((struct lys_node *)llist, 0)) {
+        /* ignore disabled data */
+        return NULL;
+    }
+
+    if (llist->dflt_size) {
+        /* there are default values */
+        dflt_size = llist->dflt_size;
+        dflt = llist->dflt;
+    } else if (!llist->min) {
+        /* get the default value from the type */
+        for (tpdf = llist->type.der; tpdf && !dflt; tpdf = tpdf->type.der) {
+            dflt = &tpdf->dflt;
+            dflt_size = 1;
+        }
+    }
+
+    if (!dflt_size) {
+        /* no default values to use */
+        return NULL;
+    }
+
+    if (check_existence && parent) {
+        /* check presence of any instance of the leaf-list */
+        nodeset = lyd_get_node(parent, path);
+        if (nodeset && nodeset->number) {
+            ly_set_free(nodeset);
+            return NULL;
+        }
+        ly_set_free(nodeset);
+    }
+
+    for (i = 0; i < dflt_size; i++) {
+        last = lyd_new_path(parent, ctx, path, (void*)dflt[i], 0, options & LYD_OPT_RPCREPLY ? LYD_PATH_OPT_OUTPUT : 0);
+        if ((options & (LYD_WD_ALL_TAG | LYD_WD_IMPL_TAG)) && last) {
+            /* remember the created nodes (if necessary) in unres */
+            for (iter = last; ; iter = iter->child) {
+                if ((!(options & LYD_OPT_TYPEMASK) || (options & LYD_OPT_CONFIG)) && (iter->when_status & LYD_WHEN)) {
+                    if (unres_data_add(unres, (struct lyd_node *)iter, UNRES_WHEN)) {
+                        goto error;
+                    }
+                }
+                if (resolve_applies_must(iter) && unres_data_add(unres, iter, UNRES_MUST) == -1) {
+                    goto error;
+                }
+
+                if (iter->schema->nodetype == LYS_LEAFLIST) {
+                    break;
+                }
+            }
+            /* we are in the added leaf-list instance */
+            if (((struct lyd_node_leaf_list *)iter)->value_type == LY_TYPE_LEAFREF) {
+                if (unres_data_add(unres, (struct lyd_node *)iter, UNRES_LEAFREF)) {
+                    goto error;
+                }
+            } else if (((struct lyd_node_leaf_list *)iter)->value_type == LY_TYPE_INST) {
+                if (unres_data_add(unres, (struct lyd_node *)iter, UNRES_INSTID)) {
+                    goto error;
+                }
+            }
+
+            /* add tag */
+            iter->dflt = 1;
+        }
+
+        if (!ret) {
+            ret = last;
+        }
+    }
+
+    return ret;
+
+error:
+    lyd_free_withsiblings(ret);
+    return NULL;
+}
+
+static struct lyd_node *
 lyd_wd_add_leaf(struct ly_ctx *ctx, struct lyd_node *parent, struct lys_node_leaf *leaf,
                 const char *path, struct unres_data *unres, int options, int check_existence)
 {
@@ -4347,6 +4440,22 @@
                 parent = ret = iter;
             } /* else already connected in parent */
             break;
+        case LYS_LEAFLIST:
+            iter = lyd_wd_add_leaflist(siter->module->ctx, parent, (struct lys_node_leaflist *)siter, path, unres,
+                                       options, parent ? 1 : 0);
+            if (ly_errno != LY_SUCCESS) {
+                if (!parent) {
+                    lyd_free_withsiblings(ret);
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Creating default leaf-list elements \"%s\" failed.", path);
+                } else {
+                    LOGVAL(LYE_SPEC, LY_VLOG_LYD, parent, "Creating default leaf-list elements \"%s\" failed.", path);
+                }
+                path[0] = '\0';
+                return NULL;
+            } else if (iter && !parent) {
+                parent = ret = iter;
+            } /* else already connected in parent */
+            break;
         case LYS_CONTAINER:
             if (((struct lys_node_container *)siter)->presence) {
                 /* don't go into presence containers */
@@ -4536,6 +4645,16 @@
             } /* else if default, it was already connected into parent */
             path[0] = '\0';
             break;
+        case LYS_LEAFLIST:
+            sprintf(path, "%s:%s", lys_node_module(siter)->name, siter->name);
+            lyd_wd_add_leaflist(siter->module->ctx, subroot, (struct lys_node_leaflist *)siter, path, unres, options, 1);
+            if (ly_errno != LY_SUCCESS) {
+                LOGVAL(LYE_SPEC, LY_VLOG_LYD, subroot, "Creating default leaf-list elements \"%s\" failed.", path);
+                path[0] = '\0';
+                goto error;
+            } /* else if default, it was already connected into parent */
+            path[0] = '\0';
+            break;
         case LYS_CHOICE:
             /* check that no case is instantiated */
             sch = lyd_wd_get_inst_case(caseset, siter);
@@ -4743,6 +4862,25 @@
                     iter = NULL;
                 }
                 break;
+            case LYS_LEAFLIST:
+                sprintf(path, "/%s:%s", lys_node_module(siter)->name, siter->name);
+                iter = lyd_wd_add_leaflist(siter->module->ctx, *root, (struct lys_node_leaflist *)siter, path, unres,
+                                           options, 1);
+                if (ly_errno != LY_SUCCESS) {
+                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Creating default leaf-list elements \"%s\" failed.", path);
+                    path[0] = '\0';
+                    goto cleanup;
+                }
+                path[0] = '\0';
+
+                if (iter) {
+                    if (!(*root)) {
+                        *root = iter;
+                    }
+                    /* avoid lyd_insert_after() after the switch since leaf-list instance is already added into the tree */
+                    iter = NULL;
+                }
+                break;
             case LYS_CHOICE:
                 /* check that no case is instantiated */
                 sch = lyd_wd_get_inst_case(caseset, siter);
diff --git a/src/tree_internal.h b/src/tree_internal.h
index 93d10a7..ae20dc3 100644
--- a/src/tree_internal.h
+++ b/src/tree_internal.h
@@ -390,7 +390,7 @@
  */
 int lyd_list_equal(struct lyd_node *first, struct lyd_node *second, int action, int printval);
 
-const char *lyd_get_default(const char* unique_expr, struct lyd_node *list);
+const char *lyd_get_unique_default(const char* unique_expr, struct lyd_node *list);
 
 /**
  * @brief Check for (validate) top-level mandatory nodes of a data tree.
diff --git a/src/tree_schema.c b/src/tree_schema.c
index 312c1d2..a8c4de2 100644
--- a/src/tree_schema.c
+++ b/src/tree_schema.c
@@ -1779,6 +1779,28 @@
     return new;
 }
 
+static const char **
+lys_dflt_dup(struct ly_ctx *ctx, const char **old, int size)
+{
+    int i;
+    const char **result;
+
+    if (!size) {
+        return NULL;
+    }
+
+    result = calloc(size, sizeof *result);
+    if (!result) {
+        LOGMEM;
+        return NULL;
+    }
+
+    for (i = 0; i < size; i++) {
+        result[i] = lydict_insert(ctx, old[i], 0);
+    }
+    return result;
+}
+
 static struct lys_refine *
 lys_refine_dup(struct lys_module *mod, struct lys_refine *old, int size)
 {
@@ -1804,9 +1826,10 @@
         result[i].must_size = old[i].must_size;
         result[i].must = lys_restr_dup(mod->ctx, old[i].must, old[i].must_size);
 
-        if (result[i].target_type & (LYS_LEAF | LYS_CHOICE)) {
-            result[i].mod.dflt = lydict_insert(mod->ctx, old[i].mod.dflt, 0);
-        } else if (result[i].target_type == LYS_CONTAINER) {
+        result[i].dflt_size = old[i].dflt_size;
+        result[i].dflt = lys_dflt_dup(mod->ctx, old[i].dflt, old[i].dflt_size);
+
+        if (result[i].target_type == LYS_CONTAINER) {
             result[i].mod.presence = lydict_insert(mod->ctx, old[i].mod.presence, 0);
         } else if (result[i].target_type & (LYS_LIST | LYS_LEAFLIST)) {
             result[i].mod.list = old[i].mod.list;
@@ -1927,6 +1950,11 @@
     }
     free(llist->must);
 
+    for (i = 0; i < llist->dflt_size; i++) {
+        lydict_remove(ctx, llist->dflt[i]);
+    }
+    free(llist->dflt);
+
     lys_when_free(ctx, llist->when);
 
     lys_type_free(ctx, &llist->type);
@@ -2021,7 +2049,11 @@
     }
 
     for (i = 0; i < dev->deviate_size; i++) {
-        lydict_remove(ctx, dev->deviate[i].dflt);
+        for (j = 0; j < dev->deviate[i].dflt_size; j++) {
+            lydict_remove(ctx, dev->deviate[i].dflt[j]);
+        }
+        free(dev->deviate[i].dflt);
+
         lydict_remove(ctx, dev->deviate[i].units);
 
         if (dev->deviate[i].mod == LY_DEVIATE_DEL) {
@@ -2057,9 +2089,12 @@
         }
         free(uses->refine[i].must);
 
-        if (uses->refine[i].target_type & (LYS_LEAF | LYS_CHOICE)) {
-            lydict_remove(ctx, uses->refine[i].mod.dflt);
-        } else if (uses->refine[i].target_type & LYS_CONTAINER) {
+        for (j = 0; j < uses->refine[i].dflt_size; j++) {
+            lydict_remove(ctx, uses->refine[i].dflt[i]);
+        }
+        free(uses->refine[i].dflt);
+
+        if (uses->refine[i].target_type & LYS_CONTAINER) {
             lydict_remove(ctx, uses->refine[i].mod.presence);
         }
     }
diff --git a/src/tree_schema.h b/src/tree_schema.h
index 0a92a72..e740b73 100644
--- a/src/tree_schema.h
+++ b/src/tree_schema.h
@@ -818,7 +818,7 @@
     struct lys_restr *must;          /**< array of must constraints */
 
     /* to this point, struct lys_node_leaf is compatible with struct lys_node_leaflist */
-    const char *dflt;                /**< default value of the type */
+    const char *dflt;                /**< default value of the leaf */
 };
 
 /**
@@ -857,7 +857,8 @@
     uint8_t iffeature_size;          /**< number of elements in the #iffeature array */
 
     /* specific leaf-list's data */
-    uint8_t padding[2];              /**< padding for 32b alignment */
+    uint8_t padding[1];              /**< padding for 32b alignment */
+    uint8_t dflt_size;               /**< number of elements in the #dflt array */
     uint8_t must_size;               /**< number of elements in the #must array */
 
     struct lys_when *when;           /**< when statement (optional) */
@@ -867,6 +868,7 @@
     struct lys_restr *must;          /**< array of must constraints */
 
     /* to this point, struct lys_node_leaflist is compatible with struct lys_node_leaf */
+    const char **dflt;               /**< array of default value(s) of the leaflist */
     uint32_t min;                    /**< min-elements constraint (optional) */
     uint32_t max;                    /**< max-elements constraint, 0 means unbounded (optional) */
 };
@@ -1235,8 +1237,6 @@
  * @brief Union to hold target modification in ::lys_refine.
  */
 union lys_refine_mod {
-    const char *dflt;            /**< new default value. Applicable to #LYS_LEAF and #LYS_CHOICE target nodes. In case of
-                                      #LYS_CHOICE, it must be possible to resolve the value to the default branch node */
     const char *presence;        /**< presence description. Applicable to #LYS_CONTAINER target node */
     struct lys_refine_mod_list list;  /**< container for list's attributes,
                                       applicable to #LYS_LIST and #LYS_LEAFLIST target nodes */
@@ -1257,8 +1257,12 @@
 
     uint8_t must_size;               /**< number of elements in the #must array */
     uint8_t iffeature_size;          /**< number of elements in the #iffeature array */
+    uint8_t dflt_size;               /**< number of elements in the #dflt array */
     struct lys_restr *must;          /**< array of additional must restrictions to be added to the target */
     struct lys_iffeature *iffeature; /**< array of if-feature expressions */
+    const char **dflt;               /**< array of new default values. Applicable to #LYS_LEAF, #LYS_LEAFLIST and
+                                          #LYS_CHOICE target nodes, but multiple defaults are valid only in case of
+                                          #LYS_LEAFLIST.*/
 
     union lys_refine_mod mod;        /**< mutually exclusive target modifications according to the possible target_type */
 };
@@ -1281,7 +1285,9 @@
     LYS_DEVIATE_TYPE mod;            /**< type of deviation modification */
 
     uint8_t flags;                   /**< Properties: config, mandatory */
-    const char *dflt;                /**< Properties: default (both type and choice represented as string value */
+    uint8_t dflt_size;               /**< Properties: default - number of elements in the #dflt array */
+    const char **dflt;               /**< Properties: default (both type and choice represented as string value;
+                                                      for deviating leaf-list we need it as an array */
     uint32_t min;                    /**< Properties: min-elements */
     uint32_t max;                    /**< Properties: max-elements */
     uint8_t min_set;                 /**< Since min can be 0, this flag says if it is default value or 0 was set */
diff --git a/src/validation.c b/src/validation.c
index e89f906..e346edb 100644
--- a/src/validation.c
+++ b/src/validation.c
@@ -281,7 +281,7 @@
                         id = ((struct lyd_node_leaf_list *)diter)->value_str;
                     } else {
                         /* use default value */
-                        id = lyd_get_default(slist->unique[j].expr[i], set->set.d[u]);
+                        id = lyd_get_unique_default(slist->unique[j].expr[i], set->set.d[u]);
                         if (ly_errno) {
                             ret = EXIT_FAILURE;
                             goto unique_cleanup;
diff --git a/src/yang.y.in b/src/yang.y.in
index 6265c78..f78bf24 100644
--- a/src/yang.y.in
+++ b/src/yang.y.in
@@ -237,6 +237,7 @@
 %destructor { free($$); } pattern_arg_str

 %destructor { if (read_all && $$.choice.s) { free($$.choice.s); } } choice_opt_stmt

 %destructor { if (read_all) {

+                ly_set_free($$.deviation->dflt_check);

                 free($$.deviation);

               }

             } deviation_opt_stmt

@@ -1946,22 +1947,38 @@
                                                            }

                   '{' stmtsep

                       leaf_list_opt_stmt { if (read_all) {

+                                             int i;

+

                                              if ($7.node.ptr_leaflist->flags & LYS_CONFIG_R) {

                                                /* RFC 6020, 7.7.5 - ignore ordering when the list represents state data

                                                 * ignore oredering MASK - 0x7F

                                                 */

-                                             $7.node.ptr_leaflist->flags &= 0x7F;

-                                           }

+                                               $7.node.ptr_leaflist->flags &= 0x7F;

+                                             }

                                            if ($7.node.ptr_leaflist->max && $7.node.ptr_leaflist->min > $7.node.ptr_leaflist->max) {

                                              LOGVAL(LYE_SPEC, LY_VLOG_LYS, $7.node.ptr_leaflist, "\"min-elements\" is bigger than \"max-elements\".");

                                              YYABORT;

                                            }

-                                           if (!($7.node.flag & LYS_TYPE_DEF)) {

-                                             LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_LYS, $7.node.ptr_leaflist, "type", "leaf-list");

-                                             YYABORT;

+                                             if (!($7.node.flag & LYS_TYPE_DEF)) {

+                                               LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_LYS, $7.node.ptr_leaflist, "type", "leaf-list");

+                                               YYABORT;

+                                             }

+                                             if ($7.node.ptr_leaflist->dflt_size && $7.node.ptr_leaflist->min) {

+                                               LOGVAL(LYE_INCHILDSTMT, LY_VLOG_NONE, NULL, "min-elements", "leaf-list");

+                                               LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL,

+                                                      "The \"min-elements\" statement with non-zero value is forbidden on leaf-lists with the \"default\" statement.");

+                                               YYABORT;

+                                             }

+

+                                             /* check default value (if not defined, there still could be some restrictions

+                                              * that need to be checked against a default value from a derived type) */

+                                             for (i = 0; i < $7.node.ptr_leaflist->dflt_size; i++) {

+                                               if (unres_schema_add_str(module, unres, &$7.node.ptr_leaflist->type, UNRES_TYPE_DFLT, $7.node.ptr_leaflist->dflt[i]) == -1) {

+                                                 YYABORT;

+                                               }

+                                             }

                                            }

                                          }

-                                       }

                 '}' ;

 

 leaf_list_opt_stmt: @EMPTYDIR@ { if (read_all) {

@@ -1982,6 +1999,17 @@
                                    YYABORT;

                                  }

                                }

+                               if (size_arrays->node[size_arrays->next].dflt) {

+                                 if (trg->version < 2) {

+                                   LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "default");

+                                   YYABORT;

+                                 }

+                                 $$.node.ptr_leaflist->dflt = calloc(size_arrays->node[size_arrays->next].dflt, sizeof *$$.node.ptr_leaflist->dflt);

+                                 if (!$$.node.ptr_leaflist->dflt) {

+                                   LOGMEM;

+                                   YYABORT;

+                                 }

+                               }

                                store_flags((struct lys_node *)$$.node.ptr_leaflist, size_arrays->node[size_arrays->next].flags, config_inherit);

                                size_arrays->next++;

                              } else {

@@ -2016,6 +2044,23 @@
                  }

                }

      stmtsep { $$ = $1; }

+  |  leaf_list_opt_stmt default_stmt { if (read_all) {

+                                         int i;

+

+                                         /* check for duplicity */

+                                         for (i = 0; i < $1.node.ptr_leaflist->dflt_size; i++) {

+                                           if (ly_strequal($1.node.ptr_leaflist->dflt[i], s, 0)) {

+                                             LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, s, "default");

+                                             LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Duplicated default value \"%s\".", s);

+                                             free(s);

+                                             YYABORT;

+                                           }

+                                         }

+                                         $1.node.ptr_leaflist->dflt[$1.node.ptr_leaflist->dflt_size++] = lydict_insert_zc(module->ctx, s);

+                                       } else {

+                                         size_arrays->node[$1.index].dflt++;

+                                       }

+                                     }

   |  leaf_list_opt_stmt units_stmt { if (read_all && yang_read_units(trg, $1.node.ptr_leaflist, s, LEAF_LIST_KEYWORD)) {YYABORT;} s = NULL; }

   |  leaf_list_opt_stmt must_stmt { if (read_all) {

                                       actual = $1.node.ptr_leaflist;

@@ -2735,6 +2780,36 @@
                                     }

                                     $$.refine->target_type = LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYXML;

                                   }

+                                  if (size_arrays->node[size_arrays->next].dflt) {

+                                    $$.refine->dflt = calloc(size_arrays->node[size_arrays->next].dflt, sizeof *$$.refine->dflt);

+                                    if (!$$.refine->dflt) {

+                                      LOGMEM;

+                                      YYABORT;

+                                    }

+                                    if (size_arrays->node[size_arrays->next].dflt > 1) {

+                                      if (trg->version < 2) {

+                                        LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "default", "refine");

+                                        YYABORT;

+                                      }

+                                      $$.refine->target_type = LYS_LEAFLIST;

+                                    } else {

+                                      if ($$.refine->target_type) {

+                                        if (trg->version < 2) {

+                                          $$.refine->target_type &= (LYS_LEAF | LYS_CHOICE);

+                                        } else {

+                                          /* YANG 1.1 */

+                                          $$.refine->target_type &= (LYS_LEAF | LYS_LEAFLIST | LYS_CHOICE);

+                                        }

+                                      } else {

+                                        if (trg->version < 2) {

+                                          $$.refine->target_type = LYS_LEAF | LYS_CHOICE;

+                                        } else {

+                                          /* YANG 1.1 */

+                                          $$.refine->target_type = LYS_LEAF | LYS_LEAFLIST | LYS_CHOICE;

+                                        }

+                                      }

+                                    }

+                                  }

                                   size_arrays->next++;

                                 } else {

                                   $$.index = size_arrays->size;

@@ -2776,27 +2851,23 @@
                                            }

                                          }

   |  refine_body_opt_stmts default_stmt { if (read_all) {

-                                            if ($1.refine->target_type) {

-                                              if ($1.refine->target_type & (LYS_LEAF | LYS_CHOICE)) {

-                                                $1.refine->target_type &= (LYS_LEAF | LYS_CHOICE);

-                                                if ($1.refine->mod.dflt) {

-                                                  LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "default", "refine");

-                                                  free(s);

-                                                  YYABORT;

+                                            int i;

+

+                                            $1.refine->dflt[$1.refine->dflt_size] = lydict_insert_zc(trg->ctx, s);

+                                            /* check for duplicity */

+                                            for (i = 0; i < $1.refine->dflt_size; ++i) {

+                                                if (ly_strequal($1.refine->dflt[i], $1.refine->dflt[$1.refine->dflt_size], 1)) {

+                                                    LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, $1.refine->dflt[$1.refine->dflt_size], "default");

+                                                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Duplicated default value \"%s\".", $1.refine->dflt[$1.refine->dflt_size]);

+                                                    $1.refine->dflt_size++;

+                                                    YYABORT;

                                                 }

-                                                $1.refine->mod.dflt = lydict_insert_zc(trg->ctx, s);

-                                              } else {

-                                                free(s);

-                                                LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "default", "refine");

-                                                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Invalid refine target nodetype for the substatements.");

-                                                YYABORT;

-                                              }

-                                            } else {

-                                              $1.refine->target_type = LYS_LEAF | LYS_CHOICE;

-                                              $1.refine->mod.dflt = lydict_insert_zc(trg->ctx, s);

                                             }

+                                            $1.refine->dflt_size++;

                                             s = NULL;

                                             $$ = $1;

+                                          } else {

+                                            size_arrays->node[$1.index].dflt++;

                                           }

                                         }

   |  refine_body_opt_stmts config_stmt { if (read_all) {

@@ -3357,9 +3428,10 @@
                                               LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "deviate", "deviation");

                                               YYABORT;

                                             }

-                                            if (yang_check_deviation(trg, actual, unres)) {

+                                            if (yang_check_deviation(trg, $7.deviation->dflt_check, unres)) {

                                               YYABORT;

                                             }

+                                            ly_set_free($7.deviation->dflt_check);

                                             free($7.deviation);

                                           }

                                         }

@@ -3372,6 +3444,7 @@
                                  $$.deviation->deviation->deviate = calloc(size_arrays->node[size_arrays->next].deviate, sizeof *$$.deviation->deviation->deviate);

                                  if (!$$.deviation->deviation->deviate) {

                                    LOGMEM;

+                                   ly_set_free($$.deviation->dflt_check);

                                    YYABORT;

                                  }

                                }

@@ -3385,6 +3458,7 @@
                              }

                            }

   |  deviation_opt_stmt description_stmt { if (read_all && yang_read_description(trg, $1.deviation->deviation, s, "deviation")) {

+                                             ly_set_free($1.deviation->dflt_check);

                                              free($1.deviation);

                                              YYABORT;

                                            }

@@ -3392,6 +3466,7 @@
                                            $$ = $1;

                                          }

   |  deviation_opt_stmt reference_stmt { if (read_all && yang_read_reference(trg, $1.deviation->deviation, s, "deviation")) {

+                                           ly_set_free($1.deviation->dflt_check);

                                            free($1.deviation);

                                            YYABORT;

                                          }

@@ -3449,6 +3524,11 @@
                                       YYABORT;

                                     }

                                   }

+                                  if (size_arrays->node[size_arrays->next].dflt) {

+                                    if (yang_read_deviate_default(trg, actual, size_arrays->node[size_arrays->next].dflt)) {

+                                      YYABORT;

+                                    }

+                                  }

                                   size_arrays->next++;

                                } else {

                                  $$.index = size_arrays->size;

@@ -3491,11 +3571,13 @@
                                         }

                                       }

   |  deviate_add_opt_stmt default_stmt { if (read_all) {

-                                           if (yang_read_deviate_default(trg->ctx, $1.deviation, s)) {

+                                           if (yang_fill_deviate_default(trg->ctx, $1.deviation, s)) {

                                              YYABORT;

                                            }

                                            s = NULL;

                                            $$ = $1;

+                                         } else {

+                                           size_arrays->node[$1.index].dflt++;

                                          }

                                        }

   |  deviate_add_opt_stmt config_stmt { if (read_all) {

@@ -3544,7 +3626,23 @@
 deviate_delete_end: ';'

   |  '{' stmtsep

          deviate_delete_opt_stmt

-      '}' ;

+      '}' { if (read_all) {

+              struct lys_node_leaflist *llist;

+              int i,j;

+

+              if ($3.deviation->deviate->dflt_size && $3.deviation->target->nodetype == LYS_LEAFLIST) {

+                /* consolidate the final list in the target after removing items from it */

+                llist = (struct lys_node_leaflist *)$3.deviation->target;

+                for (i = j = 0; j < llist->dflt_size; j++) {

+                  llist->dflt[i] = llist->dflt[j];

+                  if (llist->dflt[i]) {

+                    i++;

+                  }

+                }

+                llist->dflt_size = i + 1;

+              }

+            }

+          }

 

 deviate_delete_opt_stmt: @EMPTYDIR@ { if (read_all) {

                                     $$.deviation = actual;

@@ -3559,6 +3657,11 @@
                                         YYABORT;

                                       }

                                     }

+                                    if (size_arrays->node[size_arrays->next].dflt) {

+                                      if (yang_read_deviate_default(trg, actual, size_arrays->node[size_arrays->next].dflt)) {

+                                        YYABORT;

+                                      }

+                                    }

                                     size_arrays->next++;

                                   } else {

                                     $$.index = size_arrays->size;

@@ -3598,11 +3701,13 @@
                                            }

                                          }

   |  deviate_delete_opt_stmt default_stmt { if (read_all) {

-                                              if (yang_read_deviate_default(trg->ctx, $1.deviation, s)) {

+                                              if (yang_fill_deviate_default(trg->ctx, $1.deviation, s)) {

                                                 YYABORT;

                                               }

                                               s = NULL;

                                               $$ = $1;

+                                            } else {

+                                              size_arrays->node[$1.index].dflt++;

                                             }

                                           }

 

@@ -3618,14 +3723,27 @@
      '}' ;

 

 deviate_replace_opt_stmt: @EMPTYDIR@ { if (read_all) {

-                                    $$.deviation = actual;

-                                    actual_type = REPLACE_KEYWORD;

-                                  }

-                                }

+                                         $$.deviation = actual;

+                                         actual_type = REPLACE_KEYWORD;

+                                         if (size_arrays->node[size_arrays->next].dflt) {

+                                           if (yang_read_deviate_default(trg, actual, size_arrays->node[size_arrays->next].dflt)) {

+                                             YYABORT;

+                                           }

+                                        }

+                                        size_arrays->next++;

+                                      } else {

+                                        $$.index = size_arrays->size;

+                                        if (yang_add_elem(&size_arrays->node, &size_arrays->size)) {

+                                          LOGMEM;

+                                          YYABORT;

+                                        }

+                                      }

+                                    }

   |  deviate_replace_opt_stmt type_stmt stmtsep { if (read_all) {

                                             if (unres_schema_add_node(trg, unres, $1.deviation->deviate->type, UNRES_TYPE_DER, $1.deviation->target) == -1) {

                                               YYABORT;

                                             }

+                                            ly_set_add($1.deviation->dflt_check, $1.deviation->target, 0);

                                           }

                                         }

   |  deviate_replace_opt_stmt units_stmt { if (read_all) {

@@ -3637,11 +3755,13 @@
                                            }

                                          }

   |  deviate_replace_opt_stmt default_stmt { if (read_all) {

-                                               if (yang_read_deviate_default(trg->ctx, $1.deviation, s)) {

+                                               if (yang_fill_deviate_default(trg->ctx, $1.deviation, s)) {

                                                  YYABORT;

                                                }

                                                s = NULL;

                                                $$ = $1;

+                                             } else {

+                                               size_arrays->node[$1.index].dflt++;

                                              }

                                            }

   |  deviate_replace_opt_stmt config_stmt { if (read_all) {

diff --git a/tests/data/test_defaults.c b/tests/data/test_defaults.c
index 7abeaf2..ea4ff5a 100644
--- a/tests/data/test_defaults.c
+++ b/tests/data/test_defaults.c
@@ -71,6 +71,42 @@
 }
 
 static int
+setup_clean_f(void **state)
+{
+    struct state *st;
+    const char *ncwdfile = TESTS_DIR"/schema/yin/ietf/ietf-netconf-with-defaults.yin";
+    const char *ietfdir = TESTS_DIR"/schema/yin/ietf/";
+
+    (*state) = st = calloc(1, sizeof *st);
+    if (!st) {
+        fprintf(stderr, "Memory allocation error");
+        return -1;
+    }
+
+    /* libyang context */
+    st->ctx = ly_ctx_new(ietfdir);
+    if (!st->ctx) {
+        fprintf(stderr, "Failed to create context.\n");
+        goto error;
+    }
+
+    /* schemas */
+    if (!lys_parse_path(st->ctx, ncwdfile, LYS_IN_YIN)) {
+        fprintf(stderr, "Failed to load data model \"%s\".\n", ncwdfile);
+        goto error;
+    }
+
+    return 0;
+
+error:
+    ly_ctx_destroy(st->ctx, NULL);
+    free(st);
+    (*state) = NULL;
+
+    return -1;
+}
+
+static int
 teardown_f(void **state)
 {
     struct state *st = (*state);
@@ -474,6 +510,141 @@
     assert_string_equal(st->xml, xml);
 }
 
+static void
+test_leaflist_in10(void **state)
+{
+    struct state *st = (*state);
+    const struct lys_module *mod;
+    const char *yang = "module x {"
+"  namespace \"urn:x\";"
+"  prefix x;"
+"  leaf-list ll {"
+"    type string;"
+"    default \"one\";"
+"  }}";
+
+    const char *yin = "<module name=\"x\" xmlns=\"urn:ietf:params:xml:ns:yang:yin:1\">"
+"  <namespace uri=\"urn:x\"/>"
+"  <prefix value=\"x\"/>"
+"  <leaf-list name=\"ll\">"
+"    <type name=\"string\"/>"
+"    <default value=\"one\"/>"
+"  </leaf-list></module>";
+
+    mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
+    assert_ptr_equal(mod, NULL);
+    assert_int_equal(ly_vecode, LYVE_INSTMT);
+
+    mod = lys_parse_mem(st->ctx, yin, LYS_IN_YIN);
+    assert_ptr_equal(mod, NULL);
+    assert_int_equal(ly_vecode, LYVE_INSTMT);
+}
+
+static void
+test_leaflist_yin(void **state)
+{
+    struct state *st = (*state);
+    const struct lys_module *mod;
+    const char *yin = "<module name=\"x\" xmlns=\"urn:ietf:params:xml:ns:yang:yin:1\">"
+"  <yang-version value=\"1.1\"/>"
+"  <namespace uri=\"urn:x\"/>"
+"  <prefix value=\"x\"/>"
+"  <leaf-list name=\"ll\">"
+"    <type name=\"string\"/>"
+"    <default value=\"one\"/>"
+"    <default value=\"two\"/>"
+"  </leaf-list></module>";
+
+    const char *xml_empty = "<nacm xmlns=\"urn:ietf:params:xml:ns:yang:ietf-netconf-acm\">"
+"<enable-nacm>true</enable-nacm>"
+"<read-default>permit</read-default>"
+"<write-default>deny</write-default>"
+"<exec-default>permit</exec-default>"
+"<enable-external-groups>true</enable-external-groups>"
+"</nacm><ll xmlns=\"urn:x\">one</ll><ll xmlns=\"urn:x\">two</ll>";
+
+    const char *xml_one = "<ll xmlns=\"urn:x\">one</ll>"
+"<nacm xmlns=\"urn:ietf:params:xml:ns:yang:ietf-netconf-acm\">"
+"<enable-nacm>true</enable-nacm>"
+"<read-default>permit</read-default>"
+"<write-default>deny</write-default>"
+"<exec-default>permit</exec-default>"
+"<enable-external-groups>true</enable-external-groups>"
+"</nacm>";
+
+    mod = lys_parse_mem(st->ctx, yin, LYS_IN_YIN);
+    assert_ptr_not_equal(mod, NULL);
+
+    st->dt = NULL;
+    assert_int_equal(lyd_validate(&(st->dt), LYD_OPT_CONFIG | LYD_WD_ALL, st->ctx), 0);
+    assert_ptr_not_equal(st->dt, NULL);
+    assert_int_equal(lyd_print_mem(&(st->xml), st->dt, LYD_XML, LYP_WITHSIBLINGS), 0);
+    assert_ptr_not_equal(st->xml, NULL);
+    assert_string_equal(st->xml, xml_empty);
+
+    free(st->xml);
+    lyd_free_withsiblings(st->dt);
+
+    assert_ptr_not_equal(st->dt = lyd_new_path(NULL, st->ctx, "/x:ll", "one", 0, 0), NULL);
+    assert_int_equal(lyd_validate(&(st->dt), LYD_OPT_CONFIG | LYD_WD_ALL, st->ctx), 0);
+    assert_ptr_not_equal(st->dt, NULL);
+    assert_int_equal(lyd_print_mem(&(st->xml), st->dt, LYD_XML, LYP_WITHSIBLINGS), 0);
+    assert_ptr_not_equal(st->xml, NULL);
+    assert_string_equal(st->xml, xml_one);
+}
+
+static void
+test_leaflist_yang(void **state)
+{
+    struct state *st = (*state);
+    const struct lys_module *mod;
+    const char *yang = "module x {"
+"  yang-version 1.1;"
+"  namespace \"urn:x\";"
+"  prefix x;"
+"  leaf-list ll {"
+"    type string;"
+"    default \"one\";"
+"    default \"two\";"
+"  }}";
+    const char *xml_empty = "<nacm xmlns=\"urn:ietf:params:xml:ns:yang:ietf-netconf-acm\">"
+"<enable-nacm>true</enable-nacm>"
+"<read-default>permit</read-default>"
+"<write-default>deny</write-default>"
+"<exec-default>permit</exec-default>"
+"<enable-external-groups>true</enable-external-groups>"
+"</nacm><ll xmlns=\"urn:x\">one</ll><ll xmlns=\"urn:x\">two</ll>";
+
+    const char *xml_three = "<ll xmlns=\"urn:x\">three</ll>"
+"<nacm xmlns=\"urn:ietf:params:xml:ns:yang:ietf-netconf-acm\">"
+"<enable-nacm>true</enable-nacm>"
+"<read-default>permit</read-default>"
+"<write-default>deny</write-default>"
+"<exec-default>permit</exec-default>"
+"<enable-external-groups>true</enable-external-groups>"
+"</nacm>";
+
+    mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
+    assert_ptr_not_equal(mod, NULL);
+
+    st->dt = NULL;
+    assert_int_equal(lyd_validate(&(st->dt), LYD_OPT_CONFIG | LYD_WD_ALL, st->ctx), 0);
+    assert_ptr_not_equal(st->dt, NULL);
+    assert_int_equal(lyd_print_mem(&(st->xml), st->dt, LYD_XML, LYP_WITHSIBLINGS), 0);
+    assert_ptr_not_equal(st->xml, NULL);
+    assert_string_equal(st->xml, xml_empty);
+
+    free(st->xml);
+    lyd_free_withsiblings(st->dt);
+
+    assert_ptr_not_equal(st->dt = lyd_new_path(NULL, st->ctx, "/x:ll", "three", 0, 0), NULL);
+    assert_int_equal(lyd_validate(&(st->dt), LYD_OPT_CONFIG | LYD_WD_ALL, st->ctx), 0);
+    assert_ptr_not_equal(st->dt, NULL);
+    assert_int_equal(lyd_print_mem(&(st->xml), st->dt, LYD_XML, LYP_WITHSIBLINGS), 0);
+    assert_ptr_not_equal(st->xml, NULL);
+    assert_string_equal(st->xml, xml_three);
+}
+
 int main(void)
 {
     const struct CMUnitTest tests[] = {
@@ -487,7 +658,10 @@
                     cmocka_unit_test_setup_teardown(test_rpc_input_default, setup_f, teardown_f),
                     cmocka_unit_test_setup_teardown(test_rpc_output_default, setup_f, teardown_f),
                     cmocka_unit_test_setup_teardown(test_notif_default, setup_f, teardown_f),
-                    cmocka_unit_test_setup_teardown(test_feature, setup_f, teardown_f), };
+                    cmocka_unit_test_setup_teardown(test_feature, setup_f, teardown_f),
+                    cmocka_unit_test_setup_teardown(test_leaflist_in10, setup_clean_f, teardown_f),
+                    cmocka_unit_test_setup_teardown(test_leaflist_yang, setup_clean_f, teardown_f),
+                    cmocka_unit_test_setup_teardown(test_leaflist_yin, setup_clean_f, teardown_f), };
 
     return cmocka_run_group_tests(tests, NULL, NULL);
 }