From 35d2046918462fa9236c15d07bc716502bf5a20a Mon Sep 17 00:00:00 2001
From: Daniel Salzman <daniel.salzman@nic.cz>
Date: Wed, 29 May 2013 10:28:11 +0200
Subject: [PATCH] zscanner: fix bad EUI separator warning

refs #2388

Change-Id: Ib4b047618d84a3e0e38e809fcef748bff21fa5cc
---
 src/common/errcode.c                 |    1 +
 src/common/errcode.h                 |    1 +
 src/zscanner/scanner.c               | 1214 +++++++++++++-------------
 src/zscanner/scanner_body.rl         |   10 +-
 src/zscanner/test/cases/43_EUI48.out |    2 +-
 src/zscanner/test/cases/44_EUI64.out |    2 +-
 src/zscanner/test/processing.c       |    1 +
 7 files changed, 627 insertions(+), 604 deletions(-)

diff --git a/src/common/errcode.c b/src/common/errcode.c
index b9d588ae33..238639b732 100644
--- a/src/common/errcode.c
+++ b/src/common/errcode.c
@@ -148,6 +148,7 @@ const error_table_t knot_error_msgs[] = {
 	{ ZSCANNER_EBAD_EUI_LENGTH, "Bad EUI length." },
 	{ ZSCANNER_EBAD_L64_LENGTH, "Bad 64-bit locator." },
 	{ ZSCANNER_EBAD_CHAR_COLON, "Missing colon character." },
+	{ ZSCANNER_EBAD_CHAR_DASH, "Missing dash character." },
 
 	/* Encoding errors. */
 	{ KNOT_BASE64_ESIZE, "Invalid base64 string length." },
diff --git a/src/common/errcode.h b/src/common/errcode.h
index 29444af2c8..b85f6cb492 100644
--- a/src/common/errcode.h
+++ b/src/common/errcode.h
@@ -162,6 +162,7 @@ enum knot_error {
 	ZSCANNER_EBAD_EUI_LENGTH,
 	ZSCANNER_EBAD_L64_LENGTH,
 	ZSCANNER_EBAD_CHAR_COLON,
+	ZSCANNER_EBAD_CHAR_DASH,
 
 	/* Encoding errors. */
 	KNOT_BASE64_ESIZE,
diff --git a/src/zscanner/scanner.c b/src/zscanner/scanner.c
index ccd44b59e8..dd2d5a8c88 100644
--- a/src/zscanner/scanner.c
+++ b/src/zscanner/scanner.c
@@ -119,12 +119,12 @@ static const short _zone_scanner_actions[] = {
 	223, 1, 224, 1, 225, 1, 227, 1, 
 	229, 1, 230, 1, 231, 1, 232, 1, 
 	239, 1, 240, 1, 245, 1, 247, 1, 
-	251, 1, 254, 1, 255, 1, 256, 1, 
-	257, 1, 259, 1, 260, 1, 261, 1, 
-	262, 1, 264, 2, 0, 44, 2, 1, 
-	0, 2, 1, 27, 2, 1, 260, 2, 
-	1, 303, 2, 2, 27, 2, 2, 262, 
-	2, 3, 27, 2, 3, 262, 2, 4, 
+	252, 1, 255, 1, 256, 1, 257, 1, 
+	258, 1, 260, 1, 261, 1, 262, 1, 
+	263, 1, 265, 2, 0, 44, 2, 1, 
+	0, 2, 1, 27, 2, 1, 261, 2, 
+	1, 304, 2, 2, 27, 2, 2, 263, 
+	2, 3, 27, 2, 3, 263, 2, 4, 
 	65, 2, 4, 69, 2, 5, 6, 2, 
 	9, 10, 2, 12, 13, 2, 14, 10, 
 	2, 14, 11, 2, 15, 20, 2, 15, 
@@ -136,26 +136,26 @@ static const short _zone_scanner_actions[] = {
 	2, 23, 3, 2, 23, 24, 2, 23, 
 	228, 2, 25, 21, 2, 26, 1, 2, 
 	26, 2, 2, 26, 3, 2, 26, 85, 
-	2, 26, 262, 2, 27, 1, 2, 27, 
+	2, 26, 263, 2, 27, 1, 2, 27, 
 	2, 2, 27, 3, 2, 28, 4, 2, 
-	28, 259, 2, 28, 264, 2, 29, 21, 
+	28, 260, 2, 28, 265, 2, 29, 21, 
 	2, 30, 0, 2, 30, 1, 2, 30, 
 	2, 2, 30, 3, 2, 30, 24, 2, 
 	31, 36, 2, 32, 31, 2, 33, 65, 
-	2, 33, 245, 2, 33, 259, 2, 33, 
-	264, 2, 37, 233, 2, 37, 234, 2, 
+	2, 33, 245, 2, 33, 260, 2, 33, 
+	265, 2, 37, 233, 2, 37, 234, 2, 
 	37, 235, 2, 37, 236, 2, 37, 237, 
 	2, 37, 238, 2, 40, 0, 2, 40, 
 	1, 2, 40, 2, 2, 40, 3, 2, 
 	41, 0, 2, 41, 1, 2, 41, 2, 
 	2, 41, 3, 2, 41, 24, 2, 42, 
 	0, 2, 42, 1, 2, 42, 2, 2, 
-	42, 3, 2, 43, 258, 2, 44, 1, 
+	42, 3, 2, 43, 259, 2, 44, 1, 
 	2, 44, 2, 2, 44, 3, 2, 51, 
 	2, 2, 51, 3, 2, 51, 42, 2, 
 	51, 85, 2, 52, 53, 2, 54, 1, 
 	2, 54, 2, 2, 54, 3, 2, 55, 
-	259, 2, 56, 0, 2, 57, 58, 2, 
+	260, 2, 56, 0, 2, 57, 58, 2, 
 	59, 60, 2, 61, 0, 2, 61, 56, 
 	2, 67, 19, 2, 71, 63, 2, 72, 
 	2, 2, 72, 3, 2, 73, 4, 2, 
@@ -163,11 +163,11 @@ static const short _zone_scanner_actions[] = {
 	2, 80, 27, 2, 82, 83, 2, 84, 
 	1, 2, 84, 2, 2, 84, 3, 2, 
 	85, 1, 2, 85, 2, 2, 85, 3, 
-	2, 85, 262, 2, 86, 87, 2, 88, 
-	259, 2, 89, 90, 2, 91, 92, 2, 
+	2, 85, 263, 2, 86, 87, 2, 88, 
+	260, 2, 89, 90, 2, 91, 92, 2, 
 	93, 94, 2, 93, 95, 2, 93, 96, 
-	2, 97, 98, 2, 99, 259, 2, 102, 
-	259, 2, 103, 0, 2, 119, 259, 2, 
+	2, 97, 98, 2, 99, 260, 2, 102, 
+	260, 2, 103, 0, 2, 119, 260, 2, 
 	121, 0, 2, 122, 0, 2, 123, 0, 
 	2, 124, 0, 2, 125, 0, 2, 126, 
 	0, 2, 127, 0, 2, 128, 0, 2, 
@@ -177,7 +177,7 @@ static const short _zone_scanner_actions[] = {
 	137, 0, 2, 138, 0, 2, 139, 0, 
 	2, 140, 0, 2, 141, 0, 2, 142, 
 	0, 2, 143, 0, 2, 144, 0, 2, 
-	145, 259, 2, 146, 259, 2, 147, 259, 
+	145, 260, 2, 146, 260, 2, 147, 260, 
 	2, 148, 1, 2, 148, 2, 2, 148, 
 	3, 2, 149, 1, 2, 149, 2, 2, 
 	149, 3, 2, 150, 1, 2, 150, 2, 
@@ -273,46 +273,46 @@ static const short _zone_scanner_actions[] = {
 	232, 2, 2, 232, 3, 2, 239, 1, 
 	2, 239, 2, 2, 239, 3, 2, 240, 
 	1, 2, 240, 2, 2, 240, 3, 2, 
-	243, 0, 2, 244, 259, 2, 246, 100, 
-	2, 250, 100, 2, 259, 4, 2, 260, 
-	1, 2, 260, 27, 2, 262, 2, 2, 
-	262, 3, 2, 263, 260, 2, 264, 4, 
-	2, 264, 259, 2, 265, 258, 2, 266, 
-	258, 2, 267, 258, 2, 268, 258, 2, 
-	269, 258, 2, 270, 258, 2, 271, 258, 
-	2, 272, 258, 2, 273, 258, 2, 274, 
-	258, 2, 275, 258, 2, 276, 258, 2, 
-	277, 258, 2, 278, 258, 2, 279, 258, 
-	2, 280, 258, 2, 281, 258, 2, 282, 
-	258, 2, 283, 258, 2, 284, 258, 2, 
-	285, 258, 2, 286, 258, 2, 287, 258, 
-	2, 288, 258, 2, 289, 258, 2, 290, 
-	258, 2, 291, 258, 2, 292, 258, 2, 
-	293, 258, 2, 294, 258, 2, 295, 258, 
-	2, 296, 258, 2, 297, 258, 2, 298, 
-	258, 2, 299, 258, 2, 300, 258, 2, 
-	301, 258, 2, 302, 258, 2, 303, 1, 
+	243, 0, 2, 244, 260, 2, 246, 100, 
+	2, 251, 100, 2, 260, 4, 2, 261, 
+	1, 2, 261, 27, 2, 263, 2, 2, 
+	263, 3, 2, 264, 261, 2, 265, 4, 
+	2, 265, 260, 2, 266, 259, 2, 267, 
+	259, 2, 268, 259, 2, 269, 259, 2, 
+	270, 259, 2, 271, 259, 2, 272, 259, 
+	2, 273, 259, 2, 274, 259, 2, 275, 
+	259, 2, 276, 259, 2, 277, 259, 2, 
+	278, 259, 2, 279, 259, 2, 280, 259, 
+	2, 281, 259, 2, 282, 259, 2, 283, 
+	259, 2, 284, 259, 2, 285, 259, 2, 
+	286, 259, 2, 287, 259, 2, 288, 259, 
+	2, 289, 259, 2, 290, 259, 2, 291, 
+	259, 2, 292, 259, 2, 293, 259, 2, 
+	294, 259, 2, 295, 259, 2, 296, 259, 
+	2, 297, 259, 2, 298, 259, 2, 299, 
+	259, 2, 300, 259, 2, 301, 259, 2, 
+	302, 259, 2, 303, 259, 2, 304, 1, 
 	3, 0, 44, 1, 3, 0, 44, 2, 
 	3, 0, 44, 3, 3, 1, 77, 0, 
 	3, 1, 103, 0, 3, 1, 226, 0, 
-	3, 1, 243, 0, 3, 1, 260, 27, 
-	3, 1, 260, 303, 3, 1, 262, 303, 
-	3, 1, 303, 27, 3, 7, 1, 8, 
+	3, 1, 243, 0, 3, 1, 261, 27, 
+	3, 1, 261, 304, 3, 1, 263, 304, 
+	3, 1, 304, 27, 3, 7, 1, 8, 
 	3, 11, 17, 0, 3, 16, 75, 2, 
 	3, 16, 75, 3, 3, 19, 9, 10, 
 	3, 23, 1, 0, 3, 23, 24, 1, 
 	3, 23, 24, 2, 3, 23, 24, 3, 
 	3, 26, 1, 85, 3, 26, 2, 85, 
-	3, 26, 2, 262, 3, 26, 3, 85, 
-	3, 26, 3, 262, 3, 26, 85, 262, 
-	3, 26, 263, 260, 3, 26, 265, 258, 
-	3, 28, 81, 4, 3, 28, 259, 4, 
-	3, 28, 264, 4, 3, 28, 264, 259, 
+	3, 26, 2, 263, 3, 26, 3, 85, 
+	3, 26, 3, 263, 3, 26, 85, 263, 
+	3, 26, 264, 261, 3, 26, 266, 259, 
+	3, 28, 81, 4, 3, 28, 260, 4, 
+	3, 28, 265, 4, 3, 28, 265, 260, 
 	3, 30, 1, 0, 3, 30, 24, 1, 
 	3, 30, 24, 2, 3, 30, 24, 3, 
-	3, 30, 24, 228, 3, 32, 31, 260, 
-	3, 33, 145, 259, 3, 33, 147, 259, 
-	3, 33, 264, 4, 3, 33, 264, 259, 
+	3, 30, 24, 228, 3, 32, 31, 261, 
+	3, 33, 145, 260, 3, 33, 147, 260, 
+	3, 33, 265, 4, 3, 33, 265, 260, 
 	3, 35, 37, 233, 3, 35, 37, 234, 
 	3, 35, 37, 235, 3, 35, 37, 236, 
 	3, 35, 37, 237, 3, 35, 37, 238, 
@@ -326,10 +326,10 @@ static const short _zone_scanner_actions[] = {
 	3, 37, 237, 3, 3, 37, 238, 1, 
 	3, 37, 238, 2, 3, 37, 238, 3, 
 	3, 41, 24, 1, 3, 41, 24, 2, 
-	3, 41, 24, 3, 3, 43, 258, 1, 
-	3, 43, 258, 2, 3, 43, 258, 3, 
-	3, 43, 258, 260, 3, 45, 33, 65, 
-	3, 45, 33, 259, 3, 45, 33, 264, 
+	3, 41, 24, 3, 3, 43, 259, 1, 
+	3, 43, 259, 2, 3, 43, 259, 3, 
+	3, 43, 259, 261, 3, 45, 33, 65, 
+	3, 45, 33, 260, 3, 45, 33, 265, 
 	3, 50, 32, 31, 3, 51, 42, 0, 
 	3, 51, 42, 1, 3, 51, 42, 2, 
 	3, 51, 42, 3, 3, 51, 85, 1, 
@@ -340,16 +340,16 @@ static const short _zone_scanner_actions[] = {
 	3, 77, 0, 1, 3, 80, 25, 21, 
 	3, 80, 27, 1, 3, 80, 27, 2, 
 	3, 80, 27, 3, 3, 82, 25, 21, 
-	3, 82, 83, 260, 3, 85, 2, 262, 
-	3, 85, 3, 262, 3, 88, 99, 259, 
-	3, 88, 145, 259, 3, 89, 90, 0, 
+	3, 82, 83, 261, 3, 85, 2, 263, 
+	3, 85, 3, 263, 3, 88, 99, 260, 
+	3, 88, 145, 260, 3, 89, 90, 0, 
 	3, 89, 90, 1, 3, 89, 90, 2, 
 	3, 89, 90, 3, 3, 91, 92, 0, 
 	3, 91, 92, 1, 3, 91, 92, 2, 
 	3, 91, 92, 3, 3, 97, 98, 0, 
 	3, 97, 98, 1, 3, 97, 98, 2, 
 	3, 97, 98, 3, 3, 102, 104, 245, 
-	3, 102, 253, 259, 3, 145, 146, 259, 
+	3, 102, 254, 260, 3, 145, 146, 260, 
 	3, 186, 226, 0, 3, 187, 226, 0, 
 	3, 188, 226, 0, 3, 189, 226, 0, 
 	3, 190, 226, 0, 3, 191, 226, 0, 
@@ -371,197 +371,197 @@ static const short _zone_scanner_actions[] = {
 	3, 222, 226, 0, 3, 223, 226, 0, 
 	3, 224, 226, 0, 3, 225, 226, 0, 
 	3, 242, 32, 31, 3, 247, 248, 0, 
-	3, 247, 249, 0, 3, 251, 252, 0, 
-	3, 253, 102, 259, 3, 259, 4, 81, 
-	3, 260, 25, 21, 3, 260, 303, 1, 
-	3, 262, 303, 1, 3, 264, 259, 4, 
-	3, 265, 258, 1, 3, 265, 258, 2, 
-	3, 265, 258, 3, 3, 265, 258, 260, 
-	3, 265, 258, 262, 3, 266, 258, 1, 
-	3, 266, 258, 2, 3, 266, 258, 3, 
-	3, 266, 258, 260, 3, 267, 258, 1, 
-	3, 267, 258, 2, 3, 267, 258, 3, 
-	3, 267, 258, 260, 3, 268, 258, 1, 
-	3, 268, 258, 2, 3, 268, 258, 3, 
-	3, 268, 258, 260, 3, 269, 258, 1, 
-	3, 269, 258, 2, 3, 269, 258, 3, 
-	3, 269, 258, 260, 3, 270, 258, 1, 
-	3, 270, 258, 2, 3, 270, 258, 3, 
-	3, 270, 258, 260, 3, 271, 258, 1, 
-	3, 271, 258, 2, 3, 271, 258, 3, 
-	3, 271, 258, 260, 3, 272, 258, 1, 
-	3, 272, 258, 2, 3, 272, 258, 3, 
-	3, 272, 258, 260, 3, 273, 258, 1, 
-	3, 273, 258, 2, 3, 273, 258, 3, 
-	3, 273, 258, 260, 3, 274, 258, 1, 
-	3, 274, 258, 2, 3, 274, 258, 3, 
-	3, 274, 258, 260, 3, 275, 258, 1, 
-	3, 275, 258, 2, 3, 275, 258, 3, 
-	3, 275, 258, 260, 3, 276, 258, 1, 
-	3, 276, 258, 2, 3, 276, 258, 3, 
-	3, 276, 258, 260, 3, 277, 258, 1, 
-	3, 277, 258, 2, 3, 277, 258, 3, 
-	3, 277, 258, 260, 3, 278, 258, 1, 
-	3, 278, 258, 2, 3, 278, 258, 3, 
-	3, 278, 258, 260, 3, 279, 258, 1, 
-	3, 279, 258, 2, 3, 279, 258, 3, 
-	3, 279, 258, 260, 3, 280, 258, 1, 
-	3, 280, 258, 2, 3, 280, 258, 3, 
-	3, 280, 258, 260, 3, 281, 258, 1, 
-	3, 281, 258, 2, 3, 281, 258, 3, 
-	3, 281, 258, 260, 3, 282, 258, 1, 
-	3, 282, 258, 2, 3, 282, 258, 3, 
-	3, 282, 258, 260, 3, 283, 258, 1, 
-	3, 283, 258, 2, 3, 283, 258, 3, 
-	3, 283, 258, 260, 3, 284, 258, 1, 
-	3, 284, 258, 2, 3, 284, 258, 3, 
-	3, 284, 258, 260, 3, 285, 258, 1, 
-	3, 285, 258, 2, 3, 285, 258, 3, 
-	3, 285, 258, 260, 3, 286, 258, 1, 
-	3, 286, 258, 2, 3, 286, 258, 3, 
-	3, 286, 258, 260, 3, 287, 258, 1, 
-	3, 287, 258, 2, 3, 287, 258, 3, 
-	3, 287, 258, 260, 3, 288, 258, 1, 
-	3, 288, 258, 2, 3, 288, 258, 3, 
-	3, 288, 258, 260, 3, 289, 258, 1, 
-	3, 289, 258, 2, 3, 289, 258, 3, 
-	3, 289, 258, 260, 3, 290, 258, 1, 
-	3, 290, 258, 2, 3, 290, 258, 3, 
-	3, 290, 258, 260, 3, 291, 258, 1, 
-	3, 291, 258, 2, 3, 291, 258, 3, 
-	3, 291, 258, 260, 3, 292, 258, 1, 
-	3, 292, 258, 2, 3, 292, 258, 3, 
-	3, 292, 258, 260, 3, 293, 258, 1, 
-	3, 293, 258, 2, 3, 293, 258, 3, 
-	3, 293, 258, 260, 3, 294, 258, 1, 
-	3, 294, 258, 2, 3, 294, 258, 3, 
-	3, 294, 258, 260, 3, 295, 258, 1, 
-	3, 295, 258, 2, 3, 295, 258, 3, 
-	3, 295, 258, 260, 3, 296, 258, 1, 
-	3, 296, 258, 2, 3, 296, 258, 3, 
-	3, 296, 258, 260, 3, 297, 258, 1, 
-	3, 297, 258, 2, 3, 297, 258, 3, 
-	3, 297, 258, 260, 3, 298, 258, 1, 
-	3, 298, 258, 2, 3, 298, 258, 3, 
-	3, 298, 258, 260, 3, 299, 258, 1, 
-	3, 299, 258, 2, 3, 299, 258, 3, 
-	3, 299, 258, 260, 3, 300, 258, 1, 
-	3, 300, 258, 2, 3, 300, 258, 3, 
-	3, 300, 258, 260, 3, 301, 258, 1, 
-	3, 301, 258, 2, 3, 301, 258, 3, 
-	3, 301, 258, 260, 3, 302, 258, 1, 
-	3, 302, 258, 2, 3, 302, 258, 3, 
-	3, 302, 258, 260, 3, 303, 1, 27, 
-	4, 5, 7, 1, 8, 4, 14, 11, 
-	17, 0, 4, 16, 68, 0, 1, 4, 
-	26, 1, 262, 303, 4, 26, 1, 263, 
-	260, 4, 26, 1, 265, 258, 4, 26, 
-	2, 85, 262, 4, 26, 2, 263, 260, 
-	4, 26, 2, 265, 258, 4, 26, 3, 
-	85, 262, 4, 26, 3, 263, 260, 4, 
-	26, 3, 265, 258, 4, 26, 265, 258, 
-	260, 4, 26, 265, 258, 262, 4, 28, 
-	33, 264, 4, 4, 28, 45, 33, 264, 
-	4, 28, 264, 259, 4, 4, 32, 31, 
-	25, 21, 4, 33, 264, 259, 4, 4, 
-	35, 32, 31, 36, 4, 35, 37, 233, 
-	1, 4, 35, 37, 233, 2, 4, 35, 
-	37, 233, 3, 4, 35, 37, 234, 1, 
-	4, 35, 37, 234, 2, 4, 35, 37, 
-	234, 3, 4, 35, 37, 235, 1, 4, 
-	35, 37, 235, 2, 4, 35, 37, 235, 
-	3, 4, 35, 37, 236, 1, 4, 35, 
-	37, 236, 2, 4, 35, 37, 236, 3, 
-	4, 35, 37, 237, 1, 4, 35, 37, 
-	237, 2, 4, 35, 37, 237, 3, 4, 
-	35, 37, 238, 1, 4, 35, 37, 238, 
-	2, 4, 35, 37, 238, 3, 4, 37, 
-	235, 243, 0, 4, 37, 236, 243, 0, 
-	4, 37, 237, 243, 0, 4, 37, 238, 
-	243, 0, 4, 38, 34, 32, 31, 4, 
-	39, 34, 32, 31, 4, 43, 258, 1, 
-	260, 4, 45, 33, 4, 65, 4, 51, 
-	50, 32, 31, 4, 51, 64, 0, 1, 
-	4, 67, 19, 9, 10, 4, 72, 77, 
-	0, 1, 4, 74, 19, 9, 10, 4, 
-	82, 83, 25, 21, 4, 85, 1, 262, 
-	303, 4, 88, 145, 146, 259, 4, 89, 
-	90, 1, 0, 4, 91, 92, 1, 0, 
-	4, 97, 98, 1, 0, 4, 186, 1, 
-	226, 0, 4, 187, 1, 226, 0, 4, 
-	188, 1, 226, 0, 4, 189, 1, 226, 
-	0, 4, 190, 1, 226, 0, 4, 191, 
-	1, 226, 0, 4, 192, 1, 226, 0, 
-	4, 193, 1, 226, 0, 4, 194, 1, 
-	226, 0, 4, 195, 1, 226, 0, 4, 
-	196, 1, 226, 0, 4, 197, 1, 226, 
-	0, 4, 198, 1, 226, 0, 4, 199, 
-	1, 226, 0, 4, 200, 1, 226, 0, 
-	4, 201, 1, 226, 0, 4, 202, 1, 
-	226, 0, 4, 203, 1, 226, 0, 4, 
-	204, 1, 226, 0, 4, 205, 1, 226, 
-	0, 4, 206, 1, 226, 0, 4, 207, 
-	1, 226, 0, 4, 208, 1, 226, 0, 
-	4, 209, 1, 226, 0, 4, 210, 1, 
-	226, 0, 4, 211, 1, 226, 0, 4, 
-	212, 1, 226, 0, 4, 213, 1, 226, 
-	0, 4, 214, 1, 226, 0, 4, 215, 
-	1, 226, 0, 4, 216, 1, 226, 0, 
-	4, 217, 1, 226, 0, 4, 218, 1, 
-	226, 0, 4, 219, 1, 226, 0, 4, 
-	220, 1, 226, 0, 4, 221, 1, 226, 
-	0, 4, 222, 1, 226, 0, 4, 223, 
-	1, 226, 0, 4, 224, 1, 226, 0, 
-	4, 225, 1, 226, 0, 4, 265, 258, 
-	1, 260, 4, 265, 258, 2, 262, 4, 
-	265, 258, 3, 262, 4, 265, 258, 262, 
-	260, 4, 266, 258, 1, 260, 4, 267, 
-	258, 1, 260, 4, 268, 258, 1, 260, 
-	4, 269, 258, 1, 260, 4, 270, 258, 
-	1, 260, 4, 271, 258, 1, 260, 4, 
-	272, 258, 1, 260, 4, 273, 258, 1, 
-	260, 4, 274, 258, 1, 260, 4, 275, 
-	258, 1, 260, 4, 276, 258, 1, 260, 
-	4, 277, 258, 1, 260, 4, 278, 258, 
-	1, 260, 4, 279, 258, 1, 260, 4, 
-	280, 258, 1, 260, 4, 281, 258, 1, 
-	260, 4, 282, 258, 1, 260, 4, 283, 
-	258, 1, 260, 4, 284, 258, 1, 260, 
-	4, 285, 258, 1, 260, 4, 286, 258, 
-	1, 260, 4, 287, 258, 1, 260, 4, 
-	288, 258, 1, 260, 4, 289, 258, 1, 
-	260, 4, 290, 258, 1, 260, 4, 291, 
-	258, 1, 260, 4, 292, 258, 1, 260, 
-	4, 293, 258, 1, 260, 4, 294, 258, 
-	1, 260, 4, 295, 258, 1, 260, 4, 
-	296, 258, 1, 260, 4, 297, 258, 1, 
-	260, 4, 298, 258, 1, 260, 4, 299, 
-	258, 1, 260, 4, 300, 258, 1, 260, 
-	4, 301, 258, 1, 260, 4, 302, 258, 
-	1, 260, 5, 16, 75, 77, 0, 1, 
-	5, 26, 1, 85, 262, 303, 5, 26, 
-	1, 265, 258, 260, 5, 26, 2, 265, 
-	258, 262, 5, 26, 3, 265, 258, 262, 
-	5, 26, 265, 258, 262, 260, 5, 28, 
-	33, 264, 259, 4, 5, 32, 31, 260, 
-	25, 21, 5, 35, 37, 235, 243, 0, 
-	5, 35, 37, 236, 243, 0, 5, 35, 
-	37, 237, 243, 0, 5, 35, 37, 238, 
-	243, 0, 5, 37, 235, 1, 243, 0, 
-	5, 37, 236, 1, 243, 0, 5, 37, 
-	237, 1, 243, 0, 5, 37, 238, 1, 
-	243, 0, 5, 45, 33, 264, 259, 4, 
-	5, 82, 83, 260, 25, 21, 5, 241, 
-	38, 34, 32, 31, 5, 265, 258, 1, 
-	262, 303, 6, 26, 1, 265, 258, 262, 
-	303, 6, 28, 45, 33, 264, 259, 4, 
-	6, 35, 37, 235, 1, 243, 0, 6, 
-	35, 37, 236, 1, 243, 0, 6, 35, 
-	37, 237, 1, 243, 0, 6, 35, 37, 
-	238, 1, 243, 0, 6, 265, 258, 1, 
-	262, 260, 303, 6, 265, 258, 262, 260, 
-	303, 1, 7, 26, 1, 265, 258, 262, 
-	260, 303
+	3, 247, 249, 0, 3, 250, 102, 260, 
+	3, 252, 253, 0, 3, 254, 102, 260, 
+	3, 260, 4, 81, 3, 261, 25, 21, 
+	3, 261, 304, 1, 3, 263, 304, 1, 
+	3, 265, 260, 4, 3, 266, 259, 1, 
+	3, 266, 259, 2, 3, 266, 259, 3, 
+	3, 266, 259, 261, 3, 266, 259, 263, 
+	3, 267, 259, 1, 3, 267, 259, 2, 
+	3, 267, 259, 3, 3, 267, 259, 261, 
+	3, 268, 259, 1, 3, 268, 259, 2, 
+	3, 268, 259, 3, 3, 268, 259, 261, 
+	3, 269, 259, 1, 3, 269, 259, 2, 
+	3, 269, 259, 3, 3, 269, 259, 261, 
+	3, 270, 259, 1, 3, 270, 259, 2, 
+	3, 270, 259, 3, 3, 270, 259, 261, 
+	3, 271, 259, 1, 3, 271, 259, 2, 
+	3, 271, 259, 3, 3, 271, 259, 261, 
+	3, 272, 259, 1, 3, 272, 259, 2, 
+	3, 272, 259, 3, 3, 272, 259, 261, 
+	3, 273, 259, 1, 3, 273, 259, 2, 
+	3, 273, 259, 3, 3, 273, 259, 261, 
+	3, 274, 259, 1, 3, 274, 259, 2, 
+	3, 274, 259, 3, 3, 274, 259, 261, 
+	3, 275, 259, 1, 3, 275, 259, 2, 
+	3, 275, 259, 3, 3, 275, 259, 261, 
+	3, 276, 259, 1, 3, 276, 259, 2, 
+	3, 276, 259, 3, 3, 276, 259, 261, 
+	3, 277, 259, 1, 3, 277, 259, 2, 
+	3, 277, 259, 3, 3, 277, 259, 261, 
+	3, 278, 259, 1, 3, 278, 259, 2, 
+	3, 278, 259, 3, 3, 278, 259, 261, 
+	3, 279, 259, 1, 3, 279, 259, 2, 
+	3, 279, 259, 3, 3, 279, 259, 261, 
+	3, 280, 259, 1, 3, 280, 259, 2, 
+	3, 280, 259, 3, 3, 280, 259, 261, 
+	3, 281, 259, 1, 3, 281, 259, 2, 
+	3, 281, 259, 3, 3, 281, 259, 261, 
+	3, 282, 259, 1, 3, 282, 259, 2, 
+	3, 282, 259, 3, 3, 282, 259, 261, 
+	3, 283, 259, 1, 3, 283, 259, 2, 
+	3, 283, 259, 3, 3, 283, 259, 261, 
+	3, 284, 259, 1, 3, 284, 259, 2, 
+	3, 284, 259, 3, 3, 284, 259, 261, 
+	3, 285, 259, 1, 3, 285, 259, 2, 
+	3, 285, 259, 3, 3, 285, 259, 261, 
+	3, 286, 259, 1, 3, 286, 259, 2, 
+	3, 286, 259, 3, 3, 286, 259, 261, 
+	3, 287, 259, 1, 3, 287, 259, 2, 
+	3, 287, 259, 3, 3, 287, 259, 261, 
+	3, 288, 259, 1, 3, 288, 259, 2, 
+	3, 288, 259, 3, 3, 288, 259, 261, 
+	3, 289, 259, 1, 3, 289, 259, 2, 
+	3, 289, 259, 3, 3, 289, 259, 261, 
+	3, 290, 259, 1, 3, 290, 259, 2, 
+	3, 290, 259, 3, 3, 290, 259, 261, 
+	3, 291, 259, 1, 3, 291, 259, 2, 
+	3, 291, 259, 3, 3, 291, 259, 261, 
+	3, 292, 259, 1, 3, 292, 259, 2, 
+	3, 292, 259, 3, 3, 292, 259, 261, 
+	3, 293, 259, 1, 3, 293, 259, 2, 
+	3, 293, 259, 3, 3, 293, 259, 261, 
+	3, 294, 259, 1, 3, 294, 259, 2, 
+	3, 294, 259, 3, 3, 294, 259, 261, 
+	3, 295, 259, 1, 3, 295, 259, 2, 
+	3, 295, 259, 3, 3, 295, 259, 261, 
+	3, 296, 259, 1, 3, 296, 259, 2, 
+	3, 296, 259, 3, 3, 296, 259, 261, 
+	3, 297, 259, 1, 3, 297, 259, 2, 
+	3, 297, 259, 3, 3, 297, 259, 261, 
+	3, 298, 259, 1, 3, 298, 259, 2, 
+	3, 298, 259, 3, 3, 298, 259, 261, 
+	3, 299, 259, 1, 3, 299, 259, 2, 
+	3, 299, 259, 3, 3, 299, 259, 261, 
+	3, 300, 259, 1, 3, 300, 259, 2, 
+	3, 300, 259, 3, 3, 300, 259, 261, 
+	3, 301, 259, 1, 3, 301, 259, 2, 
+	3, 301, 259, 3, 3, 301, 259, 261, 
+	3, 302, 259, 1, 3, 302, 259, 2, 
+	3, 302, 259, 3, 3, 302, 259, 261, 
+	3, 303, 259, 1, 3, 303, 259, 2, 
+	3, 303, 259, 3, 3, 303, 259, 261, 
+	3, 304, 1, 27, 4, 5, 7, 1, 
+	8, 4, 14, 11, 17, 0, 4, 16, 
+	68, 0, 1, 4, 26, 1, 263, 304, 
+	4, 26, 1, 264, 261, 4, 26, 1, 
+	266, 259, 4, 26, 2, 85, 263, 4, 
+	26, 2, 264, 261, 4, 26, 2, 266, 
+	259, 4, 26, 3, 85, 263, 4, 26, 
+	3, 264, 261, 4, 26, 3, 266, 259, 
+	4, 26, 266, 259, 261, 4, 26, 266, 
+	259, 263, 4, 28, 33, 265, 4, 4, 
+	28, 45, 33, 265, 4, 28, 265, 260, 
+	4, 4, 32, 31, 25, 21, 4, 33, 
+	265, 260, 4, 4, 35, 32, 31, 36, 
+	4, 35, 37, 233, 1, 4, 35, 37, 
+	233, 2, 4, 35, 37, 233, 3, 4, 
+	35, 37, 234, 1, 4, 35, 37, 234, 
+	2, 4, 35, 37, 234, 3, 4, 35, 
+	37, 235, 1, 4, 35, 37, 235, 2, 
+	4, 35, 37, 235, 3, 4, 35, 37, 
+	236, 1, 4, 35, 37, 236, 2, 4, 
+	35, 37, 236, 3, 4, 35, 37, 237, 
+	1, 4, 35, 37, 237, 2, 4, 35, 
+	37, 237, 3, 4, 35, 37, 238, 1, 
+	4, 35, 37, 238, 2, 4, 35, 37, 
+	238, 3, 4, 37, 235, 243, 0, 4, 
+	37, 236, 243, 0, 4, 37, 237, 243, 
+	0, 4, 37, 238, 243, 0, 4, 38, 
+	34, 32, 31, 4, 39, 34, 32, 31, 
+	4, 43, 259, 1, 261, 4, 45, 33, 
+	4, 65, 4, 51, 50, 32, 31, 4, 
+	51, 64, 0, 1, 4, 67, 19, 9, 
+	10, 4, 72, 77, 0, 1, 4, 74, 
+	19, 9, 10, 4, 82, 83, 25, 21, 
+	4, 85, 1, 263, 304, 4, 88, 145, 
+	146, 260, 4, 89, 90, 1, 0, 4, 
+	91, 92, 1, 0, 4, 97, 98, 1, 
+	0, 4, 186, 1, 226, 0, 4, 187, 
+	1, 226, 0, 4, 188, 1, 226, 0, 
+	4, 189, 1, 226, 0, 4, 190, 1, 
+	226, 0, 4, 191, 1, 226, 0, 4, 
+	192, 1, 226, 0, 4, 193, 1, 226, 
+	0, 4, 194, 1, 226, 0, 4, 195, 
+	1, 226, 0, 4, 196, 1, 226, 0, 
+	4, 197, 1, 226, 0, 4, 198, 1, 
+	226, 0, 4, 199, 1, 226, 0, 4, 
+	200, 1, 226, 0, 4, 201, 1, 226, 
+	0, 4, 202, 1, 226, 0, 4, 203, 
+	1, 226, 0, 4, 204, 1, 226, 0, 
+	4, 205, 1, 226, 0, 4, 206, 1, 
+	226, 0, 4, 207, 1, 226, 0, 4, 
+	208, 1, 226, 0, 4, 209, 1, 226, 
+	0, 4, 210, 1, 226, 0, 4, 211, 
+	1, 226, 0, 4, 212, 1, 226, 0, 
+	4, 213, 1, 226, 0, 4, 214, 1, 
+	226, 0, 4, 215, 1, 226, 0, 4, 
+	216, 1, 226, 0, 4, 217, 1, 226, 
+	0, 4, 218, 1, 226, 0, 4, 219, 
+	1, 226, 0, 4, 220, 1, 226, 0, 
+	4, 221, 1, 226, 0, 4, 222, 1, 
+	226, 0, 4, 223, 1, 226, 0, 4, 
+	224, 1, 226, 0, 4, 225, 1, 226, 
+	0, 4, 266, 259, 1, 261, 4, 266, 
+	259, 2, 263, 4, 266, 259, 3, 263, 
+	4, 266, 259, 263, 261, 4, 267, 259, 
+	1, 261, 4, 268, 259, 1, 261, 4, 
+	269, 259, 1, 261, 4, 270, 259, 1, 
+	261, 4, 271, 259, 1, 261, 4, 272, 
+	259, 1, 261, 4, 273, 259, 1, 261, 
+	4, 274, 259, 1, 261, 4, 275, 259, 
+	1, 261, 4, 276, 259, 1, 261, 4, 
+	277, 259, 1, 261, 4, 278, 259, 1, 
+	261, 4, 279, 259, 1, 261, 4, 280, 
+	259, 1, 261, 4, 281, 259, 1, 261, 
+	4, 282, 259, 1, 261, 4, 283, 259, 
+	1, 261, 4, 284, 259, 1, 261, 4, 
+	285, 259, 1, 261, 4, 286, 259, 1, 
+	261, 4, 287, 259, 1, 261, 4, 288, 
+	259, 1, 261, 4, 289, 259, 1, 261, 
+	4, 290, 259, 1, 261, 4, 291, 259, 
+	1, 261, 4, 292, 259, 1, 261, 4, 
+	293, 259, 1, 261, 4, 294, 259, 1, 
+	261, 4, 295, 259, 1, 261, 4, 296, 
+	259, 1, 261, 4, 297, 259, 1, 261, 
+	4, 298, 259, 1, 261, 4, 299, 259, 
+	1, 261, 4, 300, 259, 1, 261, 4, 
+	301, 259, 1, 261, 4, 302, 259, 1, 
+	261, 4, 303, 259, 1, 261, 5, 16, 
+	75, 77, 0, 1, 5, 26, 1, 85, 
+	263, 304, 5, 26, 1, 266, 259, 261, 
+	5, 26, 2, 266, 259, 263, 5, 26, 
+	3, 266, 259, 263, 5, 26, 266, 259, 
+	263, 261, 5, 28, 33, 265, 260, 4, 
+	5, 32, 31, 261, 25, 21, 5, 35, 
+	37, 235, 243, 0, 5, 35, 37, 236, 
+	243, 0, 5, 35, 37, 237, 243, 0, 
+	5, 35, 37, 238, 243, 0, 5, 37, 
+	235, 1, 243, 0, 5, 37, 236, 1, 
+	243, 0, 5, 37, 237, 1, 243, 0, 
+	5, 37, 238, 1, 243, 0, 5, 45, 
+	33, 265, 260, 4, 5, 82, 83, 261, 
+	25, 21, 5, 241, 38, 34, 32, 31, 
+	5, 266, 259, 1, 263, 304, 6, 26, 
+	1, 266, 259, 263, 304, 6, 28, 45, 
+	33, 265, 260, 4, 6, 35, 37, 235, 
+	1, 243, 0, 6, 35, 37, 236, 1, 
+	243, 0, 6, 35, 37, 237, 1, 243, 
+	0, 6, 35, 37, 238, 1, 243, 0, 
+	6, 266, 259, 1, 263, 261, 304, 6, 
+	266, 259, 263, 261, 304, 1, 7, 26, 
+	1, 266, 259, 263, 261, 304
 };
 
 static const short _zone_scanner_cond_offsets[] = {
@@ -3838,55 +3838,55 @@ static const short _zone_scanner_indicies[] = {
 	3136, 3136, 2275, 3137, 3137, 3137, 2275, 3138, 
 	3138, 3138, 2275, 3140, 3134, 3140, 3140, 3140, 
 	3139, 3128, 3129, 69, 3141, 3141, 3141, 2275, 
-	3142, 3142, 3142, 2275, 3143, 2275, 3144, 3144, 
-	3144, 2275, 3145, 3145, 3145, 2275, 3146, 3143, 
-	3146, 3146, 3146, 2275, 3147, 3147, 3147, 2275, 
-	3148, 3148, 3148, 2275, 3149, 2275, 3150, 3150, 
-	3150, 2275, 3151, 3151, 3151, 2275, 3152, 3149, 
-	3152, 3152, 3152, 2275, 3154, 3154, 3155, 3156, 
-	3157, 3158, 3158, 3158, 19, 20, 3159, 3160, 
-	3158, 3158, 3158, 3153, 3161, 3161, 3162, 3163, 
-	3164, 3165, 67, 3166, 3165, 19, 20, 3167, 
-	3168, 121, 122, 3169, 3170, 67, 67, 3165, 
-	67, 3165, 67, 3165, 67, 697, 3172, 3172, 
-	3155, 3173, 3174, 3158, 3175, 3176, 3177, 3178, 
-	3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 
-	3187, 3188, 3158, 3158, 3175, 3176, 3177, 3178, 
-	3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 
-	3187, 3188, 19, 20, 3189, 3190, 3158, 3158, 
-	3158, 3171, 3172, 3172, 3155, 3173, 3174, 3158, 
-	3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 
-	3201, 3202, 3203, 3204, 3205, 3206, 3158, 3158, 
-	3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 
-	3201, 3202, 3203, 3204, 3205, 3206, 19, 20, 
-	3189, 3190, 3158, 3192, 3158, 3158, 3191, 3208, 
-	3208, 3209, 3210, 3211, 3212, 3212, 3212, 3213, 
-	3214, 3215, 3216, 3212, 3212, 3212, 3207, 3154, 
-	3154, 3155, 3217, 3218, 3158, 3193, 3194, 3195, 
-	3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 
-	3204, 3205, 3206, 3158, 3158, 3193, 3194, 3195, 
-	3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 
-	3204, 3205, 3206, 19, 20, 3219, 3160, 3158, 
-	3192, 3158, 3158, 3191, 3220, 3220, 3155, 3221, 
-	3222, 3158, 3158, 3158, 88, 89, 3223, 3224, 
-	3158, 3158, 3158, 697, 3225, 3225, 3162, 3226, 
-	3227, 3165, 67, 3166, 3165, 88, 89, 3223, 
-	3228, 96, 97, 3223, 3229, 67, 67, 3165, 
-	67, 3165, 67, 3165, 67, 697, 3161, 3161, 
-	3162, 3163, 3164, 3165, 67, 3232, 3233, 3234, 
-	3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 
-	3243, 3244, 3245, 3166, 3165, 3232, 3233, 3234, 
-	3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 
-	3243, 3244, 3245, 19, 20, 3167, 3168, 121, 
-	122, 3169, 3170, 67, 67, 3165, 3231, 67, 
-	3165, 67, 3165, 67, 3230, 3225, 3225, 3162, 
-	3226, 3227, 3165, 67, 3232, 3233, 3234, 3235, 
+	3142, 3142, 3142, 2275, 3144, 3143, 3145, 3145, 
+	3145, 2275, 3146, 3146, 3146, 2275, 3147, 3144, 
+	3147, 3147, 3147, 3143, 3148, 3148, 3148, 2275, 
+	3149, 3149, 3149, 2275, 3150, 3143, 3151, 3151, 
+	3151, 2275, 3152, 3152, 3152, 2275, 3153, 3150, 
+	3153, 3153, 3153, 3143, 3155, 3155, 3156, 3157, 
+	3158, 3159, 3159, 3159, 19, 20, 3160, 3161, 
+	3159, 3159, 3159, 3154, 3162, 3162, 3163, 3164, 
+	3165, 3166, 67, 3167, 3166, 19, 20, 3168, 
+	3169, 121, 122, 3170, 3171, 67, 67, 3166, 
+	67, 3166, 67, 3166, 67, 697, 3173, 3173, 
+	3156, 3174, 3175, 3159, 3176, 3177, 3178, 3179, 
+	3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 
+	3188, 3189, 3159, 3159, 3176, 3177, 3178, 3179, 
+	3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 
+	3188, 3189, 19, 20, 3190, 3191, 3159, 3159, 
+	3159, 3172, 3173, 3173, 3156, 3174, 3175, 3159, 
+	3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 
+	3202, 3203, 3204, 3205, 3206, 3207, 3159, 3159, 
+	3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 
+	3202, 3203, 3204, 3205, 3206, 3207, 19, 20, 
+	3190, 3191, 3159, 3193, 3159, 3159, 3192, 3209, 
+	3209, 3210, 3211, 3212, 3213, 3213, 3213, 3214, 
+	3215, 3216, 3217, 3213, 3213, 3213, 3208, 3155, 
+	3155, 3156, 3218, 3219, 3159, 3194, 3195, 3196, 
+	3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 
+	3205, 3206, 3207, 3159, 3159, 3194, 3195, 3196, 
+	3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 
+	3205, 3206, 3207, 19, 20, 3220, 3161, 3159, 
+	3193, 3159, 3159, 3192, 3221, 3221, 3156, 3222, 
+	3223, 3159, 3159, 3159, 88, 89, 3224, 3225, 
+	3159, 3159, 3159, 697, 3226, 3226, 3163, 3227, 
+	3228, 3166, 67, 3167, 3166, 88, 89, 3224, 
+	3229, 96, 97, 3224, 3230, 67, 67, 3166, 
+	67, 3166, 67, 3166, 67, 697, 3162, 3162, 
+	3163, 3164, 3165, 3166, 67, 3233, 3234, 3235, 
 	3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 
-	3244, 3245, 3166, 3165, 3232, 3233, 3234, 3235, 
+	3244, 3245, 3246, 3167, 3166, 3233, 3234, 3235, 
 	3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 
-	3244, 3245, 88, 89, 3246, 3228, 96, 97, 
-	3246, 3229, 67, 67, 3165, 3231, 67, 3165, 
-	67, 3165, 67, 3230, 619, 619, 619, 820, 
+	3244, 3245, 3246, 19, 20, 3168, 3169, 121, 
+	122, 3170, 3171, 67, 67, 3166, 3232, 67, 
+	3166, 67, 3166, 67, 3231, 3226, 3226, 3163, 
+	3227, 3228, 3166, 67, 3233, 3234, 3235, 3236, 
+	3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 
+	3245, 3246, 3167, 3166, 3233, 3234, 3235, 3236, 
+	3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 
+	3245, 3246, 88, 89, 3247, 3229, 96, 97, 
+	3247, 3230, 67, 67, 3166, 3232, 67, 3166, 
+	67, 3166, 67, 3231, 619, 619, 619, 820, 
 	817, 820, 819, 820, 817, 821, 817, 816, 
 	619, 619, 619, 957, 957, 958, 959, 927, 
 	929, 930, 928, 960, 961, 928, 928, 928, 
@@ -4331,20 +4331,20 @@ static const short _zone_scanner_trans_targs[] = {
 	1033, 1032, 1034, 1141, 1033, 1036, 1037, 1037, 
 	1037, 1036, 1037, 1047, 1037, 1037, 1037, 1038, 
 	1037, 1047, 1039, 1040, 1041, 0, 1042, 1043, 
-	1044, 1045, 1046, 0, 1142, 1049, 1050, 1051, 
-	1052, 1053, 1143, 1055, 1056, 1057, 1058, 1059, 
-	1144, 0, 1, 139, 1, 1, 147, 1065, 
-	243, 14, 180, 14, 14, 190, 209, 1068, 
-	223, 1069, 226, 0, 129, 129, 129, 157, 
-	230, 231, 232, 233, 245, 235, 236, 237, 
-	238, 239, 240, 241, 242, 1063, 244, 0, 
-	150, 157, 230, 231, 232, 233, 234, 235, 
-	236, 237, 238, 239, 240, 241, 242, 0, 
-	1, 139, 1, 1, 147, 1060, 138, 1065, 
-	243, 1, 1, 1065, 161, 161, 161, 1065, 
-	162, 165, 165, 165, 179, 213, 0, 191, 
-	194, 196, 197, 198, 199, 200, 201, 202, 
-	203, 204, 205, 206, 207, 208, 1065
+	1044, 1045, 1046, 0, 1142, 1049, 1050, 0, 
+	1051, 1052, 1053, 1143, 1055, 1056, 1057, 1058, 
+	1059, 1144, 0, 1, 139, 1, 1, 147, 
+	1065, 243, 14, 180, 14, 14, 190, 209, 
+	1068, 223, 1069, 226, 0, 129, 129, 129, 
+	157, 230, 231, 232, 233, 245, 235, 236, 
+	237, 238, 239, 240, 241, 242, 1063, 244, 
+	0, 150, 157, 230, 231, 232, 233, 234, 
+	235, 236, 237, 238, 239, 240, 241, 242, 
+	0, 1, 139, 1, 1, 147, 1060, 138, 
+	1065, 243, 1, 1, 1065, 161, 161, 161, 
+	1065, 162, 165, 165, 165, 179, 213, 0, 
+	191, 194, 196, 197, 198, 199, 200, 201, 
+	202, 203, 204, 205, 206, 207, 208, 1065
 };
 
 static const short _zone_scanner_trans_actions[] = {
@@ -4355,177 +4355,177 @@ static const short _zone_scanner_trans_actions[] = {
 	57, 671, 101, 345, 0, 5, 7, 95, 
 	95, 95, 95, 95, 95, 95, 95, 95, 
 	95, 95, 95, 95, 95, 3, 0, 1592, 
-	1595, 2380, 2384, 0, 0, 0, 2376, 1595, 
-	2388, 3477, 2388, 339, 0, 337, 5, 7, 
+	1595, 2384, 2388, 0, 0, 0, 2380, 1595, 
+	2392, 3481, 2392, 339, 0, 337, 5, 7, 
 	0, 3, 0, 339, 356, 339, 1571, 343, 
-	1580, 1583, 2368, 343, 9, 0, 5, 7, 
+	1580, 1583, 2372, 343, 9, 0, 5, 7, 
 	1709, 0, 1586, 341, 0, 5, 7, 0, 
-	2364, 339, 339, 359, 0, 3082, 5, 7, 
+	2368, 339, 339, 359, 0, 3086, 5, 7, 
 	1860, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 
 	2096, 2096, 2096, 2096, 2096, 2096, 2096, 3, 
-	0, 1574, 339, 356, 339, 3778, 680, 2100, 
-	2104, 3252, 680, 1589, 0, 5, 7, 359, 
-	0, 0, 0, 0, 0, 1649, 2672, 2676, 
-	2668, 1649, 2680, 3582, 2680, 0, 5, 7, 
-	0, 0, 0, 1601, 2416, 2420, 2412, 1601, 
-	2424, 3502, 2424, 0, 0, 0, 0, 0, 
-	0, 1676, 2816, 2820, 2812, 1676, 2824, 3627, 
-	2824, 0, 0, 0, 0, 1652, 2688, 2692, 
-	2684, 1652, 2696, 3587, 2696, 0, 0, 0, 
-	1673, 2800, 2804, 2796, 1673, 2808, 3622, 2808, 
-	1658, 2720, 2724, 2716, 1658, 2728, 3597, 2728, 
-	0, 0, 0, 0, 0, 1703, 2960, 2964, 
-	2956, 1703, 2968, 3672, 2968, 0, 1706, 2976, 
-	2980, 2972, 1706, 2984, 3677, 2984, 0, 0, 
-	0, 0, 1610, 2464, 2468, 2460, 1610, 2472, 
-	3517, 2472, 0, 0, 99, 665, 668, 662, 
+	0, 1574, 339, 356, 339, 3782, 680, 2100, 
+	2104, 3256, 680, 1589, 0, 5, 7, 359, 
+	0, 0, 0, 0, 0, 1649, 2676, 2680, 
+	2672, 1649, 2684, 3586, 2684, 0, 5, 7, 
+	0, 0, 0, 1601, 2420, 2424, 2416, 1601, 
+	2428, 3506, 2428, 0, 0, 0, 0, 0, 
+	0, 1676, 2820, 2824, 2816, 1676, 2828, 3631, 
+	2828, 0, 0, 0, 0, 1652, 2692, 2696, 
+	2688, 1652, 2700, 3591, 2700, 0, 0, 0, 
+	1673, 2804, 2808, 2800, 1673, 2812, 3626, 2812, 
+	1658, 2724, 2728, 2720, 1658, 2732, 3601, 2732, 
+	0, 0, 0, 0, 0, 1703, 2964, 2968, 
+	2960, 1703, 2972, 3676, 2972, 0, 1706, 2980, 
+	2984, 2976, 1706, 2988, 3681, 2988, 0, 0, 
+	0, 0, 1610, 2468, 2472, 2464, 1610, 2476, 
+	3521, 2476, 0, 0, 99, 665, 668, 662, 
 	99, 0, 5, 7, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 3, 0, 0, 0, 0, 0, 
-	0, 0, 1664, 2752, 2756, 2748, 1664, 2760, 
-	3607, 2760, 0, 0, 0, 1631, 2576, 2580, 
-	2572, 1631, 2584, 3552, 2584, 1646, 2656, 2660, 
-	2652, 1646, 2664, 3577, 2664, 0, 0, 0, 
-	0, 0, 1694, 2912, 2916, 2908, 1694, 2920, 
-	3657, 2920, 0, 1697, 2928, 2932, 2924, 1697, 
-	2936, 3662, 2936, 0, 1637, 2608, 2612, 2604, 
-	1637, 2616, 3562, 2616, 1700, 2944, 2948, 2940, 
-	1700, 2952, 3667, 2952, 0, 0, 0, 0, 
-	0, 1613, 2480, 2484, 2476, 1613, 2488, 3522, 
-	2488, 1616, 2496, 2500, 2492, 1616, 2504, 3527, 
-	2504, 0, 0, 0, 0, 0, 0, 1643, 
-	2640, 2644, 2636, 1643, 2648, 3572, 2648, 0, 
-	1691, 2896, 2900, 2892, 1691, 2904, 3652, 2904, 
-	1598, 2400, 2404, 0, 2396, 1598, 2408, 3497, 
-	2408, 0, 1670, 2784, 2788, 0, 2780, 1670, 
-	2792, 3617, 2792, 1679, 2832, 2836, 0, 2828, 
-	1679, 2840, 3632, 2840, 0, 0, 0, 0, 
-	1682, 2848, 2852, 2844, 1682, 2856, 3637, 2856, 
-	0, 0, 1607, 2448, 2452, 2444, 1607, 2456, 
-	3512, 2456, 0, 0, 0, 1622, 2528, 2532, 
-	2524, 1622, 2536, 3537, 2536, 0, 0, 0, 
-	1667, 2768, 2772, 2764, 1667, 2776, 3612, 2776, 
-	1628, 2560, 2564, 2556, 1628, 2568, 3547, 2568, 
-	0, 0, 0, 0, 0, 1604, 2432, 2436, 
-	2428, 1604, 2440, 3507, 2440, 0, 1688, 2880, 
-	2884, 2876, 1688, 2888, 3647, 2888, 0, 1640, 
-	2624, 2628, 2620, 1640, 2632, 3567, 2632, 0, 
-	0, 0, 1661, 2736, 2740, 2732, 1661, 2744, 
-	3602, 2744, 0, 0, 0, 0, 0, 1685, 
-	2864, 2868, 2860, 1685, 2872, 3642, 2872, 0, 
-	1619, 2512, 2516, 2508, 1619, 2520, 3532, 2520, 
+	0, 0, 1664, 2756, 2760, 2752, 1664, 2764, 
+	3611, 2764, 0, 0, 0, 1631, 2580, 2584, 
+	2576, 1631, 2588, 3556, 2588, 1646, 2660, 2664, 
+	2656, 1646, 2668, 3581, 2668, 0, 0, 0, 
+	0, 0, 1694, 2916, 2920, 2912, 1694, 2924, 
+	3661, 2924, 0, 1697, 2932, 2936, 2928, 1697, 
+	2940, 3666, 2940, 0, 1637, 2612, 2616, 2608, 
+	1637, 2620, 3566, 2620, 1700, 2948, 2952, 2944, 
+	1700, 2956, 3671, 2956, 0, 0, 0, 0, 
+	0, 1613, 2484, 2488, 2480, 1613, 2492, 3526, 
+	2492, 1616, 2500, 2504, 2496, 1616, 2508, 3531, 
+	2508, 0, 0, 0, 0, 0, 0, 1643, 
+	2644, 2648, 2640, 1643, 2652, 3576, 2652, 0, 
+	1691, 2900, 2904, 2896, 1691, 2908, 3656, 2908, 
+	1598, 2404, 2408, 0, 2400, 1598, 2412, 3501, 
+	2412, 0, 1670, 2788, 2792, 0, 2784, 1670, 
+	2796, 3621, 2796, 1679, 2836, 2840, 0, 2832, 
+	1679, 2844, 3636, 2844, 0, 0, 0, 0, 
+	1682, 2852, 2856, 2848, 1682, 2860, 3641, 2860, 
+	0, 0, 1607, 2452, 2456, 2448, 1607, 2460, 
+	3516, 2460, 0, 0, 0, 1622, 2532, 2536, 
+	2528, 1622, 2540, 3541, 2540, 0, 0, 0, 
+	1667, 2772, 2776, 2768, 1667, 2780, 3616, 2780, 
+	1628, 2564, 2568, 2560, 1628, 2572, 3551, 2572, 
+	0, 0, 0, 0, 0, 1604, 2436, 2440, 
+	2432, 1604, 2444, 3511, 2444, 0, 1688, 2884, 
+	2888, 2880, 1688, 2892, 3651, 2892, 0, 1640, 
+	2628, 2632, 2624, 1640, 2636, 3571, 2636, 0, 
+	0, 0, 1661, 2740, 2744, 2736, 1661, 2748, 
+	3606, 2748, 0, 0, 0, 0, 0, 1685, 
+	2868, 2872, 2864, 1685, 2876, 3646, 2876, 0, 
+	1619, 2516, 2520, 2512, 1619, 2524, 3536, 2524, 
 	0, 0, 518, 506, 1876, 578, 1992, 1996, 
-	41, 1988, 578, 2000, 3212, 2000, 0, 5, 
+	41, 1988, 578, 2000, 3216, 2000, 0, 5, 
 	7, 3, 0, 0, 99, 665, 668, 662, 
 	99, 0, 5, 7, 506, 97, 97, 97, 
 	97, 97, 97, 97, 97, 97, 97, 97, 
 	97, 97, 97, 3, 0, 101, 674, 677, 
 	41, 55, 53, 51, 0, 57, 671, 101, 
 	2016, 41, 55, 53, 51, 0, 57, 599, 
-	2040, 2044, 3222, 2036, 599, 93, 89, 89, 
+	2040, 2044, 3226, 2036, 599, 93, 89, 89, 
 	89, 0, 0, 0, 0, 0, 0, 87, 
 	37, 33, 455, 458, 452, 33, 0, 5, 
-	7, 3, 0, 0, 3067, 461, 1796, 1804, 
+	7, 3, 0, 0, 3071, 461, 1796, 1804, 
 	1792, 461, 0, 5, 7, 3, 0, 2016, 
 	41, 55, 53, 51, 0, 57, 599, 2040, 
-	2044, 3222, 2036, 599, 1836, 1820, 3032, 3047, 
-	3017, 1820, 3694, 3052, 0, 5, 7, 3, 
-	0, 356, 339, 2372, 2392, 3482, 3487, 3796, 
-	2392, 3851, 3492, 3844, 3492, 0, 5, 7, 
+	2044, 3226, 2036, 599, 1836, 1820, 3036, 3051, 
+	3021, 1820, 3698, 3056, 0, 5, 7, 3, 
+	0, 356, 339, 2376, 2396, 3486, 3491, 3800, 
+	2396, 3855, 3496, 3848, 3496, 0, 5, 7, 
 	1744, 0, 5, 7, 359, 0, 0, 5, 
-	7, 0, 5, 7, 0, 339, 359, 2356, 
+	7, 0, 5, 7, 0, 339, 359, 2360, 
 	0, 0, 0, 0, 0, 79, 0, 0, 
-	75, 1828, 464, 1800, 1808, 3007, 464, 3809, 
-	1812, 3022, 3037, 3688, 1812, 0, 5, 7, 
-	359, 0, 3072, 3057, 3700, 3706, 3802, 3057, 
-	3858, 3712, 0, 5, 7, 1744, 1816, 479, 
-	3027, 3042, 3012, 1816, 343, 365, 371, 1748, 
+	75, 1828, 464, 1800, 1808, 3011, 464, 3813, 
+	1812, 3026, 3041, 3692, 1812, 0, 5, 7, 
+	359, 0, 3076, 3061, 3704, 3710, 3806, 3061, 
+	3862, 3716, 0, 5, 7, 1744, 1816, 479, 
+	3031, 3046, 3016, 1816, 343, 365, 371, 1748, 
 	343, 343, 1580, 1583, 0, 5, 7, 0, 
-	5, 7, 0, 0, 1634, 2592, 2596, 2588, 
-	1634, 2600, 3557, 2600, 0, 0, 0, 1625, 
-	2544, 2548, 2540, 1625, 2552, 3542, 2552, 0, 
-	1655, 2704, 2708, 2700, 1655, 2712, 3592, 2712, 
+	5, 7, 0, 0, 1634, 2596, 2600, 2592, 
+	1634, 2604, 3561, 2604, 0, 0, 0, 1625, 
+	2548, 2552, 2544, 1625, 2556, 3546, 2556, 0, 
+	1655, 2708, 2712, 2704, 1655, 2716, 3596, 2716, 
 	0, 5, 7, 0, 5, 7, 0, 5, 
-	7, 0, 5, 7, 482, 380, 2992, 11, 
+	7, 0, 5, 7, 482, 380, 2996, 11, 
 	1756, 27, 1772, 1772, 25, 0, 419, 1760, 
 	17, 404, 383, 383, 13, 15, 0, 386, 
-	395, 19, 19, 2997, 389, 392, 21, 416, 
+	395, 19, 19, 3001, 389, 392, 21, 416, 
 	620, 65, 0, 0, 1, 617, 623, 2052, 
 	69, 69, 626, 629, 2048, 71, 65, 0, 
 	0, 67, 623, 69, 69, 629, 71, 71, 
 	73, 0, 5, 7, 3, 0, 509, 506, 
-	3217, 0, 5, 7, 41, 55, 53, 51, 
+	3221, 0, 5, 7, 41, 55, 53, 51, 
 	0, 57, 2056, 0, 374, 2016, 2004, 41, 
 	55, 53, 51, 0, 57, 59, 590, 593, 
-	3222, 3227, 59, 77, 0, 5, 7, 3, 
-	0, 3232, 3232, 632, 2060, 17, 377, 23, 
-	407, 410, 383, 383, 13, 3002, 23, 0, 
+	3226, 3231, 59, 77, 0, 5, 7, 3, 
+	0, 3236, 3236, 632, 2060, 17, 377, 23, 
+	407, 410, 383, 383, 13, 3006, 23, 0, 
 	5, 7, 2064, 0, 15, 0, 386, 398, 
 	19, 19, 389, 392, 21, 0, 5, 7, 
 	3, 0, 635, 83, 644, 81, 638, 641, 
-	3237, 81, 81, 650, 0, 5, 7, 3242, 
-	3242, 647, 2068, 2072, 0, 0, 85, 17, 
-	413, 1764, 1768, 383, 383, 13, 3682, 413, 
+	3241, 81, 81, 650, 0, 5, 7, 3246, 
+	3246, 647, 2068, 2072, 0, 0, 85, 17, 
+	413, 1764, 1768, 383, 383, 13, 3686, 413, 
 	0, 5, 7, 15, 0, 386, 401, 19, 
 	19, 389, 392, 21, 1724, 0, 5, 7, 
 	3, 0, 125, 117, 119, 121, 0, 123, 
 	0, 5, 7, 3, 0, 1, 350, 1, 
-	309, 307, 1496, 1499, 1493, 307, 2332, 3472, 
+	309, 307, 1496, 1499, 1493, 307, 2332, 3476, 
 	2332, 0, 5, 7, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 3, 0, 1502, 1732, 1502, 231, 
 	1154, 1157, 0, 0, 0, 1151, 231, 2180, 
-	3282, 2180, 0, 0, 257, 1271, 1274, 1268, 
-	257, 2232, 3347, 2232, 0, 0, 0, 0, 
-	267, 1316, 1319, 1313, 267, 2252, 3372, 2252, 
+	3286, 2180, 0, 0, 257, 1271, 1274, 1268, 
+	257, 2232, 3351, 2232, 0, 0, 0, 0, 
+	267, 1316, 1319, 1313, 267, 2252, 3376, 2252, 
 	0, 0, 0, 235, 1172, 1175, 1169, 235, 
-	2188, 3292, 2188, 0, 0, 0, 0, 0, 
-	0, 285, 1397, 1400, 1394, 285, 2288, 3417, 
+	2188, 3296, 2188, 0, 0, 0, 0, 0, 
+	0, 285, 1397, 1400, 1394, 285, 2288, 3421, 
 	2288, 0, 0, 0, 0, 269, 1325, 1328, 
-	1322, 269, 2256, 3377, 2256, 0, 0, 0, 
-	283, 1388, 1391, 1385, 283, 2284, 3412, 2284, 
-	273, 1343, 1346, 1340, 273, 2264, 3387, 2264, 
+	1322, 269, 2256, 3381, 2256, 0, 0, 0, 
+	283, 1388, 1391, 1385, 283, 2284, 3416, 2284, 
+	273, 1343, 1346, 1340, 273, 2264, 3391, 2264, 
 	0, 0, 0, 0, 0, 303, 1478, 1481, 
-	1475, 303, 2324, 3462, 2324, 0, 305, 1487, 
-	1490, 1484, 305, 2328, 3467, 2328, 0, 0, 
+	1475, 303, 2324, 3466, 2324, 0, 305, 1487, 
+	1490, 1484, 305, 2328, 3471, 2328, 0, 0, 
 	0, 0, 241, 1199, 1202, 1196, 241, 2200, 
-	3307, 2200, 0, 0, 0, 0, 0, 0, 
-	0, 277, 1361, 1364, 1358, 277, 2272, 3397, 
+	3311, 2200, 0, 0, 0, 0, 0, 0, 
+	0, 277, 1361, 1364, 1358, 277, 2272, 3401, 
 	2272, 0, 0, 0, 255, 1262, 1265, 1259, 
-	255, 2228, 3342, 2228, 265, 1307, 1310, 1304, 
-	265, 2248, 3367, 2248, 0, 0, 0, 0, 
-	0, 297, 1451, 1454, 1448, 297, 2312, 3447, 
+	255, 2228, 3346, 2228, 265, 1307, 1310, 1304, 
+	265, 2248, 3371, 2248, 0, 0, 0, 0, 
+	0, 297, 1451, 1454, 1448, 297, 2312, 3451, 
 	2312, 0, 299, 1460, 1463, 1457, 299, 2316, 
-	3452, 2316, 0, 259, 1280, 1283, 1277, 259, 
-	2236, 3352, 2236, 301, 1469, 1472, 1466, 301, 
-	2320, 3457, 2320, 0, 0, 0, 0, 0, 
-	243, 1208, 1211, 1205, 243, 2204, 3312, 2204, 
-	245, 1217, 1220, 1214, 245, 2208, 3317, 2208, 
+	3456, 2316, 0, 259, 1280, 1283, 1277, 259, 
+	2236, 3356, 2236, 301, 1469, 1472, 1466, 301, 
+	2320, 3461, 2320, 0, 0, 0, 0, 0, 
+	243, 1208, 1211, 1205, 243, 2204, 3316, 2204, 
+	245, 1217, 1220, 1214, 245, 2208, 3321, 2208, 
 	0, 0, 0, 0, 0, 0, 263, 1298, 
-	1301, 1295, 263, 2244, 3362, 2244, 0, 295, 
-	1442, 1445, 1439, 295, 2308, 3442, 2308, 233, 
-	1163, 1166, 0, 1160, 233, 2184, 3287, 2184, 
+	1301, 1295, 263, 2244, 3366, 2244, 0, 295, 
+	1442, 1445, 1439, 295, 2308, 3446, 2308, 233, 
+	1163, 1166, 0, 1160, 233, 2184, 3291, 2184, 
 	0, 281, 1379, 1382, 0, 1376, 281, 2280, 
-	3407, 2280, 287, 1406, 1409, 0, 1403, 287, 
-	2292, 3422, 2292, 0, 0, 0, 0, 289, 
-	1415, 1418, 1412, 289, 2296, 3427, 2296, 0, 
-	0, 239, 1190, 1193, 1187, 239, 2196, 3302, 
+	3411, 2280, 287, 1406, 1409, 0, 1403, 287, 
+	2292, 3426, 2292, 0, 0, 0, 0, 289, 
+	1415, 1418, 1412, 289, 2296, 3431, 2296, 0, 
+	0, 239, 1190, 1193, 1187, 239, 2196, 3306, 
 	2196, 0, 0, 0, 249, 1235, 1238, 1232, 
-	249, 2216, 3327, 2216, 0, 0, 0, 279, 
-	1370, 1373, 1367, 279, 2276, 3402, 2276, 253, 
-	1253, 1256, 1250, 253, 2224, 3337, 2224, 0, 
+	249, 2216, 3331, 2216, 0, 0, 0, 279, 
+	1370, 1373, 1367, 279, 2276, 3406, 2276, 253, 
+	1253, 1256, 1250, 253, 2224, 3341, 2224, 0, 
 	0, 0, 0, 0, 237, 1181, 1184, 1178, 
-	237, 2192, 3297, 2192, 0, 293, 1433, 1436, 
-	1430, 293, 2304, 3437, 2304, 0, 261, 1289, 
-	1292, 1286, 261, 2240, 3357, 2240, 0, 0, 
-	0, 275, 1352, 1355, 1349, 275, 2268, 3392, 
+	237, 2192, 3301, 2192, 0, 293, 1433, 1436, 
+	1430, 293, 2304, 3441, 2304, 0, 261, 1289, 
+	1292, 1286, 261, 2240, 3361, 2240, 0, 0, 
+	0, 275, 1352, 1355, 1349, 275, 2268, 3396, 
 	2268, 0, 0, 0, 0, 0, 291, 1424, 
-	1427, 1421, 291, 2300, 3432, 2300, 0, 247, 
-	1226, 1229, 1223, 247, 2212, 3322, 2212, 0, 
+	1427, 1421, 291, 2300, 3436, 2300, 0, 247, 
+	1226, 1229, 1223, 247, 2212, 3326, 2212, 0, 
 	0, 506, 229, 1145, 1148, 41, 1142, 229, 
-	2176, 3277, 2176, 0, 0, 0, 251, 1244, 
-	1247, 1241, 251, 2220, 3332, 2220, 0, 271, 
-	1334, 1337, 1331, 271, 2260, 3382, 2260, 323, 
+	2176, 3281, 2176, 0, 0, 0, 251, 1244, 
+	1247, 1241, 251, 2220, 3336, 2220, 0, 271, 
+	1334, 1337, 1331, 271, 2260, 3386, 2260, 323, 
 	0, 5, 7, 3, 0, 512, 506, 49, 
 	584, 587, 41, 581, 49, 2164, 0, 5, 
 	7, 113, 3, 0, 115, 0, 5, 7, 
@@ -4568,11 +4568,11 @@ static const short _zone_scanner_trans_actions[] = {
 	57, 569, 47, 0, 5, 7, 506, 3, 
 	0, 566, 41, 55, 53, 51, 0, 57, 
 	2016, 41, 55, 53, 51, 0, 57, 2020, 
-	3222, 2016, 41, 55, 53, 51, 0, 57, 
-	596, 2028, 2032, 3222, 2024, 596, 2016, 41, 
+	3226, 2016, 41, 55, 53, 51, 0, 57, 
+	596, 2028, 2032, 3226, 2024, 596, 2016, 41, 
 	55, 53, 51, 0, 57, 596, 2028, 2032, 
-	3222, 2024, 596, 2016, 41, 55, 53, 51, 
-	0, 57, 596, 2028, 2032, 3222, 2024, 596, 
+	3226, 2024, 596, 2016, 41, 55, 53, 51, 
+	0, 57, 596, 2028, 2032, 3226, 2024, 596, 
 	422, 31, 437, 440, 434, 31, 422, 0, 
 	5, 7, 3, 0, 431, 485, 500, 1848, 
 	1852, 1844, 500, 0, 5, 7, 485, 3, 
@@ -4583,33 +4583,33 @@ static const short _zone_scanner_trans_actions[] = {
 	1, 683, 2132, 103, 1562, 2336, 311, 1508, 
 	1511, 41, 1505, 311, 0, 5, 7, 506, 
 	0, 0, 3, 0, 315, 1526, 1529, 41, 
-	1523, 315, 0, 5, 7, 3207, 3, 0, 
+	1523, 315, 0, 5, 7, 3211, 3, 0, 
 	521, 1908, 1912, 0, 41, 1904, 521, 0, 
 	5, 7, 3, 0, 0, 5, 7, 3, 
 	0, 506, 313, 1517, 1520, 41, 1514, 313, 
 	0, 5, 7, 506, 0, 0, 3, 0, 
 	317, 1535, 1538, 41, 1532, 317, 0, 5, 
-	7, 3207, 3, 0, 524, 1920, 1924, 0, 
+	7, 3211, 3, 0, 524, 1920, 1924, 0, 
 	41, 1916, 524, 0, 5, 7, 3, 0, 
-	0, 5, 7, 3, 0, 0, 3202, 3790, 
+	0, 5, 7, 3, 0, 0, 3206, 3794, 
 	527, 1932, 1936, 0, 41, 527, 1928, 527, 
-	3182, 3754, 3182, 0, 5, 7, 3202, 3, 
+	3186, 3758, 3186, 0, 5, 7, 3206, 3, 
 	0, 1559, 1736, 1559, 530, 1944, 1948, 0, 
-	41, 530, 1940, 530, 3187, 3760, 3187, 0, 
-	5, 7, 3202, 3, 0, 1736, 1559, 533, 
-	1956, 1960, 0, 41, 533, 1952, 533, 3192, 
-	3766, 3192, 0, 5, 7, 3202, 3, 0, 
+	41, 530, 1940, 530, 3191, 3764, 3191, 0, 
+	5, 7, 3206, 3, 0, 1736, 1559, 533, 
+	1956, 1960, 0, 41, 533, 1952, 533, 3196, 
+	3770, 3196, 0, 5, 7, 3206, 3, 0, 
 	1736, 1559, 536, 1968, 1972, 0, 41, 1964, 
-	536, 3197, 3772, 3197, 0, 5, 7, 3, 
-	0, 1736, 1559, 1900, 3172, 3177, 3087, 3167, 
-	1900, 3748, 3837, 3748, 503, 1896, 3157, 3162, 
-	3087, 1896, 3152, 1896, 3742, 3830, 3742, 503, 
-	1892, 3142, 3147, 3087, 1892, 3137, 1892, 3736, 
-	3823, 3736, 503, 1888, 3127, 3132, 3087, 1888, 
-	3122, 1888, 3730, 3816, 3730, 503, 321, 1553, 
-	1556, 1550, 321, 1884, 3112, 3117, 3087, 3107, 
+	536, 3201, 3776, 3201, 0, 5, 7, 3, 
+	0, 1736, 1559, 1900, 3176, 3181, 3091, 3171, 
+	1900, 3752, 3841, 3752, 503, 1896, 3161, 3166, 
+	3091, 1896, 3156, 1896, 3746, 3834, 3746, 503, 
+	1892, 3146, 3151, 3091, 1892, 3141, 1892, 3740, 
+	3827, 3740, 503, 1888, 3131, 3136, 3091, 1888, 
+	3126, 1888, 3734, 3820, 3734, 503, 321, 1553, 
+	1556, 1550, 321, 1884, 3116, 3121, 3091, 3111, 
 	1884, 503, 319, 1544, 1547, 1541, 319, 1880, 
-	3097, 3102, 3087, 3092, 1880, 503, 506, 45, 
+	3101, 3106, 3091, 3096, 1880, 503, 506, 45, 
 	557, 560, 41, 554, 45, 0, 5, 7, 
 	506, 3, 0, 45, 557, 560, 41, 554, 
 	45, 0, 5, 7, 506, 3, 0, 563, 
@@ -4628,7 +4628,7 @@ static const short _zone_scanner_trans_actions[] = {
 	1, 707, 0, 695, 5, 7, 698, 701, 
 	3, 0, 1, 350, 1, 109, 111, 0, 
 	2108, 683, 103, 105, 506, 704, 2156, 2160, 
-	41, 2152, 704, 2148, 3272, 2148, 0, 683, 
+	41, 2152, 704, 2148, 3276, 2148, 0, 683, 
 	103, 107, 506, 45, 557, 560, 41, 554, 
 	45, 0, 5, 7, 333, 3, 0, 0, 
 	5, 7, 3, 0, 506, 43, 545, 548, 
@@ -4648,15 +4648,15 @@ static const short _zone_scanner_trans_actions[] = {
 	3, 0, 350, 1, 3, 0, 350, 1, 
 	794, 127, 0, 5, 7, 3, 0, 506, 
 	43, 545, 548, 41, 542, 43, 2112, 0, 
-	5, 7, 683, 3, 0, 3257, 103, 689, 
+	5, 7, 683, 3, 0, 3261, 103, 689, 
 	2124, 2128, 689, 2124, 2128, 689, 2124, 2128, 
-	2116, 2120, 689, 3262, 2116, 2120, 689, 3262, 
-	2116, 2120, 689, 3262, 2116, 0, 5, 7, 
+	2116, 2120, 689, 3266, 2116, 2120, 689, 3266, 
+	2116, 2120, 689, 3266, 2116, 0, 5, 7, 
 	3, 0, 506, 43, 545, 548, 41, 542, 
 	43, 0, 5, 7, 683, 3, 0, 103, 
 	692, 2140, 2144, 692, 2140, 2144, 692, 2140, 
-	2144, 2132, 2136, 692, 3267, 2132, 2136, 692, 
-	3267, 2132, 2136, 692, 3267, 2132, 0, 5, 
+	2144, 2132, 2136, 692, 3271, 2132, 2136, 692, 
+	3271, 2132, 2136, 692, 3271, 2132, 0, 5, 
 	7, 3, 0, 506, 43, 545, 548, 41, 
 	542, 43, 0, 5, 7, 485, 3, 0, 
 	39, 494, 497, 39, 494, 497, 39, 494, 
@@ -4740,25 +4740,25 @@ static const short _zone_scanner_trans_actions[] = {
 	683, 3, 0, 2116, 103, 506, 45, 557, 
 	560, 41, 554, 45, 0, 5, 7, 1568, 
 	3, 0, 115, 113, 115, 2168, 327, 113, 
-	115, 113, 115, 2352, 2348, 1565, 115, 325, 
-	113, 115, 2340, 1565, 115, 325, 113, 115, 
-	2344, 476, 35, 0, 470, 473, 449, 467, 
-	35, 35, 339, 362, 368, 2360, 449, 353, 
-	35, 1740, 1577, 1832, 35, 362, 368, 2092, 
+	115, 113, 115, 2356, 2352, 1565, 115, 2348, 
+	325, 113, 115, 2340, 1565, 115, 325, 113, 
+	115, 2344, 476, 35, 0, 470, 473, 449, 
+	467, 35, 35, 339, 362, 368, 2364, 449, 
+	353, 35, 1740, 1577, 1832, 35, 362, 368, 
 	2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 
-	2092, 2092, 2092, 2092, 2092, 353, 35, 3062, 
-	3077, 3247, 3247, 3247, 3247, 3247, 3247, 3247, 
-	3247, 3247, 3247, 3247, 3247, 3247, 3247, 1824, 
-	656, 91, 2084, 2088, 2076, 653, 91, 2080, 
-	656, 362, 368, 353, 35, 362, 368, 2988, 
-	35, 35, 362, 368, 35, 1577, 3718, 3724, 
-	3784, 3784, 3784, 3784, 3784, 3784, 3784, 3784, 
-	3784, 3784, 3784, 3784, 3784, 3784, 1752
+	2092, 2092, 2092, 2092, 2092, 2092, 353, 35, 
+	3066, 3081, 3251, 3251, 3251, 3251, 3251, 3251, 
+	3251, 3251, 3251, 3251, 3251, 3251, 3251, 3251, 
+	1824, 656, 91, 2084, 2088, 2076, 653, 91, 
+	2080, 656, 362, 368, 353, 35, 362, 368, 
+	2992, 35, 35, 362, 368, 35, 1577, 3722, 
+	3728, 3788, 3788, 3788, 3788, 3788, 3788, 3788, 
+	3788, 3788, 3788, 3788, 3788, 3788, 3788, 1752
 };
 
 static const short _zone_scanner_eof_actions[] = {
 	0, 1872, 2012, 345, 1592, 337, 1571, 9, 
-	9, 337, 1571, 337, 1571, 1571, 3082, 3778, 
+	9, 337, 1571, 337, 1571, 1571, 3086, 3782, 
 	1589, 345, 345, 345, 1592, 1571, 345, 345, 
 	345, 1592, 345, 345, 345, 345, 1592, 345, 
 	345, 345, 1592, 345, 345, 345, 1592, 1592, 
@@ -4775,15 +4775,15 @@ static const short _zone_scanner_eof_actions[] = {
 	345, 1592, 345, 1592, 345, 345, 518, 1876, 
 	345, 1872, 345, 345, 518, 2012, 2012, 2012, 
 	2012, 345, 9, 93, 93, 93, 93, 93, 
-	93, 93, 93, 37, 518, 0, 3067, 518, 
-	345, 2012, 2012, 2012, 345, 1836, 1876, 2372, 
-	1571, 1872, 9, 1571, 9, 3082, 2372, 2372, 
-	2372, 2372, 2372, 2372, 2372, 2372, 2372, 2372, 
-	2372, 2372, 2372, 1571, 2356, 93, 93, 93, 
-	93, 93, 93, 93, 93, 93, 1828, 3809, 
-	1872, 1589, 3072, 3082, 3072, 3072, 3072, 3072, 
-	3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 
-	3072, 479, 3082, 1571, 9, 1571, 345, 345, 
+	93, 93, 93, 37, 518, 0, 3071, 518, 
+	345, 2012, 2012, 2012, 345, 1836, 1876, 2376, 
+	1571, 1872, 9, 1571, 9, 3086, 2376, 2376, 
+	2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 
+	2376, 2376, 2376, 1571, 2360, 93, 93, 93, 
+	93, 93, 93, 93, 93, 93, 1828, 3813, 
+	1872, 1589, 3076, 3086, 3076, 3076, 3076, 3076, 
+	3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 
+	3076, 479, 3086, 1571, 9, 1571, 345, 345, 
 	1592, 345, 345, 345, 1592, 345, 1592, 1571, 
 	1571, 9, 1571, 1571, 337, 1571, 482, 482, 
 	482, 482, 482, 482, 482, 482, 482, 482, 
@@ -4791,7 +4791,7 @@ static const short _zone_scanner_eof_actions[] = {
 	0, 27, 27, 27, 27, 395, 395, 395, 
 	395, 27, 27, 620, 620, 2052, 2052, 2052, 
 	2052, 620, 67, 2052, 2052, 2052, 2052, 73, 
-	509, 3217, 374, 374, 3217, 2004, 3217, 73, 
+	509, 3221, 374, 374, 3221, 2004, 3221, 73, 
 	77, 77, 77, 377, 377, 377, 77, 398, 
 	398, 398, 398, 377, 77, 0, 83, 644, 
 	650, 85, 650, 9, 9, 85, 401, 401, 
@@ -4856,8 +4856,8 @@ static const short _zone_scanner_eof_actions[] = {
 	515, 515, 515, 515, 710, 710, 710, 710, 
 	337, 337, 515, 515, 791, 791, 1864, 1864, 
 	791, 2172, 794, 794, 794, 794, 794, 794, 
-	794, 791, 791, 791, 1864, 1864, 2112, 3257, 
-	791, 791, 791, 1864, 1864, 2112, 3257, 791, 
+	794, 791, 791, 791, 1864, 1864, 2112, 3261, 
+	791, 791, 791, 1864, 1864, 2112, 3261, 791, 
 	791, 791, 1864, 1864, 791, 2172, 791, 791, 
 	337, 797, 797, 337, 337, 515, 515, 515, 
 	515, 614, 614, 614, 614, 515, 515, 337, 
@@ -4887,9 +4887,9 @@ static const short _zone_scanner_eof_actions[] = {
 	337, 515, 515, 515, 515, 515, 515, 710, 
 	710, 710, 710, 337, 337, 337, 515, 515, 
 	686, 686, 337, 515, 515, 710, 710, 710, 
-	710, 2168, 710, 710, 710, 710, 2352, 337, 
-	710, 710, 710, 710, 710, 710, 710, 710, 
-	710, 710, 710, 710, 0, 0, 0, 0, 
+	710, 2168, 710, 710, 710, 710, 2356, 337, 
+	710, 710, 2348, 710, 710, 2348, 710, 710, 
+	2348, 710, 710, 2348, 0, 0, 0, 0, 
 	91, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
@@ -7115,19 +7115,26 @@ _match:
 	}
 	break;
 	case 250:
-#line 1544 "zscanner/scanner_body.rl"
+#line 1535 "zscanner/scanner_body.rl"
 	{
-		s->item_length = 0;
+		SCANNER_WARNING(ZSCANNER_EBAD_CHAR_DASH);                       
+		p--; {cs = 247; goto _again;}
 	}
 	break;
 	case 251:
-#line 1547 "zscanner/scanner_body.rl"
+#line 1550 "zscanner/scanner_body.rl"
 	{
-		s->item_length++;
+		s->item_length = 0;
 	}
 	break;
 	case 252:
-#line 1550 "zscanner/scanner_body.rl"
+#line 1553 "zscanner/scanner_body.rl"
+	{
+		s->item_length++;
+	}
+	break;
+	case 253:
+#line 1556 "zscanner/scanner_body.rl"
 	{
 		if (s->item_length != 4) {
 			SCANNER_WARNING(ZSCANNER_EBAD_L64_LENGTH);
@@ -7135,52 +7142,52 @@ _match:
 		}
 	}
 	break;
-	case 253:
-#line 1556 "zscanner/scanner_body.rl"
+	case 254:
+#line 1562 "zscanner/scanner_body.rl"
 	{
 		SCANNER_WARNING(ZSCANNER_EBAD_CHAR_COLON);
 		p--; {cs = 247; goto _again;}
 	}
 	break;
-	case 254:
-#line 1569 "zscanner/scanner_body.rl"
+	case 255:
+#line 1575 "zscanner/scanner_body.rl"
 	{
 		SCANNER_WARNING(ZSCANNER_EBAD_ALGORITHM);
 		p--; {cs = 247; goto _again;}
 	}
 	break;
-	case 255:
-#line 1573 "zscanner/scanner_body.rl"
+	case 256:
+#line 1579 "zscanner/scanner_body.rl"
 	{
 		SCANNER_WARNING(ZSCANNER_EBAD_CERT_TYPE);
 		p--; {cs = 247; goto _again;}
 	}
 	break;
-	case 256:
-#line 1595 "zscanner/scanner_body.rl"
+	case 257:
+#line 1601 "zscanner/scanner_body.rl"
 	{ p--; {stack[top++] = cs; cs = 457; goto _again;} }
 	break;
-	case 257:
-#line 1610 "zscanner/scanner_body.rl"
+	case 258:
+#line 1616 "zscanner/scanner_body.rl"
 	{ p--; {stack[top++] = cs; cs = 552; goto _again;} }
 	break;
-	case 258:
-#line 1614 "zscanner/scanner_body.rl"
+	case 259:
+#line 1620 "zscanner/scanner_body.rl"
 	{
 		s->r_data_blocks[0] = 0;
 		s->r_data_blocks_count = 0;
 		rdata_tail = s->r_data;
 	}
 	break;
-	case 259:
-#line 1619 "zscanner/scanner_body.rl"
+	case 260:
+#line 1625 "zscanner/scanner_body.rl"
 	{
 		SCANNER_WARNING(ZSCANNER_EBAD_RDATA);
 		p--; {cs = 247; goto _again;}
 	}
 	break;
-	case 260:
-#line 1737 "zscanner/scanner_body.rl"
+	case 261:
+#line 1743 "zscanner/scanner_body.rl"
 	{
 		p--;
 		switch (s->r_type) {
@@ -7255,8 +7262,8 @@ _match:
 		}
 	}
 	break;
-	case 261:
-#line 1810 "zscanner/scanner_body.rl"
+	case 262:
+#line 1816 "zscanner/scanner_body.rl"
 	{
 		switch (s->r_type) {
 		// Next types must not have empty rdata.
@@ -7305,178 +7312,178 @@ _match:
 		}
 	}
 	break;
-	case 262:
-#line 1858 "zscanner/scanner_body.rl"
+	case 263:
+#line 1864 "zscanner/scanner_body.rl"
 	{
 		s->r_data_blocks[++(s->r_data_blocks_count)] =
 			(uint16_t)(rdata_tail - s->r_data);
 	}
 	break;
-	case 263:
-#line 1866 "zscanner/scanner_body.rl"
+	case 264:
+#line 1872 "zscanner/scanner_body.rl"
 	{ p--; }
 	break;
-	case 264:
-#line 1873 "zscanner/scanner_body.rl"
+	case 265:
+#line 1879 "zscanner/scanner_body.rl"
 	{
 		SCANNER_WARNING(ZSCANNER_EUNSUPPORTED_TYPE);
 		p--; {cs = 247; goto _again;}
 	}
 	break;
-	case 265:
-#line 1879 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_A; }
-	break;
 	case 266:
-#line 1880 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_NS; }
+#line 1885 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_A; }
 	break;
 	case 267:
-#line 1881 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_CNAME; }
+#line 1886 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_NS; }
 	break;
 	case 268:
-#line 1882 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_SOA; }
+#line 1887 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_CNAME; }
 	break;
 	case 269:
-#line 1883 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_PTR; }
+#line 1888 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_SOA; }
 	break;
 	case 270:
-#line 1884 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_HINFO; }
+#line 1889 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_PTR; }
 	break;
 	case 271:
-#line 1885 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_MINFO; }
+#line 1890 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_HINFO; }
 	break;
 	case 272:
-#line 1886 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_MX; }
+#line 1891 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_MINFO; }
 	break;
 	case 273:
-#line 1887 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_TXT; }
+#line 1892 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_MX; }
 	break;
 	case 274:
-#line 1888 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_RP; }
+#line 1893 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_TXT; }
 	break;
 	case 275:
-#line 1889 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_AFSDB; }
+#line 1894 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_RP; }
 	break;
 	case 276:
-#line 1890 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_RT; }
+#line 1895 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_AFSDB; }
 	break;
 	case 277:
-#line 1891 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_KEY; }
+#line 1896 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_RT; }
 	break;
 	case 278:
-#line 1892 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_AAAA; }
+#line 1897 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_KEY; }
 	break;
 	case 279:
-#line 1893 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_LOC; }
+#line 1898 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_AAAA; }
 	break;
 	case 280:
-#line 1894 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_SRV; }
+#line 1899 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_LOC; }
 	break;
 	case 281:
-#line 1895 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_NAPTR; }
+#line 1900 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_SRV; }
 	break;
 	case 282:
-#line 1896 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_KX; }
+#line 1901 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_NAPTR; }
 	break;
 	case 283:
-#line 1897 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_CERT; }
+#line 1902 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_KX; }
 	break;
 	case 284:
-#line 1898 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_DNAME; }
+#line 1903 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_CERT; }
 	break;
 	case 285:
-#line 1899 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_APL; }
+#line 1904 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_DNAME; }
 	break;
 	case 286:
-#line 1900 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_DS; }
+#line 1905 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_APL; }
 	break;
 	case 287:
-#line 1901 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_SSHFP; }
+#line 1906 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_DS; }
 	break;
 	case 288:
-#line 1902 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_IPSECKEY; }
+#line 1907 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_SSHFP; }
 	break;
 	case 289:
-#line 1903 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_RRSIG; }
+#line 1908 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_IPSECKEY; }
 	break;
 	case 290:
-#line 1904 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_NSEC; }
+#line 1909 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_RRSIG; }
 	break;
 	case 291:
-#line 1905 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_DNSKEY; }
+#line 1910 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_NSEC; }
 	break;
 	case 292:
-#line 1906 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_DHCID; }
+#line 1911 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_DNSKEY; }
 	break;
 	case 293:
-#line 1907 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_NSEC3; }
+#line 1912 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_DHCID; }
 	break;
 	case 294:
-#line 1908 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_NSEC3PARAM; }
+#line 1913 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_NSEC3; }
 	break;
 	case 295:
-#line 1909 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_TLSA; }
+#line 1914 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_NSEC3PARAM; }
 	break;
 	case 296:
-#line 1910 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_SPF; }
+#line 1915 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_TLSA; }
 	break;
 	case 297:
-#line 1911 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_NID; }
+#line 1916 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_SPF; }
 	break;
 	case 298:
-#line 1912 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_L32; }
+#line 1917 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_NID; }
 	break;
 	case 299:
-#line 1913 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_L64; }
+#line 1918 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_L32; }
 	break;
 	case 300:
-#line 1914 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_LP; }
+#line 1919 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_L64; }
 	break;
 	case 301:
-#line 1915 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_EUI48; }
+#line 1920 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_LP; }
 	break;
 	case 302:
-#line 1916 "zscanner/scanner_body.rl"
-	{ s->r_type = KNOT_RRTYPE_EUI64; }
+#line 1921 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_EUI48; }
 	break;
 	case 303:
 #line 1922 "zscanner/scanner_body.rl"
+	{ s->r_type = KNOT_RRTYPE_EUI64; }
+	break;
+	case 304:
+#line 1928 "zscanner/scanner_body.rl"
 	{
 		if (rdata_tail - s->r_data > UINT16_MAX) {
 			SCANNER_WARNING(ZSCANNER_ERDATA_OVERFLOW);
@@ -7487,7 +7494,7 @@ _match:
 		s->process_record(s);
 	}
 	break;
-#line 7491 "zscanner/scanner.c"
+#line 7498 "zscanner/scanner.c"
 		}
 	}
 
@@ -7699,42 +7706,49 @@ _again:
 		p--; {cs = 247; goto _again;}
 	}
 	break;
-	case 253:
-#line 1556 "zscanner/scanner_body.rl"
+	case 250:
+#line 1535 "zscanner/scanner_body.rl"
 	{
-		SCANNER_WARNING(ZSCANNER_EBAD_CHAR_COLON);
+		SCANNER_WARNING(ZSCANNER_EBAD_CHAR_DASH);                       
 		p--; {cs = 247; goto _again;}
 	}
 	break;
 	case 254:
-#line 1569 "zscanner/scanner_body.rl"
+#line 1562 "zscanner/scanner_body.rl"
 	{
-		SCANNER_WARNING(ZSCANNER_EBAD_ALGORITHM);
+		SCANNER_WARNING(ZSCANNER_EBAD_CHAR_COLON);
 		p--; {cs = 247; goto _again;}
 	}
 	break;
 	case 255:
-#line 1573 "zscanner/scanner_body.rl"
+#line 1575 "zscanner/scanner_body.rl"
+	{
+		SCANNER_WARNING(ZSCANNER_EBAD_ALGORITHM);
+		p--; {cs = 247; goto _again;}
+	}
+	break;
+	case 256:
+#line 1579 "zscanner/scanner_body.rl"
 	{
 		SCANNER_WARNING(ZSCANNER_EBAD_CERT_TYPE);
 		p--; {cs = 247; goto _again;}
 	}
 	break;
-	case 259:
-#line 1619 "zscanner/scanner_body.rl"
+	case 260:
+#line 1625 "zscanner/scanner_body.rl"
 	{
 		SCANNER_WARNING(ZSCANNER_EBAD_RDATA);
 		p--; {cs = 247; goto _again;}
 	}
 	break;
-	case 264:
-#line 1873 "zscanner/scanner_body.rl"
+	case 265:
+#line 1879 "zscanner/scanner_body.rl"
 	{
 		SCANNER_WARNING(ZSCANNER_EUNSUPPORTED_TYPE);
 		p--; {cs = 247; goto _again;}
 	}
 	break;
-#line 7738 "zscanner/scanner.c"
+#line 7752 "zscanner/scanner.c"
 		}
 	}
 	}
diff --git a/src/zscanner/scanner_body.rl b/src/zscanner/scanner_body.rl
index 5c571931eb..adf2d7cf2d 100644
--- a/src/zscanner/scanner_body.rl
+++ b/src/zscanner/scanner_body.rl
@@ -1532,11 +1532,17 @@
 			fhold; fgoto err_line;
 		}
 	}
+	action _eui_sep_error {
+		SCANNER_WARNING(ZSCANNER_EBAD_CHAR_DASH);                       
+		fhold; fgoto err_line;
+	}
 
-	eui48 = (hex_char %_eui_count . ('-' . hex_char %_eui_count)+
+	eui48 = (hex_char %_eui_count .
+	         ('-' >!_eui_sep_error . hex_char %_eui_count)+
 		) $!_hex_char_error >_eui_init %_eui48_exit;
 
-	eui64 = (hex_char %_eui_count . ('-' . hex_char %_eui_count)+
+	eui64 = (hex_char %_eui_count .
+	         ('-' >!_eui_sep_error . hex_char %_eui_count)+
 		) $!_hex_char_error >_eui_init %_eui64_exit;
 	# END
 
diff --git a/src/zscanner/test/cases/43_EUI48.out b/src/zscanner/test/cases/43_EUI48.out
index 547413b09f..29f6bdbb84 100644
--- a/src/zscanner/test/cases/43_EUI48.out
+++ b/src/zscanner/test/cases/43_EUI48.out
@@ -54,7 +54,7 @@ WARNG=ZSCANNER_EBAD_EUI_LENGTH
 ------
 WARNG=ZSCANNER_EBAD_HEX_CHAR
 ------
-WARNG=ZSCANNER_EBAD_HEX_CHAR
+WARNG=ZSCANNER_EBAD_CHAR_DASH
 ------
 WARNG=ZSCANNER_EBAD_HEX_CHAR
 ------
diff --git a/src/zscanner/test/cases/44_EUI64.out b/src/zscanner/test/cases/44_EUI64.out
index b917d3b971..745ba09bd5 100644
--- a/src/zscanner/test/cases/44_EUI64.out
+++ b/src/zscanner/test/cases/44_EUI64.out
@@ -54,7 +54,7 @@ WARNG=ZSCANNER_EBAD_EUI_LENGTH
 ------
 WARNG=ZSCANNER_EBAD_HEX_CHAR
 ------
-WARNG=ZSCANNER_EBAD_HEX_CHAR
+WARNG=ZSCANNER_EBAD_CHAR_DASH
 ------
 WARNG=ZSCANNER_EBAD_HEX_CHAR
 ------
diff --git a/src/zscanner/test/processing.c b/src/zscanner/test/processing.c
index 37da9df208..6c6e15e879 100644
--- a/src/zscanner/test/processing.c
+++ b/src/zscanner/test/processing.c
@@ -81,6 +81,7 @@ const char *error_names[] = {
 	ERROR_CODE_TO_STRING(ZSCANNER_EBAD_EUI_LENGTH),
 	ERROR_CODE_TO_STRING(ZSCANNER_EBAD_L64_LENGTH),
 	ERROR_CODE_TO_STRING(ZSCANNER_EBAD_CHAR_COLON),
+	ERROR_CODE_TO_STRING(ZSCANNER_EBAD_CHAR_DASH),
 };
 #define ERROR_CODE_NAME(code) error_names[code - ZSCANNER_UNCOVERED_STATE]
 
-- 
GitLab