aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWiimm <wiimm@wiimm.de>2021-04-24 09:10:02 +0200
committerWiimm <wiimm@wiimm.de>2021-04-24 09:10:02 +0200
commitf33ad95520f6c6bb8f192c8bcd1c17cf40ba6b6b (patch)
tree60c229f3f17eb965fda2bfa19021559123af65b4
parent4f14fc871ab525488d821e132f80da99841d5646 (diff)
SZS v2.25a
Diffstat (limited to '')
-rw-r--r--project/Makefile2
-rw-r--r--project/dclib/dclib-basics.h4
-rw-r--r--project/dclib/dclib-cli.c23
-rw-r--r--project/dclib/dclib-color.c823
-rw-r--r--project/dclib/dclib-color.h64
-rw-r--r--project/dclib/dclib-file.c87
-rw-r--r--project/dclib/dclib-file.h18
-rw-r--r--project/revision.sh2
-rw-r--r--project/setup.sh1
-rw-r--r--project/src/addr_port.inc2309
-rw-r--r--project/src/lib-brres.c34
-rw-r--r--project/src/lib-file.c22
-rw-r--r--project/src/lib-lecode.c193
-rw-r--r--project/src/lib-lecode.h72
-rw-r--r--project/src/lib-staticr.c317
-rw-r--r--project/src/lib-staticr.h91
-rw-r--r--project/src/lib-std.c6
-rw-r--r--project/src/lib-std.h13
-rw-r--r--project/src/lib-szs-create.c6
-rw-r--r--project/src/lib-szs.c1
-rw-r--r--project/src/ui/tab-wstrt.inc52
-rw-r--r--project/src/ui/ui-wstrt.c263
-rw-r--r--project/src/ui/ui-wstrt.h21
-rw-r--r--project/src/ui/ui.def48
-rw-r--r--project/src/wbmgt.c2
-rw-r--r--project/src/wctct.c2
-rw-r--r--project/src/wimgt.c2
-rw-r--r--project/src/wkclt.c2
-rw-r--r--project/src/wkmpt.c2
-rw-r--r--project/src/wlect.c15
-rw-r--r--project/src/wmdlt.c2
-rw-r--r--project/src/wpatt.c2
-rw-r--r--project/src/wstrt.c206
-rw-r--r--project/src/wszst.c2
-rw-r--r--project/src/wtest.c815
-rw-r--r--project/templates/HISTORY.txt33
-rw-r--r--project/templates/module/last-history.txt34
-rw-r--r--project/text-files/lpar.inc/lpar-sect-debug-docu-cr.inc71
-rw-r--r--project/text-files/lpar.inc/lpar-sect-param-cr.inc23
39 files changed, 4921 insertions, 764 deletions
diff --git a/project/Makefile b/project/Makefile
index 9071202..18af930 100644
--- a/project/Makefile
+++ b/project/Makefile
@@ -57,7 +57,7 @@ WPATT_LONG = Wiimms PAT Tool
WSTRT_SHORT = wstrt
WSTRT_LONG = Wiimms StaticR Tool
-VERSION_NUM = 2.24a
+VERSION_NUM = 2.25a
BETA_VERSION = 0
# 0:off -1:"beta" >0:"beta#"
diff --git a/project/dclib/dclib-basics.h b/project/dclib/dclib-basics.h
index 5412d52..80913e7 100644
--- a/project/dclib/dclib-basics.h
+++ b/project/dclib/dclib-basics.h
@@ -2932,8 +2932,8 @@ enumError Command_COLORS
// >= 2: include alt names
// >= 3: include color names incl bold
// >= 4: include background color names
- uint mode, // output mode => see PrintColorSetHelper()
- uint format // output format => see PrintColorSetEx()
+ ColorSelect_t select, // select color groups; if 0: use level
+ uint format // output format => see PrintColorSet()
);
//
diff --git a/project/dclib/dclib-cli.c b/project/dclib/dclib-cli.c
index b49ba99..c4a3015 100644
--- a/project/dclib/dclib-cli.c
+++ b/project/dclib/dclib-cli.c
@@ -300,14 +300,14 @@ enumError Command_ARGTEST ( int argc, char ** argv )
enumError Command_COLORS
(
- int level, // only used, if mode==NULL
- // < 0: status message (ignore mode)
+ int level, // only used, if select==0
+ // < 0: status message (ignore select)
// >= 1: include names
// >= 2: include alt names
// >= 3: include color names incl bold
// >= 4: include background color names
- uint mode, // output mode => see PrintColorSetHelper()
- uint format // output format => see PrintColorSetEx()
+ ColorSelect_t select, // select color groups; if 0: use level
+ uint format // output format => see PrintColorSet()
)
{
if (!colout)
@@ -330,13 +330,13 @@ enumError Command_COLORS
return ERR_OK;
}
- if ( !mode && level > 0 )
+ if ( !select && level > 0 )
switch (level)
{
- case 1: mode = 0x08; break;
- case 2: mode = 0x18; break;
- case 3: mode = 0x1b; break;
- default: mode = 0x1f; break;
+ case 1: select = COLSEL_NAME; break;
+ case 2: select = COLSEL_NAME|COLSEL_F_ALT; break;
+ case 3: select = COLSEL_M_NONAME; break;
+ default: select = COLSEL_M_ALL; break;
}
if (!format)
@@ -348,8 +348,9 @@ enumError Command_COLORS
PrintColorModes( stdout, 4, col_mode, GCM_ALT|GCM_SHORT );
#endif
}
- if ( mode || format )
- PrintColorSetEx(stdout,4,colout,mode,format);
+
+ if ( select || format )
+ PrintColorSet(stdout,4,colout,select,format);
return ERR_OK;
}
diff --git a/project/dclib/dclib-color.c b/project/dclib/dclib-color.c
index 07e8625..ef0ca01 100644
--- a/project/dclib/dclib-color.c
+++ b/project/dclib/dclib-color.c
@@ -1285,12 +1285,12 @@ static uint grayscale_tab[4] = {0,8,7,15};
const char ColorIndexName[TCI__N][16] =
{
"black",
- "dark_gray_1",
- "dark_gray_2",
- "dark_gray_3",
- "light_gray_1",
- "light_gray_2",
- "light_gray_3",
+ "grey1",
+ "grey2",
+ "grey3",
+ "grey4",
+ "grey5",
+ "grey6",
"white",
"red",
@@ -1323,6 +1323,7 @@ static uint grayscale_tab[4] = {0,8,7,15};
"b_magenta",
"b_magenta_red",
};
+
#else // !SUPPORT_36_COLORS
const char ColorIndexName[TCI__N][11] =
@@ -3062,6 +3063,185 @@ ccp GetTextMode
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// color tables ///////////////
+///////////////////////////////////////////////////////////////////////////////
+// [[color_helper_tab_t]]
+
+typedef struct color_helper_tab_t
+{
+ ccp name;
+ uint offset;
+ bool is_alt;
+}
+color_helper_tab_t;
+
+//-----------------------------------------------------------------------------
+
+#undef JOB0
+#undef JOB1
+#undef JOB2
+#undef SEP1
+
+#define JOB0 {0,0,0}
+#define JOB1(n) { #n, offsetof(ColorSet_t,n), 0 },
+#define JOB2(t,n,a) { #t, offsetof(ColorSet_t,n), a },
+#define SEP1 { EmptyString, 0, 0 },
+
+//-----------------------------------------------------------------------------
+
+static const color_helper_tab_t ch_tab_color[] =
+{
+ SEP1
+ JOB1(red_magenta)
+ JOB1(red)
+ JOB1(red_orange)
+ JOB1(orange_red)
+ JOB1(orange)
+ JOB1(orange_yellow)
+ JOB1(yellow_orange)
+ JOB1(yellow)
+ JOB1(yellow_green)
+ JOB1(green_yellow)
+ JOB1(green)
+ JOB1(green_cyan)
+ JOB1(cyan_green)
+ JOB1(cyan)
+ JOB1(cyan_blue)
+ JOB1(blue_cyan)
+ JOB1(blue)
+ JOB1(blue_magenta)
+ JOB1(magenta_blue)
+ JOB1(magenta)
+ JOB1(magenta_red)
+ JOB0
+};
+
+//-----------------------------------------------------------------------------
+
+static const color_helper_tab_t ch_tab_bcolor[] =
+{
+ SEP1
+ JOB1(b_red_magenta)
+ JOB1(b_red)
+ JOB1(b_red_orange)
+ JOB1(b_orange_red)
+ JOB1(b_orange)
+ JOB1(b_orange_yellow)
+ JOB1(b_yellow_orange)
+ JOB1(b_yellow)
+ JOB1(b_yellow_green)
+ JOB1(b_green_yellow)
+ JOB1(b_green)
+ JOB1(b_green_cyan)
+ JOB1(b_cyan_green)
+ JOB1(b_cyan)
+ JOB1(b_cyan_blue)
+ JOB1(b_blue_cyan)
+ JOB1(b_blue)
+ JOB1(b_blue_magenta)
+ JOB1(b_magenta_blue)
+ JOB1(b_magenta)
+ JOB1(b_magenta_red)
+ JOB0
+};
+
+//-----------------------------------------------------------------------------
+_Static_assert( N_COLORSET_GREY == 10, "wrong N_COLORSET_GREY" );
+
+static const color_helper_tab_t ch_tab_grey[] =
+{
+ SEP1
+ JOB1(black)
+ JOB1(b_black)
+ JOB1(white)
+ JOB1(b_white)
+
+ SEP1
+ JOB2(grey0,grey[0],0)
+ JOB2(grey1,grey[1],0)
+ JOB2(grey2,grey[2],0)
+ JOB2(grey3,grey[3],0)
+ JOB2(grey4,grey[4],0)
+ JOB2(grey5,grey[5],0)
+ JOB2(grey6,grey[6],0)
+ JOB2(grey7,grey[7],0)
+ JOB2(grey8,grey[8],0)
+ JOB2(grey9,grey[9],0)
+
+ JOB0
+};
+
+//-----------------------------------------------------------------------------
+
+static const color_helper_tab_t ch_tab_name[] =
+{
+ SEP1
+
+ JOB1(setup)
+ JOB1(run)
+ JOB1(abort)
+ JOB1(finish)
+ JOB1(script)
+ JOB1(open)
+ JOB1(close)
+ JOB1(file)
+ JOB1(job)
+
+ JOB1(info)
+ JOB1(hint)
+ JOB1(warn)
+ JOB1(debug)
+ JOB1(log)
+
+ JOB1(name)
+ JOB1(op)
+ JOB1(value)
+ JOB2(val,value,1)
+ JOB1(success)
+ JOB1(error)
+ JOB1(fail)
+ JOB1(fail2)
+ JOB1(fatal)
+ JOB1(mark)
+ JOB1(bad)
+
+ JOB1(select)
+ JOB1(differ)
+ JOB1(stat_line)
+ JOB1(warn_line)
+ JOB1(proc_line)
+ JOB1(cite)
+ JOB1(status)
+ JOB1(highlight)
+ JOB2(hl,highlight,1)
+ JOB1(hide)
+
+ JOB1(heading)
+ JOB2(head,heading,1)
+ JOB1(caption)
+ JOB1(section)
+ JOB1(syntax)
+ JOB1(cmd)
+ JOB1(option)
+ JOB2(opt,option,1)
+ JOB1(param)
+ JOB2(par,param,1)
+
+ JOB1(off)
+ JOB1(on)
+
+ JOB0
+};
+
+//-----------------------------------------------------------------------------
+
+#undef JOB0
+#undef JOB1
+#undef JOB2
+#undef SEP1
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// colors ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -3147,40 +3327,66 @@ const ColorSet_t * GetColorSet8()
col.on = STRDUP(GetTextMode(1,TTM_COL_ON));
col.off = STRDUP(GetTextMode(1,TTM_COL_OFF));
+ _Static_assert( N_COLORSET_GREY == 10, "wrong N_COLORSET_GREY" );
+
+ col.grey[0] =
+ col.grey[1] =
col.black = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_BLACK));
+ col.grey[2] =
+ col.grey[3] =
+ col.grey[4] =
col.b_black = STRDUP(GetTextMode(1,TTM_BOLD|TTM_BLACK));
+ col.grey[5] =
+ col.grey[6] =
+ col.grey[7] =
col.white = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_WHITE));
+ col.grey[8] =
+ col.grey[9] =
col.b_white = STRDUP(GetTextMode(1,TTM_BOLD|TTM_WHITE));
- col.red = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_RED));
- col.red_orange = col.red;
- col.orange = col.red;
- col.yellow = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_YELLOW));
- col.orange_yellow = col.yellow;
- col.yellow_green = col.yellow;
- col.green = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_GREEN));
- col.green_cyan = col.green;
- col.cyan = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_CYAN));
- col.cyan_blue = col.cyan;
- col.blue = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_BLUE));
- col.blue_magenta = col.blue;
- col.magenta = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_MAGENTA));
- col.magenta_red = col.magenta;
+ col.red_magenta =
+ col.red =
+ col.red_orange =
+ col.orange_red =
+ col.orange =
+ col.orange_yellow = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_RED));
+ col.yellow_orange =
+ col.yellow =
+ col.yellow_green = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_YELLOW));
+ col.green_yellow =
+ col.green =
+ col.green_cyan = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_GREEN));
+ col.cyan_green =
+ col.cyan =
+ col.cyan_blue = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_CYAN));
+ col.blue_cyan =
+ col.blue =
+ col.blue_magenta = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_BLUE));
+ col.magenta_blue =
+ col.magenta =
+ col.magenta_red = STRDUP(GetTextMode(1,TTM_NO_BOLD|TTM_MAGENTA));
- col.b_red = STRDUP(GetTextMode(1,TTM_BOLD|TTM_RED));
- col.b_red_orange = col.b_red;
- col.b_orange = col.b_red;
- col.b_yellow = STRDUP(GetTextMode(1,TTM_BOLD|TTM_YELLOW));
- col.b_orange_yellow = col.b_yellow;
- col.b_yellow_green = col.b_yellow;
- col.b_green = STRDUP(GetTextMode(1,TTM_BOLD|TTM_GREEN));
- col.b_green_cyan = col.b_green;
- col.b_cyan = STRDUP(GetTextMode(1,TTM_BOLD|TTM_CYAN));
- col.b_cyan_blue = col.b_cyan;
- col.b_blue = STRDUP(GetTextMode(1,TTM_BOLD|TTM_BLUE));
- col.b_blue_magenta = col.b_blue;
- col.b_magenta = STRDUP(GetTextMode(1,TTM_BOLD|TTM_MAGENTA));
- col.b_magenta_red = col.b_magenta;
+ col.b_red_magenta =
+ col.b_red =
+ col.b_red_orange =
+ col.b_orange_red =
+ col.b_orange =
+ col.b_orange_yellow = STRDUP(GetTextMode(1,TTM_BOLD|TTM_RED));
+ col.b_yellow_orange =
+ col.b_yellow =
+ col.b_yellow_green = STRDUP(GetTextMode(1,TTM_BOLD|TTM_YELLOW));
+ col.b_green_yellow =
+ col.b_green =
+ col.b_green_cyan = STRDUP(GetTextMode(1,TTM_BOLD|TTM_GREEN));
+ col.b_cyan_green =
+ col.b_cyan =
+ col.b_cyan_blue = STRDUP(GetTextMode(1,TTM_BOLD|TTM_CYAN));
+ col.b_blue_cyan =
+ col.b_blue =
+ col.b_blue_magenta = STRDUP(GetTextMode(1,TTM_BOLD|TTM_BLUE));
+ col.b_magenta_blue =
+ col.b_magenta =
+ col.b_magenta_red = STRDUP(GetTextMode(1,TTM_BOLD|TTM_MAGENTA));
TermColorIndex_t font, bg;
for ( font = 0; font < TCI__N_FONT; font++ )
@@ -3238,18 +3444,25 @@ const ColorSet_t * GetColorSet256()
// ./mkw-ana testcol 400-420 420-330 330-030 030-033 033-005 005-404 404-400
// ./mkw-ana testcol 400 410 420 320 330 230 030 032 033 024 005 204 404 402 400
+ col.red_magenta = "\e[38;5;161m";
col.red = "\e[38;5;160m";
- col.red_orange = "\e[38;5;166m";
+ col.red_orange =
+ col.orange_red = "\e[38;5;166m";
col.orange = "\e[38;5;172m";
- col.orange_yellow = "\e[38;5;136m";
+ col.orange_yellow =
+ col.yellow_orange = "\e[38;5;136m";
col.yellow = "\e[38;5;142m";
col.yellow_green = "\e[38;5;106m";
+ col.green_yellow = "\e[38;5;70m";
col.green = "\e[38;5;34m";
- col.green_cyan = "\e[38;5;36m";
+ col.green_cyan = "\e[38;5;35m";
+ col.cyan_green = "\e[38;5;36m";
col.cyan = "\e[38;5;37m";
col.cyan_blue = "\e[38;5;32m";
+ col.blue_cyan = "\e[38;5;27m";
col.blue = "\e[38;5;21m";
col.blue_magenta = "\e[38;5;92m";
+ col.magenta_blue = "\e[38;5;128m";
col.magenta = "\e[38;5;164m";
col.magenta_red = "\e[38;5;162m";
@@ -3257,20 +3470,39 @@ const ColorSet_t * GetColorSet256()
// ./mkw-ana testcol 500-520 520-550 550-050 050-055 055-225 225-515 515-500
// ./mkw-ana testcol 500 510 520 530 550 350 050 053 055 135 225 425 515 512 500
+ col.b_red_magenta = "\e[38;5;198m";
col.b_red = "\e[38;5;196m";
- col.b_red_orange = "\e[38;5;202m";
+ col.b_red_orange =
+ col.b_orange_red = "\e[38;5;202m";
col.b_orange = "\e[38;5;208m";
col.b_orange_yellow = "\e[38;5;214m";
+ col.b_yellow_orange = "\e[38;5;220m";
col.b_yellow = "\e[38;5;226m";
col.b_yellow_green = "\e[38;5;154m";
+ col.b_green_yellow = "\e[38;5;118m";
col.b_green = "\e[38;5;46m";
col.b_green_cyan = "\e[38;5;49m";
+ col.b_cyan_green = "\e[38;5;50m";
col.b_cyan = "\e[38;5;51m";
col.b_cyan_blue = "\e[38;5;75m";
+ col.b_blue_cyan = "\e[38;5;111m";
col.b_blue = "\e[38;5;105m";
- col.b_blue_magenta = "\e[38;5;177m";
+ col.b_blue_magenta = "\e[38;5;141m";
+ col.b_magenta_blue = "\e[38;5;177m";
col.b_magenta = "\e[38;5;207m";
- col.b_magenta_red = "\e[38;5;204m";
+ col.b_magenta_red = "\e[38;5;205m";
+
+ _Static_assert( N_COLORSET_GREY == 10, "wrong N_COLORSET_GREY" );
+ col.grey[0] = "\e[38;5;232m";
+ col.grey[1] = "\e[38;5;235m"; //x
+ col.grey[2] = "\e[38;5;237m";
+ col.grey[3] = "\e[38;5;240m"; //x
+ col.grey[4] = "\e[38;5;242m";
+ col.grey[5] = "\e[38;5;245m"; //x
+ col.grey[6] = "\e[38;5;247m";
+ col.grey[7] = "\e[38;5;250m"; //x
+ col.grey[8] = "\e[38;5;252m";
+ col.grey[9] = "\e[38;5;255m"; //x
TermColorIndex_t font, bg;
for ( font = 0; font < TCI__N_FONT; font++ )
@@ -3317,7 +3549,7 @@ const ColorSet_t * GetColorSetAuto ( bool force_on )
if ( auto_mode == COLMD_AUTO )
{
char *term = getenv("TERM");
-
+
#ifdef __CYGWIN__
if (!term)
term = "cygwin";
@@ -3416,23 +3648,31 @@ ccp GetColorByName ( const ColorSet_t *colset, ccp name )
DEF1(abort)
DEF1(b_black)
DEF1(b_blue)
+ DEF1(b_blue_cyan)
DEF1(b_blue_magenta)
DEF1(b_cyan)
DEF1(b_cyan_blue)
+ DEF1(b_cyan_green)
DEF1(b_green)
DEF1(b_green_cyan)
+ DEF1(b_green_yellow)
DEF1(b_magenta)
+ DEF1(b_magenta_blue)
DEF1(b_magenta_red)
DEF1(b_orange)
+ DEF1(b_orange_red)
DEF1(b_orange_yellow)
DEF1(b_red)
+ DEF1(b_red_magenta)
DEF1(b_red_orange)
DEF1(b_white)
DEF1(b_yellow)
DEF1(b_yellow_green)
+ DEF1(b_yellow_orange)
DEF1(bad)
DEF1(black)
DEF1(blue)
+ DEF1(blue_cyan)
DEF1(blue_magenta)
DEF1(caption)
DEF1(cite)
@@ -3440,6 +3680,7 @@ ccp GetColorByName ( const ColorSet_t *colset, ccp name )
DEF1(cmd)
DEF1(cyan)
DEF1(cyan_blue)
+ DEF1(cyan_green)
DEF1(debug)
DEF1(differ)
DEF1(error)
@@ -3448,8 +3689,29 @@ ccp GetColorByName ( const ColorSet_t *colset, ccp name )
DEF1(fatal)
DEF1(file)
DEF1(finish)
+ DEF2(gray0,grey[0])
+ DEF2(gray1,grey[1])
+ DEF2(gray2,grey[2])
+ DEF2(gray3,grey[3])
+ DEF2(gray4,grey[4])
+ DEF2(gray5,grey[5])
+ DEF2(gray6,grey[6])
+ DEF2(gray7,grey[7])
+ DEF2(gray8,grey[8])
+ DEF2(gray9,grey[9])
DEF1(green)
DEF1(green_cyan)
+ DEF1(green_yellow)
+ DEF2(grey0,grey[0])
+ DEF2(grey1,grey[1])
+ DEF2(grey2,grey[2])
+ DEF2(grey3,grey[3])
+ DEF2(grey4,grey[4])
+ DEF2(grey5,grey[5])
+ DEF2(grey6,grey[6])
+ DEF2(grey7,grey[7])
+ DEF2(grey8,grey[8])
+ DEF2(grey9,grey[9])
DEF2(head,heading)
DEF1(heading)
DEF1(hide)
@@ -3460,6 +3722,7 @@ ccp GetColorByName ( const ColorSet_t *colset, ccp name )
DEF1(job)
DEF1(log)
DEF1(magenta)
+ DEF1(magenta_blue)
DEF1(magenta_red)
DEF1(mark)
DEF1(name)
@@ -3470,11 +3733,13 @@ ccp GetColorByName ( const ColorSet_t *colset, ccp name )
DEF2(opt,option)
DEF1(option)
DEF1(orange)
+ DEF1(orange_red)
DEF1(orange_yellow)
DEF2(par,param)
DEF1(param)
DEF1(proc_line)
DEF1(red)
+ DEF1(red_magenta)
DEF1(red_orange)
DEF1(reset)
DEF1(run)
@@ -3493,6 +3758,7 @@ ccp GetColorByName ( const ColorSet_t *colset, ccp name )
DEF1(white)
DEF1(yellow)
DEF1(yellow_green)
+ DEF1(yellow_orange)
};
#if HAVE_PRINT
@@ -3546,135 +3812,179 @@ ccp GetColorByName ( const ColorSet_t *colset, ccp name )
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
+// [[color_helper_t]]
-void PrintColorSetHelper
-(
- FILE *f, // valid output file
- int indent, // indention of output
- const ColorSet_t *cs, // valid color set; if NULL: use std colors
- PrintColorFunc func, // output function, never NULL
- uint mode // output mode (bit field, NULL=default):
- // 1: print normal colors (e.g. RED)
- // 2: print bold colors (e.g. B_RED)
- // 4: print background (e.g. BLUE_RED)
- // 8: print color names (e.g. HIGHLIGHT)
- // 16: include alternative names too (e.g. HL)
-)
+typedef struct color_helper_t
{
- // [[new-color]]
+ FILE *f; // valid output file
+ int indent; // indention of output
+ const ColorSet_t *cs; // valid color set; if NULL: use std colors
+ PrintColorFunc func; // output function, never NULL
+ ColorSelect_t select; // select color groups
+ int multi_assign; // >0: Allow A=B="..."; >1: reorder records too
+ bool print_alt; // print alternative names
+ bool allow_sep; // allow separator lines
- DASSERT(f);
- DASSERT(func);
+ StringField_t sf; // collect strings hre if multi_assign>1
+}
+color_helper_t;
- if (!cs)
- cs = GetColorSet(COLMD_ON);
- indent = NormalizeIndent(indent) + 10; // +10 is max name width
- if (!mode)
- mode = 15;
+//-----------------------------------------------------------------------------
- #undef JOB1
- #undef JOB2
- #define JOB1(m,n) func(f,indent,cs,m,#n,cs->n)
- #define JOB2(m,t,n) func(f,indent,cs,m,#t,cs->n)
+static void print_by_helper_tab
+(
+ color_helper_t *ch, // valid param
+ const color_helper_tab_t *tab // valid color list
+)
+{
+ DASSERT(ch);
+ DASSERT(tab);
- if ( mode & 1 )
+ const ColorSet_t *col = ch->cs;
+ if ( ch->multi_assign <= 0 )
{
- func(f,indent,cs,1,0,0);
- JOB1(1,black);
- JOB1(1,red);
- JOB1(1,red_orange);
- JOB1(1,orange);
- JOB1(1,orange_yellow);
- JOB1(1,yellow);
- JOB1(1,yellow_green);
- JOB1(1,green);
- JOB1(1,green_cyan);
- JOB1(1,cyan);
- JOB1(1,cyan_blue);
- JOB1(1,blue);
- JOB1(1,blue_magenta);
- JOB1(1,magenta);
- JOB1(1,magenta_red);
- JOB1(1,white);
+ for ( ; tab->name; tab++ )
+ {
+ if ( !tab->is_alt || ch->print_alt )
+ {
+ if (tab->offset)
+ {
+ ch->allow_sep = true;
+ ch->func( ch->f, ch->indent, col,
+ tab->name, *(ccp*)((u8*)col+tab->offset) );
+ }
+ else if (ch->allow_sep)
+ {
+ ch->allow_sep = false;
+ ch->func(ch->f,ch->indent,col,0,0);
+ }
+ }
+ }
+ return;
}
- if ( mode & 2 )
+ //-------------------------------------------------------------------------
+
+ if ( ch->multi_assign > 1 )
{
- func(f,indent,cs,2,0,0);
- JOB1(2,b_black);
- JOB1(2,b_red);
- JOB1(2,b_red_orange);
- JOB1(2,b_orange);
- JOB1(2,b_orange_yellow);
- JOB1(2,b_yellow);
- JOB1(2,b_yellow_green);
- JOB1(2,b_green);
- JOB1(2,b_green_cyan);
- JOB1(2,b_cyan);
- JOB1(2,b_cyan_blue);
- JOB1(2,b_blue);
- JOB1(2,b_blue_magenta);
- JOB1(2,b_magenta);
- JOB1(2,b_magenta_red);
- JOB1(2,b_white);
+ char key[100];
+ for ( ; tab->name; tab++ )
+ {
+ if ( tab->offset && ( !tab->is_alt || ch->print_alt ))
+ {
+ snprintf(key,sizeof(key),"%s\1%s",*(ccp*)((u8*)col+tab->offset),tab->name);
+ InsertStringField(&ch->sf,key,false);
+ }
+ }
+ return;
}
- if ( mode & 8 )
+ //-------------------------------------------------------------------------
+ // ch->multi_assign == 1
+
+ // skip separators
+ while ( tab->name && ( !tab->offset || !( !tab->is_alt || ch->print_alt )))
+ tab++;
+
+ while (tab->name)
{
- const bool alt = ( mode & 16 ) != 0;
- func(f,indent,cs,8,0,0);
+ bool have_next = false;
+ const color_helper_tab_t *next = tab+1;
+ for ( ; next->name; next++ )
+ {
+ if ( next->offset && ( !next->is_alt || ch->print_alt ))
+ {
+ have_next = true;
+ break;
+ }
+ }
+ ccp val = *(ccp*)((u8*)col+tab->offset);
+ if ( have_next && !strcmp(val,*(ccp*)((u8*)col+next->offset)) )
+ val = 0;
+ ch->func( ch->f, ch->indent, col, tab->name, val );
+ if (!have_next)
+ break;
+ tab = next;
+ }
+};
- JOB1(4,setup);
- JOB1(4,run);
- JOB1(4,abort);
- JOB1(4,finish);
- JOB1(4,script);
- JOB1(4,open);
- JOB1(4,close);
- JOB1(4,file);
- JOB1(4,job);
+//-----------------------------------------------------------------------------
+
+void PrintColorSetHelper2
+(
+ color_helper_t *ch // valid params
+)
+{
+ // [[new-color]]
- JOB1(4,info);
- JOB1(4,hint);
- JOB1(4,warn);
- JOB1(4,debug);
- JOB1(4,log);
+ DASSERT(ch);
+ DASSERT(ch->f);
+ DASSERT(ch->func);
- JOB1(4,name);
- JOB1(4,op);
- JOB1(4,value); if (alt) JOB2(12,val,value);
- JOB1(4,success);
- JOB1(4,error);
- JOB1(4,fail);
- JOB1(4,fail2);
- JOB1(4,fatal);
- JOB1(4,mark);
- JOB1(4,bad);
+ if (!ch->cs)
+ ch->cs = GetColorSet(COLMD_ON);
+ ch->indent = NormalizeIndent(ch->indent) + 15; // 15 is max name width
- JOB1(4,select);
- JOB1(4,differ);
- JOB1(4,stat_line);
- JOB1(4,warn_line);
- JOB1(4,proc_line);
- JOB1(4,cite);
- JOB1(4,status);
- JOB1(4,highlight); if (alt) JOB2(12,hl,highlight);
- JOB1(4,hide);
+ if ( !ch->select )
+ ch->select = COLSEL_M_MODE;
+ ch->print_alt = ( ch->select & COLSEL_F_ALT ) != 0;
+ ch->allow_sep = true;
- JOB1(4,heading); if (alt) JOB2(12,head,heading);
- JOB1(4,caption);
- JOB1(4,section);
- JOB1(4,syntax);
- JOB1(4,cmd);
- JOB1(4,option); if (alt) JOB2(12,opt,option);
- JOB1(4,param); if (alt) JOB2(12,par,param);
+ if ( ch->multi_assign > 1 )
+ InitializeStringField(&ch->sf);
- JOB1(4,off);
- JOB1(4,on);
+ if ( ch->select & COLSEL_COLOR )
+ print_by_helper_tab(ch,ch_tab_color);
+
+ if ( ch->select & COLSEL_B_COLOR )
+ print_by_helper_tab(ch,ch_tab_bcolor);
+
+ if ( ch->select & COLSEL_GREY )
+ print_by_helper_tab(ch,ch_tab_grey);
+
+ if ( ch->select & COLSEL_NAME )
+ print_by_helper_tab(ch,ch_tab_name);
+
+ if ( ch->multi_assign > 1 )
+ {
+ ccp *ptr, *end = ch->sf.field + ch->sf.used;
+ for ( ptr = ch->sf.field; ptr < end; ptr++ )
+ {
+ ccp val = *ptr;
+ char *name = strchr(val,'\1');
+ if (!name) continue; // this may never happen!!
+ if ( ptr+1 < end && !memcmp(val,ptr[1],name-val+1) )
+ val = 0;
+ *name++ = 0;
+ ch->func( ch->f, ch->indent, ch->cs, name, val );
+ }
+ ResetStringField(&ch->sf);
}
+}
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
- #undef JOB1
- #undef JOB2
+void PrintColorSetHelper
+(
+ FILE *f, // valid output file
+ int indent, // indention of output
+ const ColorSet_t *cs, // valid color set; if NULL: use std colors
+ PrintColorFunc func, // output function, never NULL
+ ColorSelect_t select, // select color groups
+ int multi_assign // >0: Allow A=B="..."; >1: reorder records too
+)
+{
+ color_helper_t ch =
+ {
+ .f = f,
+ .indent = indent,
+ .cs = cs,
+ .func = func,
+ .select = select,
+ .multi_assign = multi_assign,
+ };
+ PrintColorSetHelper2(&ch);
}
///////////////////////////////////////////////////////////////////////////////
@@ -3686,7 +3996,6 @@ static void PrintColorSetCOL
FILE *f, // valid output file
int indent, // normalized indention of output
const ColorSet_t *cs, // valid color set, never NULL
- uint mode, // output mode of PrintColorSetHelper()
ccp col_name, // name of color
ccp col_string // escape string for the color
)
@@ -3716,7 +4025,6 @@ static void PrintColorSetSH
FILE *f, // valid output file
int indent, // normalized indention of output
const ColorSet_t *cs, // valid color set, never NULL
- uint mode, // output mode of PrintColorSetHelper()
ccp col_name, // name of color
ccp col_string // escape string for the color
)
@@ -3748,23 +4056,25 @@ static void PrintColorSetPHP
FILE *f, // valid output file
int indent, // normalized indention of output
const ColorSet_t *cs, // valid color set, never NULL
- uint mode, // output mode of PrintColorSetHelper()
ccp col_name, // name of color
ccp col_string // escape string for the color
)
{
- if (col_name)
+ if ( col_name )
{
- DASSERT(col_string);
-
- fprintf(f," $COL->%s%.*s= ", col_name, (29-(int)strlen(col_name))/8, Tabs20 );
+ fprintf(f," $COL->%s%.*s=", col_name, (29-(int)strlen(col_name))/8, Tabs20 );
- char buf[50];
- PrintEscapedString(buf,sizeof(buf),col_string,-1,CHMD_ESC,0,0);
- if (memcmp(buf,"\\x1B",4))
- fprintf(f,"\"%s\";\n",buf);
+ if (col_string)
+ {
+ char buf[50];
+ PrintEscapedString(buf,sizeof(buf),col_string,-1,CHMD_ESC,0,0);
+ if (memcmp(buf,"\\x1B",4))
+ fprintf(f," \"%s\";\n",buf);
+ else
+ fprintf(f," \"\\033%s\";\n",buf+4);
+ }
else
- fprintf(f,"\"\\033%s\";\n",buf+4);
+ fputc('\n',f);
}
}
@@ -3774,22 +4084,8 @@ void PrintColorSet
(
FILE *f, // valid output file
int indent, // indention of output
- const ColorSet_t *cs // valid color set; if NULL: use std colors
-)
-{
- DASSERT(f);
- PrintColorSetHelper(f,indent,cs,PrintColorSetCOL,4);
- fputc('\n',f);
-}
-
-//-----------------------------------------------------------------------------
-
-void PrintColorSetEx
-(
- FILE *f, // valid output file
- int indent, // indention of output
const ColorSet_t *cs, // valid color set; if NULL: use std colors
- uint mode, // output mode => see PrintColorSetHelper()
+ ColorSelect_t select, // select color groups
uint format // output format
// 0: colored list
// 1: shell definitions
@@ -3804,7 +4100,7 @@ void PrintColorSetEx
case 1:
if (!cs)
cs = GetColorSet(COLMD_ON);
- PrintColorSetHelper(f,indent,cs,PrintColorSetSH,mode);
+ PrintColorSetHelper(f,indent,cs,PrintColorSetSH,select,0);
PrintEscapedString(buf,sizeof(buf),cs->reset,-1,CHMD_ESC,0,0);
if (memcmp(buf,"\\x1B",4))
fprintf(f,"COL0=$'%s'\n",buf);
@@ -3815,11 +4111,11 @@ void PrintColorSetEx
case 2:
if (!cs)
cs = GetColorSet(COLMD_ON);
- PrintColorSetHelper(f,indent,cs,PrintColorSetPHP,mode);
+ PrintColorSetHelper(f,indent,cs,PrintColorSetPHP,select,2);
break;
default:
- PrintColorSetHelper(f,indent,cs,PrintColorSetCOL,mode);
+ PrintColorSetHelper(f,indent,cs,PrintColorSetCOL,select,0);
fputc('\n',f);
break;
}
@@ -3857,6 +4153,8 @@ void SetupColorView ( ColorView_t *cv )
case 'g': case 'G': cv->order = 1; break;
case 'b': case 'B': cv->order = 2; break;
}
+
+ cv->allow_sep = false;
}
///////////////////////////////////////////////////////////////////////////////
@@ -4221,26 +4519,42 @@ void ViewColors256 ( ColorView_t *cv )
static void ViewColorsPredef_helper
(
- ColorView_t *cv, // basic data
- ccp col_name, // name of color
- ccp col_string // escape string for the color
+ ColorView_t *cv, // basic data
+ const color_helper_tab_t *tab // valid color list
)
{
DASSERT(cv);
- DASSERT(col_string);
+ DASSERT(tab);
- if ( col_string && *col_string )
- fprintf(cv->f,"%*s %s %-15s %s \\e%s\n",
- cv->indent, col_name, col_string, col_name,
- cv->colset->reset, col_string+1 );
- else
- fprintf(cv->f,"%*s %s\n",
- cv->indent, col_name, col_name );
+ const ColorSet_t *col = cv->colset;
+
+ for ( ; tab->name; tab++ )
+ {
+ if ( !tab->is_alt || cv->print_alt )
+ {
+ if (tab->offset)
+ {
+ cv->allow_sep = true;
+ ccp val = *(ccp*)((u8*)col+tab->offset);
+ if (*val)
+ fprintf(cv->f,"%*s %s %-15s %s \\e%s\n",
+ cv->indent, tab->name, val, tab->name, col->reset, val+1 );
+ else
+ fprintf(cv->f,"%*s %s %-15s %s\n",
+ cv->indent, tab->name, val, tab->name, col->reset );
+ }
+ else if (cv->allow_sep)
+ {
+ cv->allow_sep = false;
+ fputc('\n',cv->f);
+ }
+ }
+ }
}
//-----------------------------------------------------------------------------
-void ViewColorsPredef ( ColorView_t *cv, uint mode )
+void ViewColorsPredef ( ColorView_t *cv, ColorSelect_t colsel )
{
// [[new-color]]
@@ -4248,128 +4562,31 @@ void ViewColorsPredef ( ColorView_t *cv, uint mode )
SetupColorView(cv);
DASSERT(cv->colset);
- #ifdef TEST
- fprintf(cv->f,"%*s%s() %s, %u colors, mode %d, stdcol %d, order %d\n",
- cv->indent,"", __FUNCTION__,
- GetColorModeName(cv->colset->col_mode,0),
- cv->colset->n_colors, cv->mode, cv->std_col, cv->order );
- #endif
+ if ( !colsel )
+ colsel = COLSEL_M_MODE;
+ cv->print_alt = ( colsel & COLSEL_F_ALT ) != 0;
+
+ cv->indent += 15; // 15 is max name width
fprintf(cv->f,
"%s\n%*sPredefined%s color names for mode %s:\n\n",
cv->colset->reset, cv->indent, "",
- ( mode & 3 ) == 1 ? " semantic" : "",
+ ( colsel & COLSEL_M_MODE ) == COLSEL_NAME ? " semantic" : "",
GetColorModeName(cv->col_mode,0) );
- cv->indent += 14;
-
- #undef JOB1
- #undef JOB2
- #define JOB1(n) ViewColorsPredef_helper(cv,#n,cv->colset->n)
- #define JOB2(n,c) ViewColorsPredef_helper(cv,#n,cv->colset->c)
-
- if ( mode & 1 )
- {
- const bool alt = cv->mode & 1;
-
- JOB1(setup);
- JOB1(run);
- JOB1(abort);
- JOB1(finish);
- JOB1(script);
- JOB1(open);
- JOB1(close);
- JOB1(file);
- JOB1(job);
-
- JOB1(info);
- JOB1(hint);
- JOB1(warn);
- JOB1(debug);
- JOB1(log);
+ if ( colsel & COLSEL_NAME )
+ ViewColorsPredef_helper(cv,ch_tab_name);
- JOB1(name);
- JOB1(op);
- JOB1(value); if (alt) JOB2(val,value);
- JOB1(success);
- JOB1(error);
- JOB1(fail);
- JOB1(fail2);
- JOB1(fatal);
- JOB1(mark);
- JOB1(bad);
+ if ( colsel & COLSEL_COLOR )
+ ViewColorsPredef_helper(cv,ch_tab_color);
- JOB1(select);
- JOB1(differ);
- JOB1(stat_line);
- JOB1(warn_line);
- JOB1(proc_line);
- JOB1(cite);
- JOB1(status);
- JOB1(highlight); if (alt) JOB2(hl,highlight);
- JOB1(hide);
+ if ( colsel & COLSEL_B_COLOR )
+ ViewColorsPredef_helper(cv,ch_tab_bcolor);
- JOB1(heading);
- JOB1(caption);
- JOB1(section);
- JOB1(syntax);
- JOB1(cmd);
- JOB1(option); if (alt) JOB2(opt,option);
- JOB1(param); if (alt) JOB2(par,param);
-
- JOB1(off);
- JOB1(on);
- }
-
- if ( mode & 2 )
- {
- if ( mode & 1 )
- fputc('\n',cv->f);
- JOB1(black);
- JOB1(b_black);
- JOB1(white);
- JOB1(b_white);
-
- if ( !(mode & 1) )
- fputc('\n',cv->f);
- JOB1(red);
- JOB1(red_orange);
- JOB1(orange);
- JOB1(orange_yellow);
- JOB1(yellow);
- JOB1(yellow_green);
- JOB1(green);
- JOB1(green_cyan);
- JOB1(cyan);
- JOB1(cyan_blue);
- JOB1(blue);
- JOB1(blue_magenta);
- JOB1(magenta);
- JOB1(magenta_red);
- JOB1(red);
-
- if ( !(mode & 1) )
- fputc('\n',cv->f);
- JOB1(b_red);
- JOB1(b_red_orange);
- JOB1(b_orange);
- JOB1(b_orange_yellow);
- JOB1(b_yellow);
- JOB1(b_yellow_green);
- JOB1(b_green);
- JOB1(b_green_cyan);
- JOB1(b_cyan);
- JOB1(b_cyan_blue);
- JOB1(b_blue);
- JOB1(b_blue_magenta);
- JOB1(b_magenta);
- JOB1(b_magenta_red);
- JOB1(b_red);
- }
+ if ( colsel & COLSEL_GREY )
+ ViewColorsPredef_helper(cv,ch_tab_grey);
- #undef JOB1
- #undef JOB2
- cv->indent -= 14;
+ cv->indent -= 15;
}
//
diff --git a/project/dclib/dclib-color.h b/project/dclib/dclib-color.h
index 2661748..9b19bbf 100644
--- a/project/dclib/dclib-color.h
+++ b/project/dclib/dclib-color.h
@@ -386,6 +386,7 @@ typedef enum TermColorIndex_t
TCI__N = TCI__IGNORE, // number of supported colors
TCI__N_FONT = TCI_B_RED, // number of recommended font colors
TCI__N_BG = TCI__N, // number of recommended background colors
+ TCI__N_GREY = TCI_RED, // number of gray tones
#else // !SUPPORT_36_COLORS
@@ -417,6 +418,7 @@ typedef enum TermColorIndex_t
TCI__N = TCI__IGNORE, // number of supported colors
TCI__N_FONT = TCI_B_RED, // number of recommended font colors
TCI__N_BG = TCI__N, // number of recommended background colors
+ TCI__N_GREY = TCI_RED, // number of gray tones
#endif // !SUPPORT_36_COLORS
}
@@ -433,6 +435,8 @@ extern const int Color18Index[18+1]; // 18 elements + -1 as terminator
//-----------------------------------------------------------------------------
// [[ColorSet_t]]
+#define N_COLORSET_GREY 10
+
typedef struct ColorSet_t
{
//--- header
@@ -450,7 +454,7 @@ typedef struct ColorSet_t
//--- data, always begins with 'reset'
// [[new-color]]
- ccp reset;
+ ccp reset; // always first color!!
ccp setup;
ccp run;
@@ -505,33 +509,49 @@ typedef struct ColorSet_t
ccp white;
ccp b_white;
+ ccp grey[N_COLORSET_GREY];
+
+ ccp red_magenta;
ccp red;
ccp red_orange;
+ ccp orange_red;
ccp orange;
ccp orange_yellow;
+ ccp yellow_orange;
ccp yellow;
ccp yellow_green;
+ ccp green_yellow;
ccp green;
ccp green_cyan;
+ ccp cyan_green;
ccp cyan;
ccp cyan_blue;
+ ccp blue_cyan;
ccp blue;
ccp blue_magenta;
+ ccp magenta_blue;
ccp magenta;
ccp magenta_red;
+ ccp b_red_magenta;
ccp b_red;
ccp b_red_orange;
+ ccp b_orange_red;
ccp b_orange;
ccp b_orange_yellow;
+ ccp b_yellow_orange;
ccp b_yellow;
ccp b_yellow_green;
+ ccp b_green_yellow;
ccp b_green;
ccp b_green_cyan;
+ ccp b_cyan_green;
ccp b_cyan;
ccp b_cyan_blue;
+ ccp b_blue_cyan;
ccp b_blue;
ccp b_blue_magenta;
+ ccp b_magenta_blue;
ccp b_magenta;
ccp b_magenta_red;
@@ -540,6 +560,26 @@ typedef struct ColorSet_t
ColorSet_t;
//-----------------------------------------------------------------------------
+// [[ColorSelect_t]]
+
+typedef enum ColorSelect_t
+{
+ COLSEL_COLOR = 0x01,
+ COLSEL_B_COLOR = 0x02,
+ COLSEL_GREY = 0x04,
+ COLSEL_NAME = 0x08,
+
+ COLSEL_F_ALT = 0x10,
+
+ COLSEL_M_COLOR = COLSEL_COLOR|COLSEL_B_COLOR,
+ COLSEL_M_NONAME = COLSEL_COLOR|COLSEL_B_COLOR|COLSEL_GREY,
+ COLSEL_M_MODE = 0x0f,
+ COLSEL_M_ALL = 0x1f,
+
+}
+ColorSelect_t;
+
+//-----------------------------------------------------------------------------
ccp GetTextMode
(
@@ -577,7 +617,6 @@ typedef void (*PrintColorFunc)
FILE *f, // valid output file
int indent, // normalized indention of output
const ColorSet_t *cs, // valid color set, never NULL
- uint mode, // output mode of PrintColorSetHelper()
ccp col_name, // name of color
ccp col_string // escape string for the color
);
@@ -598,15 +637,8 @@ void PrintColorSet
(
FILE *f, // valid output file
int indent, // indention of output
- const ColorSet_t *cs // valid color set; if NULL: use std colors
-);
-
-void PrintColorSetEx
-(
- FILE *f, // valid output file
- int indent, // indention of output
const ColorSet_t *cs, // valid color set; if NULL: use std colors
- uint mode, // output mode => see PrintColorSetHelper()
+ ColorSelect_t select, // select color groups
uint format // output format
// 0: colored list
// 1: shell definitions
@@ -618,12 +650,8 @@ void PrintColorSetHelper
int indent, // indention of output
const ColorSet_t *cs, // valid color set; if NULL: use std colors
PrintColorFunc func, // output function, never NULL
- uint mode // output mode (bit field, NULL=default):
- // 1: print normal colors (e.g. RED)
- // 2: print bold colors (e.g. B_RED)
- // 4: print background (e.g. BLUE_RED)
- // 8: print color names (e.g. HIGHLIGHT)
- // 16: include alternative names too (e.g. HL)
+ ColorSelect_t select, // select color groups
+ int multi_assign // >0: Allow A=B="..."; >1: reorder records too
);
//
@@ -662,6 +690,8 @@ typedef struct ColorView_t
int order; // 0|'r' | 1|'g' | 2|'b'
GetColorOption_t col_option; // color option
uint mode; // function specific mode (modulo 60)
+ bool print_alt; // print alternative names
+ bool allow_sep; // allow separator lines
void *user_ptr; // any pointer
int user_int; // any number or id
@@ -681,7 +711,7 @@ void ViewColorsCombi8 ( ColorView_t *cv );
void ViewColors18 ( ColorView_t *cv );
void ViewColorsDC ( ColorView_t *cv, bool optimized );
void ViewColors256 ( ColorView_t *cv );
-void ViewColorsPredef ( ColorView_t *cv, uint mode ); // mode: 1=name, 2=colors
+void ViewColorsPredef ( ColorView_t *cv, ColorSelect_t select );
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
diff --git a/project/dclib/dclib-file.c b/project/dclib/dclib-file.c
index 1356d32..1b287f8 100644
--- a/project/dclib/dclib-file.c
+++ b/project/dclib/dclib-file.c
@@ -3618,93 +3618,6 @@ void DumpSearchFile ( FILE *f, int indent,
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
-uint SearchConfig1
-(
- search_file_list_t *sfl,
- // valid search list, new file will be appended
- ccp config_fname, // default filename (without path) of config file
-
- ccp option, // NULL or filename by option => CONF_HINT_OPT
- ccp home_path, // NULL or home path for config file => CONF_HINT_HOME
- ccp etc_path, // NULL or etc path for config file => CONF_HINT_ETC
- ccp share_path, // NULL or share path for config file => CONF_HINT_MISC
-
- int stop_mode // >0: stop if found, >1: stop on option
-
- // hints (by source, values=prio): 8:option, 4:home, 2:etc, 1:prog-path
-)
-{
- DASSERT(sfl);
- char buf[PATH_MAX];
-
- uint count = 0;
- search_file_t *sf;
- if ( option && *option )
- {
- sf = AppendSearchFile(sfl,option,CPM_COPY,config_fname);
- if (sf)
- {
- sf->hint |= CONF_HINT_OPT;
- if ( sf->itype == INTY_REG && ++count && stop_mode > 0 )
- return 1;
- if ( stop_mode > 1 )
- return 0;
- }
- }
-
- if (home_path)
- {
- ccp home = getenv("HOME");
- if (home)
- home_path = PathCatPP(buf,sizeof(buf),home,home_path);
- sf = AppendSearchFile(sfl,home_path,CPM_COPY,config_fname);
- if (sf)
- {
- sf->hint |= CONF_HINT_HOME;
- if ( sf->itype == INTY_REG && ++count && stop_mode > 0 )
- return 1;
- }
- }
-
- if (etc_path)
- {
- sf = AppendSearchFile(sfl,etc_path,CPM_COPY,config_fname);
- if (sf)
- {
- sf->hint |= CONF_HINT_ETC;
- if ( sf->itype == INTY_REG && ++count && stop_mode > 0 )
- return 1;
- }
- }
-
- if (share_path)
- {
- sf = AppendSearchFile(sfl,share_path,CPM_COPY,config_fname);
- if (sf)
- {
- sf->hint |= CONF_HINT_MISC;
- if ( sf->itype == INTY_REG && ++count && stop_mode > 0 )
- return 1;
- }
- }
-
- ccp progpath = ProgramDirectory();
- if (progpath)
- {
- sf = AppendSearchFile(sfl,progpath,CPM_COPY,config_fname);
- if (sf)
- {
- sf->hint |= CONF_HINT_INST;
- if ( sf->itype == INTY_REG && ++count && stop_mode > 0 )
- return 1;
- }
- }
-
- return count;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
static int add_search
(
// returns 0 if !stop_if_found, 2 if added+found, 1 if added, 0 else
diff --git a/project/dclib/dclib-file.h b/project/dclib/dclib-file.h
index e6f51f3..041929d 100644
--- a/project/dclib/dclib-file.h
+++ b/project/dclib/dclib-file.h
@@ -1133,24 +1133,6 @@ config_hint_t;
//-----------------------------------------------------------------------------
-uint SearchConfig1
-(
- search_file_list_t *sfl,
- // valid search list, new file will be appended
- ccp config_fname, // default filename (without path) of config file
-
- ccp option, // NULL or filename by option => CONF_HINT_OPT
- ccp home_path, // NULL or home path for config file => CONF_HINT_HOME
- ccp etc_path, // NULL or etc path for config file => CONF_HINT_ETC
- ccp share_path, // NULL or share path for config file => CONF_HINT_MISC
-
- int stop_mode // >0: stop if found, >1: stop on option
-
- // hints (by source, values=prio): 8:option, 4:home, 2:etc, 1:prog-path
-);
-
-//-----------------------------------------------------------------------------
-
bool SearchConfig
(
// for all paths:
diff --git a/project/revision.sh b/project/revision.sh
index 17aadd1..acabff1 100644
--- a/project/revision.sh
+++ b/project/revision.sh
@@ -1 +1 @@
-revision=8414
+revision=8443
diff --git a/project/setup.sh b/project/setup.sh
index a5dc451..edbc893 100644
--- a/project/setup.sh
+++ b/project/setup.sh
@@ -56,7 +56,6 @@ gcc $xflags -E -DPRINT_SYSTEM_SETTINGS system.c \
| awk -F= '/^result_/ {printf("%s := %s\n",substr($1,8),gensub(/"/,"","g",$2))}' \
> Makefile.setup
-#rm -f system.tmp
SYSTEM=$(awk '$1=="SYSTEM" {print $3}' Makefile.setup)
#echo "SYSTEM=|$SYSTEM|" >&2
diff --git a/project/src/addr_port.inc b/project/src/addr_port.inc
new file mode 100644
index 0000000..41c98ef
--- /dev/null
+++ b/project/src/addr_port.inc
@@ -0,0 +1,2309 @@
+
+const static addr_port_t addr_port[2304] =
+{
+ {{ 0x80000000, 0x80000000, 0x80000000, 0x80000000 }, 0x8040|0, 0x8040|0 },
+ {{ 0x80008040, 0x800d2ce8, 0x800d2ca8, 0x800d2de8 }, 0xc|2, 0xc|3 },
+ {{ 0x80008054, 0x8001f964, 0x800203e8, 0x8002052c }, 0x4|3, 0x4|3 },
+ {{ 0x80008090, 0x80008050, 0x80008024, 0x8000812c }, 0x10|2, 0x10|3 },
+ {{ 0x800080ac, 0x8000806c, 0x80008024, 0x8000812c }, 0x10|2, 0x10|3 },
+ {{ 0x800080c8, 0x80008088, 0x80008024, 0x8000812c }, 0x10|2, 0x10|3 },
+ {{ 0x80008114, 0x800080d4, 0x80008070, 0x80008188 }, 0xbc|2, 0xbc|3 },
+ {{ 0x800081e0, 0x800081a0, 0x8000813c, 0x80008250 }, 0x8|2, 0x8|3 },
+ {{ 0x80008218, 0x800081d8, 0x80008174, 0x80060894 }, 0x4|3, 0x4|3 },
+ {{ 0x80008220, 0x800081e0, 0x8000817c, 0x800082a4 }, 0x68|2, 0x68|3 },
+ {{ 0x8000829c, 0x8000825c, 0x800081f8, 0x8000841c }, 0x8f8|2, 0x8f8|3 },
+ {{ 0x80008ba0, 0x80008b60, 0x80008afc, 0x800498a8 }, 0x4|3, 0x4|3 },
+ {{ 0x80008bfc, 0x80008bbc, 0x80008b58, 0x80008d4c }, 0x7f4|2, 0x7f4|3 },
+ {{ 0x800093f8, 0x800093b8, 0x80009354, 0x800d6970 }, 0x4|3, 0x4|3 },
+ {{ 0x80009404, 0x800093c4, 0x80009360, 0x80020dac }, 0x4|3, 0x4|3 },
+ {{ 0x80009408, 0x800093c8, 0x80009364, 0x8000954c }, 0x24|2, 0x24|3 },
+ {{ 0x8000942c, 0x800093ec, 0x80009388, 0x800d07c0 }, 0x4|3, 0x4|3 },
+ {{ 0x80009440, 0x80009400, 0x8000939c, 0x800d4228 }, 0x4|3, 0x4|3 },
+ {{ 0x80009458, 0x80009418, 0x800093b4, 0x80009560 }, 0xc4|1, 0xc4|1 },
+ {{ 0x8000951c, 0x800094dc, 0x80009478, 0x80009624 }, 0x4|0, 0xa8|1 },
+ {{ 0x800095c4, 0x80009584, 0x80009520, 0x800096cc }, 0x4|0, 0x1748|1 },
+ {{ 0x8000ad44, 0x8000ad04, 0x8000aca0, 0x8000ae4c }, 0x4|3, 0x4|3 },
+ {{ 0x8000ad48, 0x8000ad08, 0x8000aca4, 0x8000ae40 }, 0x4|3, 0x4|3 },
+ {{ 0x8000ad4c, 0x8000ad0c, 0x8000aca8, 0x8000ae64 }, 0x8|2, 0x8|3 },
+ {{ 0x8000ad58, 0x8000ad18, 0x8000acb4, 0x8000ae50 }, 0x4|3, 0x4|3 },
+ {{ 0x8000ad5c, 0x8000ad1c, 0x8000acb8, 0x8000ae74 }, 0x8|2, 0x8|3 },
+ {{ 0x8000ad64, 0x8000ad24, 0x8000acc0, 0x8000ae5c }, 0x8|2, 0x8|3 },
+ {{ 0x8000ad6c, 0x8000ad2c, 0x8000acc8, 0x8000ae84 }, 0x4|3, 0x4|3 },
+ {{ 0x8000ad70, 0x8000ad30, 0x8000accc, 0x8000ae68 }, 0x24|2, 0x24|3 },
+ {{ 0x8000ad94, 0x8000ad54, 0x8000acf0, 0x800d2f2c }, 0x4|3, 0x4|3 },
+ {{ 0x8000ad98, 0x8000ad58, 0x8000acf4, 0x8000ae90 }, 0xc|2, 0xc|3 },
+ {{ 0x8000ada4, 0x8000ad64, 0x8000ad00, 0x8000aebc }, 0x14|2, 0x14|3 },
+ {{ 0x8000adc0, 0x8000ad8c, 0x8000ad1c, 0x8000aed8 }, 0x14|2, 0x14|3 },
+ {{ 0x8000ade0, 0x800519d8, 0x80051998, 0x80051ad8 }, 0x4|3, 0x4|3 },
+ {{ 0x8000adf8, 0x8000adbc, 0x8000ad4c, 0x8000af08 }, 0xa0|2, 0xa0|3 },
+ {{ 0x8000aeb4, 0x80023810, 0x800237d0, 0x80023910 }, 0x8|2, 0x8|3 },
+ {{ 0x8000aedc, 0x8002380c, 0x800237cc, 0x8002390c }, 0xc|2, 0xc|3 },
+ {{ 0x8000af20, 0x8000ae80, 0x8000ae44, 0x8000afcc }, 0x6e4|2, 0x6e4|3 },
+ {{ 0x8000b654, 0x8000b5b4, 0x8000b578, 0x8000b6bc }, 0x4c|2, 0x4c|3 },
+ {{ 0x8000b6b0, 0x80098048, 0x8000b5d4, 0x8000b718 }, 0x4|3, 0x4|3 },
+ {{ 0x8000b6b4, 0x80021048, 0x8000b5d8, 0x8000b71c }, 0xa80|2, 0xa80|3 },
+ {{ 0x8000c174, 0x8000b614, 0x8000c098, 0x8000c1dc }, 0x27e0|1, 0x27e0|1 },
+ {{ 0x8000e954, 0x8000ddf4, 0x8000e878, 0x8000e9bc }, 0x4|0, 0x89c|1 },
+ {{ 0x8000f1f0, 0x8000e690, 0x8000f114, 0x8000f258 }, 0x4|0, 0x124|1 },
+ {{ 0x8000f314, 0x8000e7b4, 0x8000f238, 0x8000f37c }, 0x4|0, 0x2624|1 },
+ {{ 0x80011938, 0x80010dd8, 0x8001185c, 0x800119a0 }, 0x4|0, 0xf4|1 },
+ {{ 0x80011a2c, 0x80010ecc, 0x80011950, 0x80011a94 }, 0x4|0, 0xd4|1 },
+ {{ 0x80011b00, 0x80010fa0, 0x80011a24, 0x80011b68 }, 0x4|0, 0x170|1 },
+ {{ 0x80011c70, 0x80011110, 0x80011b94, 0x80011cd8 }, 0x4|0, 0x20|1 },
+ {{ 0x80011c90, 0x80011130, 0x80011bb4, 0x80011cf8 }, 0x4|0, 0x1490|1 },
+ {{ 0x80013120, 0x800125c0, 0x80013044, 0x80013188 }, 0x4|0, 0xc0|1 },
+ {{ 0x800131e0, 0x80012680, 0x80013104, 0x80013248 }, 0x4|0, 0xbc|1 },
+ {{ 0x8001329c, 0x8001273c, 0x800131c0, 0x80013304 }, 0x4|0, 0x11c|1 },
+ {{ 0x800133b8, 0x80012858, 0x800132dc, 0x80013420 }, 0x4|0, 0x114|1 },
+ {{ 0x800134cc, 0x8001296c, 0x800133f0, 0x80013534 }, 0x4|0, 0x124|1 },
+ {{ 0x800135f0, 0x80012a90, 0x80013514, 0x80013658 }, 0x4|0, 0x1cb8|1 },
+ {{ 0x800152a8, 0x80014748, 0x800151cc, 0x80015310 }, 0x4|0, 0x194|1 },
+ {{ 0x8001543c, 0x800148dc, 0x80015360, 0x800154a4 }, 0x4|0, 0x23d8|1 },
+ {{ 0x80017814, 0x80016cb4, 0x80017738, 0x8001787c }, 0x4|0, 0x4b34|1 },
+ {{ 0x8001c35c, 0x8001b7fc, 0x8001c280, 0x8001c3c4 }, 0x34|2, 0x60|3 },
+ {{ 0x8001c3bc, 0x8001b85c, 0x8001c2e0, 0x8001c424 }, 0xbe8|3, 0xbe8|3 },
+ {{ 0x8001cfa4, 0x8001c444, 0x8001cec8, 0x8001d00c }, 0x1f98|1, 0x1f98|1 },
+ {{ 0x8001ef3c, 0x8001e3dc, 0x8001ee60, 0x8001efa4 }, 0x4|0, 0xef4|1 },
+ {{ 0x8001fe3c, 0x8001f2dc, 0x8001fd60, 0x8001fea4 }, 0x364|3, 0x364|3 },
+ {{ 0x800201a0, 0x8001f640, 0x800200c4, 0x80020208 }, 0x142c|1, 0x142c|1 },
+ {{ 0x800215cc, 0x80020a6c, 0x800214f0, 0x80021634 }, 0x4|0, 0x10|1 },
+ {{ 0x800215dc, 0x80020a7c, 0x80021500, 0x80021644 }, 0x4|0, 0x5c4|1 },
+ {{ 0x80021ba8, 0x80021b08, 0x800b2638, 0x800b2778 }, 0x4|3, 0x4|3 },
+ {{ 0x80021bac, 0x80021b0c, 0x80021acc, 0x800b277c }, 0x4|3, 0x4|3 },
+ {{ 0x80021bb0, 0x80021b10, 0x80021ad0, 0x80021c10 }, 0x1ad0|1, 0x1ad0|1 },
+ {{ 0x80023680, 0x800235e0, 0x800235a0, 0x800236e0 }, 0x4|0, 0x2c8|1 },
+ {{ 0x80023948, 0x800238a8, 0x80023868, 0x800239a8 }, 0x4|0, 0x1c770|1 },
+ {{ 0x800400e0, 0x80040040, 0x80040000, 0x80040140 }, 0x2a10|2, 0x2a38|3 },
+ {{ 0x80042b18, 0x80042a78, 0x80042a38, 0x80042b78 }, 0x75400|3, 0x75400|3 },
+ {{ 0x800b7f18, 0x800b42d8, 0x800b4298, 0x800b43d8 }, 0x1318|2, 0x1318|3 },
+ {{ 0x800b9230, 0x800b9190, 0x800b9150, 0x800b9290 }, 0x6d0c|2, 0x6d0c|3 },
+ {{ 0x800bff3c, 0x800bfe9c, 0x800bfe5c, 0x8012e598 }, 0x4|3, 0x4|3 },
+ {{ 0x800bff40, 0x800bfea0, 0x800bfe60, 0x800bffa0 }, 0xc8a4|1, 0xc8a4|1 },
+ {{ 0x800cc7e4, 0x800cc744, 0x800cc704, 0x800cc844 }, 0x4|0, 0x190|1 },
+ {{ 0x800cc974, 0x800cc8d4, 0x800cc894, 0x800cc9d4 }, 0x4|0, 0x3e4|1 },
+ {{ 0x800ccd58, 0x800cccb8, 0x800ccc78, 0x800ccdb8 }, 0x4|0, 0x68|1 },
+ {{ 0x800ccdc0, 0x800ccd20, 0x800ccce0, 0x800cce20 }, 0x4|0, 0xc0|1 },
+ {{ 0x800cce80, 0x800ccde0, 0x800ccda0, 0x800ccee0 }, 0x4|0, 0x1e0|1 },
+ {{ 0x800cd060, 0x800ccfc0, 0x800ccf80, 0x800cd0c0 }, 0xc|0, 0xe78|1 },
+ {{ 0x800cded8, 0x800cde38, 0x800cddf8, 0x800cdf38 }, 0x4|0, 0x2b8|1 },
+ {{ 0x800ce190, 0x800ce0f0, 0x800ce0b0, 0x800ce1f0 }, 0x4|0, 0x614|1 },
+ {{ 0x800ce7a4, 0x800ce704, 0x800ce6c4, 0x800ce804 }, 0x4|0, 0x1cb8|1 },
+ {{ 0x800d045c, 0x800d03bc, 0x800d037c, 0x800d04bc }, 0x4|0, 0x410|1 },
+ {{ 0x800d086c, 0x800d07cc, 0x800d078c, 0x800d08cc }, 0x4|0, 0x4fc|1 },
+ {{ 0x800d0d68, 0x800d0cc8, 0x800d0c88, 0x800d0dc8 }, 0x4|0, 0x284|1 },
+ {{ 0x800d0fec, 0x800d0f4c, 0x800d0f0c, 0x800d104c }, 0x4|0, 0x40c|1 },
+ {{ 0x800d13f8, 0x800d1358, 0x800d1318, 0x800d1458 }, 0x4|0, 0x154|1 },
+ {{ 0x800d155c, 0x800d14bc, 0x800d147c, 0x800d15bc }, 0x834|1, 0x834|1 },
+ {{ 0x800d1d90, 0x800d1cf0, 0x800d1cb0, 0x800d1df0 }, 0x4|0, 0x270|1 },
+ {{ 0x800d2000, 0x800d1f60, 0x800d1f20, 0x800d2060 }, 0x4|0, 0x4b4|1 },
+ {{ 0x800d24b4, 0x800d2414, 0x800d23d4, 0x800d2514 }, 0x4|0, 0x234|1 },
+ {{ 0x800d26e8, 0x800d2648, 0x800d2608, 0x800d2748 }, 0x4|0, 0x78|1 },
+ {{ 0x800d2760, 0x800d26c0, 0x800d2680, 0x800d27c0 }, 0x4|0, 0xa8|1 },
+ {{ 0x800d2808, 0x800d2768, 0x800d2728, 0x800d2868 }, 0x4|0, 0x40|1 },
+ {{ 0x800d2848, 0x800d27a8, 0x800d2768, 0x800d28a8 }, 0x4|0, 0x3c|1 },
+ {{ 0x800d2884, 0x800d27e4, 0x800d27a4, 0x800d28e4 }, 0x4|0, 0x7c|1 },
+ {{ 0x800d2900, 0x800d2860, 0x800d2820, 0x800d2960 }, 0x4|0, 0xd0|1 },
+ {{ 0x800d29d0, 0x800d2930, 0x800d28f0, 0x800d2a30 }, 0x4|0, 0xa4|1 },
+ {{ 0x800d2a74, 0x800d29d4, 0x800d2994, 0x800d2ad4 }, 0x4|0, 0x9c|1 },
+ {{ 0x800d2b10, 0x800d2a70, 0x800d2a30, 0x800d2b70 }, 0x4|0, 0x6b4|1 },
+ {{ 0x800d31c4, 0x800d3124, 0x800d30e4, 0x800d3224 }, 0x4|0, 0xd58|1 },
+ {{ 0x800d3f1c, 0x800d3e7c, 0x800d3e3c, 0x800d3f7c }, 0x4|0, 0x423c|1 },
+ {{ 0x800d8158, 0x800d80b8, 0x800d8078, 0x800d81b8 }, 0x4|0, 0x700|1 },
+ {{ 0x800d8858, 0x800d87b8, 0x800d8778, 0x800d88b8 }, 0x4|0, 0x620|1 },
+ {{ 0x800d8e78, 0x800d8dd8, 0x800d8d98, 0x800d8ed8 }, 0x4|0, 0x70|1 },
+ {{ 0x800d8ee8, 0x800d8e48, 0x800d8e08, 0x800d8f48 }, 0x4|0, 0x538|1 },
+ {{ 0x800d9420, 0x800d9380, 0x800d9340, 0x800d9480 }, 0x4|0, 0x2c8|1 },
+ {{ 0x800d96e8, 0x800d9648, 0x800d9608, 0x800d9748 }, 0x4|0, 0xfd0|1 },
+ {{ 0x800da6b8, 0x800da618, 0x800da5d8, 0x800da718 }, 0x4|0, 0x12f0|1 },
+ {{ 0x800db9a8, 0x800db908, 0x800db8c8, 0x800dba08 }, 0x4|0, 0x390|1 },
+ {{ 0x800dbd38, 0x800dbc98, 0x800dbc58, 0x800dbd98 }, 0x4|0, 0x4fc|1 },
+ {{ 0x800dc234, 0x800dc194, 0x800dc154, 0x800dc294 }, 0x4|0, 0xbc8|1 },
+ {{ 0x800dcdfc, 0x800dcd5c, 0x800dcd1c, 0x800dce5c }, 0x4|0, 0x3bac|1 },
+ {{ 0x800e09a8, 0x800e0908, 0x800e08c8, 0x800e0a08 }, 0x4|0, 0xbe8|1 },
+ {{ 0x800e1590, 0x800e14f0, 0x800e14b0, 0x800e15f0 }, 0x4|0, 0x3b4|1 },
+ {{ 0x800e1944, 0x800e18a4, 0x800e1864, 0x800e19a4 }, 0x4|0, 0x3dc4|1 },
+ {{ 0x800e5708, 0x800e5668, 0x800e5628, 0x800e5768 }, 0x4|0, 0x128|1 },
+ {{ 0x800e5830, 0x800e5790, 0x800e5750, 0x800e5890 }, 0x4|0, 0x170|1 },
+ {{ 0x800e59a0, 0x800e5900, 0x800e58c0, 0x800e5a00 }, 0x4|0, 0x1d0|1 },
+ {{ 0x800e5b70, 0x800e5ad0, 0x800e5a90, 0x800e5bd0 }, 0x4|0, 0x1430|1 },
+ {{ 0x800e6fa0, 0x800e6f00, 0x800e6ec0, 0x800e7000 }, 0x4|0, 0x7f8|1 },
+ {{ 0x800e7798, 0x800e76f8, 0x800e76b8, 0x800e77f8 }, 0x4|0, 0x378|1 },
+ {{ 0x800e7b10, 0x800e7a70, 0x800e7a30, 0x800e7b70 }, 0x4|0, 0x35c|1 },
+ {{ 0x800e7e6c, 0x800e7dcc, 0x800e7d8c, 0x800e7ecc }, 0x4|0, 0x28|1 },
+ {{ 0x800e7e94, 0x800e7df4, 0x800e7db4, 0x800e7ef4 }, 0x4|0, 0x4c|1 },
+ {{ 0x800e7ee0, 0x800e7e40, 0x800e7e00, 0x800e7f40 }, 0x4|0, 0xb8|1 },
+ {{ 0x800e7f98, 0x800e7ef8, 0x800e7eb8, 0x800e7ff8 }, 0x4|0, 0x1a0|1 },
+ {{ 0x800e8138, 0x800e8098, 0x800e8058, 0x800e8198 }, 0x4|0, 0xc3c|1 },
+ {{ 0x800e8d74, 0x800e8cd4, 0x800e8c94, 0x800e8dd4 }, 0x4|0, 0x40|1 },
+ {{ 0x800e8db4, 0x800e8d14, 0x800e8cd4, 0x800e8e14 }, 0x4|0, 0x418|1 },
+ {{ 0x800e91cc, 0x800e912c, 0x800e90ec, 0x800e922c }, 0x4|0, 0x128|1 },
+ {{ 0x800e92f4, 0x800e9254, 0x800e9214, 0x800e9354 }, 0x4|0, 0xaf4|1 },
+ {{ 0x800e9de8, 0x800e9d48, 0x800e9d08, 0x800e9e48 }, 0x4|0, 0x648|1 },
+ {{ 0x800ea474, 0x800ea3d4, 0x800ea394, 0x800ea4ec }, 0xa74|2, 0xa74|3 },
+ {{ 0x800eaee8, 0x800eae48, 0x800eae08, 0x800ed580 }, 0x4|3, 0x4|3 },
+ {{ 0x800eaeec, 0x800eae4c, 0x800eae0c, 0x800eaf64 }, 0x1ba0|1, 0x1ba0|1 },
+ {{ 0x800eca8c, 0x800ec9ec, 0x800ec9ac, 0x800ecb04 }, 0x4|0, 0x20|1 },
+ {{ 0x800ecaac, 0x800eca0c, 0x800ec9cc, 0x800ecb24 }, 0x4|0, 0xc3c|1 },
+ {{ 0x800ed6e8, 0x800ed648, 0x800ed608, 0x800ed760 }, 0x4|0, 0x9c|1 },
+ {{ 0x800ed784, 0x800ed6e4, 0x800ed6a4, 0x800ed7fc }, 0x4|0, 0xe4|1 },
+ {{ 0x800ed868, 0x800ed7c8, 0x800ed788, 0x800ed8e0 }, 0x4|0, 0x9c4|1 },
+ {{ 0x800ee22c, 0x800ee18c, 0x800ee14c, 0x800ee2a4 }, 0x4|0, 0x174|1 },
+ {{ 0x800ee3a0, 0x800ee300, 0x800ee2c0, 0x800ee418 }, 0x4|0, 0x2dec|1 },
+ {{ 0x800f118c, 0x800f10ec, 0x800f10ac, 0x800f1204 }, 0x4|0, 0x118|1 },
+ {{ 0x800f12a4, 0x800f1204, 0x800f11c4, 0x800f131c }, 0x4|0, 0x9c|1 },
+ {{ 0x800f1340, 0x800f12a0, 0x800f1260, 0x800f13b8 }, 0x4|0, 0x94|1 },
+ {{ 0x800f13d4, 0x800f1334, 0x800f12f4, 0x800f144c }, 0x4|0, 0x148|1 },
+ {{ 0x800f151c, 0x800f147c, 0x800f143c, 0x800f1594 }, 0x4|0, 0x130|1 },
+ {{ 0x800f164c, 0x800f15ac, 0x800f156c, 0x800f16c4 }, 0x4|0, 0x650|1 },
+ {{ 0x800f1c9c, 0x800f1bfc, 0x800f1bbc, 0x800f1d14 }, 0x4|0, 0x82c|1 },
+ {{ 0x800f24c8, 0x800f2428, 0x800f23e8, 0x800f2540 }, 0x4|0, 0x48|1 },
+ {{ 0x800f2510, 0x800f2470, 0x800f2430, 0x800f2588 }, 0x4|0, 0x9344|1 },
+ {{ 0x800fb854, 0x800fb7b4, 0x800fb774, 0x800fb8cc }, 0x4|0, 0x1f8|1 },
+ {{ 0x800fba4c, 0x800fb9ac, 0x800fb96c, 0x800fbac4 }, 0x4|0, 0x1218|1 },
+ {{ 0x800fcc64, 0x800fcbc4, 0x800fcb84, 0x800fccdc }, 0x4|0, 0x23b0|1 },
+ {{ 0x800ff014, 0x800fef74, 0x800fef34, 0x800ff08c }, 0x4|0, 0x8b0|1 },
+ {{ 0x800ff8c4, 0x800ff824, 0x800ff7e4, 0x800ff93c }, 0x4|0, 0xf14|1 },
+ {{ 0x801007d8, 0x80100738, 0x801006f8, 0x80100850 }, 0x4|0, 0x8b58|1 },
+ {{ 0x80109330, 0x80109290, 0x80109250, 0x801093a8 }, 0x4|0, 0x1680|1 },
+ {{ 0x8010a9b0, 0x8010a910, 0x8010a8d0, 0x8010aa28 }, 0x10|0, 0x344|1 },
+ {{ 0x8010acf4, 0x8010ac54, 0x8010ac14, 0x8010ad6c }, 0x4|0, 0x3ccc|1 },
+ {{ 0x8010e9c0, 0x8010e920, 0x8010e8e0, 0x8010ea38 }, 0x4|0, 0xb694|1 },
+ {{ 0x8011a054, 0x80119fb4, 0x80119f74, 0x8011a0cc }, 0x4|0, 0x4b0|1 },
+ {{ 0x8011a504, 0x8011a464, 0x8011a424, 0x8011a57c }, 0x4|0, 0x390|1 },
+ {{ 0x8011a894, 0x8011a7f4, 0x8011a7b4, 0x8011a90c }, 0x4|0, 0x1f4|1 },
+ {{ 0x8011aa88, 0x8011a9e8, 0x8011a9a8, 0x8011ab00 }, 0x4|0, 0x2b0|1 },
+ {{ 0x8011ad38, 0x8011ac98, 0x8011ac58, 0x8011adb0 }, 0x4|0, 0x104|1 },
+ {{ 0x8011ae3c, 0x8011ad9c, 0x8011ad5c, 0x8011aeb4 }, 0x4|0, 0x31c|1 },
+ {{ 0x8011b158, 0x8011b0b8, 0x8011b078, 0x8011b1d0 }, 0x4|0, 0xac|1 },
+ {{ 0x8011b204, 0x8011b164, 0x8011b124, 0x8011b27c }, 0x4|0, 0xd50|1 },
+ {{ 0x8011bf54, 0x8011beb4, 0x8011be74, 0x8011bfcc }, 0x4|0, 0x1e53c|1 },
+ {{ 0x8013a520, 0x8013a480, 0x8013a440, 0x8013a598 }, 0x228|2, 0x2b8|3 },
+ {{ 0x8013a7d8, 0x8013a738, 0x8013a6f8, 0x8013a850 }, 0x23ae4|1, 0x23ae4|1 },
+ {{ 0x8015e2bc, 0x8015e21c, 0x8015e1dc, 0x8015e334 }, 0x4|0, 0x2ac|1 },
+ {{ 0x8015e568, 0x8015e4c8, 0x8015e488, 0x8015e5e0 }, 0x4|0, 0x2cc|1 },
+ {{ 0x8015e834, 0x8015e794, 0x8015e754, 0x8015e8ac }, 0x4|0, 0x4928|1 },
+ {{ 0x80163168, 0x801630c8, 0x80163088, 0x801631e0 }, 0x3a0|2, 0x3b8|3 },
+ {{ 0x80163520, 0x80163480, 0x80163440, 0x80163598 }, 0xdc8|3, 0xdc8|3 },
+ {{ 0x80164300, 0x80164260, 0x80164220, 0x801646a4 }, 0xc|2, 0xc|3 },
+ {{ 0x8016430c, 0x8016426c, 0x8016422c, 0x801643a8 }, 0xa7a4|1, 0xa7a4|1 },
+ {{ 0x8016eab0, 0x8016ea10, 0x8016e9d0, 0x8016eb4c }, 0x4|0, 0x5c38|1 },
+ {{ 0x801746f8, 0x80174658, 0x80174618, 0x80174834 }, 0x54c|2, 0x54c|3 },
+ {{ 0x80174c44, 0x80174ba4, 0x80174b64, 0x80186884 }, 0x4|3, 0x4|3 },
+ {{ 0x80174c4c, 0x80174bac, 0x80174b6c, 0x80174da0 }, 0x29c|2, 0x29c|3 },
+ {{ 0x80174ef0, 0x80174e50, 0x80174e10, 0x80175178 }, 0xa74|2, 0xa74|3 },
+ {{ 0x80175970, 0x801758d0, 0x80175890, 0x800e4bd4 }, 0x8|2, 0x8|3 },
+ {{ 0x80175978, 0x801758d8, 0x80175898, 0x80175bf0 }, 0x11c0|2, 0x11c0|3 },
+ {{ 0x80176b38, 0x80176a98, 0x80176a58, 0x800fc840 }, 0x1c|2, 0x1c|3 },
+ {{ 0x80176b54, 0x80176ab4, 0x80176a74, 0x80176dcc }, 0x64|2, 0x64|3 },
+ {{ 0x80176bc8, 0x80176b28, 0x80176ae8, 0x80176e4c }, 0xb0|2, 0xb0|3 },
+ {{ 0x80176c78, 0x80176bd8, 0x80176b98, 0x802435f0 }, 0x4|3, 0x4|3 },
+ {{ 0x80176c7c, 0x80176bdc, 0x80176b9c, 0x80176f00 }, 0x18|2, 0x18|3 },
+ {{ 0x80176ca8, 0x80176c08, 0x80176bc8, 0x80176f38 }, 0xb0|2, 0xb0|3 },
+ {{ 0x80176d58, 0x80176cb8, 0x80176c78, 0x802435f0 }, 0x4|3, 0x4|3 },
+ {{ 0x80176d5c, 0x80176cbc, 0x80176c7c, 0x80176fec }, 0x764|2, 0x764|3 },
+ {{ 0x801774dc, 0x8017743c, 0x801773fc, 0x80177c54 }, 0xc|2, 0xc|3 },
+ {{ 0x80177504, 0x80177464, 0x80177424, 0x8017776c }, 0x10|2, 0x10|3 },
+ {{ 0x80177570, 0x801774d0, 0x80177490, 0x80113380 }, 0x4|3, 0x4|3 },
+ {{ 0x80177578, 0x801774d8, 0x80177498, 0x8017f594 }, 0x8|2, 0x8|3 },
+ {{ 0x801775a0, 0x80177500, 0x801774c0, 0x8017b1a8 }, 0xc|2, 0xc|3 },
+ {{ 0x801775c4, 0x80177524, 0x801774e4, 0x8017af68 }, 0x2c|2, 0x2c|3 },
+ {{ 0x80177614, 0x80177574, 0x80177534, 0x80112700 }, 0x4|3, 0x4|3 },
+ {{ 0x80177618, 0x80177578, 0x80177538, 0x8017afbc }, 0x38|2, 0x38|3 },
+ {{ 0x80177650, 0x801775b0, 0x80177570, 0x8021d674 }, 0x8|2, 0x8|3 },
+ {{ 0x80177658, 0x801775b8, 0x80177578, 0x8017affc }, 0x74|2, 0x74|3 },
+ {{ 0x80177708, 0x80177668, 0x80177628, 0x8017f594 }, 0x8|2, 0x8|3 },
+ {{ 0x80177750, 0x801776b0, 0x80177670, 0x801bafac }, 0x8|2, 0x8|3 },
+ {{ 0x80177760, 0x801776c0, 0x80177680, 0x8017f9a4 }, 0x18|2, 0x18|3 },
+ {{ 0x80177788, 0x801776e8, 0x801776a8, 0x80177ab4 }, 0x28|2, 0x28|3 },
+ {{ 0x801777bc, 0x8017771c, 0x801776dc, 0x80177aec }, 0x8|2, 0x8|3 },
+ {{ 0x801777c4, 0x80177724, 0x801776e4, 0x800fcaec }, 0x4|3, 0x4|3 },
+ {{ 0x801777cc, 0x8017772c, 0x801776ec, 0x80177afc }, 0x54|2, 0x54|3 },
+ {{ 0x80177828, 0x80177788, 0x80177748, 0x80177b54 }, 0xc|2, 0xc|3 },
+ {{ 0x80177834, 0x80177794, 0x80177754, 0x80177b68 }, 0x90|2, 0x90|3 },
+ {{ 0x80177904, 0x80177864, 0x80177824, 0x80177c90 }, 0x3c|2, 0x3c|3 },
+ {{ 0x80177954, 0x801778b4, 0x80177874, 0x801ad274 }, 0x4|3, 0x4|3 },
+ {{ 0x80177958, 0x801778b8, 0x80177878, 0x80177ce0 }, 0x3c|2, 0x3c|3 },
+ {{ 0x801779a0, 0x80177900, 0x801778c0, 0x801ad270 }, 0x8|2, 0x8|3 },
+ {{ 0x801779a8, 0x80177908, 0x801778c8, 0x80177d2c }, 0x64|2, 0x64|3 },
+ {{ 0x80177a14, 0x80177974, 0x80177934, 0x801ad274 }, 0x4|3, 0x4|3 },
+ {{ 0x80177a18, 0x80177978, 0x80177938, 0x80177d98 }, 0xe0|2, 0xe0|3 },
+ {{ 0x80177b20, 0x80177a80, 0x80177a40, 0x801ad274 }, 0x4|3, 0x4|3 },
+ {{ 0x80177b24, 0x80177a84, 0x80177a44, 0x80177ea0 }, 0xf8|2, 0xf8|3 },
+ {{ 0x80177c1c, 0x80177b7c, 0x80177b3c, 0x800a0ec4 }, 0x4|3, 0x4|3 },
+ {{ 0x80177c20, 0x80177b80, 0x80177b40, 0x80177f9c }, 0x2c|2, 0x2c|3 },
+ {{ 0x80177c74, 0x80177bd4, 0x80177b94, 0x801ad274 }, 0x4|3, 0x4|3 },
+ {{ 0x80177c78, 0x80177bd8, 0x80177b98, 0x80177ff0 }, 0x134|2, 0x134|3 },
+ {{ 0x80177db8, 0x80177d18, 0x80177cd8, 0x801ad274 }, 0x4|3, 0x4|3 },
+ {{ 0x80177dbc, 0x80177d1c, 0x80177cdc, 0x80178130 }, 0xe0|2, 0xe0|3 },
+ {{ 0x80177ea8, 0x80177e08, 0x80177dc8, 0x80178218 }, 0x1c|2, 0x1c|3 },
+ {{ 0x80177ed4, 0x80177e34, 0x80177df4, 0x80178240 }, 0x4|3, 0x4|3 },
+ {{ 0x80177eec, 0x80177e4c, 0x80177e0c, 0x8017825c }, 0x64|2, 0x64|3 },
+ {{ 0x80177f60, 0x80177ec0, 0x80177e80, 0x80178810 }, 0x60|2, 0x60|3 },
+ {{ 0x80177fe0, 0x80177f40, 0x80177f00, 0x800f5b88 }, 0x4|3, 0x4|3 },
+ {{ 0x80177ff8, 0x80177f58, 0x80177f18, 0x801782e0 }, 0x28|2, 0x28|3 },
+ {{ 0x80178020, 0x80177f80, 0x80177f40, 0x801ad270 }, 0x4|3, 0x4|3 },
+ {{ 0x80178028, 0x80177f88, 0x80177f48, 0x8017830c }, 0x22c|2, 0x22c|3 },
+ {{ 0x80178260, 0x801781c0, 0x80178180, 0x801ad138 }, 0x4|3, 0x4|3 },
+ {{ 0x80178274, 0x801781d4, 0x80178194, 0x80178550 }, 0x40|2, 0x40|3 },
+ {{ 0x801782c0, 0x80178220, 0x801781e0, 0x801ad138 }, 0x4|3, 0x4|3 },
+ {{ 0x801782d0, 0x80178230, 0x801781f0, 0x8017854c }, 0x8|2, 0x8|3 },
+ {{ 0x801782d8, 0x80178238, 0x801781f8, 0x801785ac }, 0x158|2, 0x158|3 },
+ {{ 0x80178454, 0x801783b4, 0x80178374, 0x8017a304 }, 0x4|3, 0x4|3 },
+ {{ 0x8017845c, 0x801783bc, 0x8017837c, 0x80178730 }, 0x48|2, 0x48|3 },
+ {{ 0x801784b4, 0x80178414, 0x801783d4, 0x801787c0 }, 0x8|2, 0x8|3 },
+ {{ 0x801784c0, 0x80178420, 0x801783e0, 0x801787c8 }, 0x30|2, 0x30|3 },
+ {{ 0x801784f0, 0x80178450, 0x80178410, 0x801787fc }, 0x8|2, 0x8|3 },
+ {{ 0x80178514, 0x80178474, 0x80178434, 0x801788a4 }, 0x2b0|2, 0x2b0|3 },
+ {{ 0x801787c4, 0x80178724, 0x801786e4, 0x800f3954 }, 0x4|3, 0x4|3 },
+ {{ 0x801787c8, 0x80178728, 0x801786e8, 0x80178b58 }, 0x14|2, 0x14|3 },
+ {{ 0x801787dc, 0x8017873c, 0x801786fc, 0x80186414 }, 0x4|3, 0x4|3 },
+ {{ 0x801787e0, 0x80178740, 0x80178700, 0x80178b70 }, 0x48|2, 0x48|3 },
+ {{ 0x80178828, 0x80178788, 0x80178748, 0x80186414 }, 0x4|3, 0x4|3 },
+ {{ 0x8017882c, 0x8017878c, 0x8017874c, 0x80178bbc }, 0x360|2, 0x360|3 },
+ {{ 0x80178b8c, 0x80178aec, 0x80178aac, 0x8009b0bc }, 0x4|3, 0x4|3 },
+ {{ 0x80178b90, 0x80178af0, 0x80178ab0, 0x80178f20 }, 0x730|2, 0x730|3 },
+ {{ 0x8017931c, 0x8017927c, 0x8017923c, 0x80238b80 }, 0x4|3, 0x4|3 },
+ {{ 0x80179320, 0x80179280, 0x80179240, 0x80238b9c }, 0x4|3, 0x4|3 },
+ {{ 0x80179328, 0x80179288, 0x80179248, 0x801e6a08 }, 0x4|3, 0x4|3 },
+ {{ 0x8017932c, 0x8017928c, 0x8017924c, 0x801796ec }, 0x4|3, 0x4|3 },
+ {{ 0x80179330, 0x80179290, 0x80179250, 0x80179518 }, 0x10|2, 0x10|3 },
+ {{ 0x80179340, 0x801792a0, 0x80179260, 0x8016d520 }, 0x4|3, 0x4|3 },
+ {{ 0x80179378, 0x801792d8, 0x80179298, 0x80238b80 }, 0x4|3, 0x4|3 },
+ {{ 0x80179384, 0x801792e4, 0x801792a4, 0x80179660 }, 0x240|2, 0x240|3 },
+ {{ 0x801795c4, 0x80179524, 0x801794e4, 0x80221dd4 }, 0x4|3, 0x4|3 },
+ {{ 0x801795c8, 0x80179528, 0x801794e8, 0x801798a4 }, 0x4|3, 0x4|3 },
+ {{ 0x801795cc, 0x8017952c, 0x801794ec, 0x802222fc }, 0x4|3, 0x4|3 },
+ {{ 0x801795d0, 0x80179530, 0x801794f0, 0x801798ac }, 0x14|2, 0x14|3 },
+ {{ 0x801795e4, 0x80179544, 0x80179504, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x801795e8, 0x80179548, 0x80179508, 0x801798c4 }, 0x584|2, 0x584|3 },
+ {{ 0x80179b6c, 0x80179acc, 0x80179a8c, 0x80179e44 }, 0x4|3, 0x4|3 },
+ {{ 0x80179b70, 0x80179ad0, 0x80179a90, 0x80179e4c }, 0xd4|2, 0xd4|3 },
+ {{ 0x80179c44, 0x80179ba4, 0x80179b64, 0x8009ab24 }, 0x4|3, 0x4|3 },
+ {{ 0x80179c48, 0x80179ba8, 0x80179b68, 0x80179f24 }, 0x2fc|2, 0x2fc|3 },
+ {{ 0x80179f44, 0x80179ea4, 0x80179e64, 0x8009ab24 }, 0x4|3, 0x4|3 },
+ {{ 0x80179f48, 0x80179ea8, 0x80179e68, 0x8017a224 }, 0x4c|2, 0x4c|3 },
+ {{ 0x80179f94, 0x80179ef4, 0x80179eb4, 0x8017a1ec }, 0x24|2, 0x24|3 },
+ {{ 0x80179fb8, 0x80179f18, 0x80179ed8, 0x80179e14 }, 0x4|3, 0x4|3 },
+ {{ 0x80179fbc, 0x80179f1c, 0x80179edc, 0x8017a2a4 }, 0x30|2, 0x30|3 },
+ {{ 0x80179fec, 0x80179f4c, 0x80179f0c, 0x801799bc }, 0x4|3, 0x4|3 },
+ {{ 0x80179ff0, 0x80179f50, 0x80179f10, 0x8017a2d8 }, 0x18|2, 0x18|3 },
+ {{ 0x8017a008, 0x80179f68, 0x80179f28, 0x80085c7c }, 0x4|3, 0x4|3 },
+ {{ 0x8017a00c, 0x80179f6c, 0x80179f2c, 0x8017a2f4 }, 0x20|2, 0x20|3 },
+ {{ 0x8017a02c, 0x80179f8c, 0x80179f4c, 0x801799bc }, 0x4|3, 0x4|3 },
+ {{ 0x8017a030, 0x80179f90, 0x80179f50, 0x8017a318 }, 0x48|2, 0x48|3 },
+ {{ 0x8017a078, 0x80179fd8, 0x80179f98, 0x801799bc }, 0x4|3, 0x4|3 },
+ {{ 0x8017a07c, 0x80179fdc, 0x80179f9c, 0x8017a364 }, 0x8|2, 0x8|3 },
+ {{ 0x8017a0bc, 0x8017a01c, 0x80179fdc, 0x80128c34 }, 0x4|3, 0x4|3 },
+ {{ 0x8017a0c0, 0x8017a020, 0x80179fe0, 0x8017a3b0 }, 0x214|2, 0x214|3 },
+ {{ 0x8017a2d4, 0x8017a234, 0x8017a1f4, 0x8017987c }, 0x8|2, 0x8|3 },
+ {{ 0x8017a2dc, 0x8017a23c, 0x8017a1fc, 0x8017a5cc }, 0x18|2, 0x18|3 },
+ {{ 0x8017a2f4, 0x8017a254, 0x8017a214, 0x8017982c }, 0x4|3, 0x4|3 },
+ {{ 0x8017a2f8, 0x8017a258, 0x8017a218, 0x8017a5e8 }, 0x284|2, 0x284|3 },
+ {{ 0x8017a57c, 0x8017a4dc, 0x8017a49c, 0x8017a5b0 }, 0x8|2, 0x8|3 },
+ {{ 0x8017a584, 0x8017a4e4, 0x8017a4a4, 0x8017a5c8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017a588, 0x8017a4e8, 0x8017a4a8, 0x8017a878 }, 0xd0|2, 0xd0|3 },
+ {{ 0x8017a658, 0x8017a5b8, 0x8017a578, 0x801799bc }, 0x4|3, 0x4|3 },
+ {{ 0x8017a65c, 0x8017a5bc, 0x8017a57c, 0x8017a94c }, 0x50|2, 0x50|3 },
+ {{ 0x8017a6ac, 0x8017a60c, 0x8017a5cc, 0x801799bc }, 0x4|3, 0x4|3 },
+ {{ 0x8017a6b0, 0x8017a610, 0x8017a5d0, 0x8017a9a0 }, 0xb4|2, 0xb4|3 },
+ {{ 0x8017a764, 0x8017a6c4, 0x8017a684, 0x8012bef0 }, 0x4|3, 0x4|3 },
+ {{ 0x8017a768, 0x8017a6c8, 0x8017a688, 0x8017aa58 }, 0xc|2, 0xc|3 },
+ {{ 0x8017a774, 0x8017a6d4, 0x8017a694, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017a778, 0x8017a6d8, 0x8017a698, 0x8017aa68 }, 0x5c|2, 0x5c|3 },
+ {{ 0x8017a7d4, 0x8017a734, 0x8017a6f4, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017a7d8, 0x8017a738, 0x8017a6f8, 0x8017aac8 }, 0x58|2, 0x58|3 },
+ {{ 0x8017a830, 0x8017a790, 0x8017a750, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017a834, 0x8017a794, 0x8017a754, 0x8017ab24 }, 0x12c|2, 0x12c|3 },
+ {{ 0x8017a960, 0x8017a8c0, 0x8017a880, 0x8017aa18 }, 0x4|3, 0x4|3 },
+ {{ 0x8017a964, 0x8017a8c4, 0x8017a884, 0x8017ac54 }, 0x14|2, 0x14|3 },
+ {{ 0x8017a97c, 0x8017a8dc, 0x8017a89c, 0x8017aa34 }, 0x18|2, 0x18|3 },
+ {{ 0x8017a994, 0x8017a8f4, 0x8017a8b4, 0x8017ac84 }, 0x298|2, 0x298|3 },
+ {{ 0x8017ac2c, 0x8017ab8c, 0x8017ab4c, 0x8021ee90 }, 0x4|3, 0x4|3 },
+ {{ 0x8017ac30, 0x8017ab90, 0x8017ab50, 0x8017af20 }, 0xc|2, 0xc|3 },
+ {{ 0x8017ac44, 0x8017aba4, 0x8017ab64, 0x801cc084 }, 0x8|2, 0x8|3 },
+ {{ 0x8017ac4c, 0x8017abac, 0x8017ab6c, 0x8017b094 }, 0x34c|2, 0x34c|3 },
+ {{ 0x8017afa4, 0x8017af04, 0x8017aec4, 0x8017b3f4 }, 0x390|2, 0x390|3 },
+ {{ 0x8017b338, 0x8017b298, 0x8017b258, 0x8017b790 }, 0x10a0|2, 0x10a0|3 },
+ {{ 0x8017c3d8, 0x8017c338, 0x8017c2f8, 0x800a2668 }, 0x4|3, 0x4|3 },
+ {{ 0x8017c3dc, 0x8017c33c, 0x8017c2fc, 0x8017c834 }, 0x1a0|2, 0x1a0|3 },
+ {{ 0x8017c57c, 0x8017c4dc, 0x8017c49c, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017c580, 0x8017c4e0, 0x8017c4a0, 0x8017c9d8 }, 0x5c|2, 0x5c|3 },
+ {{ 0x8017c5dc, 0x8017c53c, 0x8017c4fc, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017c5e0, 0x8017c540, 0x8017c500, 0x8017ca38 }, 0x58|2, 0x58|3 },
+ {{ 0x8017c638, 0x8017c598, 0x8017c558, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017c63c, 0x8017c59c, 0x8017c55c, 0x8017ca94 }, 0x14c|2, 0x14c|3 },
+ {{ 0x8017c788, 0x8017c6e8, 0x8017c6a8, 0x8017c910 }, 0x8|2, 0x8|3 },
+ {{ 0x8017c790, 0x8017c6f0, 0x8017c6b0, 0x8017cbe8 }, 0xb8|2, 0xb8|3 },
+ {{ 0x8017c848, 0x8017c7a8, 0x8017c768, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017c84c, 0x8017c7ac, 0x8017c76c, 0x8017cca4 }, 0x5c|2, 0x5c|3 },
+ {{ 0x8017c8a8, 0x8017c808, 0x8017c7c8, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017c8ac, 0x8017c80c, 0x8017c7cc, 0x8017cd04 }, 0x58|2, 0x58|3 },
+ {{ 0x8017c904, 0x8017c864, 0x8017c824, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017c908, 0x8017c868, 0x8017c828, 0x8017cd60 }, 0x14c|2, 0x14c|3 },
+ {{ 0x8017ca54, 0x8017c9b4, 0x8017c974, 0x8017c910 }, 0x8|2, 0x8|3 },
+ {{ 0x8017ca5c, 0x8017c9bc, 0x8017c97c, 0x8017ceb4 }, 0x750|2, 0x750|3 },
+ {{ 0x8017d1ac, 0x8017d10c, 0x8017d0cc, 0x801f5920 }, 0x4|3, 0x4|3 },
+ {{ 0x8017d1b0, 0x8017d110, 0x8017d0d0, 0x8017d608 }, 0x1c|2, 0x1c|3 },
+ {{ 0x8017d1cc, 0x8017d12c, 0x8017d0ec, 0x801fa410 }, 0x4|3, 0x4|3 },
+ {{ 0x8017d1d0, 0x8017d130, 0x8017d0f0, 0x8009844c }, 0x4|3, 0x4|3 },
+ {{ 0x8017d1d4, 0x8017d134, 0x8017d0f4, 0x8017d62c }, 0xa58|2, 0xa58|3 },
+ {{ 0x8017dc2c, 0x8017db8c, 0x8017db4c, 0x80089d3c }, 0x8|2, 0x8|3 },
+ {{ 0x8017dc34, 0x8017db94, 0x8017db54, 0x8017e08c }, 0x4a4|2, 0x4a4|3 },
+ {{ 0x8017e0d8, 0x8017e038, 0x8017dff8, 0x800f3a18 }, 0x4|3, 0x4|3 },
+ {{ 0x8017e0dc, 0x8017e03c, 0x8017dffc, 0x8017e534 }, 0x4|3, 0x4|3 },
+ {{ 0x8017e0e0, 0x8017e040, 0x8017e000, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017e0e4, 0x8017e044, 0x8017e004, 0x8017e53c }, 0xe8|2, 0xe8|3 },
+ {{ 0x8017e1cc, 0x8017e12c, 0x8017e0ec, 0x80186414 }, 0x4|3, 0x4|3 },
+ {{ 0x8017e1d0, 0x8017e130, 0x8017e0f0, 0x8017e628 }, 0x4c|2, 0x4c|3 },
+ {{ 0x8017e21c, 0x8017e17c, 0x8017e13c, 0x80186414 }, 0x4|3, 0x4|3 },
+ {{ 0x8017e220, 0x8017e180, 0x8017e140, 0x8017e678 }, 0x80|2, 0x80|3 },
+ {{ 0x8017e2a0, 0x8017e200, 0x8017e1c0, 0x80186414 }, 0x4|3, 0x4|3 },
+ {{ 0x8017e2a4, 0x8017e204, 0x8017e1c4, 0x8017e6fc }, 0x100|2, 0x100|3 },
+ {{ 0x8017e3a4, 0x8017e304, 0x8017e2c4, 0x80102bd8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017e3a8, 0x8017e308, 0x8017e2c8, 0x8017e800 }, 0x140|2, 0x140|3 },
+ {{ 0x8017e4e8, 0x8017e448, 0x8017e408, 0x80186414 }, 0x4|3, 0x4|3 },
+ {{ 0x8017e4ec, 0x8017e44c, 0x8017e40c, 0x8017e944 }, 0x80|2, 0x80|3 },
+ {{ 0x8017e56c, 0x8017e4cc, 0x8017e48c, 0x80186414 }, 0x4|3, 0x4|3 },
+ {{ 0x8017e570, 0x8017e4d0, 0x8017e490, 0x8017e9c8 }, 0x650|2, 0x650|3 },
+ {{ 0x8017ebc0, 0x8017eb20, 0x8017eae0, 0x801a4be8 }, 0x4|3, 0x4|3 },
+ {{ 0x8017ebc4, 0x8017eb24, 0x8017eae4, 0x8017f01c }, 0xec|2, 0xec|3 },
+ {{ 0x8017ecb4, 0x8017ec14, 0x8017ebd4, 0x8017eff4 }, 0x8|2, 0x8|3 },
+ {{ 0x8017ece8, 0x8017ec48, 0x8017ec08, 0x8017f190 }, 0x33c|2, 0x33c|3 },
+ {{ 0x8017f05c, 0x8017efbc, 0x8017ef7c, 0x801fade4 }, 0x4|3, 0x4|3 },
+ {{ 0x8017f068, 0x8017efc8, 0x8017ef88, 0x8017f510 }, 0x4|3, 0x4|3 },
+ {{ 0x8017f06c, 0x8017efcc, 0x8017ef8c, 0x80096e38 }, 0x4|3, 0x4|3 },
+ {{ 0x8017f080, 0x8017efe0, 0x8017efa0, 0x8013cd50 }, 0x4|3, 0x4|3 },
+ {{ 0x8017f084, 0x8017efe4, 0x8017efa4, 0x8017f52c }, 0x4|3, 0x4|3 },
+ {{ 0x8017f0a4, 0x8017f004, 0x8017efc4, 0x80096e38 }, 0x4|3, 0x4|3 },
+ {{ 0x8017f0cc, 0x8017f02c, 0x8017efec, 0x8017f574 }, 0x4|3, 0x4|3 },
+ {{ 0x8017f0e8, 0x8017f048, 0x8017f008, 0x8017f5ac }, 0x150|2, 0x150|3 },
+ {{ 0x8017f238, 0x8017f198, 0x8017f158, 0x8008f338 }, 0x8|2, 0x8|3 },
+ {{ 0x8017f240, 0x8017f1a0, 0x8017f160, 0x8017f704 }, 0xe0|2, 0xe0|3 },
+ {{ 0x8017f320, 0x8017f280, 0x8017f240, 0x802420dc }, 0x4|3, 0x4|3 },
+ {{ 0x8017f324, 0x8017f284, 0x8017f244, 0x8017f7e8 }, 0x64|2, 0x64|3 },
+ {{ 0x8017f388, 0x8017f2e8, 0x8017f2a8, 0x802421f4 }, 0x4|3, 0x4|3 },
+ {{ 0x8017f38c, 0x8017f2ec, 0x8017f2ac, 0x8017f850 }, 0xac|2, 0xac|3 },
+ {{ 0x8017f438, 0x8017f398, 0x8017f358, 0x8017f830 }, 0x8|2, 0x8|3 },
+ {{ 0x8017f440, 0x8017f3a0, 0x8017f360, 0x8017f904 }, 0x64|2, 0x64|3 },
+ {{ 0x8017f4ac, 0x8017f40c, 0x8017f3cc, 0x8014a090 }, 0xc|2, 0xc|3 },
+ {{ 0x8017f4b8, 0x8017f418, 0x8017f3d8, 0x801778fc }, 0x1b4|2, 0x1b4|3 },
+ {{ 0x8017f670, 0x8017f5d0, 0x8017f590, 0x8017f9cc }, 0x14170|1, 0x14170|1 },
+ {{ 0x801937e0, 0x80193740, 0x80193700, 0x80193b3c }, 0x4|0, 0x118|1 },
+ {{ 0x801938f8, 0x80193858, 0x80193818, 0x80193c54 }, 0x4|0, 0xce8|1 },
+ {{ 0x801945e0, 0x80194540, 0x80194500, 0x8019493c }, 0x4|0, 0xd07c|1 },
+ {{ 0x801a165c, 0x801a15bc, 0x801a157c, 0x801a19b8 }, 0x4|0, 0xf74|1 },
+ {{ 0x801a25d0, 0x801a2530, 0x801a24f0, 0x801a292c }, 0x4|0, 0xbf0|1 },
+ {{ 0x801a31d0, 0x801a3130, 0x801a30f0, 0x801a352c }, 0x1cf4|1, 0x1cf4|1 },
+ {{ 0x801a4ec4, 0x801a4e24, 0x801a4de4, 0x801a5220 }, 0x4|0, 0xaf0|1 },
+ {{ 0x801a59e0, 0x802070d4, 0x801a5900, 0x801a5d3c }, 0x4|3, 0x4|3 },
+ {{ 0x801a59e8, 0x801a5948, 0x801a5908, 0x801a5d44 }, 0x368|2, 0x368|3 },
+ {{ 0x801a5d7c, 0x802070d4, 0x801a5c9c, 0x801a60d8 }, 0x4|3, 0x4|3 },
+ {{ 0x801a5d84, 0x801a5ce4, 0x801a5ca4, 0x801a60e0 }, 0x3bc|2, 0x3bc|3 },
+ {{ 0x801a6164, 0x802070d4, 0x801a6084, 0x801a64c0 }, 0x4|3, 0x4|3 },
+ {{ 0x801a616c, 0x801a60cc, 0x801a608c, 0x801a64c8 }, 0x264|2, 0x264|3 },
+ {{ 0x801a63fc, 0x802070d4, 0x801a631c, 0x801a6758 }, 0x4|3, 0x4|3 },
+ {{ 0x801a6404, 0x801a6364, 0x801a6324, 0x801a6760 }, 0x104|2, 0x104|3 },
+ {{ 0x801a6534, 0x802070d4, 0x801a6454, 0x801a6890 }, 0x4|3, 0x4|3 },
+ {{ 0x801a653c, 0x801a649c, 0x801a645c, 0x801a6898 }, 0x70|1, 0x70|1 },
+ {{ 0x801a65ac, 0x801a650c, 0x801a64cc, 0x801a6908 }, 0x4|0, 0x28|1 },
+ {{ 0x801a65d4, 0x801a6534, 0x801a64f4, 0x801a6930 }, 0x4|0, 0x16ec|1 },
+ {{ 0x801a7cd4, 0x801a7c34, 0x801a7bf4, 0x801a8030 }, 0x2d9c|2, 0x2d9c|3 },
+ {{ 0x801aaa70, 0x801aa2d8, 0x801aa990, 0x801aa6d4 }, 0xc|2, 0xc|3 },
+ {{ 0x801aaa94, 0x8014149c, 0x801aa9b4, 0x801415b4 }, 0xc|2, 0xc|3 },
+ {{ 0x801aaaa4, 0x801aaa04, 0x801aa9c4, 0x801aae00 }, 0x2b8|1, 0x2b8|1 },
+ {{ 0x801aad5c, 0x801aacbc, 0x801aac7c, 0x801ab0b8 }, 0x4|0, 0x7000|1 },
+ {{ 0x801b1d5c, 0x801b1dd4, 0x801b1c7c, 0x801b21d0 }, 0x4|3, 0x4|3 },
+ {{ 0x801b1d60, 0x801b1c48, 0x801b1c80, 0x801b2044 }, 0xc|2, 0xc|3 },
+ {{ 0x801b1d6c, 0x801b1ccc, 0x801b1c8c, 0x801b20c8 }, 0x6b8|1, 0x6b8|1 },
+ {{ 0x801b2424, 0x801b2384, 0x801b2344, 0x801b2780 }, 0x4|0, 0x3c|1 },
+ {{ 0x801b2460, 0x801b23c0, 0x801b2380, 0x801b27bc }, 0x4|0, 0x758c|1 },
+ {{ 0x801b99ec, 0x801b994c, 0x801b990c, 0x801b9d48 }, 0x4|0, 0x1114|1 },
+ {{ 0x801bab00, 0x801aa9e0, 0x801baa20, 0x801aaddc }, 0x8|2, 0x8|3 },
+ {{ 0x801bab08, 0x801baa68, 0x801baa28, 0x801bae64 }, 0x4|0, 0x4|0 },
+ {{ 0x801bab20, 0x8015bc4c, 0x801baa40, 0x8015bd64 }, 0x4|3, 0x4|3 },
+ {{ 0x801bab24, 0x801baa84, 0x801baa44, 0x801bae80 }, 0x11464|2, 0x11464|3 },
+ {{ 0x801cbf88, 0x80233680, 0x80233924, 0x80233d78 }, 0x4|3, 0x4|3 },
+ {{ 0x801cbf8c, 0x801cbeec, 0x801cbeac, 0x801cc2e8 }, 0x5668|1, 0x5668|1 },
+ {{ 0x801d15f4, 0x801d1554, 0x801d1514, 0x801d1950 }, 0x4|0, 0x200|1 },
+ {{ 0x801d17f4, 0x801d1754, 0x801d1714, 0x801d1b50 }, 0x4|0, 0x4ac|1 },
+ {{ 0x801d1ca0, 0x801d1c00, 0x801d1bc0, 0x801d1ffc }, 0x4|0, 0x854|1 },
+ {{ 0x801d24f4, 0x801d2454, 0x801d2414, 0x801d2850 }, 0x4|0, 0x50|1 },
+ {{ 0x801d2544, 0x801d24a4, 0x801d2464, 0x801d28a0 }, 0x4|0, 0xb4|1 },
+ {{ 0x801d25f8, 0x801d2558, 0x801d2518, 0x801d2954 }, 0x4|0, 0x2904|1 },
+ {{ 0x801d4efc, 0x801d4e5c, 0x801d4e1c, 0x801d5258 }, 0x4|0, 0x14|1 },
+ {{ 0x801d4f10, 0x801d4e70, 0x801d4e30, 0x801d526c }, 0x4|0, 0x3e20|1 },
+ {{ 0x801d8d30, 0x801d8c90, 0x801d8c50, 0x801d908c }, 0x4|0, 0x2c8|1 },
+ {{ 0x801d8ff8, 0x801d8f58, 0x801d8f18, 0x801d9354 }, 0x4|0, 0xdc|1 },
+ {{ 0x801d90d4, 0x801d9034, 0x801d8ff4, 0x801d9430 }, 0x4|0, 0xc4|1 },
+ {{ 0x801d9198, 0x801d90f8, 0x801d90b8, 0x801d94f4 }, 0x4|0, 0xc4|1 },
+ {{ 0x801d925c, 0x801d91bc, 0x801d917c, 0x801d95b8 }, 0x4|0, 0x1e8|1 },
+ {{ 0x801d9444, 0x801d93a4, 0x801d9364, 0x801d97a0 }, 0x4|0, 0x638|1 },
+ {{ 0x801d9a7c, 0x801d99dc, 0x801d999c, 0x801d9dd8 }, 0x4|0, 0x418|1 },
+ {{ 0x801d9e94, 0x801d9df4, 0x801d9db4, 0x801da1f0 }, 0x4|0, 0x84|1 },
+ {{ 0x801d9f18, 0x801d9e78, 0x801d9e38, 0x801da274 }, 0x4|0, 0xe4d8|1 },
+ {{ 0x801e83f8, 0x801e8358, 0x801e8318, 0x801e8820 }, 0x3ac8|1, 0x3ac8|1 },
+ {{ 0x801ebec0, 0x801ebe20, 0x801ebde0, 0x801ec2e8 }, 0x4|0, 0x2c4|1 },
+ {{ 0x801ec184, 0x801ec0e4, 0x801ec0a4, 0x801ec5ac }, 0x4|0, 0xe70|1 },
+ {{ 0x801ecff4, 0x801ecf54, 0x801ecf14, 0x801ed41c }, 0x4|0, 0x27c|1 },
+ {{ 0x801ed270, 0x801ed1d0, 0x801ed190, 0x801ed698 }, 0x4|0, 0x734|1 },
+ {{ 0x801ed9a4, 0x801ed904, 0x801ed8c4, 0x801eddcc }, 0x4|0, 0x2b8|1 },
+ {{ 0x801edc5c, 0x801edbbc, 0x801edb7c, 0x801ee084 }, 0x4|0, 0x1314|1 },
+ {{ 0x801eef70, 0x801eeed0, 0x801eee90, 0x801ef398 }, 0x4|0, 0x16c|1 },
+ {{ 0x801ef0dc, 0x801ef03c, 0x801eeffc, 0x801ef504 }, 0x4|0, 0x148|1 },
+ {{ 0x801ef224, 0x801ef184, 0x801ef144, 0x801ef64c }, 0x4|0, 0x20ad8|1 },
+ {{ 0x8020fd14, 0x8020fc74, 0x8020fc34, 0x8023eab8 }, 0x4|3, 0x4|3 },
+ {{ 0x8020fd18, 0x8020fc78, 0x8020fc38, 0x80210138 }, 0x50|2, 0x50|3 },
+ {{ 0x8020fdbc, 0x8020fd1c, 0x8020fcdc, 0x8011bc98 }, 0x4|3, 0x4|3 },
+ {{ 0x8020fde4, 0x8020fd44, 0x8020fd04, 0x80238838 }, 0xc|2, 0xc|3 },
+ {{ 0x8020fe10, 0x8020fd70, 0x8020fd30, 0x80210198 }, 0x264|2, 0x264|3 },
+ {{ 0x80210074, 0x8020ffd4, 0x8020ff94, 0x801565d8 }, 0x18|2, 0x18|3 },
+ {{ 0x802100a0, 0x80210000, 0x8020ffc0, 0x80210414 }, 0x12448|1, 0x12448|1 },
+ {{ 0x802224e8, 0x80222448, 0x80222408, 0x8022285c }, 0x4|0, 0x3a24|1 },
+ {{ 0x80225f14, 0x80243f18, 0x80225e34, 0x80226288 }, 0x2dc|2, 0x2dc|3 },
+ {{ 0x802261f8, 0x80225e74, 0x80226118, 0x8022656c }, 0x2ec|1, 0x2ec|1 },
+ {{ 0x802264e4, 0x80226160, 0x80226404, 0x80226858 }, 0x4|0, 0x3330|1 },
+ {{ 0x80229814, 0x80229490, 0x80229734, 0x80229b88 }, 0x4|0, 0x370|1 },
+ {{ 0x80229b84, 0x80229800, 0x80229aa4, 0x80229ef8 }, 0x4|0, 0x248|1 },
+ {{ 0x80229dcc, 0x80229a48, 0x80229cec, 0x8022a140 }, 0x4|0, 0x164fc|1 },
+ {{ 0x802402dc, 0x802441f8, 0x802401fc, 0x80240650 }, 0xb30|2, 0xb30|3 },
+ {{ 0x80240e14, 0x8023ff58, 0x80240d34, 0x80241188 }, 0x1e04|1, 0x1e04|1 },
+ {{ 0x80242c18, 0x80241d5c, 0x80242b38, 0x80242f8c }, 0x4|0, 0x2148|1 },
+ {{ 0x80244dd4, 0x80244d34, 0x80244cf4, 0x80245154 }, 0xec|0, 0xec|0 },
+ {{ 0x80244fd0, 0x80244f50, 0x80244ef0, 0x80245380 }, 0x58|2, 0x58|3 },
+ {{ 0x8024503c, 0x80244fbc, 0x80244f5c, 0x8024542c }, 0x4|3, 0x4|3 },
+ {{ 0x80245040, 0x80244fc0, 0x80244f60, 0x802453bc }, 0x4|3, 0x4|3 },
+ {{ 0x80245044, 0x80244fc4, 0x80244f64, 0x802453f4 }, 0x48|2, 0x6c|3 },
+ {{ 0x802450b0, 0x80245030, 0x80244fd0, 0x80245460 }, 0x4|3, 0x4|3 },
+ {{ 0x80245448, 0x80245138, 0x80244fd0, 0x80245460 }, 0x4|3, 0x4|3 },
+ {{ 0x80245580, 0x80245258, 0x80244fd0, 0x80245460 }, 0x4|3, 0x4|3 },
+ {{ 0x802456b4, 0x8024539c, 0x80245064, 0x80245504 }, 0x2ac|2, 0x2c8|3 },
+ {{ 0x8024597c, 0x80245664, 0x8024532c, 0x802457cc }, 0x8|3, 0x8|3 },
+ {{ 0x80245a18, 0x80245700, 0x802453c8, 0x802457f8 }, 0x3c8|2, 0x3c8|3 },
+ {{ 0x80245de0, 0x80245aa0, 0x80245768, 0x80245b98 }, 0x8|2, 0x8|3 },
+ {{ 0x80245de8, 0x80245ad0, 0x80245798, 0x80245bc8 }, 0x1a8|2, 0x1a8|3 },
+ {{ 0x80246028, 0x80245d10, 0x802459d8, 0x80245e00 }, 0x6dc4|2, 0x6dc4|3 },
+ {{ 0x8024cdec, 0x8024cad4, 0x8024c79c, 0x80248ce0 }, 0x4|3, 0x4|3 },
+ {{ 0x8024cdf0, 0x8024cad8, 0x8024c7a0, 0x8024cbc8 }, 0x598c|2, 0x598c|3 },
+ {{ 0x8025278c, 0x80252474, 0x8025213c, 0x8025255c }, 0x328|2, 0x328|3 },
+ {{ 0x80252ab8, 0x802527a0, 0x80252468, 0x80252890 }, 0x498c|2, 0x498c|3 },
+ {{ 0x80257480, 0x80257160, 0x80256e20, 0x80257240 }, 0x10ec|2, 0x1100|3 },
+ {{ 0x80258580, 0x80258260, 0x80257f20, 0x80258340 }, 0x4|3, 0x4|3 },
+ {{ 0x80258584, 0x80258264, 0x80257f24, 0x8025834c }, 0xd8|2, 0xd8|3 },
+ {{ 0x80258698, 0x80258378, 0x80258038, 0x80258478 }, 0x1c|2, 0x38|3 },
+ {{ 0x802586d0, 0x802583b0, 0x80258070, 0x802584b0 }, 0x4|3, 0x4|3 },
+ {{ 0x80270860, 0x8026c520, 0x80270200, 0x8025e628 }, 0x448|2, 0x458|3 },
+ {{ 0x80270cb8, 0x8026c978, 0x80270658, 0x8025ea80 }, 0x1c|3, 0x1c|3 },
+ {{ 0x80270cd8, 0x8026c998, 0x80270678, 0x8025eac8 }, 0x70|2, 0xa0|3 },
+ {{ 0x80270d78, 0x8026ca38, 0x80270718, 0x8025eb68 }, 0x18c4|3, 0x18c4|3 },
+ {{ 0x8027263c, 0x8026e2fc, 0x80271fdc, 0x8026274c }, 0x4|3, 0x4|3 },
+ {{ 0x80272650, 0x8026e310, 0x80271ff0, 0x80260440 }, 0x24|3, 0x24|3 },
+ {{ 0x8027269c, 0x8026e35c, 0x8027203c, 0x8026047c }, 0x904|2, 0x904|3 },
+ {{ 0x80272fa0, 0x8026ec64, 0x80272940, 0x80260d80 }, 0x4|3, 0x4|3 },
+ {{ 0x80272fa4, 0x8026ec64, 0x80272944, 0x80260d84 }, 0x1520|2, 0x1520|3 },
+ {{ 0x802744c4, 0x80270184, 0x80273e64, 0x80262270 }, 0x4|3, 0x4|3 },
+ {{ 0x802744c8, 0x80270188, 0x80273e68, 0x802622a8 }, 0x32c|2, 0x32c|3 },
+ {{ 0x802747f4, 0x802704b4, 0x80274194, 0x80262270 }, 0x4|3, 0x4|3 },
+ {{ 0x802747f8, 0x802704b8, 0x80274198, 0x802625d8 }, 0x458|2, 0x458|3 },
+ {{ 0x80274c50, 0x80270910, 0x802745f8, 0x80262a30 }, 0x4|3, 0x4|3 },
+ {{ 0x80274c54, 0x80270914, 0x802745f4, 0x80262a34 }, 0x108|2, 0x108|3 },
+ {{ 0x80274d5c, 0x80270a1c, 0x802746fc, 0x80262270 }, 0x4|3, 0x4|3 },
+ {{ 0x80274d60, 0x80270a20, 0x80274700, 0x80262b40 }, 0x12f4|1, 0x12f4|1 },
+ {{ 0x80276054, 0x80271d14, 0x802759f4, 0x80263e34 }, 0x4|0, 0x3d04|1 },
+ {{ 0x80279d58, 0x80275a18, 0x802796f8, 0x80267b38 }, 0x4|0, 0xcc|1 },
+ {{ 0x80279e28, 0x80275ae8, 0x802797c8, 0x80267cdc }, 0x5c|2, 0x5c|3 },
+ {{ 0x80279e8c, 0x80275b4c, 0x8027982c, 0x80268a8c }, 0xc|2, 0xc|3 },
+ {{ 0x80279ea0, 0x80275b60, 0x80279840, 0x80267d50 }, 0x5d4|1, 0x5d4|1 },
+ {{ 0x8027a474, 0x80276134, 0x80279e14, 0x80268324 }, 0x4|0, 0x34|1 },
+ {{ 0x8027a4a8, 0x80276168, 0x80279e48, 0x80268358 }, 0x4|0, 0x8b0|1 },
+ {{ 0x8027ad58, 0x80276a18, 0x8027a6f8, 0x80268c08 }, 0x4|0, 0x778|1 },
+ {{ 0x8027b4d0, 0x80277190, 0x8027ae70, 0x80269380 }, 0x4|0, 0xa18|1 },
+ {{ 0x8027bee8, 0x80277ba8, 0x8027b888, 0x80269d98 }, 0x4|0, 0x598|1 },
+ {{ 0x8027d080, 0x80278d40, 0x8027ca20, 0x8026af30 }, 0x4|1, 0x4|1 },
+ {{ 0x8027d084, 0x80278d44, 0x8027ca24, 0x8026af34 }, 0x4|0, 0x280|1 },
+ {{ 0x8027d4a0, 0x80279160, 0x8027ce40, 0x8026b350 }, 0x800|1, 0x800|1 },
+ {{ 0x8027dca0, 0x80279960, 0x8027d640, 0x8026bb50 }, 0x4|0, 0x1c|1 },
+ {{ 0x8027dcbc, 0x8027997c, 0x8027d65c, 0x8026bb6c }, 0x4|0, 0x1c|1 },
+ {{ 0x8027dcd8, 0x80279998, 0x8027d678, 0x8026bb88 }, 0x4|0, 0x150|1 },
+ {{ 0x8027de28, 0x80279ae8, 0x8027d7c8, 0x8026bcd8 }, 0x4|0, 0x8c|1 },
+ {{ 0x8027deb4, 0x80279b74, 0x8027d854, 0x8026bd64 }, 0x4|0, 0x1ec|1 },
+ {{ 0x8027e0a0, 0x80279d60, 0x8027da40, 0x8026bf50 }, 0x4|0, 0x7ac|1 },
+ {{ 0x8027e860, 0x8027a520, 0x8027e200, 0x8026c700 }, 0x9b38|2, 0x9b38|3 },
+ {{ 0x802883b8, 0x80284078, 0x80287d58, 0x80262850 }, 0x4|3, 0x4|3 },
+ {{ 0x802883bc, 0x8028407c, 0x80287d5c, 0x80277cb4 }, 0x4|3, 0x4|3 },
+ {{ 0x802883c0, 0x80284080, 0x80287d60, 0x80276260 }, 0x808|2, 0x808|3 },
+ {{ 0x80288c38, 0x802848f8, 0x802885d8, 0x80276c28 }, 0x1108|2, 0x1108|3 },
+ {{ 0x80289d50, 0x80285a10, 0x802896f0, 0x80277d30 }, 0xaf8|2, 0xb10|3 },
+ {{ 0x8028a860, 0x80286520, 0x8028a200, 0x80278840 }, 0x4|3, 0x4|3 },
+ {{ 0x8028a868, 0x80286528, 0x8028a208, 0x80278858 }, 0x70|2, 0x88|3 },
+ {{ 0x8028a8f0, 0x802865b0, 0x8028a290, 0x802788e0 }, 0x4|3, 0x4|3 },
+ {{ 0x8028a8f8, 0x802865b8, 0x8028a298, 0x802788ec }, 0x4c|2, 0x4c|3 },
+ {{ 0x8028a944, 0x80286604, 0x8028a2e4, 0x80278824 }, 0x4|3, 0x4|3 },
+ {{ 0x8028a950, 0x80286610, 0x8028a2f0, 0x80278940 }, 0x458|2, 0x458|3 },
+ {{ 0x8028ada8, 0x80286a68, 0x8028a748, 0x80290568 }, 0x14|2, 0x14|3 },
+ {{ 0x8028adbc, 0x80286a7c, 0x8028a75c, 0x8027624c }, 0x4|3, 0x4|3 },
+ {{ 0x8028adcc, 0x80286a8c, 0x8028a76c, 0x80275f34 }, 0x4|3, 0x4|3 },
+ {{ 0x8028add0, 0x80286a90, 0x8028a770, 0x80278dc0 }, 0x12c8|2, 0x1338|3 },
+ {{ 0x8028c108, 0x80287dc8, 0x8028baa8, 0x8027a0f8 }, 0x2910|3, 0x2910|3 },
+ {{ 0x8028ea20, 0x8028a6e0, 0x8028e3c0, 0x8027ca20 }, 0x48|2, 0x78|3 },
+ {{ 0x8028ea98, 0x8028a758, 0x8028e438, 0x8027ca98 }, 0x11d8|3, 0x11d8|3 },
+ {{ 0x8028fc70, 0x8028fc70, 0x8028f610, 0x8027dc70 }, 0x4|3, 0x4|3 },
+ {{ 0x8028fc74, 0x8028b934, 0x8028f614, 0x8027dc74 }, 0xd074|2, 0xd098|3 },
+ {{ 0x8029cd0c, 0x802989cc, 0x8029c6ac, 0x8028ad0c }, 0x1f4|3, 0x1f4|3 },
+ {{ 0x8029cf04, 0x80298bc4, 0x8029c8a4, 0x8028af0c }, 0x48|2, 0x48|3 },
+ {{ 0x8029cf54, 0x80298c38, 0x8029c918, 0x8028af5c }, 0x4|3, 0x4|3 },
+ {{ 0x8029cf68, 0x80298c28, 0x8029c908, 0x8028af70 }, 0x4504|1, 0x4504|1 },
+ {{ 0x802a146c, 0x8029d12c, 0x802a0e0c, 0x8028f474 }, 0x4|0, 0x1200|1 },
+ {{ 0x802a2680, 0x8029e340, 0x802a2020, 0x80290688 }, 0x4|3, 0x4|3 },
+ {{ 0x802a2694, 0x8029e354, 0x802a2034, 0x80290694 }, 0x8e0|2, 0x8e0|3 },
+ {{ 0x802a2f78, 0x8029ea50, 0x802a2918, 0x80290f78 }, 0x10|2, 0x10|3 },
+ {{ 0x802a2f88, 0x8029fcd8, 0x802a2928, 0x80290f88 }, 0x4|3, 0x4|3 },
+ {{ 0x802a2f8c, 0x8029ea64, 0x802a292c, 0x80290f8c }, 0x4|3, 0x4|3 },
+ {{ 0x802a2fb0, 0x8029ec48, 0x802a2950, 0x80290fb0 }, 0x102c|2, 0x1058|3 },
+ {{ 0x802a4008, 0x8029fca0, 0x802a39a8, 0x80292008 }, 0x4|3, 0x4|3 },
+ {{ 0x802a4080, 0x8029fd00, 0x802a3a00, 0x80292080 }, 0x58|2, 0x70|3 },
+ {{ 0x802a40f0, 0x8029fd70, 0x802a3a70, 0x802920f0 }, 0x4fb74|0, 0x4fb74|0 },
+ {{ 0x803457e0, 0x80341460, 0x80345160, 0x803337e0 }, 0x14e0|0, 0x14e0|0 },
+ {{ 0x80350580, 0x8034c200, 0x8034ff00, 0x8033e580 }, 0x20|0, 0x20|0 },
+ {{ 0x80384c00, 0x80380880, 0x80384580, 0x80372c00 }, 0xae0|0, 0xc04|1 },
+ {{ 0x80385818, 0x80381498, 0x80385198, 0x80373818 }, 0xc4|2, 0xc4|3 },
+ {{ 0x803858e0, 0x80381560, 0x80385260, 0x803738e8 }, 0x28|1, 0x28|1 },
+ {{ 0x80385908, 0x80381588, 0x80385288, 0x80373910 }, 0x4|0, 0x374|1 },
+ {{ 0x80385c94, 0x80381914, 0x80385614, 0x80373c9c }, 0x2c0|2, 0x2d0|3 },
+ {{ 0x80385f64, 0x80381be4, 0x803858e4, 0x80373f6c }, 0x38|3, 0x38|3 },
+ {{ 0x80385fbc, 0x80381b64, 0x8038593c, 0x80373eec }, 0x4|3, 0x4|3 },
+ {{ 0x80385fc0, 0x80381c40, 0x80385940, 0x80373fe0 }, 0x28|2, 0x38|3 },
+ {{ 0x80385ff8, 0x80381c78, 0x80385978, 0x80374018 }, 0x4|3, 0x4|3 },
+ {{ 0x80386000, 0x80381c80, 0x80385980, 0x80374020 }, 0x4|0, 0xd4|1 },
+ {{ 0x80386124, 0x80381da4, 0x80385aa4, 0x8037252c }, 0x4|3, 0x4|3 },
+ {{ 0x80386128, 0x80381da8, 0x80385aa8, 0x80374148 }, 0x10|2, 0x10|3 },
+ {{ 0x8038613c, 0x80382444, 0x80385abc, 0x803747e4 }, 0x4|3, 0x4|3 },
+ {{ 0x80386160, 0x80381de0, 0x80385ae0, 0x80374180 }, 0x34|2, 0x58|3 },
+ {{ 0x803861b8, 0x80381e38, 0x80385b38, 0x803741d8 }, 0x24|3, 0x24|3 },
+ {{ 0x803861ec, 0x80381e6c, 0x80385b6c, 0x803741ac }, 0x8|2, 0x8|3 },
+ {{ 0x80386204, 0x80381e84, 0x80385b84, 0x80374224 }, 0xc|2, 0x18|3 },
+ {{ 0x8038621c, 0x80381e9c, 0x80385b9c, 0x8037423c }, 0xd4|1, 0xd4|1 },
+ {{ 0x803862f0, 0x80381f70, 0x80385c70, 0x80374310 }, 0x4|0, 0x1c|1 },
+ {{ 0x8038630c, 0x80381f8c, 0x80385c8c, 0x8037432c }, 0x4|0, 0x2c|1 },
+ {{ 0x80386338, 0x80381fb8, 0x80385cb8, 0x80374358 }, 0x4|0, 0x20|1 },
+ {{ 0x80386358, 0x80381fd8, 0x80385cd8, 0x80374378 }, 0x4|0, 0xac|1 },
+ {{ 0x80386404, 0x80382084, 0x80385d84, 0x80374424 }, 0x1c|0, 0x1c|0 },
+ {{ 0x80386448, 0x803820c8, 0x80385dc8, 0x80374468 }, 0x38|2, 0x5c|3 },
+ {{ 0x803864a4, 0x80382124, 0x80385e24, 0x803744c4 }, 0x374|3, 0x374|3 },
+ {{ 0x80386834, 0x80382c04, 0x803861b4, 0x80374854 }, 0x4|3, 0x4|3 },
+ {{ 0x80386844, 0x803824c4, 0x803861c4, 0x80374864 }, 0x8|2, 0x2c|3 },
+ {{ 0x80386870, 0x803824f0, 0x803861f0, 0x80374890 }, 0x16c|3, 0x16c|3 },
+ {{ 0x803869e0, 0x80352a94, 0x80386360, 0x80374a00 }, 0x4|3, 0x4|3 },
+ {{ 0x803869e4, 0x80382664, 0x80386364, 0x80374a04 }, 0x20|2, 0x80|3 },
+ {{ 0x80386a64, 0x803826e4, 0x803863e4, 0x80374a84 }, 0xf0|3, 0xf0|3 },
+ {{ 0x80386b58, 0x803827e8, 0x803864d8, 0x80374b88 }, 0x1c|2, 0x1c|3 },
+ {{ 0x80386bac, 0x8038282c, 0x8038652c, 0x80374bcc }, 0x1c|2, 0x64|3 },
+ {{ 0x80386c10, 0x80382890, 0x80386590, 0x80374c30 }, 0x10|3, 0x10|3 },
+ {{ 0x80386c20, 0x803828a0, 0x803865a0, 0x80374e30 }, 0x4|3, 0x4|3 },
+ {{ 0x80386c5c, 0x803828dc, 0x803865dc, 0x80374c7c }, 0x20|2, 0x20|3 },
+ {{ 0x80386c80, 0x803823e8, 0x803860e8, 0x80374ca0 }, 0x8|2, 0x8|3 },
+ {{ 0x80386ca8, 0x80382928, 0x80386628, 0x80374cc8 }, 0x8|2, 0xa4|3 },
+ {{ 0x80386d4c, 0x803829cc, 0x803866cc, 0x80374d6c }, 0x128|3, 0x128|3 },
+ {{ 0x80386e80, 0x80382b00, 0x80386800, 0x80348428 }, 0x4|3, 0x4|3 },
+ {{ 0x80386e8c, 0x80382b0c, 0x8038680c, 0x80374eac }, 0x8|2, 0x14|3 },
+ {{ 0x80386ea0, 0x80382b20, 0x80386820, 0x80374ec0 }, 0x88|3, 0x88|3 },
+ {{ 0x80386f44, 0x80382bbc, 0x803868c4, 0x80374f64 }, 0x34|2, 0x34|3 },
+ {{ 0x80386fa0, 0x80382c20, 0x80386920, 0x80374fc8 }, 0x24|2, 0x24|3 },
+ {{ 0x80386fcc, 0x80382c4c, 0x8038694c, 0x80375e84 }, 0x4|3, 0x4|3 },
+ {{ 0x80386fdc, 0x80382c5c, 0x8038695c, 0x8037500c }, 0x18|2, 0x30|3 },
+ {{ 0x8038700c, 0x80382c8c, 0x8038698c, 0x8037503c }, 0x1b10|3, 0x1b10|3 },
+ {{ 0x80388b34, 0x803847b4, 0x803884b4, 0x80376b54 }, 0x1b8|2, 0x1b8|3 },
+ {{ 0x80388cf8, 0x80384970, 0x80388678, 0x80376d18 }, 0x3b4|2, 0x3b4|3 },
+ {{ 0x803890ac, 0x80384d84, 0x80388a2c, 0x803770cc }, 0x20|2, 0x20|3 },
+ {{ 0x803890d8, 0x80383338, 0x80388a58, 0x803770f8 }, 0xc|2, 0xc|3 },
+ {{ 0x803890e4, 0x80384d2c, 0x80388a64, 0x80377104 }, 0x44|2, 0x44|3 },
+ {{ 0x80389130, 0x80383260, 0x80388ab0, 0x80377150 }, 0x4|3, 0x4|3 },
+ {{ 0x8038913c, 0x80384dbc, 0x80388abc, 0x8037715c }, 0x30|2, 0x30|3 },
+ {{ 0x8038916c, 0x802d2190, 0x802d5e90, 0x802c4510 }, 0xc|2, 0xc|3 },
+ {{ 0x80389178, 0x802a3094, 0x802a6d94, 0x80295414 }, 0x4|3, 0x4|3 },
+ {{ 0x8038cc00, 0x80388880, 0x8038c580, 0x8037ac00 }, 0x4|0, 0x4|0 },
+ {{ 0x80429454, 0x804250d4, 0x80428dd4, 0x80417474 }, 0x4|0, 0x4|0 },
+ {{ 0x805102e0, 0x8050bf60, 0x8050fc60, 0x804fe300 }, 0x76c|3, 0x76c|3 },
+ {{ 0x80510a88, 0x8054f704, 0x80510408, 0x804feaa8 }, 0xe8|2, 0xe8|3 },
+ {{ 0x80510b70, 0x8050c6fc, 0x805104f0, 0x804feb90 }, 0x1c7c|1, 0x1c7c|1 },
+ {{ 0x805127ec, 0x8050e378, 0x8051216c, 0x8050080c }, 0x8ec0|0, 0xb038|1 },
+ {{ 0x8051d824, 0x805193b0, 0x8051d1a4, 0x8050b848 }, 0x1854|2, 0x1860|3 },
+ {{ 0x8051f084, 0x8051ac10, 0x8051ea04, 0x8050d0a8 }, 0xb210|3, 0xb210|3 },
+ {{ 0x8052a294, 0x80525e20, 0x80529c14, 0x805183b0 }, 0xa4|2, 0xa4|3 },
+ {{ 0x8052a338, 0x80525ec4, 0x80529cb8, 0x80518390 }, 0x2f54|2, 0x2f54|3 },
+ {{ 0x8052d294, 0x8054f7fc, 0x8052cc14, 0x8051b2ec }, 0x6b8|2, 0x6b8|3 },
+ {{ 0x8052d94c, 0x805c4d48, 0x8052d2cc, 0x8051b9a4 }, 0x14|2, 0x14|3 },
+ {{ 0x8052d968, 0x80528e20, 0x8052d2e8, 0x8051b9c0 }, 0x1040|1, 0x1040|1 },
+ {{ 0x8052e9a8, 0x80529e60, 0x8052e328, 0x8051ca00 }, 0x72d4|0, 0xefc4|1 },
+ {{ 0x8053d978, 0x8054fed0, 0x8053d2f8, 0x8052b9d0 }, 0x934|2, 0x934|3 },
+ {{ 0x8053e2dc, 0x805830ac, 0x8053dc5c, 0x8052c334 }, 0x4|3, 0x4|3 },
+ {{ 0x8053e36c, 0x80538e30, 0x8053dcec, 0x8052c3c4 }, 0x104c|1, 0x104c|1 },
+ {{ 0x8053f3b8, 0x80539e7c, 0x8053ed38, 0x8052d410 }, 0xebd4|0, 0x1076c|1 },
+ {{ 0x8054fb28, 0x805508c4, 0x8054f4a8, 0x8053db80 }, 0x398|1, 0x398|1 },
+ {{ 0x8054fec0, 0x80550c5c, 0x8054f840, 0x8053df18 }, 0x1c|0, 0x674|1 },
+ {{ 0x80550544, 0x8054a5ec, 0x8054fec4, 0x8053e59c }, 0x3240|2, 0x3240|3 },
+ {{ 0x80553784, 0x805512e0, 0x80553104, 0x805417dc }, 0xa4|2, 0xa4|3 },
+ {{ 0x8055382c, 0x805a8b50, 0x805531ac, 0x80541884 }, 0x1c|2, 0x1c|3 },
+ {{ 0x80553850, 0x8054d830, 0x805531d0, 0x805418a8 }, 0x2e4|1, 0x2e4|1 },
+ {{ 0x80553b34, 0x8054db14, 0x805534b4, 0x80541b8c }, 0x1a9c|0, 0x1bec|1 },
+ {{ 0x8055572c, 0x805513ac, 0x805550ac, 0x80543784 }, 0xd3a4|1, 0xd3a4|1 },
+ {{ 0x80562ad0, 0x8055e750, 0x80562450, 0x80550b28 }, 0x4|0, 0x804c|1 },
+ {{ 0x8056ab68, 0x805ae0e4, 0x8056a4e8, 0x80558bc0 }, 0xab8|2, 0xab8|3 },
+ {{ 0x8056b620, 0x80652b60, 0x8056afa0, 0x80559678 }, 0xc|2, 0xc|3 },
+ {{ 0x8056b62c, 0x805d3b9c, 0x8056afac, 0x80559684 }, 0xc|2, 0xc|3 },
+ {{ 0x8056b638, 0x805667e8, 0x8056afb8, 0x80559690 }, 0x623c|1, 0x623c|1 },
+ {{ 0x80571874, 0x8056ca24, 0x805711f4, 0x8055f8cc }, 0x4|0, 0x2768|1 },
+ {{ 0x8057402c, 0x805aebb4, 0x805739ac, 0x80562084 }, 0x1858|2, 0x1858|3 },
+ {{ 0x80575890, 0x80583f3c, 0x80575210, 0x805638e8 }, 0x10|2, 0x10|3 },
+ {{ 0x805758d4, 0x805b041c, 0x80575254, 0x8056392c }, 0x158|2, 0x158|3 },
+ {{ 0x80575a30, 0x8056f1cc, 0x805753b0, 0x80563a88 }, 0x2b28|1, 0x2b28|1 },
+ {{ 0x80578558, 0x80571cf4, 0x80577ed8, 0x805665b0 }, 0xa410|0, 0xb9b8|1 },
+ {{ 0x80583f1c, 0x8057d6f8, 0x8058389c, 0x80571f74 }, 0x6bc|1, 0x6bc|1 },
+ {{ 0x805845d8, 0x8057ddb4, 0x80583f58, 0x80572630 }, 0x105c4|0, 0x16f48|1 },
+ {{ 0x8059b590, 0x805b0578, 0x8059af10, 0x805895e8 }, 0x34f8|2, 0x34f8|3 },
+ {{ 0x8059ea98, 0x80594d74, 0x8059e418, 0x8058caf0 }, 0x1a98|2, 0x1a98|3 },
+ {{ 0x805a054c, 0x805b3a88, 0x8059fecc, 0x8058e5a4 }, 0x3c|2, 0x3c|3 },
+ {{ 0x805a05d0, 0x80588c78, 0x8059ff50, 0x8058e628 }, 0x40|2, 0x40|3 },
+ {{ 0x805a068c, 0x805b3ac8, 0x805a000c, 0x8058e6e4 }, 0xde0|2, 0xde0|3 },
+ {{ 0x805a147c, 0x805a0d1c, 0x805a0dfc, 0x8058f4d4 }, 0x8|2, 0x8|3 },
+ {{ 0x805a1484, 0x805b48b0, 0x805a0e04, 0x8058f4dc }, 0x38c|2, 0x38c|3 },
+ {{ 0x805a1860, 0x80596828, 0x805a11e0, 0x8058f8b8 }, 0x8660|2, 0x8660|3 },
+ {{ 0x805a9ed8, 0x8059eea8, 0x805a9858, 0x80597f30 }, 0x1690|2, 0x1690|3 },
+ {{ 0x805ab568, 0x805a05f8, 0x805aaee8, 0x805995c0 }, 0x70c|2, 0x70c|3 },
+ {{ 0x805abc78, 0x8059fb9c, 0x805ab5f8, 0x80599cd0 }, 0x14|2, 0x14|3 },
+ {{ 0x805abc8c, 0x805a0d24, 0x805ab60c, 0x80599ce4 }, 0x20fc|2, 0x20fc|3 },
+ {{ 0x805add88, 0x805a2e60, 0x805ad708, 0x8059bde0 }, 0xb270|2, 0xb270|3 },
+ {{ 0x805b9000, 0x805b4cdc, 0x805b8980, 0x805a7058 }, 0xc|2, 0xc|3 },
+ {{ 0x805b900c, 0x805b4c8c, 0x805b898c, 0x805a7064 }, 0x2e8|2, 0x2e8|3 },
+ {{ 0x805b92f8, 0x805a3800, 0x805b8c78, 0x805a7350 }, 0x8|2, 0x8|3 },
+ {{ 0x805b9300, 0x8061f7f4, 0x805b8c80, 0x805a7358 }, 0x1820|2, 0x1820|3 },
+ {{ 0x805bab28, 0x805ef59c, 0x805ba4a8, 0x805a8b80 }, 0xc|2, 0xc|3 },
+ {{ 0x805bab34, 0x805ca844, 0x805ba4b4, 0x805a8b8c }, 0x8|2, 0x8|3 },
+ {{ 0x805bab40, 0x805b4f80, 0x805ba4c0, 0x805a8b98 }, 0x750|2, 0x750|3 },
+ {{ 0x805bb2b4, 0x80621030, 0x805bac34, 0x805a930c }, 0x1728|1, 0x1728|1 },
+ {{ 0x805bc9dc, 0x80622758, 0x805bc35c, 0x805aaa34 }, 0x7f8|0, 0x8e4|1 },
+ {{ 0x805bd2d4, 0x805b695c, 0x805bcc54, 0x805ab32c }, 0x4|3, 0x4|3 },
+ {{ 0x805bd2e0, 0x80623050, 0x805bcc60, 0x805ab338 }, 0xb4|2, 0xb4|3 },
+ {{ 0x805bd394, 0x805b56f0, 0x805bcd14, 0x805ab3ec }, 0x1268|2, 0x1268|3 },
+ {{ 0x805be5fc, 0x805d9524, 0x805bdf7c, 0x805ac654 }, 0x4|3, 0x4|3 },
+ {{ 0x805be600, 0x805b6968, 0x805bdf80, 0x805ac658 }, 0x58|2, 0x58|3 },
+ {{ 0x805be658, 0x8058be40, 0x805bdfd8, 0x805ac6b0 }, 0x4|3, 0x4|3 },
+ {{ 0x805be65c, 0x806284dc, 0x805bdfdc, 0x805ac6b4 }, 0x4|3, 0x4|3 },
+ {{ 0x805be660, 0x80623100, 0x805bdfe0, 0x805ac6b8 }, 0x180|2, 0x180|3 },
+ {{ 0x805be83c, 0x80623284, 0x805be1bc, 0x805ac894 }, 0x514|2, 0x514|3 },
+ {{ 0x805bed6c, 0x806237a8, 0x805be6ec, 0x805acdc4 }, 0x548|2, 0x548|3 },
+ {{ 0x805bf2b8, 0x80617818, 0x805bec38, 0x805ad310 }, 0x20|2, 0x20|3 },
+ {{ 0x805bf2dc, 0x80623d14, 0x805bec5c, 0x805ad334 }, 0x8c|2, 0x8c|3 },
+ {{ 0x805bf368, 0x80609184, 0x805bece8, 0x805ad3c0 }, 0x5c|2, 0x5c|3 },
+ {{ 0x805bf3c4, 0x805b69c8, 0x805bed44, 0x805ad41c }, 0xa3c|2, 0xa3c|3 },
+ {{ 0x805bfe14, 0x805b7424, 0x805bf794, 0x805ade6c }, 0x29c|2, 0x29c|3 },
+ {{ 0x805c00b0, 0x805b7718, 0x805bfa30, 0x805ae108 }, 0x808|2, 0x808|3 },
+ {{ 0x805c08d4, 0x805b7f3c, 0x805c0254, 0x805ae938 }, 0x124c|2, 0x124c|3 },
+ {{ 0x805c1b24, 0x8062144c, 0x805c14a4, 0x805afb88 }, 0x8|2, 0x8|3 },
+ {{ 0x805c1b34, 0x805b91a0, 0x805c14b4, 0x805afb98 }, 0x1aa4|2, 0x1aa4|3 },
+ {{ 0x805c35e8, 0x8061c6b4, 0x805c2f68, 0x805b164c }, 0x4|3, 0x4|3 },
+ {{ 0x805c35ec, 0x805ca844, 0x805c2f6c, 0x805b1650 }, 0x8|2, 0x8|3 },
+ {{ 0x805c35f4, 0x80623e04, 0x805c2f74, 0x805b1658 }, 0x57c|2, 0x57c|3 },
+ {{ 0x805c3b78, 0x80609198, 0x805c34f8, 0x805b1bdc }, 0x1c|2, 0x1c|3 },
+ {{ 0x805c3bc8, 0x805bac60, 0x805c3548, 0x805b1c2c }, 0x7b8|1, 0x7b8|1 },
+ {{ 0x805c4380, 0x805bb418, 0x805c3d00, 0x805b23e4 }, 0x4|0, 0x3bc|1 },
+ {{ 0x805c4744, 0x8063be90, 0x805c40c4, 0x805b27a8 }, 0x1c|2, 0x1c|3 },
+ {{ 0x805c4760, 0x806243d4, 0x805c40e0, 0x805b27c4 }, 0xff0|2, 0xff0|3 },
+ {{ 0x805c5764, 0x8061e8a0, 0x805c50e4, 0x805b37c8 }, 0x34|2, 0x34|3 },
+ {{ 0x805c5798, 0x805bb7e8, 0x805c5118, 0x805b37fc }, 0x55d0|2, 0x55d0|3 },
+ {{ 0x805cad68, 0x805e27f8, 0x805ca6e8, 0x805b8dcc }, 0x3c|2, 0x3c|3 },
+ {{ 0x805cada4, 0x806091b4, 0x805ca724, 0x805b8e08 }, 0x30|2, 0x30|3 },
+ {{ 0x805cadd4, 0x8062541c, 0x805ca754, 0x805b8e38 }, 0x12b8|2, 0x12b8|3 },
+ {{ 0x805cc098, 0x805a7444, 0x805b1cec, 0x805a03c4 }, 0x18|2, 0x18|3 },
+ {{ 0x805cc0c0, 0x80576b5c, 0x8057cd40, 0x8056b418 }, 0xc|2, 0xc|3 },
+ {{ 0x805cc0d8, 0x80626700, 0x805cba38, 0x805ba11c }, 0x14|2, 0x14|3 },
+ {{ 0x805cc0f8, 0x8058e09c, 0x80594240, 0x80582918 }, 0xc|2, 0xc|3 },
+ {{ 0x805cc14c, 0x8058e09c, 0x80594240, 0x80582918 }, 0xc|2, 0xc|3 },
+ {{ 0x805cc184, 0x8053f5dc, 0x80544498, 0x80532b70 }, 0x4|3, 0x4|3 },
+ {{ 0x805cc194, 0x8060aa04, 0x8063b490, 0x8062a13c }, 0x4|3, 0x4|3 },
+ {{ 0x805cc198, 0x805b6468, 0x805bda8c, 0x805ac164 }, 0x4|3, 0x4|3 },
+ {{ 0x805cc1b4, 0x80626758, 0x805cba90, 0x805ba174 }, 0x4c|2, 0x4c|3 },
+ {{ 0x805cc204, 0x806267a8, 0x805cbae0, 0x805ba1b0 }, 0x8|2, 0x8|3 },
+ {{ 0x805cc20c, 0x806267b0, 0x805cbae8, 0x805ba1cc }, 0x8|2, 0x14|3 },
+ {{ 0x805cc220, 0x806267c4, 0x805cbafc, 0x805ba1e0 }, 0x1728|3, 0x1728|3 },
+ {{ 0x805cd948, 0x805c0e28, 0x805cd224, 0x805bb908 }, 0x3b8|1, 0x3b8|1 },
+ {{ 0x805cdd00, 0x805c11e0, 0x805cd5dc, 0x805bbcc0 }, 0x10c|0, 0xde0|1 },
+ {{ 0x805ceae0, 0x805c1fc0, 0x805ce3bc, 0x805bcab0 }, 0x8|2, 0x8|3 },
+ {{ 0x805ceafc, 0x805c1fdc, 0x805ce3d8, 0x805bcabc }, 0x5e8|2, 0x5e8|3 },
+ {{ 0x805cf0ec, 0x805c25cc, 0x805ce9c8, 0x805bd0b0 }, 0xf0|2, 0xf0|3 },
+ {{ 0x805cf1e0, 0x805c26c0, 0x805ceabc, 0x805bd1a8 }, 0x1b0|2, 0x1b0|3 },
+ {{ 0x805cf390, 0x805c2870, 0x805cec6c, 0x805bd368 }, 0x78|2, 0x78|3 },
+ {{ 0x805cf410, 0x805c28f0, 0x805cecec, 0x805eac80 }, 0x8|2, 0x8|3 },
+ {{ 0x805cf468, 0x805c2948, 0x805ced44, 0x805bd410 }, 0x8|2, 0x8|3 },
+ {{ 0x805cf47c, 0x805c295c, 0x805ced58, 0x805bd83c }, 0x20|2, 0x20|3 },
+ {{ 0x805cf4e4, 0x805c29c4, 0x805cedc0, 0x805bd438 }, 0x340|2, 0x340|3 },
+ {{ 0x805cf824, 0x805c2d04, 0x805cf100, 0x80605650 }, 0x8|2, 0x8|3 },
+ {{ 0x805cf82c, 0x805c2d0c, 0x805cf108, 0x805bd788 }, 0x8|2, 0x8|3 },
+ {{ 0x805cf840, 0x805c2d20, 0x805cf11c, 0x805bd7d4 }, 0x28|2, 0x28|3 },
+ {{ 0x805cf878, 0x805c2d58, 0x805cf154, 0x805bd9fc }, 0x34|2, 0x40|3 },
+ {{ 0x805cf8b8, 0x805c2d98, 0x805cf194, 0x805bda3c }, 0x814|3, 0x814|3 },
+ {{ 0x805d00cc, 0x805c35ac, 0x805cf9a8, 0x8069e478 }, 0x4|3, 0x4|3 },
+ {{ 0x805d00d4, 0x805c35b4, 0x805cf9b0, 0x805be258 }, 0xe8|2, 0xe8|3 },
+ {{ 0x805d01c4, 0x805c36a4, 0x805cfaa0, 0x805be34c }, 0x1084|2, 0x1084|3 },
+ {{ 0x805d124c, 0x805c472c, 0x805d0b28, 0x805d39dc }, 0x8|2, 0x8|3 },
+ {{ 0x805d1258, 0x805c4738, 0x805d0b34, 0x805bf3f4 }, 0x4|3, 0x4|3 },
+ {{ 0x805d125c, 0x805c473c, 0x805d0b38, 0x805bf3ec }, 0x4|3, 0x4|3 },
+ {{ 0x805d1260, 0x805c4740, 0x805d0b3c, 0x805bf3fc }, 0x604|2, 0x604|3 },
+ {{ 0x805d1874, 0x8064c778, 0x805d1150, 0x805bfa10 }, 0x10|2, 0x10|3 },
+ {{ 0x805d1884, 0x80627eec, 0x805d1160, 0x805bfa20 }, 0x5c0|2, 0x5c0|3 },
+ {{ 0x805d1e74, 0x8058be44, 0x805d1750, 0x805c0010 }, 0x4|3, 0x4|3 },
+ {{ 0x805d1e80, 0x805c4d64, 0x805d175c, 0x805c001c }, 0xec4|1, 0xec4|1 },
+ {{ 0x805d2d44, 0x805c5c28, 0x805d2620, 0x805c0ee0 }, 0x4|0, 0x522c|1 },
+ {{ 0x805d7f70, 0x806284e4, 0x805d784c, 0x805c610c }, 0x4058|2, 0x4058|3 },
+ {{ 0x805dc024, 0x8062c540, 0x805db900, 0x805ca1c0 }, 0xe10|1, 0xe10|1 },
+ {{ 0x805dce34, 0x8062d350, 0x805dc710, 0x805cafd0 }, 0x4|0, 0x19e8|1 },
+ {{ 0x805de820, 0x80624358, 0x805de0fc, 0x805cc9bc }, 0x8|2, 0x8|3 },
+ {{ 0x805de83c, 0x8062ed4c, 0x805de118, 0x805cc9d8 }, 0x23f8|2, 0x23f8|3 },
+ {{ 0x805e0c34, 0x805cae58, 0x805e0510, 0x805cedd0 }, 0x1260|1, 0x1260|1 },
+ {{ 0x805e1e94, 0x805cc0b8, 0x805e1770, 0x805d0030 }, 0x2168|0, 0x4c70|1 },
+ {{ 0x805e6b10, 0x805bf784, 0x805e63ec, 0x805d4cac }, 0x14|2, 0x14|3 },
+ {{ 0x805e6b44, 0x8063113c, 0x805e6420, 0x805d4ce0 }, 0x8f8|2, 0x8f8|3 },
+ {{ 0x805e7458, 0x805d0d6c, 0x805e6d34, 0x805d55f4 }, 0x3314|2, 0x3314|3 },
+ {{ 0x805ea774, 0x8061f7e8, 0x805ea050, 0x805d8910 }, 0x4|3, 0x4|3 },
+ {{ 0x805ea778, 0x80631a50, 0x805ea054, 0x805d8914 }, 0x435c|2, 0x435c|3 },
+ {{ 0x805eeb38, 0x80635e10, 0x805ee414, 0x805dcf58 }, 0x1c|2, 0x1c|3 },
+ {{ 0x805eeb58, 0x8052d930, 0x805ee434, 0x805dcf78 }, 0x4|3, 0x4|3 },
+ {{ 0x805eeb64, 0x805d4090, 0x805ee440, 0x805dcf84 }, 0x5a0|1, 0x5a0|1 },
+ {{ 0x805ef104, 0x805d4630, 0x805ee9e0, 0x805dd524 }, 0x2804|0, 0x3c10|1 },
+ {{ 0x805f2d14, 0x8063fc3c, 0x805f25f0, 0x805e1134 }, 0x8|2, 0x8|3 },
+ {{ 0x805f2d1c, 0x8060d52c, 0x805f25f8, 0x805e113c }, 0x4|3, 0x4|3 },
+ {{ 0x805f2d20, 0x80635e3c, 0x805f25fc, 0x805e1140 }, 0x4a24|2, 0x4a24|3 },
+ {{ 0x805f7744, 0x80639348, 0x805f5b08, 0x805e464c }, 0x18|2, 0x18|3 },
+ {{ 0x805f775c, 0x8063934c, 0x805f5b0c, 0x805e4650 }, 0x14|2, 0x14|3 },
+ {{ 0x805f7770, 0x8063934c, 0x805f5b0c, 0x805e4650 }, 0x14|2, 0x14|3 },
+ {{ 0x805f7784, 0x8063934c, 0x805f5b0c, 0x805e4650 }, 0x14|2, 0x14|3 },
+ {{ 0x805f7798, 0x8063a8b4, 0x805f7074, 0x805e5bb8 }, 0x1388|2, 0x1388|3 },
+ {{ 0x805f8b24, 0x806e4bd4, 0x805f8400, 0x805e6f44 }, 0xc|2, 0xc|3 },
+ {{ 0x805f8b30, 0x805d824c, 0x805f840c, 0x805e6f50 }, 0x180c|2, 0x180c|3 },
+ {{ 0x805fa33c, 0x805d9a58, 0x805f97bc, 0x805e8300 }, 0x4|3, 0x4|3 },
+ {{ 0x805fa340, 0x805d9a5c, 0x805f9c1c, 0x805e8760 }, 0x1270|2, 0x1270|3 },
+ {{ 0x805fb5b0, 0x8061aa1c, 0x805fae8c, 0x805e99d0 }, 0x4|3, 0x4|3 },
+ {{ 0x805fb5b8, 0x8063bc4c, 0x805fae94, 0x805e99d8 }, 0x244|2, 0x244|3 },
+ {{ 0x805fb80c, 0x8058c0d4, 0x805fb0e8, 0x805e9c2c }, 0x8|2, 0x8|3 },
+ {{ 0x805fb814, 0x805aebac, 0x805fb0f0, 0x805e9c34 }, 0x4|3, 0x4|3 },
+ {{ 0x805fb81c, 0x805dacd4, 0x805fb0f8, 0x805e9c3c }, 0x1cf4|2, 0x1cf4|3 },
+ {{ 0x805fd514, 0x8063beb0, 0x805fcdf0, 0x805eb934 }, 0x241c|2, 0x241c|3 },
+ {{ 0x805ff930, 0x8063e2cc, 0x805bf164, 0x805edd50 }, 0x4|3, 0x4|3 },
+ {{ 0x805ff934, 0x8063e2d0, 0x806b27bc, 0x805edd54 }, 0x4|3, 0x4|3 },
+ {{ 0x805ff958, 0x8063e2f4, 0x8062f5a8, 0x805edd78 }, 0x4|3, 0x4|3 },
+ {{ 0x805ff970, 0x8063e30c, 0x805ff230, 0x805edd90 }, 0x2d4|2, 0x2d4|3 },
+ {{ 0x805ffc4c, 0x8063e5e8, 0x805da18c, 0x805ee06c }, 0x4|3, 0x4|3 },
+ {{ 0x805ffc64, 0x8063e600, 0x805ff51c, 0x805ee084 }, 0xf0|2, 0xf0|3 },
+ {{ 0x805ffd64, 0x8063e700, 0x805ff51c, 0x805ee184 }, 0x658|2, 0x658|3 },
+ {{ 0x806003c8, 0x8063ed64, 0x8053cbc8, 0x805ee7e8 }, 0x8|2, 0x8|3 },
+ {{ 0x806003d0, 0x8063ed6c, 0x8065415c, 0x805ee7f0 }, 0xc|2, 0xc|3 },
+ {{ 0x806003fc, 0x8063ed98, 0x805dee38, 0x805ee81c }, 0x4|3, 0x4|3 },
+ {{ 0x8060045c, 0x8063edf8, 0x805ff94c, 0x805ee87c }, 0x2c|2, 0x2c|3 },
+ {{ 0x80600488, 0x8063ee24, 0x805ffc30, 0x805ee8a8 }, 0x174|2, 0x174|3 },
+ {{ 0x8060063c, 0x8063efd8, 0x805ffdcc, 0x805eea5c }, 0x120|2, 0x120|3 },
+ {{ 0x80600780, 0x8063f11c, 0x806dea44, 0x805eeba0 }, 0x4|3, 0x4|3 },
+ {{ 0x8060078c, 0x8063f128, 0x805fff28, 0x805eebac }, 0x354|2, 0x354|3 },
+ {{ 0x80600c40, 0x8063f5dc, 0x806d9d40, 0x805ef060 }, 0x4|3, 0x4|3 },
+ {{ 0x80600c44, 0x8063f5e0, 0x805be608, 0x805ef064 }, 0x4|3, 0x4|3 },
+ {{ 0x80600c68, 0x8063f604, 0x806003dc, 0x805ef088 }, 0xa8|1, 0xa8|1 },
+ {{ 0x80600d10, 0x8063f6ac, 0x80600484, 0x805ef130 }, 0x6c|0, 0x59c|1 },
+ {{ 0x806012ac, 0x805dc9cc, 0x80600a20, 0x805ef6cc }, 0x11b0|1, 0x11b0|1 },
+ {{ 0x8060245c, 0x805ddb7c, 0x80601bd0, 0x805f087c }, 0x158|0, 0x6898|1 },
+ {{ 0x80608d10, 0x805e443c, 0x80608484, 0x805f7130 }, 0x1290|1, 0x1290|1 },
+ {{ 0x80609fa0, 0x805e56cc, 0x80609714, 0x805f83c0 }, 0x98|0, 0x788|1 },
+ {{ 0x8060a728, 0x8063fc48, 0x80609e9c, 0x805f8b48 }, 0x70ac|2, 0x70ac|3 },
+ {{ 0x806117d4, 0x80609154, 0x80610f48, 0x805ffbf4 }, 0x8c|2, 0x8c|3 },
+ {{ 0x80611860, 0x805e5e4c, 0x80610fd4, 0x805ffc80 }, 0x4784|1, 0x4784|1 },
+ {{ 0x80615fe4, 0x805ea5d0, 0x80615758, 0x80604404 }, 0x4|0, 0x858|1 },
+ {{ 0x8061683c, 0x80646d84, 0x80615fb0, 0x80604c5c }, 0x45f4|2, 0x45f4|3 },
+ {{ 0x8061ae60, 0x806dc7dc, 0x8061a5d4, 0x80609280 }, 0x4|3, 0x4|3 },
+ {{ 0x8061ae68, 0x805eae2c, 0x8061a5dc, 0x80609288 }, 0x3a24|2, 0x3a24|3 },
+ {{ 0x8061e88c, 0x8061c8bc, 0x8061e000, 0x8060ccac }, 0x8|2, 0x8|3 },
+ {{ 0x8061e894, 0x8064b3b0, 0x8061e008, 0x8060ccb4 }, 0xe00|2, 0xe00|3 },
+ {{ 0x8061f694, 0x8061e898, 0x8061ee08, 0x8060dab4 }, 0x3c|2, 0x3c|3 },
+ {{ 0x8061f6d0, 0x80617bcc, 0x8061ee44, 0x8060daf0 }, 0x10|2, 0x10|3 },
+ {{ 0x8061f6e0, 0x805ee854, 0x8061ee54, 0x8060db00 }, 0x15e4|2, 0x15e4|3 },
+ {{ 0x80620cc4, 0x8069cdec, 0x806a08e0, 0x8068f61c }, 0x4|3, 0x4|3 },
+ {{ 0x80620cc8, 0x805efe3c, 0x8062043c, 0x8060f0e8 }, 0x64|2, 0x64|3 },
+ {{ 0x80620d44, 0x805c1d74, 0x805ce170, 0x805bc854 }, 0x4|3, 0x4|3 },
+ {{ 0x80620d7c, 0x805efec8, 0x806204c8, 0x8060f174 }, 0x17f4|1, 0x17f4|1 },
+ {{ 0x80622570, 0x805f16bc, 0x80621cbc, 0x80610968 }, 0x54d0|0, 0x129d4|1 },
+ {{ 0x80634f44, 0x806040ac, 0x80634690, 0x8062333c }, 0x2544|2, 0x2544|3 },
+ {{ 0x80637488, 0x805e0d14, 0x80636bd4, 0x80625880 }, 0x8|2, 0x8|3 },
+ {{ 0x80637490, 0x806066a0, 0x80636bdc, 0x80625888 }, 0x7c|2, 0x7c|3 },
+ {{ 0x80637510, 0x8064c200, 0x80636c5c, 0x80625908 }, 0x4dc|2, 0x4dc|3 },
+ {{ 0x80637a04, 0x8064c6f4, 0x80592240, 0x80580918 }, 0x4|3, 0x4|3 },
+ {{ 0x80637a18, 0x8064c708, 0x80701fa4, 0x806f0ce0 }, 0x8|2, 0x8|3 },
+ {{ 0x80637a30, 0x805c5a8c, 0x805d2484, 0x805c0d44 }, 0x4|3, 0x4|3 },
+ {{ 0x80637a80, 0x8064c748, 0x8063716c, 0x80625e18 }, 0x40|2, 0x40|3 },
+ {{ 0x80637ac0, 0x80606720, 0x806371ac, 0x80625e58 }, 0x3740|1, 0x3740|1 },
+ {{ 0x8063b200, 0x80609e60, 0x8063a8ec, 0x80629598 }, 0x4|0, 0xad8|1 },
+ {{ 0x8063bcdc, 0x806d56d0, 0x806e5d80, 0x806d4abc }, 0x4|3, 0x4|3 },
+ {{ 0x8063bce0, 0x805e2e38, 0x80606e8c, 0x805f5b38 }, 0x14|2, 0x14|3 },
+ {{ 0x8063bcf4, 0x806d56e8, 0x806e5d98, 0x806d4ad4 }, 0x18|2, 0x18|3 },
+ {{ 0x8063bd18, 0x805ece08, 0x8061c5b8, 0x8060b264 }, 0x8|2, 0x8|3 },
+ {{ 0x8063bd48, 0x80724cb8, 0x8072b510, 0x8071a24c }, 0x8|2, 0x8|3 },
+ {{ 0x8063bd50, 0x8070599c, 0x8070b9ac, 0x806fa6e8 }, 0x8|2, 0x8|3 },
+ {{ 0x8063bd6c, 0x80655050, 0x80658b44, 0x806477f0 }, 0x4|3, 0x4|3 },
+ {{ 0x8063bd98, 0x80655050, 0x80658b44, 0x806477f0 }, 0x4|3, 0x4|3 },
+ {{ 0x8063bda8, 0x8060a9c8, 0x8063b454, 0x8062a100 }, 0x4|3, 0x4|3 },
+ {{ 0x8063bdc0, 0x807059a0, 0x8070b9b0, 0x806fa6ec }, 0x4|3, 0x4|3 },
+ {{ 0x8063bdd8, 0x8060a9bc, 0x8063b448, 0x8062a0f4 }, 0x4|3, 0x4|3 },
+ {{ 0x8063be04, 0x80655050, 0x80658b44, 0x806477f0 }, 0x4|3, 0x4|3 },
+ {{ 0x8063be10, 0x8055be04, 0x8055fb04, 0x8054e1dc }, 0x4|3, 0x4|3 },
+ {{ 0x8063be14, 0x8060a9f8, 0x8063b484, 0x8062a130 }, 0x8|2, 0x8|3 },
+ {{ 0x8063be1c, 0x806d0118, 0x806e0434, 0x806cf170 }, 0x8|2, 0x8|3 },
+ {{ 0x8063be2c, 0x8060aa0c, 0x8063b498, 0x8062a144 }, 0x1f88|1, 0x1f88|1 },
+ {{ 0x8063ddb4, 0x8060c994, 0x8063d420, 0x8062c0cc }, 0x6588|0, 0x75a4|1 },
+ {{ 0x80645360, 0x80609168, 0x806449cc, 0x80633678 }, 0x80|2, 0x80|3 },
+ {{ 0x806453e0, 0x8064c788, 0x80644a4c, 0x806336f8 }, 0xcd8|1, 0xcd8|1 },
+ {{ 0x806460b8, 0x8064d460, 0x80645724, 0x806343d0 }, 0x4|0, 0x6f8|1 },
+ {{ 0x806467bc, 0x80631130, 0x80645e28, 0x80634ad4 }, 0x8|2, 0x8|3 },
+ {{ 0x806467c4, 0x8061c8b8, 0x80645e30, 0x80634adc }, 0x4|3, 0x4|3 },
+ {{ 0x806467c8, 0x80613fb8, 0x80645e34, 0x80634ae0 }, 0x3c0c|2, 0x3c0c|3 },
+ {{ 0x8064a3d4, 0x8063be94, 0x80649a40, 0x806386ec }, 0x14|2, 0x14|3 },
+ {{ 0x8064a3e8, 0x80725270, 0x80649a54, 0x80638700 }, 0x4|3, 0x4|3 },
+ {{ 0x8064a3ec, 0x8064db74, 0x80649a58, 0x80638704 }, 0x70c|1, 0x70c|1 },
+ {{ 0x8064aaf8, 0x8064e280, 0x8064a164, 0x80638e10 }, 0x4|0, 0x3b4|1 },
+ {{ 0x8064aec8, 0x8061e8bc, 0x8064a534, 0x806391e0 }, 0x18|2, 0x18|3 },
+ {{ 0x8064aee0, 0x80617bcc, 0x8064a54c, 0x806391f8 }, 0xa30|1, 0xa30|1 },
+ {{ 0x8064b910, 0x806185fc, 0x8064af7c, 0x80639c28 }, 0x5a68|0, 0x629c|1 },
+ {{ 0x80651bb4, 0x806253d8, 0x80651220, 0x8063fecc }, 0x1c|2, 0x1c|3 },
+ {{ 0x80651bd0, 0x8064e650, 0x8065123c, 0x8063fee8 }, 0x6f0|2, 0x6f0|3 },
+ {{ 0x806522c0, 0x805bf784, 0x8065192c, 0x806405d8 }, 0x14|2, 0x14|3 },
+ {{ 0x806522f4, 0x806380e0, 0x80651960, 0x8064060c }, 0x4|3, 0x4|3 },
+ {{ 0x806522f8, 0x8061e8e4, 0x80651964, 0x80640610 }, 0xf0c|2, 0xf0c|3 },
+ {{ 0x80653204, 0x8064ed7c, 0x80652870, 0x8064151c }, 0x1cbc|1, 0x1cbc|1 },
+ {{ 0x80654ec0, 0x80650a38, 0x8065452c, 0x806431d8 }, 0x5fb4|0, 0x6488|1 },
+ {{ 0x8065b34c, 0x8065cbd8, 0x8065a9b8, 0x80649664 }, 0x16c|2, 0x16c|3 },
+ {{ 0x8065b4b8, 0x805d3504, 0x8065ab24, 0x806497d0 }, 0x24|2, 0x24|3 },
+ {{ 0x8065b4e0, 0x80656ec4, 0x8065ab4c, 0x806497f8 }, 0xc08|2, 0xc08|3 },
+ {{ 0x8065c0ec, 0x8065cd74, 0x8065b758, 0x8064a404 }, 0x38d0|2, 0x38d0|3 },
+ {{ 0x8065f9bc, 0x8073ca70, 0x8065f028, 0x8064dcd4 }, 0xc|2, 0xc|3 },
+ {{ 0x8065fa4c, 0x80657ad0, 0x8065f0b8, 0x8064dd64 }, 0x3f4|2, 0x3f4|3 },
+ {{ 0x8065fe40, 0x80657f04, 0x8065f4ac, 0x8064e158 }, 0x4c|1, 0x4c|1 },
+ {{ 0x8065fe8c, 0x80657f50, 0x8065f4f8, 0x8064e1a4 }, 0x1f98|0, 0x28e0|1 },
+ {{ 0x8066276c, 0x8071413c, 0x80661dd8, 0x80650a84 }, 0x8|2, 0x8|3 },
+ {{ 0x80662774, 0x80660690, 0x80661de0, 0x80650a8c }, 0xa04|2, 0xa04|3 },
+ {{ 0x80663178, 0x8065a820, 0x806627e4, 0x80651490 }, 0xc|2, 0x18|3 },
+ {{ 0x80663190, 0x8065a838, 0x806627fc, 0x806514a8 }, 0xc44|1, 0xc44|1 },
+ {{ 0x80663dd4, 0x8065b47c, 0x80663440, 0x806520ec }, 0x14e0|0, 0x16d8|1 },
+ {{ 0x806654ac, 0x8065ca9c, 0x80664b18, 0x806537c4 }, 0x78|2, 0x78|3 },
+ {{ 0x8066552c, 0x8067317c, 0x80664b98, 0x80653844 }, 0x2cb8|2, 0x2cb8|3 },
+ {{ 0x806681e4, 0x80675e34, 0x80667850, 0x805af934 }, 0x4|3, 0x4|3 },
+ {{ 0x806681e8, 0x80675e38, 0x80667854, 0x80656500 }, 0x8|2, 0x8|3 },
+ {{ 0x80668274, 0x80675ec4, 0x806678e0, 0x8065ee28 }, 0x4|3, 0x4|3 },
+ {{ 0x80668310, 0x80675f60, 0x8066797c, 0x8063e918 }, 0x8|2, 0x8|3 },
+ {{ 0x8066832c, 0x80675f7c, 0x80667998, 0x80656678 }, 0x4|3, 0x4|3 },
+ {{ 0x80668330, 0x80675f80, 0x8066799c, 0x80656688 }, 0x4dc|2, 0x4dc|3 },
+ {{ 0x80668810, 0x806610ac, 0x80667e7c, 0x80656b68 }, 0x167c|1, 0x167c|1 },
+ {{ 0x80669e8c, 0x80662728, 0x806694f8, 0x806581e4 }, 0x2460|0, 0xb5c4|1 },
+ {{ 0x8067549c, 0x8066dd38, 0x80674b08, 0x806637fc }, 0x4|3, 0x4|3 },
+ {{ 0x806754a0, 0x8066dd3c, 0x80674b0c, 0x806637e0 }, 0xc|2, 0xc|3 },
+ {{ 0x806754ac, 0x8066dd48, 0x80674b18, 0x8066380c }, 0x4|3, 0x4|3 },
+ {{ 0x806754b0, 0x8066dd4c, 0x80674b1c, 0x806637f0 }, 0xc|2, 0xc|3 },
+ {{ 0x806754bc, 0x8066dd58, 0x80674b28, 0x8066381c }, 0x24|2, 0x24|3 },
+ {{ 0x806754e0, 0x8066dd7c, 0x80674b4c, 0x80663820 }, 0xc|2, 0xc|3 },
+ {{ 0x806754ec, 0x8066dd88, 0x80674b58, 0x8066384c }, 0x4|3, 0x4|3 },
+ {{ 0x806754f0, 0x8066dd8c, 0x80674b5c, 0x80663830 }, 0xc|2, 0xc|3 },
+ {{ 0x806754fc, 0x8066dd98, 0x80674b68, 0x8066385c }, 0x4|3, 0x4|3 },
+ {{ 0x80675500, 0x8066dd9c, 0x80674b6c, 0x80663840 }, 0xc|2, 0xc|3 },
+ {{ 0x8067550c, 0x8066dda8, 0x80674b78, 0x8066386c }, 0x2a0|2, 0x2a0|3 },
+ {{ 0x806757ac, 0x8066e048, 0x80674e18, 0x80663aec }, 0xc|2, 0xc|3 },
+ {{ 0x806757b8, 0x8066e054, 0x80674e24, 0x80663b18 }, 0x4|3, 0x4|3 },
+ {{ 0x806757bc, 0x8066e058, 0x80674e28, 0x80663afc }, 0x8|2, 0x8|3 },
+ {{ 0x806757c4, 0x8066e060, 0x80674e30, 0x80663b24 }, 0x8|2, 0x8|3 },
+ {{ 0x806757cc, 0x8066e068, 0x80674e38, 0x80663b0c }, 0xc|2, 0xc|3 },
+ {{ 0x806757d8, 0x8066e074, 0x80674e44, 0x80663b38 }, 0x4|3, 0x4|3 },
+ {{ 0x806757dc, 0x8066e078, 0x80674e48, 0x80663b1c }, 0xc|2, 0xc|3 },
+ {{ 0x806757e8, 0x8066e084, 0x80674e54, 0x80663b48 }, 0x4|3, 0x4|3 },
+ {{ 0x806757ec, 0x8066e088, 0x80674e58, 0x80663b2c }, 0xc|2, 0xc|3 },
+ {{ 0x806757f8, 0x8066e094, 0x80674e64, 0x80663b58 }, 0x4|3, 0x4|3 },
+ {{ 0x806757fc, 0x8066e098, 0x80674e68, 0x80663b3c }, 0xc|2, 0xc|3 },
+ {{ 0x80675808, 0x8066e0a4, 0x80674e74, 0x80663b68 }, 0x6a8|2, 0x6a8|3 },
+ {{ 0x80675eb0, 0x8066e74c, 0x8067551c, 0x80663b4c }, 0xc|2, 0xc|3 },
+ {{ 0x80675ebc, 0x8066e758, 0x80675528, 0x8066421c }, 0x4|3, 0x4|3 },
+ {{ 0x80675ec0, 0x8066e75c, 0x8067552c, 0x80663b5c }, 0xc|2, 0xc|3 },
+ {{ 0x80675ecc, 0x8066e768, 0x80675538, 0x8066422c }, 0x4|3, 0x4|3 },
+ {{ 0x80675ed0, 0x8066e76c, 0x8067553c, 0x80664210 }, 0xc|2, 0xc|3 },
+ {{ 0x80675edc, 0x8066e778, 0x80675548, 0x8066423c }, 0x4|3, 0x4|3 },
+ {{ 0x80675ee0, 0x8066e77c, 0x8067554c, 0x80664220 }, 0xc|2, 0xc|3 },
+ {{ 0x80675eec, 0x8066e788, 0x80675558, 0x8066424c }, 0x4|3, 0x4|3 },
+ {{ 0x80675ef0, 0x8066e78c, 0x8067555c, 0x80664230 }, 0xc|2, 0xc|3 },
+ {{ 0x80675efc, 0x8066e798, 0x80675568, 0x8066425c }, 0x4|3, 0x4|3 },
+ {{ 0x80675f00, 0x8066e79c, 0x8067556c, 0x80664240 }, 0xc|2, 0xc|3 },
+ {{ 0x80675f0c, 0x8066e7a8, 0x80675578, 0x8066426c }, 0x4|3, 0x4|3 },
+ {{ 0x80675f10, 0x8066e7ac, 0x8067557c, 0x80664250 }, 0xc|2, 0xc|3 },
+ {{ 0x80675f1c, 0x8066e7b8, 0x80675588, 0x8066427c }, 0x4|3, 0x4|3 },
+ {{ 0x80675f20, 0x8066e7bc, 0x8067558c, 0x80664260 }, 0xc|2, 0xc|3 },
+ {{ 0x80675f2c, 0x8066e7c8, 0x80675598, 0x8066428c }, 0x12c0|2, 0x12c0|3 },
+ {{ 0x806771ec, 0x8066fa88, 0x80676858, 0x806482a8 }, 0x4|3, 0x4|3 },
+ {{ 0x806771f4, 0x8066fa90, 0x80676860, 0x8066559c }, 0x1e2c|2, 0x1e2c|3 },
+ {{ 0x80679068, 0x80676460, 0x806786d4, 0x80667410 }, 0x300|2, 0x300|3 },
+ {{ 0x80679380, 0x80671908, 0x806789ec, 0x80667728 }, 0x186c|2, 0x186c|3 },
+ {{ 0x8067abf0, 0x805812fc, 0x8067a25c, 0x80668f98 }, 0xc|2, 0xc|3 },
+ {{ 0x8067abfc, 0x805ca84c, 0x8067a268, 0x80668fa4 }, 0x4|3, 0x4|3 },
+ {{ 0x8067ac00, 0x80676778, 0x8067a26c, 0x80668fa8 }, 0x8bb8|2, 0x8bb8|3 },
+ {{ 0x806837b8, 0x8067e554, 0x80682048, 0x80670d84 }, 0xddc|2, 0xddc|3 },
+ {{ 0x80684594, 0x8067e554, 0x80682048, 0x80670d84 }, 0x8cc|2, 0x8cc|3 },
+ {{ 0x80684e60, 0x806809d8, 0x806844cc, 0x80673208 }, 0x3a664|2, 0x3a664|3 },
+ {{ 0x806bf4c8, 0x806e20a8, 0x806beb34, 0x806ad870 }, 0x5f0|2, 0x5f0|3 },
+ {{ 0x806bfac0, 0x80761dc8, 0x806bf12c, 0x806ade68 }, 0xc|2, 0xc|3 },
+ {{ 0x806bfb00, 0x80762de4, 0x806bf16c, 0x806adea8 }, 0x14|2, 0x14|3 },
+ {{ 0x806bfb14, 0x806bb040, 0x806bf180, 0x806adebc }, 0x9ec|2, 0x9ec|3 },
+ {{ 0x806c0504, 0x806e26ec, 0x806bfb70, 0x806ae8ac }, 0x3098|2, 0x3098|3 },
+ {{ 0x806c359c, 0x8073cc4c, 0x806c2c08, 0x806b1944 }, 0x4|3, 0x4|3 },
+ {{ 0x806c35a8, 0x806bba38, 0x806c2c14, 0x806b1950 }, 0x4e0|2, 0x4e0|3 },
+ {{ 0x806c3a8c, 0x806bbdbc, 0x806c30f8, 0x806b1e34 }, 0x8|2, 0x8|3 },
+ {{ 0x806c3a98, 0x806d1b48, 0x806c3104, 0x806b1e40 }, 0x8|2, 0x8|3 },
+ {{ 0x806c3aa4, 0x806e5790, 0x806c3110, 0x806b1e4c }, 0x13dc|2, 0x13dc|3 },
+ {{ 0x806c4ecc, 0x806bbf2c, 0x806c4538, 0x806b3274 }, 0x1c|2, 0x1c|3 },
+ {{ 0x806c4eec, 0x806e6bbc, 0x806c4558, 0x806b3294 }, 0x1484|2, 0x1484|3 },
+ {{ 0x806c63a4, 0x806d92dc, 0x806c5a10, 0x806b474c }, 0x4|3, 0x4|3 },
+ {{ 0x806c63ac, 0x806e8074, 0x806c5a18, 0x806b4754 }, 0x76c|2, 0x76c|3 },
+ {{ 0x806c6b18, 0x806e4c48, 0x806c6184, 0x806b4ec0 }, 0x8|2, 0x8|3 },
+ {{ 0x806c6b20, 0x8075a86c, 0x806c618c, 0x806b4ec8 }, 0x14|2, 0x14|3 },
+ {{ 0x806c6b40, 0x806bbf4c, 0x806c61ac, 0x806b4ee8 }, 0x6348|2, 0x6348|3 },
+ {{ 0x806cce88, 0x806e658c, 0x806cc4f4, 0x806bb230 }, 0x4|3, 0x4|3 },
+ {{ 0x806cce90, 0x806e880c, 0x806cc4fc, 0x806bb238 }, 0x9b8|2, 0x9b8|3 },
+ {{ 0x806cd848, 0x806e91c4, 0x806ec9f8, 0x806bbbf0 }, 0x4|3, 0x4|3 },
+ {{ 0x806cd84c, 0x806e91c8, 0x806cceb8, 0x806bbbf4 }, 0xda8|2, 0xda8|3 },
+ {{ 0x806ce5f4, 0x806e9f70, 0x806ef0b4, 0x806bc99c }, 0x4|3, 0x4|3 },
+ {{ 0x806ce5f8, 0x806e9f74, 0x806cdc64, 0x806bc9a0 }, 0x21c|2, 0x21c|3 },
+ {{ 0x806ce814, 0x806ede54, 0x806cde80, 0x806bcbbc }, 0x8|2, 0x8|3 },
+ {{ 0x806ce81c, 0x806b327c, 0x806cde88, 0x806bcbc4 }, 0x4|3, 0x4|3 },
+ {{ 0x806ce820, 0x806c2294, 0x806cde8c, 0x806bcbc8 }, 0xccc|2, 0xccc|3 },
+ {{ 0x806cf4ec, 0x807774ac, 0x806ceb58, 0x806bd894 }, 0x4|3, 0x4|3 },
+ {{ 0x806cf4f0, 0x806c2f64, 0x806ceb5c, 0x806bd898 }, 0x258|2, 0x258|3 },
+ {{ 0x806cf748, 0x807774ac, 0x806cedb4, 0x806bdaf0 }, 0x4|3, 0x4|3 },
+ {{ 0x806cf74c, 0x806c31c0, 0x806cedb8, 0x806bdaf4 }, 0x680|2, 0x680|3 },
+ {{ 0x806cfdcc, 0x807774ac, 0x806cf438, 0x806be174 }, 0x4|3, 0x4|3 },
+ {{ 0x806cfdd0, 0x806c3844, 0x806cf43c, 0x806be178 }, 0x4e0|2, 0x4e0|3 },
+ {{ 0x806d02b0, 0x806ea190, 0x806cf91c, 0x806be658 }, 0x60c|2, 0x60c|3 },
+ {{ 0x806d08bc, 0x80777d3c, 0x806cff28, 0x806bec64 }, 0x4|3, 0x4|3 },
+ {{ 0x806d08c0, 0x806ea7a0, 0x806cff2c, 0x806bec68 }, 0x2020|2, 0x2020|3 },
+ {{ 0x806d28fc, 0x806c1e14, 0x806d1f68, 0x806c0ca4 }, 0x4|3, 0x4|3 },
+ {{ 0x806d2900, 0x807c3790, 0x806d1f6c, 0x806c0ca8 }, 0x4|3, 0x4|3 },
+ {{ 0x806d2908, 0x806c3d38, 0x806d1f74, 0x806c0cb0 }, 0x84|2, 0x84|3 },
+ {{ 0x806d298c, 0x80658b30, 0x806600d8, 0x8064ed84 }, 0x4|3, 0x4|3 },
+ {{ 0x806d2990, 0x806c3dc0, 0x806d1ffc, 0x806c0d38 }, 0x32c8|2, 0x32c8|3 },
+ {{ 0x806d5c58, 0x806ec7cc, 0x806d52c4, 0x806c4000 }, 0x26c|2, 0x26c|3 },
+ {{ 0x806d5ed4, 0x806c7094, 0x806d5540, 0x806c427c }, 0x934|2, 0x934|3 },
+ {{ 0x806d6808, 0x805f7c90, 0x80628290, 0x80616f3c }, 0x4|3, 0x4|3 },
+ {{ 0x806d680c, 0x806c79cc, 0x806d5e78, 0x806c4bb4 }, 0x20|2, 0x20|3 },
+ {{ 0x806d682c, 0x805f7c90, 0x80628290, 0x80616f3c }, 0x4|3, 0x4|3 },
+ {{ 0x806d6830, 0x806c79f0, 0x806d5e9c, 0x806c4bd8 }, 0x20|2, 0x20|3 },
+ {{ 0x806d6850, 0x805f7c90, 0x80628290, 0x80616f3c }, 0x4|3, 0x4|3 },
+ {{ 0x806d6854, 0x806c7a14, 0x806d5ec0, 0x806c4bfc }, 0x192c|2, 0x192c|3 },
+ {{ 0x806d8180, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 },
+ {{ 0x806d8184, 0x806c9344, 0x806d77f0, 0x806c652c }, 0xac4|2, 0xac4|3 },
+ {{ 0x806d8c48, 0x806ccbc8, 0x806db8e4, 0x806ca620 }, 0x4|3, 0x4|3 },
+ {{ 0x806d8c4c, 0x806c9e0c, 0x806d82b8, 0x806c6ff4 }, 0xa0|2, 0xa0|3 },
+ {{ 0x806d8cec, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 },
+ {{ 0x806d8cf0, 0x806c9eb0, 0x806d835c, 0x806c7098 }, 0xf24|2, 0xf24|3 },
+ {{ 0x806d9c14, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 },
+ {{ 0x806d9c18, 0x806cadd8, 0x806d9284, 0x806c7fc0 }, 0xd0|2, 0xd0|3 },
+ {{ 0x806d9ce8, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 },
+ {{ 0x806d9cec, 0x806caeac, 0x806d9358, 0x806c8094 }, 0xbc8|2, 0xbc8|3 },
+ {{ 0x806da8b4, 0x806d850c, 0x806d9f20, 0x806c8c5c }, 0x54|2, 0x54|3 },
+ {{ 0x806da908, 0x806cdc1c, 0x806d9f74, 0x806c8cb0 }, 0x8|2, 0x8|3 },
+ {{ 0x806da910, 0x806e4d54, 0x806d9f7c, 0x806c8cb8 }, 0x4|3, 0x4|3 },
+ {{ 0x806da914, 0x806eca58, 0x806d9f80, 0x806c8cbc }, 0x85c|2, 0x85c|3 },
+ {{ 0x806db174, 0x806d5b28, 0x806da7e0, 0x806c951c }, 0xc|2, 0xc|3 },
+ {{ 0x806db184, 0x806cbad4, 0x806da7f0, 0x806c952c }, 0x1858|0, 0x28e8|1 },
+ {{ 0x806dda7c, 0x806e4434, 0x806dd0e8, 0x806cbe24 }, 0x4|3, 0x4|3 },
+ {{ 0x806dda80, 0x806ed2c4, 0x806dd0ec, 0x806cbe28 }, 0x10a4|2, 0x10a4|3 },
+ {{ 0x806deb3c, 0x806ce3d0, 0x806de1a8, 0x806ccee4 }, 0xc70|2, 0xc70|3 },
+ {{ 0x806df7bc, 0x8076308c, 0x806dee28, 0x806cdb64 }, 0x4|3, 0x4|3 },
+ {{ 0x806df7c4, 0x806ec7dc, 0x806dee30, 0x806cdb6c }, 0x8|2, 0x8|3 },
+ {{ 0x806df7cc, 0x806ee380, 0x806dee38, 0x806cdb74 }, 0x53c|2, 0x53c|3 },
+ {{ 0x806dfd08, 0x806cf058, 0x806df374, 0x806ce0b0 }, 0x3d70|2, 0x3d70|3 },
+ {{ 0x806e3a78, 0x806e6580, 0x806e30e4, 0x806d1e20 }, 0x10|2, 0x10|3 },
+ {{ 0x806e3a8c, 0x806ee8c8, 0x806e30f8, 0x806d1e34 }, 0x348|2, 0x348|3 },
+ {{ 0x806e3e20, 0x806d2ddc, 0x806e348c, 0x806d21c8 }, 0x5784|2, 0x5784|3 },
+ {{ 0x806e95a4, 0x806cdc1c, 0x806e8c10, 0x806d794c }, 0x8|2, 0x8|3 },
+ {{ 0x806e95b0, 0x806eec5c, 0x806e8c1c, 0x806d7958 }, 0x31f8|2, 0x31f8|3 },
+ {{ 0x806ec7a8, 0x806e6574, 0x806ebe14, 0x806dab50 }, 0x14|2, 0x14|3 },
+ {{ 0x806ec7bc, 0x806d8560, 0x806ebe28, 0x806dab64 }, 0xd70|2, 0xd70|3 },
+ {{ 0x806ed538, 0x806d92e4, 0x806ecba4, 0x806db8e0 }, 0x8d94|2, 0x8d94|3 },
+ {{ 0x806f62fc, 0x806f1e74, 0x806f5968, 0x806e46a4 }, 0x138c|2, 0x138c|3 },
+ {{ 0x806f7694, 0x8071399c, 0x806f6d00, 0x806e5a3c }, 0xa8|2, 0xa8|3 },
+ {{ 0x806f773c, 0x806f38e0, 0x806f6da8, 0x806e5ae4 }, 0x40|2, 0x40|3 },
+ {{ 0x806f77c0, 0x80713a74, 0x806f6e2c, 0x806e5b68 }, 0x260|2, 0x260|3 },
+ {{ 0x806f7a20, 0x80713f0c, 0x806f708c, 0x806e5dc8 }, 0x8|2, 0x8|3 },
+ {{ 0x806f7a3c, 0x806f5428, 0x806f70a8, 0x806e5de4 }, 0x4|3, 0x4|3 },
+ {{ 0x806f7a40, 0x806f5768, 0x806f70ac, 0x806e5de8 }, 0x8|2, 0x8|3 },
+ {{ 0x806f7a74, 0x806d8a30, 0x806f70e0, 0x806e5e1c }, 0x4|3, 0x4|3 },
+ {{ 0x806f7a90, 0x80713cf0, 0x806f70fc, 0x806e5e38 }, 0x8|2, 0x8|3 },
+ {{ 0x806f7a98, 0x80713acc, 0x806f7104, 0x806e5e40 }, 0xc|2, 0xc|3 },
+ {{ 0x806f7aa4, 0x80713d04, 0x806f7110, 0x806e5e4c }, 0x774|2, 0x774|3 },
+ {{ 0x806f8218, 0x806f3208, 0x806f7884, 0x806e65c0 }, 0x600|2, 0x600|3 },
+ {{ 0x806f8818, 0x806f9628, 0x806f7e84, 0x806e6bc0 }, 0x8|2, 0x8|3 },
+ {{ 0x806f8820, 0x806f3810, 0x806f7e8c, 0x806e6bc8 }, 0xcc|2, 0xcc|3 },
+ {{ 0x806f8920, 0x806f3964, 0x806f7f8c, 0x806e6cc8 }, 0x1ab8|2, 0x1ab8|3 },
+ {{ 0x806fa3d8, 0x80648488, 0x806f9a44, 0x806e8780 }, 0x4|3, 0x4|3 },
+ {{ 0x806fa3e4, 0x806f547c, 0x806f9a50, 0x806e878c }, 0x3e2c|2, 0x3e2c|3 },
+ {{ 0x806fe214, 0x8074d468, 0x806fd880, 0x806ec5bc }, 0x8|2, 0x8|3 },
+ {{ 0x806fe228, 0x806f9318, 0x806fd894, 0x806ec5d0 }, 0x790|2, 0x790|3 },
+ {{ 0x806fe9dc, 0x8071447c, 0x806fe048, 0x806ecd84 }, 0x1b0|2, 0x1bc|3 },
+ {{ 0x806feb98, 0x80714638, 0x806fe204, 0x806ecf40 }, 0x1604|3, 0x1604|3 },
+ {{ 0x8070019c, 0x8070ff18, 0x806ff808, 0x806ee544 }, 0x64|2, 0x64|3 },
+ {{ 0x8070022c, 0x806dc7f4, 0x806ff898, 0x806ee5d4 }, 0x4|3, 0x4|3 },
+ {{ 0x80700230, 0x80715c44, 0x806ff89c, 0x806ee5d8 }, 0x24|2, 0x30|3 },
+ {{ 0x80700260, 0x80715c74, 0x806ff8cc, 0x806ee608 }, 0x20c|3, 0x20c|3 },
+ {{ 0x8070046c, 0x806f9ac8, 0x806ffad8, 0x806ee814 }, 0xe300|2, 0xe300|3 },
+ {{ 0x8070e7b8, 0x80715e88, 0x8070de24, 0x806fcb60 }, 0x10ec|2, 0x10ec|3 },
+ {{ 0x8070f8b8, 0x80707e14, 0x8070ef24, 0x806fdc60 }, 0x940|1, 0x940|1 },
+ {{ 0x807101f8, 0x80708754, 0x8070f864, 0x806fe5a0 }, 0x834|0, 0x77b0|1 },
+ {{ 0x807179c4, 0x8070ffac, 0x80717030, 0x80705d6c }, 0x46c|2, 0x46c|3 },
+ {{ 0x80717e30, 0x80716f84, 0x8071749c, 0x807061d8 }, 0x4b0|2, 0x4b0|3 },
+ {{ 0x807182e0, 0x80716590, 0x8071794c, 0x80706688 }, 0x4|3, 0x4|3 },
+ {{ 0x807182e8, 0x8071041c, 0x80717954, 0x80706690 }, 0x3558|2, 0x3558|3 },
+ {{ 0x8071b85c, 0x806ed60c, 0x8071aec8, 0x80709c04 }, 0x4|3, 0x4|3 },
+ {{ 0x8071b86c, 0x8071743c, 0x8071aed8, 0x80709c14 }, 0x84e4|1, 0x84e4|1 },
+ {{ 0x80723d50, 0x8071f920, 0x807233bc, 0x807120f8 }, 0x4|0, 0x2820|1 },
+ {{ 0x80726570, 0x8073c5d8, 0x80725bdc, 0x80714918 }, 0x1c8c|2, 0x1c8c|3 },
+ {{ 0x80728218, 0x8073e270, 0x80727884, 0x807165c0 }, 0x398|2, 0x398|3 },
+ {{ 0x807285b4, 0x80745450, 0x80727c20, 0x8071695c }, 0x4|3, 0x4|3 },
+ {{ 0x807285c4, 0x80721178, 0x80727c30, 0x8071696c }, 0x4|3, 0x4|3 },
+ {{ 0x807285c8, 0x8073e61c, 0x80727c34, 0x80716970 }, 0xd54|2, 0xd54|3 },
+ {{ 0x8072931c, 0x808227a8, 0x80728988, 0x807176c4 }, 0x4|3, 0x4|3 },
+ {{ 0x8072932c, 0x80724754, 0x80728998, 0x807176d4 }, 0x8|2, 0x8|3 },
+ {{ 0x8072933c, 0x8073f388, 0x807289a8, 0x807176e4 }, 0x8|2, 0x8|3 },
+ {{ 0x8072934c, 0x80722140, 0x807289b8, 0x807176f4 }, 0x820|2, 0x820|3 },
+ {{ 0x80729b84, 0x80722980, 0x807291f0, 0x80717f2c }, 0xcfc|2, 0xcfc|3 },
+ {{ 0x8072a890, 0x80723694, 0x80729efc, 0x80718c38 }, 0x10b8|2, 0x10b8|3 },
+ {{ 0x8072b954, 0x80724768, 0x8072afc0, 0x80719cfc }, 0x2508|2, 0x2508|3 },
+ {{ 0x8072de64, 0x80726c7c, 0x8072d4d0, 0x8071c20c }, 0xa8|2, 0xa8|3 },
+ {{ 0x8072df0c, 0x8073d72c, 0x8072d578, 0x8071c2b4 }, 0xb0|2, 0xb0|3 },
+ {{ 0x8072dfcc, 0x8073f390, 0x8072d638, 0x8071c374 }, 0x1f78|2, 0x1f78|3 },
+ {{ 0x8072ff5c, 0x807276cc, 0x8072f5c8, 0x8071e304 }, 0x10|2, 0x10|3 },
+ {{ 0x8072ff74, 0x80741320, 0x8072f5e0, 0x8071e31c }, 0x1fc|2, 0x1fc|3 },
+ {{ 0x80730178, 0x8071dd74, 0x8072f7e4, 0x8071e520 }, 0x4|3, 0x4|3 },
+ {{ 0x8073017c, 0x807f8418, 0x8072f7e8, 0x8071e524 }, 0x8|2, 0x8|3 },
+ {{ 0x80730184, 0x80726dd4, 0x8072f7f0, 0x8071e52c }, 0x8e0|2, 0x8e0|3 },
+ {{ 0x80730a68, 0x80721168, 0x807300d4, 0x8071ee10 }, 0x14|2, 0x14|3 },
+ {{ 0x80730a7c, 0x8073385c, 0x807300e8, 0x8071ee24 }, 0xb8|2, 0xb8|3 },
+ {{ 0x80730b34, 0x80741538, 0x807301a0, 0x8071eedc }, 0xe08|2, 0xe08|3 },
+ {{ 0x80731944, 0x807e78e0, 0x80730fb0, 0x8071fcec }, 0x4|3, 0x4|3 },
+ {{ 0x8073194c, 0x80727794, 0x80730fb8, 0x8071fcf4 }, 0x3fe0|2, 0x3fe0|3 },
+ {{ 0x80735934, 0x80742350, 0x80734fa0, 0x80723cdc }, 0x33b8|2, 0x33b8|3 },
+ {{ 0x80738cec, 0x80741328, 0x80738358, 0x80727094 }, 0x8|2, 0x8|3 },
+ {{ 0x80738da4, 0x8072b77c, 0x80738410, 0x8072714c }, 0x37a4|2, 0x37a4|3 },
+ {{ 0x8073c548, 0x807457d0, 0x8073bbb4, 0x8072a8f0 }, 0x2898|2, 0x2898|3 },
+ {{ 0x8073edec, 0x8072ef20, 0x8073e458, 0x8072d194 }, 0x3d8c|2, 0x3d8c|3 },
+ {{ 0x80742b78, 0x80732cac, 0x807421e4, 0x80730f18 }, 0x4|3, 0x4|3 },
+ {{ 0x80742b88, 0x80732cbc, 0x807421f4, 0x807289f8 }, 0x4|3, 0x4|3 },
+ {{ 0x80742b94, 0x80732cc8, 0x80742200, 0x80730f54 }, 0x28c|2, 0x28c|3 },
+ {{ 0x80742e20, 0x80732f54, 0x8074248c, 0x807311cc }, 0x4|3, 0x4|3 },
+ {{ 0x80742e24, 0x80732f58, 0x80742490, 0x807311e4 }, 0x10|2, 0x10|3 },
+ {{ 0x80742e34, 0x80732f68, 0x807424a0, 0x807311e0 }, 0x4|3, 0x4|3 },
+ {{ 0x80742e38, 0x80732f6c, 0x807424a4, 0x807311f8 }, 0x304|2, 0x304|3 },
+ {{ 0x8074313c, 0x80733270, 0x807427a8, 0x80731510 }, 0x4|3, 0x4|3 },
+ {{ 0x80743140, 0x80733274, 0x807427ac, 0x80731500 }, 0x10|2, 0x10|3 },
+ {{ 0x80743150, 0x80733284, 0x807427bc, 0x807314d4 }, 0x4|3, 0x4|3 },
+ {{ 0x80743154, 0x80733288, 0x807427c0, 0x80731514 }, 0x9310|2, 0x9310|3 },
+ {{ 0x8074c4a4, 0x80769350, 0x8074bb10, 0x8073a864 }, 0x4|3, 0x4|3 },
+ {{ 0x8074c4a8, 0x8076ceac, 0x8074bb14, 0x8073a868 }, 0x454|1, 0x454|1 },
+ {{ 0x8074c8fc, 0x8076d300, 0x8074bf68, 0x8073acbc }, 0x4|0, 0xc90|1 },
+ {{ 0x8074d5b8, 0x80748078, 0x8074cc24, 0x8073b978 }, 0x440c|2, 0x440c|3 },
+ {{ 0x807519c4, 0x80759e3c, 0x80751030, 0x8073fd84 }, 0x4|3, 0x4|3 },
+ {{ 0x807519c8, 0x8076dfbc, 0x80751034, 0x8073fd88 }, 0x2568|2, 0x2568|3 },
+ {{ 0x80753f30, 0x8077ac78, 0x8075359c, 0x807422f0 }, 0x38|2, 0x38|3 },
+ {{ 0x80753f68, 0x8075c35c, 0x807535d4, 0x80742328 }, 0x198|2, 0x198|3 },
+ {{ 0x80754100, 0x8074c484, 0x8075376c, 0x807424c0 }, 0x4ab4|2, 0x4ab4|3 },
+ {{ 0x80758bc4, 0x807cacf4, 0x80758230, 0x80746f84 }, 0x14|2, 0x14|3 },
+ {{ 0x80758bd8, 0x80683998, 0x80758244, 0x80746f98 }, 0x4|3, 0x4|3 },
+ {{ 0x80758bdc, 0x807706f8, 0x80758248, 0x80746f9c }, 0x4f48|2, 0x4f48|3 },
+ {{ 0x8075db24, 0x80750f48, 0x8075d190, 0x8074bee4 }, 0xc0c|2, 0xc0c|3 },
+ {{ 0x8075e730, 0x8077d4f0, 0x8075dd9c, 0x8074caf0 }, 0x10|2, 0x10|3 },
+ {{ 0x8075e744, 0x80759df8, 0x8075ddb0, 0x8074cb04 }, 0x3c|2, 0x3c|3 },
+ {{ 0x8075e78c, 0x80775658, 0x8075ddf8, 0x8074cb4c }, 0x350|2, 0x350|3 },
+ {{ 0x8075eaf0, 0x8075a168, 0x8075e15c, 0x8074ceb0 }, 0x8|2, 0x8|3 },
+ {{ 0x8075eaf8, 0x80751bac, 0x8075e164, 0x8074ceb8 }, 0x1e94|1, 0x1e94|1 },
+ {{ 0x8076098c, 0x80753a40, 0x8075fff8, 0x8074ed4c }, 0x471c|0, 0x5230|1 },
+ {{ 0x80765bc4, 0x8075c428, 0x80765230, 0x80753f84 }, 0xc0|2, 0xc0|3 },
+ {{ 0x80765c90, 0x807759c4, 0x807652fc, 0x80754050 }, 0x1bb8|2, 0x1bb8|3 },
+ {{ 0x80767848, 0x8067c250, 0x80766eb4, 0x80755c08 }, 0x54|2, 0x54|3 },
+ {{ 0x807678f0, 0x80758d44, 0x80766f5c, 0x80755cb0 }, 0x140c|2, 0x140c|3 },
+ {{ 0x80768cfc, 0x80816614, 0x80768368, 0x807570bc }, 0x8|2, 0x8|3 },
+ {{ 0x80768d04, 0x8075a158, 0x80768370, 0x807570c4 }, 0x8|2, 0x8|3 },
+ {{ 0x80768d0c, 0x8077e048, 0x80768378, 0x807570cc }, 0x8|2, 0x8|3 },
+ {{ 0x80768d14, 0x8077db5c, 0x80768380, 0x807570d4 }, 0x8|2, 0x8|3 },
+ {{ 0x80768d1c, 0x80777624, 0x80768388, 0x807570dc }, 0x648|2, 0x648|3 },
+ {{ 0x80769364, 0x8076687c, 0x807689d0, 0x80757724 }, 0x14|2, 0x14|3 },
+ {{ 0x80769398, 0x80817a94, 0x80768a04, 0x80757758 }, 0x3c|2, 0x3c|3 },
+ {{ 0x807693d4, 0x80777674, 0x80768a40, 0x80757794 }, 0x4|3, 0x4|3 },
+ {{ 0x807693d8, 0x80777ca0, 0x80768a44, 0x80757798 }, 0x1a8|2, 0x1a8|3 },
+ {{ 0x80769580, 0x806e87e8, 0x80768bec, 0x80757940 }, 0x14|2, 0x14|3 },
+ {{ 0x80769594, 0x80763090, 0x80768c00, 0x80757954 }, 0x4|3, 0x4|3 },
+ {{ 0x807695f0, 0x807768c8, 0x80768c5c, 0x807579b0 }, 0x4|3, 0x4|3 },
+ {{ 0x807695f4, 0x806e6550, 0x80768c60, 0x807579b4 }, 0x18|2, 0x18|3 },
+ {{ 0x8076960c, 0x80777e68, 0x80768c78, 0x807579cc }, 0x3228|2, 0x3228|3 },
+ {{ 0x8076c854, 0x80688548, 0x8076bec0, 0x8075ac14 }, 0x4|3, 0x4|3 },
+ {{ 0x8076c858, 0x8075a170, 0x8076bec4, 0x8075ac18 }, 0x2378|2, 0x2378|3 },
+ {{ 0x8076ebd0, 0x8077b0a8, 0x8076e23c, 0x8075cf90 }, 0x708|2, 0x708|3 },
+ {{ 0x8076f2d8, 0x8075c4f0, 0x8076e944, 0x8075d698 }, 0x3374|2, 0x3374|3 },
+ {{ 0x8077264c, 0x80760058, 0x80771cb8, 0x80760a0c }, 0x6c|2, 0x6c|3 },
+ {{ 0x80772700, 0x8077b7b4, 0x80771d6c, 0x80760ac0 }, 0x1510|2, 0x1510|3 },
+ {{ 0x80773c10, 0x8075f8d0, 0x8077327c, 0x80761fd0 }, 0x764|2, 0x764|3 },
+ {{ 0x8077437c, 0x80850320, 0x807739e8, 0x8076273c }, 0x4|3, 0x4|3 },
+ {{ 0x80774388, 0x80764540, 0x807739f4, 0x80762748 }, 0x8|2, 0x8|3 },
+ {{ 0x80774390, 0x80849284, 0x807739fc, 0x80762750 }, 0x8|2, 0x8|3 },
+ {{ 0x80774398, 0x80764550, 0x80773a04, 0x80762758 }, 0x4|3, 0x4|3 },
+ {{ 0x8077439c, 0x80760108, 0x80773a08, 0x8076275c }, 0x131c|1, 0x131c|1 },
+ {{ 0x807756b8, 0x80761424, 0x80774d24, 0x80763a78 }, 0x65c|0, 0x312c|1 },
+ {{ 0x807787e4, 0x8076e214, 0x80777e50, 0x80766ba4 }, 0x8|2, 0x8|3 },
+ {{ 0x807787ec, 0x8077cd0c, 0x80777e58, 0x80766bac }, 0x7f4|2, 0x7f4|3 },
+ {{ 0x80779018, 0x80776838, 0x80778684, 0x807673d8 }, 0x10|2, 0x10|3 },
+ {{ 0x80779028, 0x80764558, 0x80778694, 0x807673e8 }, 0x3df4|2, 0x3df4|3 },
+ {{ 0x8077ce1c, 0x8070f9d0, 0x8077c488, 0x8076b1dc }, 0x28|2, 0x28|3 },
+ {{ 0x8077ce84, 0x8077d508, 0x8077c4f0, 0x8076b244 }, 0xfe0|2, 0xfe0|3 },
+ {{ 0x8077de64, 0x8076e160, 0x8077d4d0, 0x8076c224 }, 0xa0|2, 0xa0|3 },
+ {{ 0x8077df18, 0x8075a168, 0x8077d584, 0x8076c2d8 }, 0x8|2, 0x8|3 },
+ {{ 0x8077df20, 0x807683f4, 0x8077d58c, 0x8076c2e0 }, 0x6c4|1, 0x6c4|1 },
+ {{ 0x8077e5e4, 0x80768ab8, 0x8077dc50, 0x8076c9a4 }, 0x1a0|0, 0x43c0|1 },
+ {{ 0x807829d8, 0x8077e5a8, 0x80782044, 0x80770d98 }, 0x53a4|2, 0x53a4|3 },
+ {{ 0x80787d7c, 0x806f93a0, 0x807873e8, 0x8077613c }, 0x4|3, 0x4|3 },
+ {{ 0x80787d80, 0x807d0318, 0x807873ec, 0x80776140 }, 0x4bc4|2, 0x4bc4|3 },
+ {{ 0x8078c95c, 0x80783950, 0x8078bfc8, 0x8077ad1c }, 0xd660|1, 0xd660|1 },
+ {{ 0x80799fbc, 0x80790fb0, 0x80799628, 0x8078837c }, 0x7944|0, 0xe17c|1 },
+ {{ 0x807a8138, 0x807d4ef8, 0x807a77a4, 0x807964f8 }, 0x1b88|2, 0x1b88|3 },
+ {{ 0x807a9cc0, 0x8079f12c, 0x807a932c, 0x80798080 }, 0xe4|2, 0xe4|3 },
+ {{ 0x807a9dac, 0x807d6a58, 0x807a9418, 0x8079816c }, 0x10c|2, 0x10c|3 },
+ {{ 0x807a9eb8, 0x8079f210, 0x807a9524, 0x80798278 }, 0x5178|2, 0x5178|3 },
+ {{ 0x807af0ec, 0x8079c9c0, 0x807ae758, 0x8079d4ac }, 0x28|2, 0x28|3 },
+ {{ 0x807af114, 0x807a4184, 0x807ae780, 0x8079d4d4 }, 0x14|2, 0x14|3 },
+ {{ 0x807af12c, 0x807d4ee4, 0x807ae798, 0x8079d4ec }, 0xc|2, 0xc|3 },
+ {{ 0x807af138, 0x807a9098, 0x807ae7a4, 0x8079d4f8 }, 0x4|3, 0x4|3 },
+ {{ 0x807af13c, 0x807d6b90, 0x807ae7a8, 0x8079d4fc }, 0x3d90|2, 0x3d90|3 },
+ {{ 0x807b2ee8, 0x8077f8d4, 0x807b2554, 0x807a12a8 }, 0x8|2, 0x8|3 },
+ {{ 0x807b2ef4, 0x807a4494, 0x807b2560, 0x807a12b4 }, 0x7540|1, 0x7540|1 },
+ {{ 0x807ba434, 0x807ab9d4, 0x807b9aa0, 0x807a87f4 }, 0x2638|0, 0x1f314|1 },
+ {{ 0x807d976c, 0x807da94c, 0x807d8dd8, 0x807c7b2c }, 0x404|2, 0x404|3 },
+ {{ 0x807d9b80, 0x807cacf4, 0x807d91ec, 0x807c7f40 }, 0xa28|2, 0xa28|3 },
+ {{ 0x807da5ac, 0x8084b558, 0x807d9c18, 0x807c896c }, 0x4|3, 0x4|3 },
+ {{ 0x807da5c0, 0x807dad78, 0x807d9c2c, 0x807c8980 }, 0x16ac|2, 0x16ac|3 },
+ {{ 0x807dbc6c, 0x8079a9b8, 0x807db2d8, 0x807ca02c }, 0x4c|2, 0x4c|3 },
+ {{ 0x807dbcc8, 0x807cba20, 0x807db334, 0x807ca088 }, 0x4|3, 0x4|3 },
+ {{ 0x807dbccc, 0x807cb734, 0x807db338, 0x807ca08c }, 0xbf0|2, 0xbf0|3 },
+ {{ 0x807dc8c8, 0x807dc484, 0x807dbf34, 0x807cac88 }, 0x68|2, 0x68|3 },
+ {{ 0x807dc94c, 0x807cc32c, 0x807dbfb8, 0x807cad0c }, 0x3fe8|2, 0x3fe8|3 },
+ {{ 0x807e0938, 0x8083c6ec, 0x807dffa4, 0x807cecf8 }, 0x1bc4|2, 0x1bc4|3 },
+ {{ 0x807e24fc, 0x807df55c, 0x807e1b68, 0x807d08bc }, 0x70|2, 0x70|3 },
+ {{ 0x807e2594, 0x807ebee0, 0x807e1c00, 0x807d0954 }, 0x8|2, 0x8|3 },
+ {{ 0x807e259c, 0x807dc50c, 0x807e1c08, 0x807d095c }, 0x48|1, 0x48|1 },
+ {{ 0x807e25e4, 0x807dc554, 0x807e1c50, 0x807d09a4 }, 0x2b68|0, 0x2fe0|1 },
+ {{ 0x807e55c4, 0x8083f8ac, 0x807e4c30, 0x807d3984 }, 0x30|2, 0x30|3 },
+ {{ 0x807e55f4, 0x8083e2b8, 0x807e4c60, 0x807d39b4 }, 0x60|2, 0x60|3 },
+ {{ 0x807e5654, 0x807df5e4, 0x807e4cc0, 0x807d3a14 }, 0x384|1, 0x384|1 },
+ {{ 0x807e59d8, 0x807df968, 0x807e5044, 0x807d3d98 }, 0x738|0, 0x9d8|1 },
+ {{ 0x807e63b0, 0x8083cfd8, 0x807e5a1c, 0x807d4770 }, 0x20|2, 0x20|3 },
+ {{ 0x807e63fc, 0x807de374, 0x807e5a68, 0x807d47bc }, 0x8|2, 0x8|3 },
+ {{ 0x807e6404, 0x8083c6ec, 0x807e5a70, 0x807d47c4 }, 0x4|3, 0x4|3 },
+ {{ 0x807e6408, 0x8083e330, 0x807e5a74, 0x807d47c8 }, 0x3630|1, 0x3630|1 },
+ {{ 0x807e9a38, 0x80841960, 0x807e90a4, 0x807d7df8 }, 0x4|0, 0x208|1 },
+ {{ 0x807e9c40, 0x807e0394, 0x807e92ac, 0x807d8000 }, 0x674|1, 0x674|1 },
+ {{ 0x807ea2b4, 0x807e0a08, 0x807e9920, 0x807d8674 }, 0x2548|0, 0x3ae0|1 },
+ {{ 0x807edd94, 0x80841b68, 0x807ed400, 0x807dc154 }, 0x468|2, 0x468|3 },
+ {{ 0x807ee248, 0x80841b64, 0x807ed8b4, 0x807dc608 }, 0x4|3, 0x4|3 },
+ {{ 0x807ee24c, 0x807e44e8, 0x807ed8b8, 0x807dc60c }, 0x1b4|2, 0x1b4|3 },
+ {{ 0x807ee430, 0x80841fcc, 0x807eda9c, 0x807dc7f0 }, 0x5b0|2, 0x5b0|3 },
+ {{ 0x807ee9e0, 0x807e46d0, 0x807ee04c, 0x807dcda0 }, 0x5cc|1, 0x5cc|1 },
+ {{ 0x807eefac, 0x807e4c9c, 0x807ee618, 0x807dd36c }, 0x144|0, 0xa38|1 },
+ {{ 0x807ef9e4, 0x808425c0, 0x807ef050, 0x807ddda4 }, 0x2fc|2, 0x2fc|3 },
+ {{ 0x807efd00, 0x807e09b8, 0x807ef36c, 0x807de0c0 }, 0x4|3, 0x4|3 },
+ {{ 0x807efd04, 0x807e56dc, 0x807ef370, 0x807de0c4 }, 0x503c|1, 0x503c|1 },
+ {{ 0x807f4d40, 0x807ea718, 0x807f43ac, 0x807e3100 }, 0x4|0, 0x2998|1 },
+ {{ 0x807f76e0, 0x808428dc, 0x807f6d4c, 0x807e5aa0 }, 0x464|2, 0x464|3 },
+ {{ 0x807f7bbc, 0x807ed0bc, 0x807f7228, 0x807e5f7c }, 0xd4c|2, 0xd4c|3 },
+ {{ 0x807f8908, 0x80842d40, 0x807f7f74, 0x807e6cc8 }, 0x250|1, 0x250|1 },
+ {{ 0x807f8b58, 0x80842f90, 0x807f81c4, 0x807e6f18 }, 0x4|0, 0x6f8|1 },
+ {{ 0x807f9274, 0x807ede84, 0x807f88e0, 0x807e7634 }, 0x38|1, 0x38|1 },
+ {{ 0x807f92ac, 0x807edebc, 0x807f8918, 0x807e766c }, 0x4|0, 0x88|1 },
+ {{ 0x807f9334, 0x80747b60, 0x807f89a0, 0x807e76f4 }, 0xc|2, 0xc|3 },
+ {{ 0x807f9384, 0x808436ac, 0x807f89f0, 0x807e7744 }, 0x1d4|2, 0x1d4|3 },
+ {{ 0x807f9568, 0x80734848, 0x807f8bd4, 0x807e7928 }, 0x4|3, 0x4|3 },
+ {{ 0x807f9580, 0x808438a0, 0x807f8bec, 0x807e7940 }, 0x15ac|2, 0x15ac|3 },
+ {{ 0x807fab3c, 0x80800e0c, 0x807fa1a8, 0x807e8efc }, 0xc|2, 0xc|3 },
+ {{ 0x807fab48, 0x807edf88, 0x807fa1b4, 0x807e8f08 }, 0x3fd0|2, 0x3fd0|3 },
+ {{ 0x807feb64, 0x80844e74, 0x807fe1d0, 0x807ecf24 }, 0xf2c|2, 0xf2c|3 },
+ {{ 0x807ffadc, 0x807f1f64, 0x807ff148, 0x807ede9c }, 0x5f1c|2, 0x5f1c|3 },
+ {{ 0x808059f8, 0x80845ddc, 0x80805064, 0x807f3db8 }, 0x1c08|2, 0x1c08|3 },
+ {{ 0x80807600, 0x807f3bf8, 0x80806c6c, 0x807f59c0 }, 0xc|2, 0xc|3 },
+ {{ 0x8080760c, 0x807f7ec4, 0x80806c78, 0x807f59cc }, 0x1db4|2, 0x1db4|3 },
+ {{ 0x8080942c, 0x808479e4, 0x80808a98, 0x807f77ec }, 0x18a8|2, 0x18a8|3 },
+ {{ 0x8080acd4, 0x80751b64, 0x8080a340, 0x807f9094 }, 0x4|3, 0x4|3 },
+ {{ 0x8080ad10, 0x807f9cf0, 0x8080a37c, 0x807f90d0 }, 0x711c|2, 0x711c|3 },
+ {{ 0x80811e38, 0x808492c8, 0x808114a4, 0x808001f8 }, 0x1d44|2, 0x1d44|3 },
+ {{ 0x80813b88, 0x807f873c, 0x808131f4, 0x80801f48 }, 0x4|3, 0x4|3 },
+ {{ 0x80813b8c, 0x807edf50, 0x808131f8, 0x80801f4c }, 0x38|2, 0x38|3 },
+ {{ 0x80813bc4, 0x80800e18, 0x80813230, 0x80801f84 }, 0x93f0|1, 0x93f0|1 },
+ {{ 0x8081cfb4, 0x8080a208, 0x8081c620, 0x8080b374 }, 0x70|0, 0x12b8|1 },
+ {{ 0x8081e270, 0x8072fc98, 0x8081d8dc, 0x8080c630 }, 0x4|3, 0x4|3 },
+ {{ 0x8081e278, 0x8072c704, 0x8081d8e4, 0x8080c638 }, 0x8|2, 0x8|3 },
+ {{ 0x8081e280, 0x8084b060, 0x8081d8ec, 0x8080c640 }, 0xd68|2, 0xd68|3 },
+ {{ 0x8081efec, 0x8080b4d8, 0x8081e658, 0x8080d3ac }, 0x2e8c|1, 0x2e8c|1 },
+ {{ 0x80821e78, 0x8080e364, 0x808214e4, 0x80810238 }, 0xa2cc|0, 0xc670|1 },
+ {{ 0x8082e4e8, 0x80814a44, 0x8082db54, 0x8081c8a8 }, 0x8|2, 0x8|3 },
+ {{ 0x8082e4f0, 0x80750e38, 0x8082db5c, 0x8081c8b0 }, 0x4|3, 0x4|3 },
+ {{ 0x8082e4f4, 0x80814a50, 0x8082db60, 0x8081c8b4 }, 0x4|3, 0x4|3 },
+ {{ 0x8082e52c, 0x80762de4, 0x8082db98, 0x8081c8ec }, 0x14|2, 0x14|3 },
+ {{ 0x8082e540, 0x8084bdcc, 0x8082dbac, 0x8081c900 }, 0x2ec|2, 0x2ec|3 },
+ {{ 0x8082e834, 0x8077b798, 0x8082dea0, 0x8081cbf4 }, 0x14|2, 0x14|3 },
+ {{ 0x8082e850, 0x8081aa28, 0x8082debc, 0x8081cc10 }, 0xb6c|2, 0xb6c|3 },
+ {{ 0x8082f3bc, 0x80878070, 0x8082ea28, 0x8081d77c }, 0x4|3, 0x4|3 },
+ {{ 0x8082f404, 0x8084c0dc, 0x8082ea70, 0x8081d7c4 }, 0x4090|2, 0x4090|3 },
+ {{ 0x80833494, 0x8081b594, 0x80832b00, 0x80821854 }, 0x1a4|1, 0x1a4|1 },
+ {{ 0x80833638, 0x8081b738, 0x80832ca4, 0x808219f8 }, 0x34|0, 0x498|1 },
+ {{ 0x80833af0, 0x8076e4c8, 0x8083315c, 0x80821eb0 }, 0xc|2, 0xc|3 },
+ {{ 0x80833afc, 0x8081bc04, 0x80833168, 0x80821ebc }, 0x430c|2, 0x430c|3 },
+ {{ 0x80837e08, 0x8081ff0c, 0x80837470, 0x808261c8 }, 0x4|0, 0x4|0 },
+ {{ 0x80838e5c, 0x808501b4, 0x808384c8, 0x8082721c }, 0x21f8|2, 0x21f8|3 },
+ {{ 0x8083b054, 0x808540f4, 0x8083a6c0, 0x80829414 }, 0xc|2, 0xc|3 },
+ {{ 0x8083b060, 0x80857c34, 0x8083a6cc, 0x80829420 }, 0xc|2, 0xc|3 },
+ {{ 0x8083b06c, 0x80820ef4, 0x8083a6d8, 0x8082942c }, 0x19ac|2, 0x19ac|3 },
+ {{ 0x8083ca18, 0x80833630, 0x8083c084, 0x8082add8 }, 0x94|2, 0x94|3 },
+ {{ 0x8083caac, 0x8082da30, 0x8083c118, 0x8082ae6c }, 0x94|2, 0x94|3 },
+ {{ 0x8083cb40, 0x80852420, 0x8083c1ac, 0x8082af00 }, 0x5a8|1, 0x5a8|1 },
+ {{ 0x8083d0e8, 0x808529c8, 0x8083c754, 0x8082b4a8 }, 0x4|0, 0x2c4|1 },
+ {{ 0x8083d408, 0x807e46ec, 0x8083ca74, 0x8082b7c8 }, 0x1c|2, 0x1c|3 },
+ {{ 0x8083d424, 0x808229c4, 0x8083ca90, 0x8082b7e4 }, 0x654|1, 0x654|1 },
+ {{ 0x8083da78, 0x80823018, 0x8083d0e4, 0x8082be38 }, 0x44f4|0, 0x480c|1 },
+ {{ 0x808422a0, 0x80851378, 0x8084190c, 0x80830660 }, 0x10|2, 0x10|3 },
+ {{ 0x808422b0, 0x80852c7c, 0x8084191c, 0x80830670 }, 0x2474|2, 0x2474|3 },
+ {{ 0x80844728, 0x80827850, 0x80843d94, 0x80832ae8 }, 0xe7c|1, 0xe7c|1 },
+ {{ 0x808455a4, 0x808286cc, 0x80844c10, 0x80833964 }, 0x4eb4|0, 0x53f8|1 },
+ {{ 0x8084a99c, 0x80855180, 0x8084a008, 0x80838d5c }, 0x26b0|2, 0x26b0|3 },
+ {{ 0x8084d04c, 0x8082f754, 0x8084c6b8, 0x8083b40c }, 0x4|3, 0x4|3 },
+ {{ 0x8084d050, 0x80820ec8, 0x8084c6bc, 0x8083b410 }, 0x28|2, 0x28|3 },
+ {{ 0x8084d0d4, 0x8082dac0, 0x8084c740, 0x8083b494 }, 0x14f8|1, 0x14f8|1 },
+ {{ 0x8084e5cc, 0x8082efb8, 0x8084dc38, 0x8083c98c }, 0x4|0, 0x36fc|1 },
+ {{ 0x80851cc8, 0x80854c00, 0x80851334, 0x80840088 }, 0x8|2, 0x8|3 },
+ {{ 0x80851cd0, 0x80857858, 0x8085133c, 0x80840090 }, 0xe00|2, 0xe00|3 },
+ {{ 0x80852ad0, 0x80821824, 0x8085213c, 0x80840e90 }, 0x138|2, 0x138|3 },
+ {{ 0x80852c08, 0x808326c0, 0x80852274, 0x80840fc8 }, 0x1004|2, 0x1004|3 },
+ {{ 0x80853c0c, 0x8082da30, 0x80853278, 0x80841fcc }, 0x94|2, 0x94|3 },
+ {{ 0x80853ca0, 0x808587f0, 0x8085330c, 0x80842060 }, 0x14c8|2, 0x14c8|3 },
+ {{ 0x808551e4, 0x80833754, 0x80854850, 0x808435a4 }, 0xcc|1, 0xcc|1 },
+ {{ 0x808552b0, 0x80833820, 0x8085491c, 0x80843670 }, 0x6e88|0, 0x70dc|1 },
+ {{ 0x8085c3c4, 0x80859d34, 0x8085ba30, 0x8084a784 }, 0x22a0|2, 0x22a0|3 },
+ {{ 0x8085e664, 0x808436a0, 0x8085dcd0, 0x8084ca24 }, 0x4|3, 0x4|3 },
+ {{ 0x8085e66c, 0x8083a948, 0x8085dcd8, 0x8084ca2c }, 0xa30|2, 0xa30|3 },
+ {{ 0x8085f09c, 0x8085bfd4, 0x8085e708, 0x8084d45c }, 0xe24|2, 0xe24|3 },
+ {{ 0x8085fec0, 0x8082e5c4, 0x8085f52c, 0x8084e280 }, 0x68|2, 0x68|3 },
+ {{ 0x8085ffcc, 0x8083b380, 0x8085f638, 0x8084e38c }, 0xb00|1, 0xb00|1 },
+ {{ 0x80860acc, 0x8083be80, 0x80860138, 0x8084ee8c }, 0x4|0, 0x454|1 },
+ {{ 0x80860f28, 0x8085cf08, 0x80860594, 0x8084f2e8 }, 0x1ee8|2, 0x1ee8|3 },
+ {{ 0x80862e14, 0x8083c2d0, 0x80862480, 0x808511d4 }, 0x40c|2, 0x40c|3 },
+ {{ 0x8086322c, 0x8085edfc, 0x80862898, 0x808515ec }, 0x1c64|2, 0x1c64|3 },
+ {{ 0x80864e90, 0x80860a60, 0x808644fc, 0x80794d0c }, 0x4|3, 0x4|3 },
+ {{ 0x80864e94, 0x80860a64, 0x80864500, 0x80853254 }, 0x25c|2, 0x25c|3 },
+ {{ 0x808650f0, 0x8077cc20, 0x8086475c, 0x808534b0 }, 0x4|3, 0x4|3 },
+ {{ 0x808650f4, 0x80860cc4, 0x80864760, 0x808534b4 }, 0xdd4|2, 0xdd4|3 },
+ {{ 0x80865ec8, 0x80853420, 0x80865534, 0x80854288 }, 0x8|2, 0x8|3 },
+ {{ 0x80865ed0, 0x80861aa0, 0x8086553c, 0x80854290 }, 0x6fc|2, 0x6fc|3 },
+ {{ 0x808665cc, 0x8086219c, 0x80865c38, 0x80794d0c }, 0x4|3, 0x4|3 },
+ {{ 0x808665d0, 0x808621a0, 0x80865c3c, 0x80854990 }, 0xaa8|2, 0xaa8|3 },
+ {{ 0x80867084, 0x80864d30, 0x808666f0, 0x80855444 }, 0x650|2, 0x650|3 },
+ {{ 0x808676e0, 0x80862c5c, 0x80866d4c, 0x80855aa0 }, 0x20d0|2, 0x20d0|3 },
+ {{ 0x808697b8, 0x8086e680, 0x80868e24, 0x80857b78 }, 0x4|3, 0x4|3 },
+ {{ 0x808697bc, 0x8086538c, 0x80868e28, 0x80857b7c }, 0xa84|2, 0xa84|3 },
+ {{ 0x8086a250, 0x808766f0, 0x808698bc, 0x80858610 }, 0x1e34|2, 0x1e34|3 },
+ {{ 0x8086c088, 0x8086867c, 0x8086b6f4, 0x8085a448 }, 0x74|2, 0x74|3 },
+ {{ 0x8086c0fc, 0x8087852c, 0x8086b768, 0x8085a4bc }, 0x850|2, 0x850|3 },
+ {{ 0x8086c958, 0x80866b00, 0x8086bfc4, 0x8085ad18 }, 0xb0|2, 0xb0|3 },
+ {{ 0x8086ca30, 0x80878da8, 0x8086c09c, 0x8085adf0 }, 0x624c|2, 0x624c|3 },
+ {{ 0x80872c94, 0x80865e14, 0x80872300, 0x80861054 }, 0xcec|2, 0xcec|3 },
+ {{ 0x80873990, 0x8082d8c0, 0x80872ffc, 0x80861d50 }, 0x4|3, 0x4|3 },
+ {{ 0x80873998, 0x80866bd0, 0x80873004, 0x80861d58 }, 0x1aac|2, 0x1aac|3 },
+ {{ 0x80875450, 0x808686f8, 0x80874abc, 0x80863810 }, 0xdfe8|2, 0xdfe8|3 },
+ {{ 0x80883444, 0x8087f014, 0x80882ab0, 0x80871804 }, 0xc260|2, 0xc2c0|3 },
+ {{ 0x8088f704, 0x8088b2d4, 0x8088ed70, 0x8087dac4 }, 0x4|3, 0x4|3 },
+ {{ 0x8088f728, 0x8088b2e8, 0x8088ed88, 0x8087dae8 }, 0x18c|2, 0x18c|3 },
+ {{ 0x8088f8b8, 0x8088cc78, 0x8088ef18, 0x8087dc78 }, 0x14|2, 0x14|3 },
+ {{ 0x8088f8cc, 0x8088cf34, 0x8088ef2c, 0x8087dc8c }, 0x4|3, 0x4|3 },
+ {{ 0x8088f8d0, 0x8088b478, 0x8088ef30, 0x8087dc90 }, 0x324|2, 0x324|3 },
+ {{ 0x8088fbf4, 0x8088b79c, 0x8088f254, 0x8087dffc }, 0x174|2, 0x174|3 },
+ {{ 0x8088fd68, 0x8088fd68, 0x8088f3c8, 0x8087fd68 }, 0x4|3, 0x4|3 },
+ {{ 0x8088fd6c, 0x8088b914, 0x8088f3cc, 0x8087e174 }, 0x48|2, 0x48|3 },
+ {{ 0x8088fdf4, 0x8088b990, 0x8088f440, 0x8087e1f0 }, 0x4|3, 0x4|3 },
+ {{ 0x8088fe00, 0x8088b9a0, 0x8088f450, 0x8087e200 }, 0x160|2, 0x160|3 },
+ {{ 0x8088ff60, 0x8088bb00, 0x8088f5b0, 0x8087ff60 }, 0x4|3, 0x4|3 },
+ {{ 0x8088ff64, 0x8088bb04, 0x8088f5b4, 0x8087e364 }, 0x2c|2, 0x2c|3 },
+ {{ 0x8088ff98, 0x8088cc90, 0x8088f5e8, 0x8087e398 }, 0x8|2, 0x8|3 },
+ {{ 0x8088ffa8, 0x8088bb38, 0x8088f5f8, 0x8087e3a8 }, 0x8|2, 0x8|3 },
+ {{ 0x8088ffb0, 0x8088ffb0, 0x8088ffb0, 0x8087e3b0 }, 0x4|3, 0x4|3 },
+ {{ 0x8088ffb4, 0x8088bb44, 0x8088f604, 0x8087e3b4 }, 0x2dc|2, 0x2dc|3 },
+ {{ 0x80890294, 0x8088cc9c, 0x8088f8e4, 0x8087e694 }, 0x104|2, 0x104|3 },
+ {{ 0x8089039c, 0x8088be24, 0x8088f9ec, 0x8087e79c }, 0x10c|2, 0x10c|3 },
+ {{ 0x808904b8, 0x8088bf40, 0x8088fb08, 0x8087e8bc }, 0xa8|2, 0xa8|3 },
+ {{ 0x80890568, 0x8088bff0, 0x8088fbb8, 0x8087e970 }, 0xa04|2, 0xa04|3 },
+ {{ 0x80890f74, 0x8088cda4, 0x808905c4, 0x8087f37c }, 0x17c|2, 0x17c|3 },
+ {{ 0x808910f0, 0x8088ca00, 0x80890740, 0x8087f4f8 }, 0x168|2, 0x168|3 },
+ {{ 0x80891270, 0x8088cb68, 0x808908c0, 0x8087f678 }, 0x10c|2, 0x10c|3 },
+ {{ 0x8089137c, 0x8088cf34, 0x808909cc, 0x8087f784 }, 0x2a4|2, 0x2a4|3 },
+ {{ 0x80891634, 0x8088e07c, 0x80890c84, 0x8087fa3c }, 0x84|2, 0x84|3 },
+ {{ 0x808916bc, 0x8088d1ec, 0x80890d0c, 0x8087fac4 }, 0xec|2, 0xec|3 },
+ {{ 0x808917ac, 0x8088e104, 0x80890dfc, 0x8087fbb4 }, 0x44|2, 0x44|3 },
+ {{ 0x808917f4, 0x8088d2dc, 0x80890e44, 0x8087fbfc }, 0x7ac|2, 0x7ac|3 },
+ {{ 0x80891fa8, 0x8088e150, 0x808915f8, 0x808803b0 }, 0x44|2, 0x44|3 },
+ {{ 0x80891ff8, 0x8088da90, 0x80891648, 0x80880400 }, 0x28|2, 0x28|3 },
+ {{ 0x80892024, 0x8088e19c, 0x80891674, 0x8088042c }, 0x1d8|2, 0x1d8|3 },
+ {{ 0x808921fc, 0x8088dabc, 0x8089184c, 0x80880604 }, 0x5b8|2, 0x5b8|3 },
+ {{ 0x808927c4, 0x8089280c, 0x80891e14, 0x80880bcc }, 0x44|2, 0x44|3 },
+ {{ 0x8089280c, 0x8088e37c, 0x80891e5c, 0x80880c14 }, 0xfc|2, 0xfc|3 },
+ {{ 0x80892910, 0x80892858, 0x80891f60, 0x80880d18 }, 0x490|2, 0x490|3 },
+ {{ 0x80892da8, 0x8088e480, 0x808923f8, 0x808811b0 }, 0xf0|2, 0xf0|3 },
+ {{ 0x80892e98, 0x80891f00, 0x808924e8, 0x808812a0 }, 0x4|3, 0x4|3 },
+ {{ 0x80892e9c, 0x80892cec, 0x808924ec, 0x808812a4 }, 0xf0|2, 0xf0|3 },
+ {{ 0x80892fa4, 0x8088e574, 0x808925f4, 0x808813ac }, 0x38|2, 0x38|3 },
+ {{ 0x80892ff8, 0x8088e5c8, 0x80892648, 0x80881404 }, 0x1e4|2, 0x1e4|3 },
+ {{ 0x808931e0, 0x8088e7b0, 0x80892830, 0x808815f0 }, 0x8c|2, 0x8c|3 },
+ {{ 0x80893270, 0x80892df8, 0x808928c0, 0x80881680 }, 0x68|2, 0x68|3 },
+ {{ 0x80893318, 0x8088e840, 0x80892968, 0x80881728 }, 0x194|2, 0x194|3 },
+ {{ 0x808934b4, 0x8088e9d4, 0x80892b04, 0x808818c4 }, 0x4f4|2, 0x4f4|3 },
+ {{ 0x808939ac, 0x80892ea4, 0x80892ffc, 0x80881dbc }, 0x174|2, 0x174|3 },
+ {{ 0x80893b20, 0x80893018, 0x80893170, 0x80881f3c }, 0x4|3, 0x4|3 },
+ {{ 0x80893b28, 0x80893020, 0x80893178, 0x80881f48 }, 0x18|2, 0x18|3 },
+ {{ 0x80893b50, 0x80893048, 0x808931a0, 0x80881f60 }, 0x318|2, 0x318|3 },
+ {{ 0x80893e6c, 0x8088eecc, 0x808934bc, 0x8088227c }, 0x4|1, 0x4|1 },
+ {{ 0x80893e70, 0x8088eed0, 0x808934c0, 0x80882280 }, 0x4|0, 0x1f8|1 },
+ {{ 0x80894078, 0x8088f0d8, 0x808936c8, 0x80882488 }, 0x5c|2, 0x5c|3 },
+ {{ 0x808940f4, 0x80893364, 0x80893744, 0x80882504 }, 0x148|2, 0x148|3 },
+ {{ 0x80894240, 0x8088f158, 0x80893890, 0x80882650 }, 0x59c|2, 0x59c|3 },
+ {{ 0x808947e0, 0x808934b0, 0x80893e30, 0x80882bf0 }, 0x7f8|2, 0x7f8|3 },
+ {{ 0x80894fec, 0x808c902c, 0x8089463c, 0x808833fc }, 0x4|3, 0x4|3 },
+ {{ 0x80894ff0, 0x8088f6f8, 0x80894640, 0x80883400 }, 0x5c8|2, 0x5c8|3 },
+ {{ 0x808955b8, 0x80894c14, 0x80894c08, 0x808839c8 }, 0xc|2, 0xc|3 },
+ {{ 0x808955cc, 0x8088fccc, 0x80894c1c, 0x808839dc }, 0x28|2, 0x28|3 },
+ {{ 0x808955f4, 0x80893cc4, 0x80894c44, 0x80883a04 }, 0x68c|2, 0x68c|3 },
+ {{ 0x80895c9c, 0x8088fcf4, 0x808952ec, 0x808845c4 }, 0xe0|2, 0xe0|3 },
+ {{ 0x80895d84, 0x8089436c, 0x808953d4, 0x808846ac }, 0x3bc|2, 0x3bc|3 },
+ {{ 0x80896144, 0x8088fddc, 0x80895794, 0x80884a6c }, 0x244|2, 0x244|3 },
+ {{ 0x8089638c, 0x8089472c, 0x808959dc, 0x80884cb4 }, 0x38|2, 0x38|3 },
+ {{ 0x808963c4, 0x80890024, 0x80895a14, 0x80884cec }, 0x3c|2, 0x3c|3 },
+ {{ 0x80896404, 0x80894764, 0x80895a54, 0x80884d2c }, 0x2c4|2, 0x2c4|3 },
+ {{ 0x808966e0, 0x80890068, 0x80895d30, 0x80885008 }, 0x974|2, 0x974|3 },
+ {{ 0x80897070, 0x80894a40, 0x808966c0, 0x80885998 }, 0x26c|2, 0x26c|3 },
+ {{ 0x808972f0, 0x808909f8, 0x80896940, 0x80885c18 }, 0x3a4|2, 0x3a4|3 },
+ {{ 0x80897698, 0x80894cc0, 0x80896ce8, 0x80885fc0 }, 0x4a0|2, 0x4a0|3 },
+ {{ 0x80897b40, 0x80890da0, 0x80897190, 0x80886468 }, 0x170|2, 0x170|3 },
+ {{ 0x80897cb8, 0x80891f00, 0x80897308, 0x808865e0 }, 0x4|3, 0x4|3 },
+ {{ 0x80897cbc, 0x80890f14, 0x8089730c, 0x808865e4 }, 0x468|2, 0x468|3 },
+ {{ 0x80898124, 0x8089516c, 0x80897774, 0x80886a4c }, 0x28|2, 0x7c|3 },
+ {{ 0x808981a0, 0x808951e8, 0x808977f0, 0x80886ac8 }, 0x14|3, 0x14|3 },
+ {{ 0x808981c8, 0x80895210, 0x8088edcc, 0x8088410c }, 0x8|2, 0x8|3 },
+ {{ 0x8089822c, 0x8089526c, 0x8088edcc, 0x8087db2c }, 0x14|2, 0x14|3 },
+ {{ 0x80898244, 0x8089528c, 0x80897874, 0x80886b4c }, 0x2c|2, 0x2c|3 },
+ {{ 0x80898270, 0x808952b8, 0x8089779c, 0x80886a74 }, 0x30|2, 0x30|3 },
+ {{ 0x808982b8, 0x80895300, 0x808c87e0, 0x808b7b28 }, 0x4|3, 0x4|3 },
+ {{ 0x80898344, 0x8089538c, 0x8088edd4, 0x8087db34 }, 0x4|3, 0x4|3 },
+ {{ 0x80898368, 0x808953b0, 0x80897874, 0x80886b4c }, 0x2c|2, 0x2c|3 },
+ {{ 0x80898394, 0x808953dc, 0x8089779c, 0x80886a74 }, 0x30|2, 0x30|3 },
+ {{ 0x808983e8, 0x808951e8, 0x808977f0, 0x80886ac8 }, 0x14|2, 0x14|3 },
+ {{ 0x80898410, 0x80895210, 0x8088edcc, 0x8088410c }, 0x8|2, 0x8|3 },
+ {{ 0x80898484, 0x80895284, 0x8089786c, 0x80886b44 }, 0x8|2, 0x8|3 },
+ {{ 0x80898500, 0x808c4ee4, 0x808c878c, 0x808b7ad4 }, 0x4|3, 0x4|3 },
+ {{ 0x808985a8, 0x80895284, 0x8089786c, 0x80886b44 }, 0x8|2, 0x8|3 },
+ {{ 0x808985b0, 0x808953b0, 0x80897874, 0x80886b4c }, 0x2c|2, 0x2c|3 },
+ {{ 0x808985dc, 0x808953dc, 0x8089779c, 0x80886a74 }, 0x30|2, 0x54|3 },
+ {{ 0x80898630, 0x80895430, 0x808977f0, 0x80886ac8 }, 0x14|3, 0x14|3 },
+ {{ 0x80898658, 0x80895458, 0x8088edcc, 0x8088410c }, 0x8|2, 0x8|3 },
+ {{ 0x808986cc, 0x808954cc, 0x8089786c, 0x80886b44 }, 0x34|2, 0x34|3 },
+ {{ 0x80898704, 0x8089137c, 0x808978a4, 0x80886b7c }, 0x314|2, 0x314|3 },
+ {{ 0x80898a20, 0x80893190, 0x808932e8, 0x808820a8 }, 0x4|3, 0x4|3 },
+ {{ 0x80898a28, 0x8089169c, 0x80897bc4, 0x80886e9c }, 0x4|3, 0x4|3 },
+ {{ 0x80898a2c, 0x80891684, 0x80897bac, 0x80886e84 }, 0x1c|2, 0x1c|3 },
+ {{ 0x80898a48, 0x80891684, 0x80897bac, 0x80886e84 }, 0x2c|2, 0x2c|3 },
+ {{ 0x80898a80, 0x808916b8, 0x80897be0, 0x80886eb8 }, 0x844|2, 0x844|3 },
+ {{ 0x808992c8, 0x80895500, 0x80898428, 0x80887700 }, 0x368|2, 0x368|3 },
+ {{ 0x80899638, 0x80891f08, 0x80898798, 0x80887a70 }, 0x1e0|2, 0x1e0|3 },
+ {{ 0x80899820, 0x80895870, 0x80898980, 0x80887c58 }, 0x154|2, 0x154|3 },
+ {{ 0x80899978, 0x8088f1a4, 0x80898ad8, 0x80887db0 }, 0x4|3, 0x4|3 },
+ {{ 0x8089997c, 0x808920ec, 0x80898adc, 0x80887db4 }, 0x574|2, 0x574|3 },
+ {{ 0x80899ef8, 0x808959d0, 0x80899058, 0x80888330 }, 0xdc|2, 0xdc|3 },
+ {{ 0x80899fd8, 0x80892668, 0x80899138, 0x80888410 }, 0x1a0|2, 0x1a0|3 },
+ {{ 0x8089a180, 0x80895ab0, 0x808992e0, 0x808885b8 }, 0x124|2, 0x124|3 },
+ {{ 0x8089a2bc, 0x80896d44, 0x8089941c, 0x808886f4 }, 0x324|2, 0x324|3 },
+ {{ 0x8089a5e8, 0x80895bf0, 0x80899748, 0x80888a20 }, 0xd0|1, 0xd0|1 },
+ {{ 0x8089a6b8, 0x80895cc0, 0x80899818, 0x80888af0 }, 0x4|0, 0x64|1 },
+ {{ 0x8089a720, 0x80895d28, 0x80899880, 0x80888ba8 }, 0x14|2, 0x14|3 },
+ {{ 0x8089a738, 0x80895d40, 0x80899898, 0x80888b58 }, 0x50|2, 0x50|3 },
+ {{ 0x8089a788, 0x80895d90, 0x808998e8, 0x80888bc0 }, 0x2d0|2, 0x2e4|3 },
+ {{ 0x8089aa6c, 0x80896074, 0x80899bcc, 0x80888ea4 }, 0xd4|3, 0xd4|3 },
+ {{ 0x8089ab44, 0x8089614c, 0x80899ca4, 0x80888f4c }, 0x18|2, 0x18|3 },
+ {{ 0x8089ab5c, 0x80896164, 0x80899cbc, 0x80888f4c }, 0x10|2, 0x10|3 },
+ {{ 0x8089ab74, 0x8089617c, 0x80899cd4, 0x80888fb4 }, 0x5c|1, 0x5c|1 },
+ {{ 0x8089abd0, 0x808961d8, 0x80899d30, 0x80889010 }, 0x4|0, 0x54|1 },
+ {{ 0x8089ac24, 0x8089622c, 0x80899d84, 0x8088965c }, 0x4|3, 0x4|3 },
+ {{ 0x8089ac2c, 0x80896234, 0x80899d8c, 0x80889018 }, 0x14|2, 0x14|3 },
+ {{ 0x8089acc8, 0x808962d0, 0x80899e28, 0x80888b38 }, 0x8|2, 0x8|3 },
+ {{ 0x8089ad30, 0x80896338, 0x80899e90, 0x808891d4 }, 0x18|2, 0x18|3 },
+ {{ 0x8089ad78, 0x80896380, 0x80899ed8, 0x808891fc }, 0x4|3, 0x4|3 },
+ {{ 0x8089ad84, 0x8089638c, 0x80899ee4, 0x808891a4 }, 0x1c|2, 0x1c|3 },
+ {{ 0x8089adbc, 0x808963c4, 0x80899f1c, 0x8088906c }, 0xc|2, 0xc|3 },
+ {{ 0x8089ade4, 0x808963ec, 0x80899f44, 0x80889150 }, 0x8|2, 0x8|3 },
+ {{ 0x8089ae38, 0x80896440, 0x80899f98, 0x80889298 }, 0x84|2, 0x84|3 },
+ {{ 0x8089aec0, 0x80897070, 0x8089a020, 0x80889320 }, 0x1c|2, 0x1c|3 },
+ {{ 0x8089aee0, 0x808964c8, 0x8089a040, 0x80889340 }, 0x878|2, 0x878|3 },
+ {{ 0x8089b760, 0x80897090, 0x8089a8c0, 0x80889bc0 }, 0x3ca4|2, 0x3ca4|3 },
+ {{ 0x8089f404, 0x808adf7c, 0x8089e564, 0x8088d864 }, 0x4|3, 0x4|3 },
+ {{ 0x8089f408, 0x8089bb68, 0x8089e568, 0x8088d868 }, 0x98|2, 0x98|3 },
+ {{ 0x8089f4a4, 0x8089ad34, 0x8089e604, 0x8088d904 }, 0xfc|2, 0xfc|3 },
+ {{ 0x8089f5a0, 0x8089bc08, 0x8089e700, 0x8088da00 }, 0x1a0|2, 0x1a0|3 },
+ {{ 0x8089f740, 0x808a49a0, 0x8089e8a0, 0x8088dba0 }, 0x10|2, 0x10|3 },
+ {{ 0x8089f758, 0x8089ae30, 0x8089e8b8, 0x8088dbb8 }, 0x5c|2, 0x5c|3 },
+ {{ 0x8089f7b4, 0x8089bdbc, 0x8089e914, 0x8088dc14 }, 0x1c4|2, 0x1c4|3 },
+ {{ 0x8089f984, 0x8089bf84, 0x8089eae4, 0x8088dde4 }, 0x5c|2, 0x5c|3 },
+ {{ 0x8089f9e8, 0x8089ae98, 0x8089eb48, 0x8088de48 }, 0x244|2, 0x244|3 },
+ {{ 0x8089fc34, 0x80895124, 0x8089ed94, 0x8088e094 }, 0x4|3, 0x4|3 },
+ {{ 0x8089fc3c, 0x8089bfec, 0x8089ed9c, 0x8088e09c }, 0x14|2, 0x14|3 },
+ {{ 0x8089fc50, 0x8089c000, 0x8089fc50, 0x8088e0b0 }, 0x4|3, 0x4|3 },
+ {{ 0x8089fc54, 0x8089c004, 0x8089edb4, 0x8088e0b4 }, 0x84|2, 0x84|3 },
+ {{ 0x8089fcd8, 0x8089b0e8, 0x8089ee38, 0x8088e138 }, 0x8c|2, 0x8c|3 },
+ {{ 0x8089fd68, 0x8089c088, 0x8089eec8, 0x8088e1c8 }, 0x18|2, 0x18|3 },
+ {{ 0x8089fd80, 0x8089c0a0, 0x8089fd80, 0x8088e1e0 }, 0x4|3, 0x4|3 },
+ {{ 0x8089fd84, 0x8089c0a4, 0x8089eee4, 0x8088e1e4 }, 0x16c|2, 0x16c|3 },
+ {{ 0x8089fef0, 0x8089b178, 0x8089f050, 0x8088e350 }, 0xe4|2, 0xe4|3 },
+ {{ 0x8089ffd4, 0x8089ffa4, 0x8089f134, 0x8088e434 }, 0x4|3, 0x4|3 },
+ {{ 0x8089ffd8, 0x8089b260, 0x8089f138, 0x8088e438 }, 0x90|2, 0x90|3 },
+ {{ 0x808a0068, 0x808a0020, 0x8089f1c8, 0x8088e4c8 }, 0x4|3, 0x4|3 },
+ {{ 0x808a006c, 0x8089c314, 0x8089f1cc, 0x8088e4cc }, 0x4|3, 0x4|3 },
+ {{ 0x808a0070, 0x8089c210, 0x8089f1d0, 0x8088e4d0 }, 0x1c|2, 0x1c|3 },
+ {{ 0x808a0098, 0x8089b2f8, 0x8089f1f8, 0x8088e4f8 }, 0x38|2, 0x38|3 },
+ {{ 0x808a00d0, 0x8089b330, 0x8089f230, 0x808900d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808a00d4, 0x8089b334, 0x8089f234, 0x8088e534 }, 0x4|3, 0x4|3 },
+ {{ 0x808a00d8, 0x808a00d8, 0x808a00d8, 0x808900d8 }, 0x4|3, 0x4|3 },
+ {{ 0x808a00dc, 0x8089b33c, 0x8089f23c, 0x8088e53c }, 0x220|2, 0x220|3 },
+ {{ 0x808a02fc, 0x8089f078, 0x8089f45c, 0x8088e75c }, 0x40|2, 0x40|3 },
+ {{ 0x808a0340, 0x8089c238, 0x8089f4a0, 0x8088e7a0 }, 0x34|2, 0x34|3 },
+ {{ 0x808a0378, 0x8089b5a0, 0x8089f4d8, 0x8088e7d8 }, 0xe4|2, 0xe4|3 },
+ {{ 0x808a0468, 0x8089c270, 0x8089f5c8, 0x8088e8c8 }, 0xd4|2, 0xd4|3 },
+ {{ 0x808a0540, 0x8089b690, 0x8089f6a0, 0x8088e9a0 }, 0xb0|2, 0xb0|3 },
+ {{ 0x808a05f0, 0x8089c348, 0x8089f750, 0x8088ea50 }, 0x7c|2, 0x7c|3 },
+ {{ 0x808a0670, 0x8089b740, 0x8089f7d0, 0x8088ead0 }, 0x1c4|2, 0x1c4|3 },
+ {{ 0x808a0834, 0x8089c3c4, 0x8089f994, 0x8088ec94 }, 0x38|2, 0x38|3 },
+ {{ 0x808a086c, 0x8089b904, 0x8089f9cc, 0x8088eccc }, 0x158|2, 0x158|3 },
+ {{ 0x808a09c4, 0x8089c4c0, 0x8089fb24, 0x8088ee24 }, 0x8|2, 0x8|3 },
+ {{ 0x808a09d0, 0x8089c400, 0x8089fb30, 0x8088ee30 }, 0xc8|2, 0xc8|3 },
+ {{ 0x808a0aa0, 0x8089ba68, 0x8089fc00, 0x8088ef00 }, 0xfc|2, 0xfc|3 },
+ {{ 0x808a0ba0, 0x8089c4d0, 0x8089fd00, 0x8088f000 }, 0x2f0|2, 0x2f0|3 },
+ {{ 0x808a0e94, 0x8089d63c, 0x8089fff4, 0x8088f2f4 }, 0x20|2, 0x20|3 },
+ {{ 0x808a0ed0, 0x8089c7c8, 0x808a0030, 0x8088f330 }, 0x208|1, 0x208|1 },
+ {{ 0x808a10d8, 0x8089c9d0, 0x808a0238, 0x8088f538 }, 0x4|0, 0x2ec|1 },
+ {{ 0x808a13d8, 0x8089d678, 0x808a0538, 0x8088f838 }, 0x2b0|2, 0x2b0|3 },
+ {{ 0x808a168c, 0x8089cccc, 0x808a07ec, 0x8088faec }, 0x6a0|2, 0x6a0|3 },
+ {{ 0x808a1d38, 0x8089d930, 0x808a0e98, 0x80890198 }, 0x14|2, 0x3c|3 },
+ {{ 0x808a1d74, 0x8089d96c, 0x808a0ed4, 0x808901d4 }, 0xc|3, 0xc|3 },
+ {{ 0x808a1d80, 0x8089d378, 0x808a0ee0, 0x808901e0 }, 0x274|2, 0x274|3 },
+ {{ 0x808a1ff4, 0x8089c8ac, 0x808a1154, 0x80890454 }, 0x8|2, 0x8|3 },
+ {{ 0x808a1ffc, 0x8089d5ec, 0x808a115c, 0x8089045c }, 0x8|2, 0x8|3 },
+ {{ 0x808a2050, 0x8089d980, 0x808a11b0, 0x808904b0 }, 0x368|2, 0x368|3 },
+ {{ 0x808a23c0, 0x8089e3f8, 0x808a1520, 0x80890820 }, 0x17c|2, 0x17c|3 },
+ {{ 0x808a253c, 0x8089dcec, 0x808a169c, 0x8089099c }, 0xf4|2, 0xf4|3 },
+ {{ 0x808a2630, 0x8089e578, 0x808a1790, 0x80890a90 }, 0x3c|2, 0x3c|3 },
+ {{ 0x808a266c, 0x808a5d04, 0x808a17cc, 0x80890acc }, 0x4|3, 0x4|3 },
+ {{ 0x808a2670, 0x8089dde0, 0x808a17d0, 0x80890ad0 }, 0x14|2, 0x14|3 },
+ {{ 0x808a2684, 0x8089e5b4, 0x808a17e4, 0x80890ae4 }, 0x1c|2, 0x1c|3 },
+ {{ 0x808a26a8, 0x8089ddf8, 0x808a1808, 0x80890b08 }, 0x3c|2, 0x3c|3 },
+ {{ 0x808a26e8, 0x8089e5d8, 0x808a1848, 0x80890b48 }, 0x20|2, 0x20|3 },
+ {{ 0x808a2710, 0x8089de38, 0x808a1870, 0x80890b70 }, 0x188|2, 0x188|3 },
+ {{ 0x808a289c, 0x8089e5fc, 0x808a19fc, 0x80890cfc }, 0x24|2, 0x24|3 },
+ {{ 0x808a28c4, 0x8089dfc4, 0x808a1a24, 0x80890d24 }, 0x424|2, 0x424|3 },
+ {{ 0x808a2ce8, 0x8089e2a0, 0x808a1e48, 0x80891148 }, 0x8|2, 0x8|3 },
+ {{ 0x808a2cf8, 0x8089f6c0, 0x808a1e58, 0x80891158 }, 0x1e0|2, 0x1e0|3 },
+ {{ 0x808a2edc, 0x8089e624, 0x808a203c, 0x8089133c }, 0x3f8|2, 0x3f8|3 },
+ {{ 0x808a32d4, 0x808a2d34, 0x808a2434, 0x80891734 }, 0x4|3, 0x4|3 },
+ {{ 0x808a32d8, 0x8089f8a8, 0x808a2438, 0x80891738 }, 0xfc|2, 0xfc|3 },
+ {{ 0x808a33e0, 0x8089ea20, 0x808a2540, 0x80891840 }, 0x1d4|2, 0x1d4|3 },
+ {{ 0x808a35b4, 0x8089f9ac, 0x808a2714, 0x80891a14 }, 0x248|2, 0x248|3 },
+ {{ 0x808a37fc, 0x8089ebf4, 0x808a295c, 0x80891c5c }, 0x64|2, 0x64|3 },
+ {{ 0x808a3860, 0x808a0020, 0x808a29c0, 0x80891cc0 }, 0x4|3, 0x4|3 },
+ {{ 0x808a3864, 0x8089fbf4, 0x808a29c4, 0x80891cc4 }, 0x40|2, 0x40|3 },
+ {{ 0x808a38a8, 0x8089ec60, 0x808a2a08, 0x80891d08 }, 0x1e8|1, 0x1e8|1 },
+ {{ 0x808a3a90, 0x8089ee48, 0x808a2bf0, 0x80891ef0 }, 0x4|0, 0x30|1 },
+ {{ 0x808a3ac8, 0x8089fc38, 0x808a2c28, 0x80891f28 }, 0xfc|2, 0xfc|3 },
+ {{ 0x808a3bc8, 0x8089ee80, 0x808a2d28, 0x80892028 }, 0x74|2, 0x74|3 },
+ {{ 0x808a3c3c, 0x8089f114, 0x808a2d9c, 0x8089209c }, 0x4|3, 0x4|3 },
+ {{ 0x808a3c40, 0x8089fd38, 0x808a2da0, 0x808920a0 }, 0x150|2, 0x150|3 },
+ {{ 0x808a3d94, 0x8089eef4, 0x808a2ef4, 0x808921f4 }, 0x94|2, 0x94|3 },
+ {{ 0x808a3e28, 0x8089fe90, 0x808a2f88, 0x80892288 }, 0x18|2, 0x18|3 },
+ {{ 0x808a3e48, 0x8089ef88, 0x808a2fa8, 0x808922a8 }, 0x18c|2, 0x18c|3 },
+ {{ 0x808a3fd8, 0x8089feb0, 0x808a3138, 0x80892438 }, 0xdc|2, 0xdc|3 },
+ {{ 0x808a40b8, 0x8089f118, 0x808a3218, 0x80892518 }, 0x248|2, 0x248|3 },
+ {{ 0x808a4308, 0x8089ff90, 0x808a3468, 0x80892768 }, 0x2c|2, 0x2c|3 },
+ {{ 0x808a4340, 0x8089f368, 0x808a34a0, 0x808927a0 }, 0x150|2, 0x150|3 },
+ {{ 0x808a4490, 0x8089ffc8, 0x808a35f0, 0x808928f0 }, 0x108|2, 0x108|3 },
+ {{ 0x808a45a0, 0x8089f4b8, 0x808a3700, 0x80892a00 }, 0x200|2, 0x200|3 },
+ {{ 0x808a47a4, 0x808a00d4, 0x808a3904, 0x80892c04 }, 0x74|2, 0x74|3 },
+ {{ 0x808a4820, 0x808a2a48, 0x808a3980, 0x80892c80 }, 0x2ec|2, 0x2ec|3 },
+ {{ 0x808a4b10, 0x808a0150, 0x808a3c70, 0x80892f70 }, 0xd44|2, 0xd44|3 },
+ {{ 0x808a5858, 0x808a2d38, 0x808a49b8, 0x80893cb8 }, 0xdc|2, 0xdc|3 },
+ {{ 0x808a5938, 0x808a0e98, 0x808a4a98, 0x80893d98 }, 0x4c|2, 0x4c|3 },
+ {{ 0x808a5984, 0x808a2e14, 0x808a4ae4, 0x80893de4 }, 0x28|2, 0x28|3 },
+ {{ 0x808a59ac, 0x808a0ed4, 0x808a4b0c, 0x80893e0c }, 0x104|1, 0x104|1 },
+ {{ 0x808a5ab0, 0x808a0fd8, 0x808a4c10, 0x80893f10 }, 0x314|0, 0x338|1 },
+ {{ 0x808a5dec, 0x808a0a9c, 0x808a4f4c, 0x8089424c }, 0x4|3, 0x4|3 },
+ {{ 0x808a5df0, 0x808a2e50, 0x808a4f50, 0x80894250 }, 0x254|2, 0x254|3 },
+ {{ 0x808a6044, 0x8088e00c, 0x808a51a4, 0x808944a4 }, 0x4|3, 0x4|3 },
+ {{ 0x808a6048, 0x808a1318, 0x808a51a8, 0x808944a8 }, 0x1544|2, 0x1544|3 },
+ {{ 0x808a759c, 0x808a2864, 0x808a66fc, 0x808959fc }, 0x34|2, 0x34|3 },
+ {{ 0x808a75d8, 0x808a30b0, 0x808a6738, 0x80895a38 }, 0x4c|2, 0x4c|3 },
+ {{ 0x808a7624, 0x808a289c, 0x808a6784, 0x80895a84 }, 0x54|2, 0x54|3 },
+ {{ 0x808a7678, 0x8089aa14, 0x808a67d8, 0x80895ad8 }, 0x4|3, 0x4|3 },
+ {{ 0x808a7688, 0x808a28f8, 0x808a67e8, 0x80895ae8 }, 0x150|2, 0x150|3 },
+ {{ 0x808a77d8, 0x808a9090, 0x808a6938, 0x80895c38 }, 0x600|2, 0x600|3 },
+ {{ 0x808a7de0, 0x808a3108, 0x808a6f40, 0x80896240 }, 0x78|1, 0x78|1 },
+ {{ 0x808a7e58, 0x808a3180, 0x808a6fb8, 0x808962b8 }, 0x4|0, 0x894|1 },
+ {{ 0x808a86f0, 0x808a9698, 0x808a7850, 0x80896b50 }, 0xa44|2, 0xa44|3 },
+ {{ 0x808a9140, 0x808a3a18, 0x808a82a0, 0x808975a0 }, 0x7d0|2, 0x7d0|3 },
+ {{ 0x808a9918, 0x808aa0e8, 0x808a8a78, 0x80897d78 }, 0x114|2, 0x114|3 },
+ {{ 0x808a9a38, 0x808a41f0, 0x808a8b98, 0x80897e98 }, 0x4c|2, 0x4c|3 },
+ {{ 0x808a9a84, 0x808aa204, 0x808a8be4, 0x80897ee4 }, 0x7c|2, 0x7c|3 },
+ {{ 0x808a9b00, 0x8089fe88, 0x808a8c60, 0x80897f60 }, 0x4|3, 0x4|3 },
+ {{ 0x808a9b04, 0x808a423c, 0x808a8c64, 0x80897f64 }, 0x1c8|2, 0x1c8|3 },
+ {{ 0x808a9cd4, 0x808aa284, 0x808a8e34, 0x80898134 }, 0x58|2, 0x58|3 },
+ {{ 0x808a9d34, 0x808a440c, 0x808a8e94, 0x80898194 }, 0xa38|2, 0xa38|3 },
+ {{ 0x808aa770, 0x808aa2e8, 0x808a98d0, 0x80898bd0 }, 0x4c|2, 0x4c|3 },
+ {{ 0x808aa7c4, 0x808ceb9c, 0x808a9924, 0x80898c24 }, 0x4|3, 0x4|3 },
+ {{ 0x808aa7c8, 0x808a4e48, 0x808a9928, 0x80898c28 }, 0x240|2, 0x240|3 },
+ {{ 0x808aaa10, 0x808aa340, 0x808a9b70, 0x80898e70 }, 0x13c|2, 0x13c|3 },
+ {{ 0x808aab58, 0x808a5090, 0x808a9cb8, 0x80898fb8 }, 0x1e0|2, 0x1e0|3 },
+ {{ 0x808aad3c, 0x808aa484, 0x808a9e9c, 0x8089919c }, 0x8c|2, 0x8c|3 },
+ {{ 0x808aadc8, 0x8089f0b8, 0x808a9f28, 0x80899228 }, 0x4|3, 0x4|3 },
+ {{ 0x808aadcc, 0x808a5274, 0x808a9f2c, 0x8089922c }, 0x174|2, 0x174|3 },
+ {{ 0x808aaf40, 0x808aa518, 0x808aa0a0, 0x808993a0 }, 0x84|2, 0x84|3 },
+ {{ 0x808aafc8, 0x808a53e8, 0x808aa128, 0x80899428 }, 0xa0|2, 0xa0|3 },
+ {{ 0x808ab068, 0x808aa5a0, 0x808aa1c8, 0x808994c8 }, 0x54|2, 0x54|3 },
+ {{ 0x808ab0c0, 0x808a54a0, 0x808aa220, 0x80899520 }, 0x288|2, 0x288|3 },
+ {{ 0x808ab348, 0x808aa5f8, 0x808aa4a8, 0x808997a8 }, 0x8c|2, 0x8c|3 },
+ {{ 0x808ab3d8, 0x808a5728, 0x808aa538, 0x80899838 }, 0x5d8|2, 0x5d8|3 },
+ {{ 0x808ab9b4, 0x808aa684, 0x808aab14, 0x80899e14 }, 0xcc|2, 0xcc|3 },
+ {{ 0x808aba84, 0x808a5d04, 0x808aabe4, 0x80899ee4 }, 0xe6c|2, 0xe6c|3 },
+ {{ 0x808ac8f8, 0x808aa758, 0x808aba58, 0x8089ad58 }, 0x24|2, 0x24|3 },
+ {{ 0x808ac91c, 0x8089f6b8, 0x808aba7c, 0x8089ad7c }, 0x4|3, 0x4|3 },
+ {{ 0x808ac920, 0x808a6b78, 0x808aba80, 0x8089ad80 }, 0x4c|2, 0x4c|3 },
+ {{ 0x808ac978, 0x808aa780, 0x808abad8, 0x8089add8 }, 0x160|2, 0x160|3 },
+ {{ 0x808acae0, 0x808a6bd0, 0x808abc40, 0x8089af40 }, 0xe0|2, 0xe0|3 },
+ {{ 0x808acbc0, 0x808aa8e8, 0x808abd20, 0x8089b020 }, 0x134|2, 0x134|3 },
+ {{ 0x808acd2c, 0x808a7a44, 0x808abe8c, 0x8089b18c }, 0x4|3, 0x4|3 },
+ {{ 0x808acd30, 0x808a6cb0, 0x808abe90, 0x8089b190 }, 0x220|2, 0x220|3 },
+ {{ 0x808acf68, 0x808aaa58, 0x808ac0c8, 0x8089b3c8 }, 0x38|2, 0x38|3 },
+ {{ 0x808acfa4, 0x808a13d0, 0x808ac104, 0x8089b404 }, 0x4|3, 0x4|3 },
+ {{ 0x808acfa8, 0x808a6ee8, 0x808ac108, 0x8089b408 }, 0x468|2, 0x468|3 },
+ {{ 0x808ad414, 0x808aaab8, 0x808ac574, 0x8089b874 }, 0x4|3, 0x4|3 },
+ {{ 0x808ad418, 0x808aaa98, 0x808ac578, 0x8089b878 }, 0x25c|2, 0x25c|3 },
+ {{ 0x808ad674, 0x808a7354, 0x808ac7d4, 0x8089bad4 }, 0x62c|2, 0x62c|3 },
+ {{ 0x808adca0, 0x808aacf8, 0x808ace00, 0x8089c100 }, 0xf0|2, 0xf0|3 },
+ {{ 0x808add94, 0x808a7d3c, 0x808acef4, 0x8089c1f4 }, 0x4|3, 0x4|3 },
+ {{ 0x808add98, 0x808a7980, 0x808acef8, 0x8089c1f8 }, 0x784|2, 0x784|3 },
+ {{ 0x808ae520, 0x808aadf0, 0x808ad680, 0x8089c980 }, 0x254|2, 0x254|3 },
+ {{ 0x808ae774, 0x808a6ce0, 0x808ad8d4, 0x8089cbd4 }, 0x4|3, 0x4|3 },
+ {{ 0x808ae778, 0x808ab048, 0x808ad8d8, 0x8089cbd8 }, 0xc|2, 0xc|3 },
+ {{ 0x808ae784, 0x808a6cf0, 0x808ad8e4, 0x8089cbe4 }, 0x4|3, 0x4|3 },
+ {{ 0x808ae788, 0x808ab058, 0x808ad8e8, 0x8089cbe8 }, 0x54|2, 0x54|3 },
+ {{ 0x808ae7e8, 0x808a8108, 0x808ad948, 0x8089cc48 }, 0x178|2, 0x178|3 },
+ {{ 0x808ae978, 0x808ab0b8, 0x808adad8, 0x8089cdd8 }, 0x1c0|2, 0x1c0|3 },
+ {{ 0x808aeb40, 0x808a8298, 0x808adca0, 0x8089cfa0 }, 0x6b4|2, 0x6b4|3 },
+ {{ 0x808af200, 0x808ab280, 0x808ae360, 0x8089d660 }, 0x184|2, 0x184|3 },
+ {{ 0x808af384, 0x808a8954, 0x808ae4e4, 0x8089d7e4 }, 0x18|2, 0x18|3 },
+ {{ 0x808af3a0, 0x808ab408, 0x808ae500, 0x8089d800 }, 0x88|2, 0x88|3 },
+ {{ 0x808af430, 0x808a8970, 0x808ae590, 0x8089d890 }, 0x71c|2, 0x71c|3 },
+ {{ 0x808afb50, 0x808ab498, 0x808aecb0, 0x8089dfb0 }, 0x424|2, 0x424|3 },
+ {{ 0x808aff74, 0x808aff74, 0x808af0d4, 0x8089e3d4 }, 0x4|3, 0x4|3 },
+ {{ 0x808aff78, 0x808ab8c0, 0x808af0d8, 0x8089e3d8 }, 0x3c|2, 0x3c|3 },
+ {{ 0x808affb8, 0x808ad2f0, 0x808af118, 0x8089e418 }, 0x628|2, 0x628|3 },
+ {{ 0x808b05f0, 0x808ab900, 0x808af750, 0x8089ea50 }, 0x19e8|2, 0x19e8|3 },
+ {{ 0x808b1fe0, 0x808ad928, 0x808b1140, 0x808a0440 }, 0x40|2, 0x40|3 },
+ {{ 0x808b2028, 0x808adc60, 0x808b1188, 0x808a0488 }, 0x284|2, 0x284|3 },
+ {{ 0x808b22b4, 0x808ad974, 0x808b1414, 0x808a0714 }, 0x2e0|2, 0x2e0|3 },
+ {{ 0x808b25a0, 0x808adef0, 0x808b1700, 0x808a0a00 }, 0x674|2, 0x680|3 },
+ {{ 0x808b2c20, 0x808ae570, 0x808b1d80, 0x808a1080 }, 0x4|3, 0x4|3 },
+ {{ 0x808b2c24, 0x808ae574, 0x808b1d84, 0x8087dde8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b2c28, 0x808ae578, 0x808b1d88, 0x808a1088 }, 0xf0|2, 0xf0|3 },
+ {{ 0x808b2d34, 0x808ae684, 0x808b1e94, 0x808ab6d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808b2d38, 0x808ae688, 0x808b1e98, 0x808a1198 }, 0x4|3, 0x4|3 },
+ {{ 0x808b2d3c, 0x808ae68c, 0x808b1e9c, 0x808ab6d8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b2d44, 0x808ae694, 0x808b1ea4, 0x808a11a4 }, 0x4|3, 0x4|3 },
+ {{ 0x808b2d4c, 0x808ae69c, 0x808b2ae4, 0x808a11bc }, 0x30|2, 0x30|3 },
+ {{ 0x808b2d7c, 0x808ae6cc, 0x808b1edc, 0x808a11ec }, 0x400|2, 0x40c|3 },
+ {{ 0x808b3188, 0x808aead8, 0x808b22e8, 0x808a15f8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b318c, 0x808aeadc, 0x808b22ec, 0x808a1604 }, 0x8|2, 0x8|3 },
+ {{ 0x808b3194, 0x808aeae4, 0x808b2b7c, 0x808a160c }, 0x4|3, 0x4|3 },
+ {{ 0x808b3198, 0x808aeae8, 0x808b22f8, 0x808a1610 }, 0xa0|2, 0xa0|3 },
+ {{ 0x808b3238, 0x808aeb88, 0x808b2c00, 0x808a16b0 }, 0x4|3, 0x4|3 },
+ {{ 0x808b323c, 0x808aeb8c, 0x808b239c, 0x808a16b4 }, 0x4|3, 0x4|3 },
+ {{ 0x808b3240, 0x808aeb90, 0x808b2c10, 0x808a16b8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b3244, 0x808aeb94, 0x808b23a4, 0x808a16bc }, 0x47c|2, 0x4a0|3 },
+ {{ 0x808b36e4, 0x808af034, 0x808b2844, 0x808a1b5c }, 0x4|3, 0x4|3 },
+ {{ 0x808b3778, 0x808af9a8, 0x808b28d8, 0x808a1bf0 }, 0x48|2, 0x48|3 },
+ {{ 0x808b37c0, 0x808902f4, 0x808b2920, 0x808a1c38 }, 0x4|3, 0x4|3 },
+ {{ 0x808b37c4, 0x808af9f4, 0x808b2924, 0x808a1c3c }, 0x4|3, 0x4|3 },
+ {{ 0x808b37c8, 0x80890300, 0x808b2928, 0x808a1c40 }, 0x8|2, 0x8|3 },
+ {{ 0x808b37d0, 0x808afa00, 0x808b2930, 0x808a1c48 }, 0x18|2, 0x18|3 },
+ {{ 0x808b37e8, 0x80890340, 0x808b2948, 0x808a1c60 }, 0x8|2, 0x8|3 },
+ {{ 0x808b37f0, 0x808afa20, 0x808b2950, 0x808a1c68 }, 0xb4|2, 0xf0|3 },
+ {{ 0x808b38e0, 0x808afb10, 0x808b2a40, 0x808a1d58 }, 0x4|3, 0x4|3 },
+ {{ 0x808b38e8, 0x808af098, 0x808b2a48, 0x808a1d60 }, 0x470|2, 0x48c|3 },
+ {{ 0x808b3d74, 0x808af524, 0x808b2ed4, 0x808a21ec }, 0x1b8|3, 0x1b8|3 },
+ {{ 0x808b3f30, 0x808afb50, 0x808b3090, 0x808a23a8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b3f90, 0x808b8a1c, 0x808b30f0, 0x808a2408 }, 0x30|2, 0x30|3 },
+ {{ 0x808b3fc0, 0x808af6e0, 0x808b3120, 0x808a2438 }, 0x1a0|2, 0x1a0|3 },
+ {{ 0x808b4160, 0x808afbe0, 0x808b32c0, 0x808a25d8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b4164, 0x808af884, 0x808b32c4, 0x808a25dc }, 0x4|3, 0x4|3 },
+ {{ 0x808b4168, 0x808af828, 0x808b32c8, 0x808a25e0 }, 0x11c|2, 0x11c|3 },
+ {{ 0x808b42ac, 0x808ae69c, 0x808b340c, 0x808a2724 }, 0xc|2, 0xc|3 },
+ {{ 0x808b42e0, 0x808af9a0, 0x808b3440, 0x808a2758 }, 0x4|3, 0x4|3 },
+ {{ 0x808b42f0, 0x808afc40, 0x808b3450, 0x808a2768 }, 0xd9c|2, 0xd9c|3 },
+ {{ 0x808b5090, 0x808ce3e8, 0x808b41f0, 0x808a3508 }, 0x4|3, 0x4|3 },
+ {{ 0x808b5094, 0x808c6e50, 0x808b41f4, 0x808a350c }, 0x4|3, 0x4|3 },
+ {{ 0x808b5098, 0x808b28a8, 0x808b41f8, 0x808a3510 }, 0x6c|2, 0x6c|3 },
+ {{ 0x808b5104, 0x808b0114, 0x808b4264, 0x808a357c }, 0x10|2, 0x10|3 },
+ {{ 0x808b5118, 0x808b09e0, 0x808b4278, 0x808a3590 }, 0x5ac|2, 0x5ac|3 },
+ {{ 0x808b5704, 0x808b292c, 0x808b4864, 0x808a3b7c }, 0x94|2, 0x94|3 },
+ {{ 0x808b5798, 0x808b1770, 0x808b48f8, 0x808a3c10 }, 0x8|2, 0x8|3 },
+ {{ 0x808b57a0, 0x808b215c, 0x808b4900, 0x808a3c18 }, 0x48|2, 0x48|3 },
+ {{ 0x808b5818, 0x808b177c, 0x808b4978, 0x808a3c90 }, 0x70|2, 0x70|3 },
+ {{ 0x808b5888, 0x808b0fc8, 0x808b49e8, 0x808a3d00 }, 0xe80|2, 0xf10|3 },
+ {{ 0x808b6798, 0x808b1ed8, 0x808b58f8, 0x808a4c10 }, 0x4c|3, 0x4c|3 },
+ {{ 0x808b6828, 0x808b29d0, 0x808b5988, 0x808a4ca0 }, 0xfc|2, 0xfc|3 },
+ {{ 0x808b6924, 0x808b1edc, 0x808b5a84, 0x808a4d9c }, 0x44|2, 0x44|3 },
+ {{ 0x808b6968, 0x808b2b10, 0x808b5ac8, 0x808a4de0 }, 0x4|3, 0x4|3 },
+ {{ 0x808b696c, 0x808b1f24, 0x808b5acc, 0x808a4de4 }, 0x88|2, 0x9c|3 },
+ {{ 0x808b6a08, 0x808b1fc0, 0x808b5b68, 0x808a4e80 }, 0x4|3, 0x4|3 },
+ {{ 0x808b6a0c, 0x808b1f88, 0x808b5b6c, 0x808a4e84 }, 0x4|3, 0x4|3 },
+ {{ 0x808b6a10, 0x808b2b58, 0x808b5b70, 0x808a4e88 }, 0xe8|2, 0xe8|3 },
+ {{ 0x808b6b00, 0x808b1fc8, 0x808b5c60, 0x808a4f78 }, 0x144|2, 0x144|3 },
+ {{ 0x808b6c78, 0x808d54a0, 0x808b5dd8, 0x808a50f0 }, 0x1c|2, 0x1c|3 },
+ {{ 0x808b6c94, 0x8088bf0c, 0x808b5df4, 0x808a510c }, 0x4|3, 0x4|3 },
+ {{ 0x808b6c98, 0x808b21d8, 0x808b5df8, 0x808a5110 }, 0x684|2, 0x690|3 },
+ {{ 0x808b7328, 0x808b2868, 0x808b6488, 0x808a57a0 }, 0x4|3, 0x4|3 },
+ {{ 0x808b732c, 0x808b2c34, 0x808b648c, 0x808a57a4 }, 0x8|2, 0x8|3 },
+ {{ 0x808b7334, 0x808b2874, 0x808b6494, 0x808a57ac }, 0x4|3, 0x4|3 },
+ {{ 0x808b7338, 0x808b2c40, 0x808b6498, 0x808a57b0 }, 0x4|3, 0x4|3 },
+ {{ 0x808b733c, 0x808ae9ec, 0x808b649c, 0x808a57b4 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7340, 0x808b2880, 0x808b64a0, 0x808a57b8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7344, 0x808ae9f4, 0x808b64a4, 0x808a57bc }, 0x14|2, 0x14|3 },
+ {{ 0x808b7368, 0x808b2c48, 0x808b64c8, 0x808a57e0 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7370, 0x808ba1e0, 0x808b64d0, 0x808a57e8 }, 0x34|2, 0x34|3 },
+ {{ 0x808b73a8, 0x808b2c80, 0x808b6508, 0x808a5820 }, 0x74|2, 0x74|3 },
+ {{ 0x808b743c, 0x808b9ca8, 0x808b659c, 0x808a58b4 }, 0x44|2, 0x44|3 },
+ {{ 0x808b7480, 0x808b2d58, 0x808b65e0, 0x808a58f8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7484, 0x808b9cf0, 0x808b65e4, 0x808a58fc }, 0x4|3, 0x4|3 },
+ {{ 0x808b7488, 0x808bcc7c, 0x808b65e8, 0x808a5900 }, 0x58|2, 0x58|3 },
+ {{ 0x808b74f0, 0x808ba218, 0x808b6650, 0x808a5968 }, 0xe0|2, 0xe0|3 },
+ {{ 0x808b75d0, 0x808b49b4, 0x808b6730, 0x808a5a48 }, 0x4|3, 0x4|3 },
+ {{ 0x808b75d4, 0x808ba2fc, 0x808b6734, 0x808a5a4c }, 0x4|3, 0x4|3 },
+ {{ 0x808b75d8, 0x808b49bc, 0x808b6738, 0x808a5a50 }, 0x4|3, 0x4|3 },
+ {{ 0x808b760c, 0x808b5584, 0x808b676c, 0x808a5a84 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7610, 0x808ba338, 0x808b6770, 0x808a5a88 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7614, 0x808b558c, 0x808b6774, 0x808a5a8c }, 0x2c|2, 0x2c|3 },
+ {{ 0x808b7640, 0x808b8570, 0x808b67a0, 0x808a5ab8 }, 0x34|2, 0x34|3 },
+ {{ 0x808b7674, 0x808ba39c, 0x808b67d4, 0x808a5aec }, 0x4|3, 0x4|3 },
+ {{ 0x808b7678, 0x808b85a8, 0x808b67d8, 0x808a5af0 }, 0xc|2, 0xc|3 },
+ {{ 0x808b7684, 0x808b2dbc, 0x808b67e4, 0x808a5afc }, 0xf0|2, 0x134|3 },
+ {{ 0x808b77b8, 0x808b2ef0, 0x808b6918, 0x808a5c30 }, 0x4|3, 0x4|3 },
+ {{ 0x808b77bc, 0x808cd44c, 0x808b691c, 0x808a5c34 }, 0x4|3, 0x4|3 },
+ {{ 0x808b77c0, 0x808b0dd4, 0x808b6920, 0x808a5c38 }, 0x4|3, 0x4|3 },
+ {{ 0x808b77c8, 0x808b2e08, 0x808b6928, 0x808a5c40 }, 0x8|2, 0x8|3 },
+ {{ 0x808b77d0, 0x808ba3a8, 0x808b6930, 0x808a5c48 }, 0x4c|2, 0xac|3 },
+ {{ 0x808b787c, 0x808ba454, 0x808b69dc, 0x808a5cf4 }, 0x1c|3, 0x1c|3 },
+ {{ 0x808b78e8, 0x808b1990, 0x808b6a48, 0x808a5d60 }, 0x18|2, 0x18|3 },
+ {{ 0x808b7904, 0x808b50ac, 0x808b6a64, 0x808a5d7c }, 0x4|3, 0x4|3 },
+ {{ 0x808b7910, 0x808b2ef0, 0x808b6a70, 0x808a5d88 }, 0x78|2, 0x78|3 },
+ {{ 0x808b7988, 0x808b2f68, 0x808b6ae8, 0x808a6cb8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b798c, 0x808b2f6c, 0x808b6aec, 0x808a5e04 }, 0x10|2, 0x10|3 },
+ {{ 0x808b799c, 0x808b2f7c, 0x808b6afc, 0x808a6cd4 }, 0x4|3, 0x4|3 },
+ {{ 0x808b79a0, 0x808b2f80, 0x808b6b00, 0x808a5e18 }, 0x2b4|2, 0x2b4|3 },
+ {{ 0x808b7c54, 0x808ba474, 0x808b6db4, 0x808a60cc }, 0x5c|2, 0x5c|3 },
+ {{ 0x808b7cb0, 0x808b3290, 0x808b6e10, 0x808a6128 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7cb4, 0x808ba4d4, 0x808b6e14, 0x808a612c }, 0x14|2, 0x14|3 },
+ {{ 0x808b7cc8, 0x808b32a8, 0x808b6e28, 0x808a6140 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7ccc, 0x808ba4ec, 0x808b6e2c, 0x808a6144 }, 0x8|2, 0x8|3 },
+ {{ 0x808b7cd4, 0x808b957c, 0x808b6e34, 0x808a614c }, 0xc|2, 0xc|3 },
+ {{ 0x808b7cec, 0x808ba50c, 0x808b6e4c, 0x808a6164 }, 0x74|3, 0x74|3 },
+ {{ 0x808b7d64, 0x808d390c, 0x808b6ec4, 0x808a61dc }, 0x58|2, 0x58|3 },
+ {{ 0x808b7dc0, 0x808b32c0, 0x808b6f20, 0x808a6238 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7df8, 0x808cd4c8, 0x808b6f58, 0x808a6270 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7dfc, 0x808b4cbc, 0x808b6f5c, 0x808a6274 }, 0x4|3, 0x4|3 },
+ {{ 0x808b7e18, 0x808ba5f8, 0x808b6f78, 0x808a6290 }, 0x68|3, 0x68|3 },
+ {{ 0x808b7e94, 0x808ba668, 0x808b6ff4, 0x808a630c }, 0x4|3, 0x4|3 },
+ {{ 0x808b7e9c, 0x808b9d4c, 0x808b6ffc, 0x808a6314 }, 0x10|2, 0x10|3 },
+ {{ 0x808b7eac, 0x808b32fc, 0x808b700c, 0x808a6324 }, 0x414|2, 0x44c|3 },
+ {{ 0x808b82f8, 0x808b3748, 0x808b7458, 0x808a6770 }, 0x40|3, 0x40|3 },
+ {{ 0x808b8354, 0x808ba674, 0x808b74b4, 0x808a67cc }, 0x34|2, 0x34|3 },
+ {{ 0x808b8388, 0x808b9b88, 0x808b74e8, 0x808a6800 }, 0x4|3, 0x4|3 },
+ {{ 0x808b838c, 0x808ba6ac, 0x808b74ec, 0x808a6804 }, 0x4|3, 0x4|3 },
+ {{ 0x808b8390, 0x808b9b90, 0x808b74f0, 0x808a6808 }, 0x24|2, 0x24|3 },
+ {{ 0x808b83b4, 0x808ba6d4, 0x808b7514, 0x808a682c }, 0x4|3, 0x4|3 },
+ {{ 0x808b83b8, 0x808b9bb8, 0x808b7518, 0x808a6830 }, 0x60|2, 0x60|3 },
+ {{ 0x808b8418, 0x808ba738, 0x808b7578, 0x808a6890 }, 0x4|3, 0x4|3 },
+ {{ 0x808b841c, 0x808b9c1c, 0x808b757c, 0x808a6894 }, 0x4|3, 0x4|3 },
+ {{ 0x808b8420, 0x808b49f0, 0x808b7580, 0x808a6898 }, 0x4|3, 0x4|3 },
+ {{ 0x808b8424, 0x808ba744, 0x808b7584, 0x808a689c }, 0x4|3, 0x4|3 },
+ {{ 0x808b8428, 0x808b49f8, 0x808b7588, 0x808a68a0 }, 0x60|2, 0x60|3 },
+ {{ 0x808b8488, 0x808ba7a8, 0x808b75e8, 0x808a6900 }, 0x4|3, 0x4|3 },
+ {{ 0x808b848c, 0x808b4a5c, 0x808b75ec, 0x808a6904 }, 0x14|2, 0x14|3 },
+ {{ 0x808b84a0, 0x808ba7b4, 0x808b7600, 0x808a6918 }, 0x4|3, 0x4|3 },
+ {{ 0x808b84a4, 0x808b49bc, 0x808b9904, 0x808a8c24 }, 0x34|2, 0x34|3 },
+ {{ 0x808b84dc, 0x808ba7f0, 0x808b763c, 0x808a6954 }, 0x68|3, 0x68|3 },
+ {{ 0x808b8554, 0x808b3f5c, 0x808b840c, 0x808a7724 }, 0x4|3, 0x4|3 },
+ {{ 0x808b8558, 0x808ba860, 0x808b76ac, 0x808a69c4 }, 0x4|3, 0x4|3 },
+ {{ 0x808b855c, 0x808afb14, 0x808b8414, 0x808a772c }, 0x4|3, 0x4|3 },
+ {{ 0x808b8598, 0x808b37a8, 0x808b76e8, 0x808a6a00 }, 0x214|2, 0x214|3 },
+ {{ 0x808b87ac, 0x808ced94, 0x808b78fc, 0x808a6c14 }, 0x14|2, 0x14|3 },
+ {{ 0x808b87c0, 0x808b39d0, 0x808b7910, 0x808a6c28 }, 0x4|3, 0x4|3 },
+ {{ 0x808b87c4, 0x808cedac, 0x808b7914, 0x808a6c2c }, 0x4|3, 0x4|3 },
+ {{ 0x808b87c8, 0x808b87f0, 0x808b7918, 0x808a6c30 }, 0x50|2, 0x50|3 },
+ {{ 0x808b8820, 0x808ba8a0, 0x808b7970, 0x808a6c88 }, 0x68|3, 0x68|3 },
+ {{ 0x808b888c, 0x808c6d6c, 0x808b79dc, 0x808a6cf4 }, 0xc|2, 0xc|3 },
+ {{ 0x808b88c0, 0x808b3a30, 0x808b7a10, 0x808a6d28 }, 0x39c|2, 0x39c|3 },
+ {{ 0x808b8cd4, 0x808b3180, 0x808b7e24, 0x808a713c }, 0x18|2, 0x18|3 },
+ {{ 0x808b8cec, 0x808b3e5c, 0x808b7e3c, 0x808a7154 }, 0x1c|3, 0x1c|3 },
+ {{ 0x808b8d0c, 0x808bb444, 0x808b7e5c, 0x808a7174 }, 0x8|2, 0x8|3 },
+ {{ 0x808b8d14, 0x808b0cf4, 0x808b7e64, 0x808a717c }, 0x8|2, 0x8|3 },
+ {{ 0x808b8d1c, 0x808ba90c, 0x808b7e6c, 0x808a7184 }, 0x444|2, 0x478|3 },
+ {{ 0x808b9194, 0x808bad84, 0x808b82e4, 0x808a75fc }, 0x74|3, 0x74|3 },
+ {{ 0x808b920c, 0x808ae824, 0x808b835c, 0x808a7674 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9210, 0x808bae00, 0x808b8360, 0x808a7678 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9214, 0x808ae82c, 0x808b8364, 0x808a767c }, 0x8|2, 0x8|3 },
+ {{ 0x808b9220, 0x808b3ec0, 0x808b8370, 0x808a7688 }, 0x194|2, 0x194|3 },
+ {{ 0x808b93b4, 0x808b88b0, 0x808b8504, 0x808a781c }, 0x2c|2, 0x2c|3 },
+ {{ 0x808b9414, 0x808b40b4, 0x808b8564, 0x808a787c }, 0x4|3, 0x4|3 },
+ {{ 0x808b9450, 0x808bae10, 0x808b85a0, 0x808a78b8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b94b4, 0x808af5b0, 0x808b8604, 0x808a791c }, 0x4|3, 0x4|3 },
+ {{ 0x808b94b8, 0x808b40f0, 0x808b8608, 0x808a7920 }, 0x8c|2, 0x8c|3 },
+ {{ 0x808b9544, 0x808c32bc, 0x808b8694, 0x808a79ac }, 0x40|2, 0x40|3 },
+ {{ 0x808b95b4, 0x808bae74, 0x808b8704, 0x808a7a1c }, 0x334|2, 0x378|3 },
+ {{ 0x808b992c, 0x808bb1ec, 0x808b8a7c, 0x808a7d94 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9980, 0x808bb240, 0x808b8ad0, 0x808a7df0 }, 0xc|2, 0xc|3 },
+ {{ 0x808b998c, 0x808b41ec, 0x808b8adc, 0x808a7dfc }, 0xf8|2, 0xf8|3 },
+ {{ 0x808b9a84, 0x808b4294, 0x808b8bd4, 0x808a7ef4 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9a98, 0x808b42f8, 0x808b8be8, 0x808a7f08 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9a9c, 0x808cd8d4, 0x808b8bec, 0x808a7f0c }, 0x4|3, 0x4|3 },
+ {{ 0x808b9ad0, 0x808bb250, 0x808b8c20, 0x808a7f40 }, 0x7c|3, 0x7c|3 },
+ {{ 0x808b9b50, 0x808b89e0, 0x808b8ca0, 0x808a7fc0 }, 0x34|2, 0x34|3 },
+ {{ 0x808b9b84, 0x808bb304, 0x808b8cd4, 0x808a7ff4 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9b88, 0x808b8a18, 0x808b8cd8, 0x808a7ff8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9b90, 0x808b8b18, 0x808b8ce0, 0x808a8000 }, 0x30|2, 0x30|3 },
+ {{ 0x808b9bc0, 0x808b8b88, 0x808b8d10, 0x808a8030 }, 0x34|2, 0x34|3 },
+ {{ 0x808b9bf4, 0x808b467c, 0x808b8d44, 0x808a8064 }, 0x8|2, 0x8|3 },
+ {{ 0x808b9c00, 0x808bb340, 0x808b8d50, 0x808a8070 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9c04, 0x808b53bc, 0x808b8d54, 0x808a8074 }, 0x1c|2, 0x1c|3 },
+ {{ 0x808b9c20, 0x808b31b8, 0x808b8d70, 0x808a8090 }, 0x40|2, 0x40|3 },
+ {{ 0x808b9c68, 0x808b4330, 0x808b8db8, 0x808a80d8 }, 0x304|2, 0x304|3 },
+ {{ 0x808b9f70, 0x808bc8b4, 0x808b90c0, 0x808a83e0 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9f74, 0x808b463c, 0x808b90c4, 0x808a83e4 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9f78, 0x808bc8bc, 0x808b90c8, 0x808a83e8 }, 0x4|3, 0x4|3 },
+ {{ 0x808b9f80, 0x808bb3a8, 0x808b90d0, 0x808a83f0 }, 0x80|3, 0x80|3 },
+ {{ 0x808ba030, 0x808b8b18, 0x808b9180, 0x808a84a0 }, 0x2c|2, 0x2c|3 },
+ {{ 0x808ba05c, 0x808b4644, 0x808b91ac, 0x808a84cc }, 0x38|2, 0x38|3 },
+ {{ 0x808ba0a0, 0x808bb488, 0x808b91f0, 0x808a8510 }, 0x33c|2, 0x33c|3 },
+ {{ 0x808ba3dc, 0x808babb8, 0x808b952c, 0x808a884c }, 0x4|3, 0x4|3 },
+ {{ 0x808ba3e0, 0x808bb7c8, 0x808b9530, 0x808a8850 }, 0x4|3, 0x4|3 },
+ {{ 0x808ba3e4, 0x808babc0, 0x808b9534, 0x808a8854 }, 0x8|2, 0x8|3 },
+ {{ 0x808ba3ec, 0x808bb7d4, 0x808b953c, 0x808a885c }, 0x4|3, 0x4|3 },
+ {{ 0x808ba44c, 0x808b6ee4, 0x808b959c, 0x808a88bc }, 0x4|3, 0x4|3 },
+ {{ 0x808ba450, 0x808bb838, 0x808b95a0, 0x808a88c0 }, 0x4|3, 0x4|3 },
+ {{ 0x808ba454, 0x808b6eec, 0x808b95a4, 0x808a88c4 }, 0x8|2, 0x8|3 },
+ {{ 0x808ba45c, 0x808bb844, 0x808b95ac, 0x808a88cc }, 0x4|3, 0x4|3 },
+ {{ 0x808ba460, 0x808b6ef8, 0x808b95b0, 0x808a88d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808ba464, 0x808ce714, 0x808b95b4, 0x808a88d4 }, 0x10|2, 0x10|3 },
+ {{ 0x808ba478, 0x808d50c8, 0x808b95c8, 0x808a88e8 }, 0x4|3, 0x4|3 },
+ {{ 0x808ba480, 0x808b4688, 0x808b95d0, 0x808a88f0 }, 0x6c4|2, 0x6fc|3 },
+ {{ 0x808bab7c, 0x808b4d84, 0x808b9ccc, 0x808a8fec }, 0x4|3, 0x4|3 },
+ {{ 0x808bab84, 0x808ba01c, 0x808b9cd4, 0x808a8ff4 }, 0x2c|2, 0x2c|3 },
+ {{ 0x808babb0, 0x808cd4b8, 0x808b9d00, 0x808a9020 }, 0x8|2, 0x8|3 },
+ {{ 0x808babb8, 0x808b4dc0, 0x808b9d08, 0x808a9028 }, 0x4|3, 0x4|3 },
+ {{ 0x808babbc, 0x808cd4c4, 0x808b9d0c, 0x808a902c }, 0x8|2, 0x8|3 },
+ {{ 0x808babc4, 0x808bb864, 0x808b9d14, 0x808a9034 }, 0x2c8|2, 0x2d8|3 },
+ {{ 0x808bae9c, 0x808bbb3c, 0x808b9fec, 0x808a930c }, 0x4|3, 0x4|3 },
+ {{ 0x808baec4, 0x808b4dcc, 0x808ba014, 0x808a9334 }, 0x29c|2, 0x29c|3 },
+ {{ 0x808bb194, 0x808bb84c, 0x808ba2e4, 0x808a9604 }, 0x4|3, 0x4|3 },
+ {{ 0x808bb198, 0x808bbb58, 0x808ba2e8, 0x808a9608 }, 0x27c|2, 0x288|3 },
+ {{ 0x808bb420, 0x808bbde0, 0x808ba570, 0x808a9890 }, 0x4|3, 0x4|3 },
+ {{ 0x808bb428, 0x808c4948, 0x808ba578, 0x808a9898 }, 0x4|3, 0x4|3 },
+ {{ 0x808bb42c, 0x808ae5c4, 0x808ba57c, 0x808a989c }, 0x4|3, 0x4|3 },
+ {{ 0x808bb430, 0x808bbdf0, 0x808ba580, 0x808a98a0 }, 0x4|3, 0x4|3 },
+ {{ 0x808bb434, 0x808ae5cc, 0x808ba584, 0x808a98a4 }, 0x4|3, 0x4|3 },
+ {{ 0x808bb43c, 0x808b50b4, 0x808ba58c, 0x808a98ac }, 0x248|2, 0x270|3 },
+ {{ 0x808bb6ac, 0x808b5324, 0x808ba7fc, 0x808a9b1c }, 0x98|3, 0x98|3 },
+ {{ 0x808bb770, 0x808b32c8, 0x808ba8c0, 0x808a9be0 }, 0x30|2, 0x30|3 },
+ {{ 0x808bb7a0, 0x808bbdf8, 0x808ba8f0, 0x808a9c10 }, 0x8|2, 0x8|3 },
+ {{ 0x808bb7b0, 0x808b9fc0, 0x808ba900, 0x808a9c20 }, 0x4|3, 0x4|3 },
+ {{ 0x808bb7b4, 0x808bbe0c, 0x808ba904, 0x808a9c24 }, 0x4|3, 0x4|3 },
+ {{ 0x808bb7b8, 0x808b9fc8, 0x808ba908, 0x808a9c28 }, 0x24|2, 0x24|3 },
+ {{ 0x808bb7dc, 0x808bbe34, 0x808ba92c, 0x808a9c4c }, 0x4|3, 0x4|3 },
+ {{ 0x808bb7e0, 0x808b9ff0, 0x808ba930, 0x808a9c50 }, 0x60|2, 0x60|3 },
+ {{ 0x808bb840, 0x808bbe98, 0x808ba990, 0x808a9cb0 }, 0x4|3, 0x4|3 },
+ {{ 0x808bb844, 0x808ba054, 0x808ba994, 0x808a9cb4 }, 0x4|3, 0x4|3 },
+ {{ 0x808bb848, 0x808b5418, 0x808ba998, 0x808a9cb8 }, 0x108|2, 0x108|3 },
+ {{ 0x808bb950, 0x808b5520, 0x8088eb38, 0x808a9dc0 }, 0x4|3, 0x4|3 },
+ {{ 0x808bb954, 0x808b5524, 0x808baaa4, 0x808a9dc4 }, 0x10e8|2, 0x10e8|3 },
+ {{ 0x808bca3c, 0x808b660c, 0x808bbb8c, 0x808ad7fc }, 0x4|3, 0x4|3 },
+ {{ 0x808bca40, 0x808b6610, 0x808bbb90, 0x808aaeb0 }, 0x40|2, 0x40|3 },
+ {{ 0x808bca80, 0x807e2594, 0x807eb4ac, 0x807da200 }, 0x4|3, 0x4|3 },
+ {{ 0x808bca84, 0x807e52f0, 0x807eec6c, 0x807dd9c0 }, 0x4|3, 0x4|3 },
+ {{ 0x808bca8c, 0x808b665c, 0x808bbbdc, 0x808aaefc }, 0x1ed0|2, 0x1ed0|3 },
+ {{ 0x808be95c, 0x808b8fbc, 0x808bdaac, 0x808acdcc }, 0x3c|2, 0x3c|3 },
+ {{ 0x808be998, 0x808b8568, 0x808bdae8, 0x808ace08 }, 0x4|3, 0x4|3 },
+ {{ 0x808be99c, 0x808b8ffc, 0x808bdaec, 0x808ace0c }, 0x4|3, 0x4|3 },
+ {{ 0x808be9d0, 0x808d41b0, 0x808bdb20, 0x808ace40 }, 0x4|3, 0x4|3 },
+ {{ 0x808be9d4, 0x808b85a4, 0x808bdb24, 0x808ace44 }, 0x4|3, 0x4|3 },
+ {{ 0x808be9e4, 0x808b4ff4, 0x808bdb34, 0x808ace54 }, 0x4|3, 0x4|3 },
+ {{ 0x808be9f0, 0x808bbea8, 0x808bdb40, 0x808ace60 }, 0x68|3, 0x68|3 },
+ {{ 0x808bea5c, 0x808b3fa8, 0x808bdbac, 0x808acecc }, 0x20|2, 0x20|3 },
+ {{ 0x808beaac, 0x808b8d88, 0x808bdbfc, 0x808acf1c }, 0x8|2, 0x8|3 },
+ {{ 0x808beab4, 0x808b8454, 0x808bdc04, 0x808acf24 }, 0x4|3, 0x4|3 },
+ {{ 0x808beab8, 0x808b85c0, 0x808bdc08, 0x808acf28 }, 0x588|2, 0x588|3 },
+ {{ 0x808bf040, 0x808b8b88, 0x808be190, 0x808ad4b0 }, 0x47c|2, 0x47c|3 },
+ {{ 0x808bf4bc, 0x808b9004, 0x808be60c, 0x808aec10 }, 0x4|3, 0x4|3 },
+ {{ 0x808bf4c0, 0x808b9008, 0x808be610, 0x808ad930 }, 0x1f4|2, 0x21c|3 },
+ {{ 0x808bf6dc, 0x808b9224, 0x808be82c, 0x808adb4c }, 0x98|3, 0x98|3 },
+ {{ 0x808bf774, 0x808d40ac, 0x808be8c4, 0x808adbe4 }, 0x60|2, 0x60|3 },
+ {{ 0x808bf7d8, 0x808bbf70, 0x808be928, 0x808adc48 }, 0x84|2, 0x84|3 },
+ {{ 0x808bf85c, 0x808d3934, 0x808be9ac, 0x808adccc }, 0x30|2, 0x30|3 },
+ {{ 0x808bf88c, 0x808bb95c, 0x808be9dc, 0x808adcfc }, 0x4|3, 0x4|3 },
+ {{ 0x808bf890, 0x808bc028, 0x808be9e0, 0x808add00 }, 0x4|3, 0x4|3 },
+ {{ 0x808bf894, 0x808bb964, 0x808be9e4, 0x808add04 }, 0x4|3, 0x4|3 },
+ {{ 0x808bf898, 0x808b92e8, 0x808be9e8, 0x808add08 }, 0x324|2, 0x324|3 },
+ {{ 0x808bfc18, 0x808bfc18, 0x808bfc18, 0x808afc18 }, 0x4|3, 0x4|3 },
+ {{ 0x808bfc48, 0x808bc030, 0x808bed98, 0x808ae0b8 }, 0x40|2, 0x40|3 },
+ {{ 0x808bfc88, 0x808b9f68, 0x808bedd8, 0x808ae0f8 }, 0x4|3, 0x4|3 },
+ {{ 0x808bfc8c, 0x808bc074, 0x808beddc, 0x808ae0fc }, 0x4|3, 0x4|3 },
+ {{ 0x808bfc90, 0x808b9f70, 0x808bede0, 0x808ae100 }, 0x3c|2, 0x3c|3 },
+ {{ 0x808bfccc, 0x808bc0b4, 0x808bee1c, 0x808ae13c }, 0x4|3, 0x4|3 },
+ {{ 0x808bfcd0, 0x808b9fb0, 0x808bee20, 0x808ae140 }, 0x3c|2, 0x3c|3 },
+ {{ 0x808bfd0c, 0x808bc0f4, 0x808bee5c, 0x808ae17c }, 0x4|3, 0x4|3 },
+ {{ 0x808bfd10, 0x808b9ff0, 0x808bee60, 0x808ae180 }, 0x60|2, 0x60|3 },
+ {{ 0x808bfd70, 0x808bc158, 0x808beec0, 0x808ae1e0 }, 0x4|3, 0x4|3 },
+ {{ 0x808bfd74, 0x808b19dc, 0x808beec4, 0x808ae1e4 }, 0x4|3, 0x4|3 },
+ {{ 0x808bfd78, 0x808b96c8, 0x808beec8, 0x808ae1e8 }, 0xd4|2, 0xd4|3 },
+ {{ 0x808bfe4c, 0x808bfe4c, 0x808bef9c, 0x808ae2bc }, 0x4|3, 0x4|3 },
+ {{ 0x808bfe50, 0x808b97a0, 0x808befa0, 0x808ae2c0 }, 0x78|2, 0x78|3 },
+ {{ 0x808bfec8, 0x808bfec8, 0x808bf018, 0x808ae338 }, 0x4|3, 0x4|3 },
+ {{ 0x808bfecc, 0x808b981c, 0x808bf01c, 0x808ae33c }, 0x250|2, 0x250|3 },
+ {{ 0x808c011c, 0x808b9a6c, 0x808bf26c, 0x808b011c }, 0x4|3, 0x4|3 },
+ {{ 0x808c0120, 0x808b9a70, 0x808bf270, 0x808ae590 }, 0x7c|2, 0x7c|3 },
+ {{ 0x808c019c, 0x808c019c, 0x808c019c, 0x808b019c }, 0x4|3, 0x4|3 },
+ {{ 0x808c01a0, 0x808b9af0, 0x808bf2f0, 0x808ae610 }, 0x60|2, 0x60|3 },
+ {{ 0x808c0200, 0x808b9b50, 0x808c0200, 0x808ae670 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0204, 0x808b9b54, 0x808bf354, 0x808ae674 }, 0x60|2, 0x60|3 },
+ {{ 0x808c0264, 0x808c0264, 0x808c0264, 0x808b0264 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0268, 0x808b9bb8, 0x808bf3b8, 0x808ae6d8 }, 0x60|2, 0x60|3 },
+ {{ 0x808c02c8, 0x808b9c18, 0x808bf418, 0x808b02c8 }, 0x4|3, 0x4|3 },
+ {{ 0x808c02cc, 0x808b9c1c, 0x808bf41c, 0x808ae73c }, 0x314|2, 0x314|3 },
+ {{ 0x808c0618, 0x808bc070, 0x808bf768, 0x808aea88 }, 0x44|2, 0x44|3 },
+ {{ 0x808c065c, 0x808b9fac, 0x808bf7ac, 0x808aeacc }, 0x4|3, 0x4|3 },
+ {{ 0x808c0660, 0x808bc0b8, 0x808bf7b0, 0x808aead0 }, 0x10|2, 0x10|3 },
+ {{ 0x808c069c, 0x808b9fec, 0x808bf7ec, 0x808aeb0c }, 0x68|3, 0x68|3 },
+ {{ 0x808c0708, 0x808ba898, 0x808bf858, 0x808aeb78 }, 0x8|2, 0x8|3 },
+ {{ 0x808c0710, 0x808bc168, 0x808bf860, 0x808aeb80 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0714, 0x808ba8a4, 0x808bf864, 0x808aeb84 }, 0x5c|2, 0x5c|3 },
+ {{ 0x808c0770, 0x808b91c0, 0x808bf8c0, 0x808aebe0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0774, 0x808bc1cc, 0x808bf8c4, 0x808aebe4 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0778, 0x808b91c8, 0x808bf8c8, 0x808aebe8 }, 0x8|2, 0x8|3 },
+ {{ 0x808c0780, 0x808b4300, 0x808bf8d0, 0x808aebf0 }, 0x30|2, 0x30|3 },
+ {{ 0x808c07b0, 0x808ba060, 0x808bf900, 0x808aec20 }, 0x13c|2, 0x13c|3 },
+ {{ 0x808c0960, 0x808bc208, 0x808bfab0, 0x808aedd0 }, 0x20|2, 0x20|3 },
+ {{ 0x808c0980, 0x808d44e8, 0x808bfad0, 0x808aedf0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0984, 0x808ba04c, 0x808bfad4, 0x808aedf4 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0988, 0x808bc230, 0x808bfad8, 0x808aedf8 }, 0x4|3, 0x4|3 },
+ {{ 0x808c098c, 0x808bc36c, 0x808bfadc, 0x808aedfc }, 0x3a4|2, 0x3a4|3 },
+ {{ 0x808c0d30, 0x808d41b0, 0x808bfe80, 0x808af1a0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0d34, 0x808bc714, 0x808bfe84, 0x808af1a4 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0d3c, 0x808d42cc, 0x808bfe8c, 0x808af1ac }, 0x4|3, 0x4|3 },
+ {{ 0x808c0d4c, 0x808bffbc, 0x808bfe9c, 0x808b4f54 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0d50, 0x808c3184, 0x808bfea0, 0x808b5d84 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0d54, 0x808bc23c, 0x808bfea4, 0x808b5d88 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0d58, 0x808bc240, 0x808bfea8, 0x808af1c8 }, 0x8|2, 0x8|3 },
+ {{ 0x808c0d60, 0x808bc248, 0x808bfeb0, 0x808af1f8 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0d64, 0x808bc24c, 0x808bfeb4, 0x808af1d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0d68, 0x808bc250, 0x808bfeb8, 0x808af200 }, 0x28|2, 0x28|3 },
+ {{ 0x808c0d90, 0x808bc278, 0x808bfee0, 0x808af200 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0d94, 0x808bc27c, 0x808bfee4, 0x808af22c }, 0x24|2, 0x24|3 },
+ {{ 0x808c0db8, 0x808bc2a0, 0x808bff08, 0x808af228 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0dbc, 0x808bc2a4, 0x808bff0c, 0x808af254 }, 0x60|2, 0x60|3 },
+ {{ 0x808c0e1c, 0x808bc304, 0x808bff6c, 0x808af28c }, 0x4|3, 0x4|3 },
+ {{ 0x808c0e20, 0x808bc308, 0x808bff70, 0x808af2b8 }, 0x64|2, 0x64|3 },
+ {{ 0x808c0e88, 0x808bc738, 0x808bffd8, 0x808af320 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0e8c, 0x808bc734, 0x808bffdc, 0x808af324 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0e90, 0x808bc370, 0x808bffe0, 0x808af328 }, 0x4|3, 0x4|3 },
+ {{ 0x808c0e94, 0x808bc73c, 0x808bffe4, 0x808af32c }, 0x1c54|2, 0x1c54|3 },
+ {{ 0x808c2ae8, 0x808c9f9c, 0x808c1c38, 0x808b0f80 }, 0x4|3, 0x4|3 },
+ {{ 0x808c2aec, 0x808be394, 0x808c1c3c, 0x808b0f84 }, 0x4|3, 0x4|3 },
+ {{ 0x808c2af0, 0x808c9fa4, 0x808c1c40, 0x808b0f88 }, 0x8|2, 0x8|3 },
+ {{ 0x808c2be0, 0x808c0aa8, 0x808c1d30, 0x808b1078 }, 0x10|2, 0x1e0|3 },
+ {{ 0x808c2dc0, 0x808c0c88, 0x808c1f10, 0x808b1258 }, 0x4|3, 0x4|3 },
+ {{ 0x808c2eac, 0x808cb7a4, 0x808c1ffc, 0x808b1344 }, 0x4|3, 0x4|3 },
+ {{ 0x808c2eb0, 0x808c0d78, 0x808c2000, 0x808b1348 }, 0x4|3, 0x4|3 },
+ {{ 0x808c2eb4, 0x808cb7ac, 0x808c2004, 0x808b134c }, 0x4|3, 0x4|3 },
+ {{ 0x808c2eb8, 0x808c9648, 0x808c2008, 0x808b1350 }, 0xc8|2, 0xc8|3 },
+ {{ 0x808c2f80, 0x808c77c8, 0x808c20d0, 0x808b1418 }, 0x8|2, 0x8|3 },
+ {{ 0x808c2f9c, 0x808c239c, 0x808c20ec, 0x808b1434 }, 0x4|3, 0x4|3 },
+ {{ 0x808c2fa0, 0x808be488, 0x808c20f0, 0x808b1438 }, 0x4|3, 0x4|3 },
+ {{ 0x808c3090, 0x808c0e68, 0x808c21e0, 0x808b1528 }, 0x794|2, 0x794|3 },
+ {{ 0x808c3824, 0x808c1114, 0x808c2974, 0x808b1cbc }, 0x4|3, 0x4|3 },
+ {{ 0x808c3828, 0x808c1600, 0x808c2978, 0x808b1cc0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c382c, 0x808c111c, 0x808c297c, 0x808b1cc4 }, 0x50|2, 0x50|3 },
+ {{ 0x808c3920, 0x808d1560, 0x808c2a70, 0x808b1db8 }, 0x4|3, 0x4|3 },
+ {{ 0x808c395c, 0x808cb7a4, 0x808c2aac, 0x808b1df4 }, 0x4|3, 0x4|3 },
+ {{ 0x808c3960, 0x808be578, 0x808c2ab0, 0x808b1df8 }, 0xf4|2, 0xf4|3 },
+ {{ 0x808c3a54, 0x808bfbfc, 0x808c2ba4, 0x808b1eec }, 0xe8|2, 0xe8|3 },
+ {{ 0x808c3b40, 0x808c1738, 0x808c2c90, 0x808b1fd8 }, 0x7c4|2, 0x7c4|3 },
+ {{ 0x808c4308, 0x808be758, 0x808c3458, 0x808b27a0 }, 0x5a0|2, 0x5a0|3 },
+ {{ 0x808c48a8, 0x808c2360, 0x808c39f8, 0x808b2d40 }, 0x4|3, 0x4|3 },
+ {{ 0x808c48ac, 0x808cab6c, 0x808c39fc, 0x808b2d44 }, 0x38|2, 0x38|3 },
+ {{ 0x808c48e4, 0x808c1efc, 0x808c3a34, 0x808b2d7c }, 0x8|2, 0x8|3 },
+ {{ 0x808c48ec, 0x808be80c, 0x808c3a3c, 0x808b2d84 }, 0x4|3, 0x4|3 },
+ {{ 0x808c49dc, 0x808c2a0c, 0x808c3b2c, 0x808b2e74 }, 0x1c|2, 0x1c|3 },
+ {{ 0x808c4a04, 0x808bed34, 0x808c3b54, 0x808b2e9c }, 0x16c|2, 0x16c|3 },
+ {{ 0x808c4ba4, 0x808c201c, 0x808c3cf4, 0x808b303c }, 0x388|2, 0x474|3 },
+ {{ 0x808c5018, 0x808c2490, 0x808c4168, 0x808b34b0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c5104, 0x808cb7a4, 0x808c4254, 0x808b359c }, 0x4|3, 0x4|3 },
+ {{ 0x808c5108, 0x808c2580, 0x808c4258, 0x808b35a0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c510c, 0x808cb7ac, 0x808c425c, 0x808b35a4 }, 0x4|3, 0x4|3 },
+ {{ 0x808c5110, 0x808c9648, 0x808c4260, 0x808b35a8 }, 0xe4|2, 0xe4|3 },
+ {{ 0x808c51f4, 0x808beed4, 0x808c4344, 0x808b368c }, 0x54c|2, 0x54c|3 },
+ {{ 0x808c5744, 0x808cc9ec, 0x808c4894, 0x808b3bdc }, 0x4|3, 0x4|3 },
+ {{ 0x808c5748, 0x808c2670, 0x808c4898, 0x808b3be0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c574c, 0x808cc9f4, 0x808c489c, 0x808b3be4 }, 0xb0|2, 0xb0|3 },
+ {{ 0x808c57fc, 0x808c16fc, 0x808c494c, 0x808b3c94 }, 0x2c|2, 0x2c|3 },
+ {{ 0x808c5834, 0x808bf424, 0x808c4984, 0x808b3ccc }, 0x408|2, 0x408|3 },
+ {{ 0x808c5c74, 0x808c275c, 0x808c4dc4, 0x808b410c }, 0x14|2, 0x14|3 },
+ {{ 0x808c5c8c, 0x808d870c, 0x808c4ddc, 0x808b4124 }, 0xa4|2, 0xa4|3 },
+ {{ 0x808c5d30, 0x808b1d88, 0x808c4e80, 0x808b41c8 }, 0x3c|2, 0x3c|3 },
+ {{ 0x808c5d70, 0x808bf868, 0x808c4ec0, 0x808b4208 }, 0x1a4|2, 0x1a4|3 },
+ {{ 0x808c5f14, 0x808c0c84, 0x808c5064, 0x808b43ac }, 0x4|3, 0x4|3 },
+ {{ 0x808c5f18, 0x808bfa10, 0x808c5068, 0x808b43b0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c6000, 0x808c2b78, 0x808c5150, 0x808b4498 }, 0x8|2, 0x8|3 },
+ {{ 0x808c6008, 0x808bfb00, 0x808c5158, 0x808b44a0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c60f8, 0x808c2858, 0x808c5248, 0x808b4590 }, 0x32c|2, 0x32c|3 },
+ {{ 0x808c6424, 0x808bfa14, 0x808c5574, 0x808b48bc }, 0xec|2, 0xec|3 },
+ {{ 0x808c6510, 0x808c2c70, 0x808c5660, 0x808b49a8 }, 0x4|3, 0x4|3 },
+ {{ 0x808c6514, 0x808bfb04, 0x808c5664, 0x808b49ac }, 0xf8|2, 0xf8|3 },
+ {{ 0x808c66f8, 0x808c2d60, 0x808c5848, 0x808b4b90 }, 0x4|3, 0x4|3 },
+ {{ 0x808c66fc, 0x808c0f5c, 0x808c584c, 0x808b4b94 }, 0xb0|2, 0xb0|3 },
+ {{ 0x808c67e8, 0x808bfce8, 0x808c5938, 0x808b4c80 }, 0x680|2, 0x680|3 },
+ {{ 0x808c6e68, 0x808be188, 0x808c5fb8, 0x808b5300 }, 0xec|2, 0xec|3 },
+ {{ 0x808c6f54, 0x808c2b6c, 0x808c60a4, 0x808b53ec }, 0x4|3, 0x4|3 },
+ {{ 0x808c6f58, 0x808c0458, 0x808c60a8, 0x808b53f0 }, 0x4|3, 0x4|3 },
+ {{ 0x808c6f5c, 0x808c2b74, 0x808c60ac, 0x808b53f4 }, 0x4|3, 0x4|3 },
+ {{ 0x808c6f60, 0x808c0f50, 0x808c60b0, 0x808b53f8 }, 0x8|2, 0x8|3 },
+ {{ 0x808c6f68, 0x808c2e50, 0x808c60b8, 0x808b5400 }, 0x4|3, 0x4|3 },
+ {{ 0x808c6f6c, 0x808c0f5c, 0x808c60bc, 0x808b5404 }, 0xb0|2, 0xb0|3 },
+ {{ 0x808c7050, 0x808c0460, 0x808c61a0, 0x808b54e8 }, 0x49c|2, 0x49c|3 },
+ {{ 0x808c7524, 0x808c2f3c, 0x808c6674, 0x808b59bc }, 0x140|2, 0x140|3 },
+ {{ 0x808c7664, 0x808c0934, 0x808c67b4, 0x808b5afc }, 0x168|2, 0x168|3 },
+ {{ 0x808c77d0, 0x808c6054, 0x808c6920, 0x808b5c68 }, 0x4|3, 0x4|3 },
+ {{ 0x808c77d4, 0x808c0aa4, 0x808c6924, 0x808b5c6c }, 0x4|3, 0x4|3 },
+ {{ 0x808c77d8, 0x808c3080, 0x808c6928, 0x808b5c70 }, 0x1c|2, 0x1c|3 },
+ {{ 0x808c77f4, 0x808c32c0, 0x808c6944, 0x808b5c8c }, 0x3c|2, 0x3c|3 },
+ {{ 0x808c7830, 0x808c4530, 0x808c6980, 0x808b5cc8 }, 0x30|2, 0x30|3 },
+ {{ 0x808c7860, 0x808c4960, 0x808c69b0, 0x808b5cf8 }, 0x4|3, 0x4|3 },
+ {{ 0x808c7864, 0x808bd76c, 0x808c69b4, 0x808b5cfc }, 0xc|2, 0xc|3 },
+ {{ 0x808c7870, 0x808c3108, 0x808c69c0, 0x808b5d08 }, 0x224|2, 0x224|3 },
+ {{ 0x808c7a94, 0x808c496c, 0x808c6be4, 0x808b5f2c }, 0x50|2, 0x5c|3 },
+ {{ 0x808c7af0, 0x808c49c8, 0x808c6c40, 0x808b5f88 }, 0x8|3, 0x8|3 },
+ {{ 0x808c7af8, 0x808d6014, 0x808c6c48, 0x808b5f90 }, 0x4|3, 0x4|3 },
+ {{ 0x808c7afc, 0x808c4154, 0x808c6c4c, 0x808b5f94 }, 0x4|3, 0x4|3 },
+ {{ 0x808c7b00, 0x808c3330, 0x808c6c50, 0x808b5f98 }, 0x1030|2, 0x1088|3 },
+ {{ 0x808c8b88, 0x808c43b8, 0x808c7cd8, 0x808b7020 }, 0x4|3, 0x4|3 },
+ {{ 0x808c8cb8, 0x808c49d8, 0x808c7e08, 0x808b7150 }, 0x248|2, 0x248|3 },
+ {{ 0x808c8f88, 0x808b23c8, 0x808c80d8, 0x808b7420 }, 0x8|2, 0x8|3 },
+ {{ 0x808c8f90, 0x808c4cb0, 0x808c80e0, 0x808b7428 }, 0x4|3, 0x4|3 },
+ {{ 0x808c8f98, 0x808c44e0, 0x808c80e8, 0x808b7430 }, 0x1ac|2, 0x238|3 },
+ {{ 0x808c91d0, 0x808c4718, 0x808c8320, 0x808b7668 }, 0x14|3, 0x14|3 },
+ {{ 0x808c91e8, 0x808d1278, 0x808c8338, 0x808b7680 }, 0x4|3, 0x4|3 },
+ {{ 0x808c91f0, 0x808c4cc0, 0x808c8340, 0x808b7688 }, 0x4|3, 0x4|3 },
+ {{ 0x808c9200, 0x808c4738, 0x808c8350, 0x808b7698 }, 0x21c|3, 0x21c|3 },
+ {{ 0x808c941c, 0x808c4cc4, 0x808c856c, 0x808b78b4 }, 0x4c0|2, 0x4c0|3 },
+ {{ 0x808c98e4, 0x808c67b4, 0x808c8a34, 0x808b7d7c }, 0x2dc|2, 0x2fc|3 },
+ {{ 0x808c9be0, 0x808c6ab0, 0x808c8d30, 0x808b8078 }, 0x4|3, 0x4|3 },
+ {{ 0x808c9c00, 0x808c5188, 0x808c8d50, 0x808b8098 }, 0x62c|2, 0x62c|3 },
+ {{ 0x808ca22c, 0x808c6ad4, 0x808c937c, 0x808b86c4 }, 0x2a4|2, 0x2a4|3 },
+ {{ 0x808ca530, 0x808c5780, 0x808c9680, 0x808b89c8 }, 0x8|2, 0x8|3 },
+ {{ 0x808ca538, 0x808c6de0, 0x808c9688, 0x808b89d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808ca53c, 0x808c578c, 0x808c968c, 0x808b89d4 }, 0x64|2, 0x64|3 },
+ {{ 0x808ca5a0, 0x808c6d78, 0x808c96f0, 0x808b8a38 }, 0x68|2, 0x68|3 },
+ {{ 0x808ca608, 0x808c5858, 0x808c9758, 0x808b8aa0 }, 0x4|3, 0x4|3 },
+ {{ 0x808ca60c, 0x808c6de4, 0x808c975c, 0x808b8aa4 }, 0x50|2, 0x68|3 },
+ {{ 0x808ca674, 0x808c6e4c, 0x808c97c4, 0x808b8b0c }, 0x4|3, 0x4|3 },
+ {{ 0x808ca690, 0x808c5888, 0x808c97e0, 0x808b8b28 }, 0x3ec|2, 0x3f8|3 },
+ {{ 0x808caa88, 0x808c5c80, 0x808c9bd8, 0x808b8f20 }, 0x20|3, 0x20|3 },
+ {{ 0x808caaa8, 0x808aa11c, 0x808c9bf8, 0x808b8f40 }, 0x4|3, 0x4|3 },
+ {{ 0x808caab0, 0x808a458c, 0x808c9c00, 0x808b8f48 }, 0x4|3, 0x4|3 },
+ {{ 0x808caac0, 0x808c6e68, 0x808c9c10, 0x808b8f58 }, 0x4b4|2, 0x4b4|3 },
+ {{ 0x808caf74, 0x808b0f84, 0x808ca0c4, 0x808b940c }, 0x10|2, 0x10|3 },
+ {{ 0x808caf84, 0x808c08fc, 0x808ca0d4, 0x808b941c }, 0x34|2, 0x34|3 },
+ {{ 0x808cafb8, 0x808c5cb0, 0x808ca108, 0x808b9450 }, 0x68|2, 0x78|3 },
+ {{ 0x808cb030, 0x808c5d28, 0x808ca180, 0x808b94c8 }, 0x8|3, 0x8|3 },
+ {{ 0x808cb040, 0x808c7368, 0x808ca190, 0x808b94d8 }, 0x188|2, 0x188|3 },
+ {{ 0x808cb1c8, 0x808b1778, 0x808ca318, 0x808b9660 }, 0x74|2, 0x74|3 },
+ {{ 0x808cb240, 0x808c5d38, 0x808ca390, 0x808b96d8 }, 0x168|2, 0x180|3 },
+ {{ 0x808cb3c0, 0x808c5eb8, 0x808ca510, 0x808b9858 }, 0x8c4|3, 0x8c4|3 },
+ {{ 0x808cbcbc, 0x8089cc94, 0x808cae0c, 0x808ba154 }, 0x4|3, 0x4|3 },
+ {{ 0x808cbcc0, 0x808cab10, 0x808cae10, 0x808ba158 }, 0x14|1, 0x14|1 },
+ {{ 0x808cbcd4, 0x808cab24, 0x808cae24, 0x808ba16c }, 0x4|0, 0x38|1 },
+ {{ 0x808cbd54, 0x808c7564, 0x808caea4, 0x808ba1ec }, 0x154|2, 0x154|3 },
+ {{ 0x808cbea8, 0x808c2358, 0x808caff8, 0x808ba340 }, 0xc|2, 0xc|3 },
+ {{ 0x808cbeb4, 0x808cab6c, 0x808cb004, 0x808ba34c }, 0x5d0|2, 0x5d0|3 },
+ {{ 0x808cc48c, 0x808c76fc, 0x808cb5dc, 0x808ba924 }, 0x3d4|2, 0x3d4|3 },
+ {{ 0x808cc8cc, 0x808cb144, 0x808cba1c, 0x808bad64 }, 0x5f4|2, 0x5f4|3 },
+ {{ 0x808ccec0, 0x808c7ad0, 0x808cc010, 0x808bb358 }, 0x30|2, 0x30|3 },
+ {{ 0x808ccf28, 0x808beed0, 0x808cc078, 0x808bb3c0 }, 0x4|3, 0x4|3 },
+ {{ 0x808ccf30, 0x808c7b40, 0x808cc080, 0x808bb3c8 }, 0x4|3, 0x4|3 },
+ {{ 0x808cd020, 0x808cb7a8, 0x808cc170, 0x808bb4b8 }, 0x4|3, 0x4|3 },
+ {{ 0x808cd110, 0x808c7c30, 0x808cc260, 0x808bb5a8 }, 0x8b8|2, 0x8b8|3 },
+ {{ 0x808cda54, 0x808d4258, 0x808ccba4, 0x808bbeec }, 0x2c|2, 0x2c|3 },
+ {{ 0x808cda90, 0x808d3118, 0x808ccbe0, 0x808bbf28 }, 0xc|2, 0xc|3 },
+ {{ 0x808cda9c, 0x808c8d14, 0x808ccbec, 0x808bbf34 }, 0x14|2, 0x14|3 },
+ {{ 0x808cdab0, 0x808c85d0, 0x808ccc00, 0x808bbf48 }, 0x4|3, 0x4|3 },
+ {{ 0x808cdab4, 0x808c8d2c, 0x808ccc04, 0x808bbf4c }, 0x4|3, 0x4|3 },
+ {{ 0x808cdab8, 0x808cb880, 0x808ccc08, 0x808bbf50 }, 0x570|2, 0x570|3 },
+ {{ 0x808ce12c, 0x808c60d4, 0x808cd27c, 0x808bc5c4 }, 0x10|2, 0x10|3 },
+ {{ 0x808ce140, 0x808c85f0, 0x808cd290, 0x808bc5d8 }, 0x33c|2, 0x33c|3 },
+ {{ 0x808ce480, 0x808c9dc0, 0x808cd5d0, 0x808bc918 }, 0xc4|2, 0xc4|3 },
+ {{ 0x808ce568, 0x808cbf08, 0x808cd6b8, 0x808bca00 }, 0x5c0|2, 0x5c0|3 },
+ {{ 0x808ceb28, 0x808af1dc, 0x808cdc78, 0x808bcfc0 }, 0x18|2, 0x18|3 },
+ {{ 0x808ceb48, 0x808b0fc8, 0x808cdc98, 0x808bcfe0 }, 0x8|2, 0x8|3 },
+ {{ 0x808ceb50, 0x808cc4f0, 0x808cdca0, 0x808bcfe8 }, 0x4|3, 0x4|3 },
+ {{ 0x808ceb54, 0x808c8d2c, 0x808cdca4, 0x808bcfec }, 0x4|3, 0x4|3 },
+ {{ 0x808ceb58, 0x808c8a00, 0x808cdca8, 0x808bcff0 }, 0x648|2, 0x648|3 },
+ {{ 0x808cf1a0, 0x808cc510, 0x808ce2f0, 0x808bd638 }, 0x14|2, 0x14|3 },
+ {{ 0x808cf2c8, 0x808c9048, 0x808ce418, 0x808bd760 }, 0x234|2, 0x234|3 },
+ {{ 0x808cf4fc, 0x808c2364, 0x808ce64c, 0x808bd994 }, 0x38|2, 0x38|3 },
+ {{ 0x808cf534, 0x808c77e4, 0x808ce684, 0x808bd9cc }, 0x4|3, 0x4|3 },
+ {{ 0x808cf538, 0x808c92b8, 0x808ce688, 0x808bd9d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808cf53c, 0x808c77ec, 0x808ce68c, 0x808bd9d4 }, 0x4|3, 0x4|3 },
+ {{ 0x808cf540, 0x808d18d0, 0x808ce690, 0x808bd9d8 }, 0x4|3, 0x4|3 },
+ {{ 0x808cf628, 0x808cc638, 0x808ce778, 0x808bdac0 }, 0x1dc|2, 0x2c8|3 },
+ {{ 0x808cf8f0, 0x808cc900, 0x808cea40, 0x808bdd88 }, 0xf4|3, 0xf4|3 },
+ {{ 0x808cf9e8, 0x808c9dc0, 0x808ceb38, 0x808bde80 }, 0xd8|2, 0xe4|3 },
+ {{ 0x808cfacc, 0x808c9ea4, 0x808cec1c, 0x808bdf64 }, 0x4|3, 0x4|3 },
+ {{ 0x808cfad0, 0x808c93a8, 0x808cec20, 0x808bdf68 }, 0x690|2, 0x690|3 },
+ {{ 0x808d0160, 0x808d0160, 0x808cf2b0, 0x808be5f8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d0164, 0x808c9a3c, 0x808cf2b4, 0x808be5fc }, 0x200|2, 0x200|3 },
+ {{ 0x808d0364, 0x808d0364, 0x808d0364, 0x808c0364 }, 0x4|3, 0x4|3 },
+ {{ 0x808d0368, 0x808c9c40, 0x808cf4b8, 0x808be800 }, 0x120|2, 0x120|3 },
+ {{ 0x808d04bc, 0x808d5b0c, 0x808cf60c, 0x808be954 }, 0x4|3, 0x4|3 },
+ {{ 0x808d04c4, 0x808ccadc, 0x808cf614, 0x808be95c }, 0x18|2, 0x18|3 },
+ {{ 0x808d05c4, 0x808a50d4, 0x808cf714, 0x808bea5c }, 0x4|3, 0x4|3 },
+ {{ 0x808d05c8, 0x808c9da0, 0x808cf718, 0x808bea60 }, 0x714|2, 0x714|3 },
+ {{ 0x808d0ce0, 0x808c7edc, 0x808cfe30, 0x808bf178 }, 0xe8|2, 0xe8|3 },
+ {{ 0x808d0dc8, 0x808ca5a0, 0x808cff18, 0x808bf260 }, 0xf0|3, 0xf0|3 },
+ {{ 0x808d0ebc, 0x808ccbcc, 0x808d000c, 0x808bf354 }, 0x18|2, 0x104|3 },
+ {{ 0x808d0fc0, 0x808cccd0, 0x808d0110, 0x808bf458 }, 0x1e4|3, 0x1e4|3 },
+ {{ 0x808d1290, 0x808ca6a8, 0x808d03e0, 0x808bf728 }, 0x438|2, 0x438|3 },
+ {{ 0x808d16c8, 0x808aea64, 0x808d0818, 0x808bfb60 }, 0x2c|2, 0x2c|3 },
+ {{ 0x808d16f4, 0x808c455c, 0x808d0844, 0x808bfb8c }, 0x4|3, 0x4|3 },
+ {{ 0x808d16f8, 0x808ccfa0, 0x808d0848, 0x808bfb90 }, 0xdc|2, 0xf0|3 },
+ {{ 0x808d17e8, 0x808cd090, 0x808d0938, 0x808bfc80 }, 0x14|3, 0x14|3 },
+ {{ 0x808d1804, 0x808ce2f4, 0x808d0954, 0x808bfc9c }, 0x4|3, 0x4|3 },
+ {{ 0x808d1818, 0x808cd0b0, 0x808d0968, 0x808bfcb0 }, 0x578|2, 0x578|3 },
+ {{ 0x808d1d9c, 0x808ce304, 0x808d0eec, 0x808c0234 }, 0x158|2, 0x164|3 },
+ {{ 0x808d1f00, 0x808ce468, 0x808d1050, 0x808c0398 }, 0x4|3, 0x4|3 },
+ {{ 0x808d1f38, 0x808cd638, 0x808d1088, 0x808c03d0 }, 0x74|2, 0x74|3 },
+ {{ 0x808d1fac, 0x808ce464, 0x808d10fc, 0x808c0444 }, 0x4|3, 0x4|3 },
+ {{ 0x808d1fb0, 0x808cd6b0, 0x808d1100, 0x808c0448 }, 0x4|3, 0x4|3 },
+ {{ 0x808d1fb4, 0x808ce46c, 0x808d1104, 0x808c044c }, 0xa0|2, 0xa0|3 },
+ {{ 0x808d2054, 0x808ce45c, 0x808d11a4, 0x808c04ec }, 0x8|2, 0x8|3 },
+ {{ 0x808d205c, 0x808cd6ac, 0x808d11ac, 0x808c04f4 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2060, 0x808ce518, 0x808d11b0, 0x808c04f8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2064, 0x808cd6b4, 0x808d11b4, 0x808c04fc }, 0x378|2, 0x378|3 },
+ {{ 0x808d2418, 0x808d4b58, 0x808d1568, 0x808c08b0 }, 0x8|2, 0x8|3 },
+ {{ 0x808d2420, 0x808cda70, 0x808d1570, 0x808c08b8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2428, 0x808b3f58, 0x808d1578, 0x808c08c0 }, 0x4|3, 0x4|3 },
+ {{ 0x808d242c, 0x808ce514, 0x808d157c, 0x808c08c4 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2430, 0x808cda80, 0x808d1580, 0x808c08c8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2434, 0x808ce51c, 0x808d1584, 0x808c08cc }, 0x130|2, 0x130|3 },
+ {{ 0x808d2564, 0x808ce2ec, 0x808d16b4, 0x808c09fc }, 0x4|3, 0x4|3 },
+ {{ 0x808d2568, 0x808b0ac0, 0x808d16b8, 0x808c0a00 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2570, 0x808cdab8, 0x808d16c0, 0x808c0a08 }, 0x71c|2, 0x71c|3 },
+ {{ 0x808d2cbc, 0x808bf828, 0x808d1e0c, 0x808c1154 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2cf4, 0x808ce654, 0x808d1e44, 0x808c118c }, 0xa0|2, 0xa0|3 },
+ {{ 0x808d2da8, 0x808c6a58, 0x808d1ef8, 0x808c1240 }, 0x10|2, 0x10|3 },
+ {{ 0x808d2dcc, 0x808ce23c, 0x808d1f1c, 0x808c1264 }, 0xb4|2, 0xb4|3 },
+ {{ 0x808d2e80, 0x808b0ac0, 0x808d1fd0, 0x808c1318 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2e84, 0x808d4b6c, 0x808d1fd4, 0x808c131c }, 0x8|2, 0x8|3 },
+ {{ 0x808d2e8c, 0x808d4d24, 0x808d1fdc, 0x808c1324 }, 0x38|2, 0x38|3 },
+ {{ 0x808d2ec4, 0x808d4bac, 0x808d2014, 0x808c135c }, 0x4|3, 0x4|3 },
+ {{ 0x808d2ec8, 0x808d4d60, 0x808d2018, 0x808c1360 }, 0x38|2, 0x38|3 },
+ {{ 0x808d2f00, 0x808d4be8, 0x808d2050, 0x808c1398 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2f04, 0x808d4d9c, 0x808d2054, 0x808c139c }, 0x3c|2, 0x3c|3 },
+ {{ 0x808d2f40, 0x808d4c28, 0x808d2090, 0x808c13d8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2f44, 0x808d4ddc, 0x808d2094, 0x808c13dc }, 0x74|2, 0x74|3 },
+ {{ 0x808d2fb8, 0x808d4ca0, 0x808d2108, 0x808c1450 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2fbc, 0x808d4e54, 0x808d210c, 0x808c1454 }, 0x3c|2, 0x3c|3 },
+ {{ 0x808d2ff8, 0x808d4ce0, 0x808d2148, 0x808c1490 }, 0x4|3, 0x4|3 },
+ {{ 0x808d2ffc, 0x808d4e94, 0x808d214c, 0x808c1494 }, 0x4|3, 0x4|3 },
+ {{ 0x808d3000, 0x808b88d8, 0x808d2150, 0x808c1498 }, 0x4|3, 0x4|3 },
+ {{ 0x808d3004, 0x808d518c, 0x808d2154, 0x808c149c }, 0x34|2, 0x34|3 },
+ {{ 0x808d3038, 0x808ce730, 0x808d2188, 0x808c14d0 }, 0x54|2, 0x88|3 },
+ {{ 0x808d30c0, 0x808ce7b8, 0x808d2210, 0x808c1558 }, 0xfc|3, 0xfc|3 },
+ {{ 0x808d31c4, 0x808d50d8, 0x808d2314, 0x808c165c }, 0x34|2, 0x34|3 },
+ {{ 0x808d31f8, 0x808ce8f0, 0x808d2348, 0x808c1690 }, 0x4|3, 0x4|3 },
+ {{ 0x808d31fc, 0x808d50d4, 0x808d234c, 0x808c1694 }, 0x38|2, 0x38|3 },
+ {{ 0x808d3234, 0x808ce92c, 0x808d2384, 0x808c16cc }, 0x4|3, 0x4|3 },
+ {{ 0x808d323c, 0x808d4cec, 0x808d238c, 0x808c16d4 }, 0x518|2, 0x518|3 },
+ {{ 0x808d3764, 0x808ce934, 0x808d28b4, 0x808c1bfc }, 0x33c|2, 0x384|3 },
+ {{ 0x808d3ae8, 0x808cecb8, 0x808d2c38, 0x808c1f80 }, 0x4|3, 0x4|3 },
+ {{ 0x808d3b48, 0x808cef88, 0x808d2c98, 0x808c1fe0 }, 0x40|2, 0x40|3 },
+ {{ 0x808d3b88, 0x808ced58, 0x808d2cd8, 0x808c2020 }, 0x4|3, 0x4|3 },
+ {{ 0x808d3b8c, 0x808cefcc, 0x808d2cdc, 0x808c2024 }, 0x4|3, 0x4|3 },
+ {{ 0x808d3bd8, 0x808d5248, 0x808d2d28, 0x808c2070 }, 0x4|3, 0x4|3 },
+ {{ 0x808d3c18, 0x808ceda8, 0x808d2d68, 0x808c20b0 }, 0x28|2, 0x28|3 },
+ {{ 0x808d3c74, 0x808cec64, 0x808d2dc4, 0x808c210c }, 0x4|3, 0x4|3 },
+ {{ 0x808d3c78, 0x808d5288, 0x808d2dc8, 0x808c2110 }, 0x4|3, 0x4|3 },
+ {{ 0x808d3c7c, 0x808cecbc, 0x808d2dcc, 0x808c2114 }, 0x9c|2, 0x9c|3 },
+ {{ 0x808d3d18, 0x808d5288, 0x808d2e68, 0x808c21b0 }, 0x54|2, 0xa4|3 },
+ {{ 0x808d3dbc, 0x808d532c, 0x808d2f0c, 0x808c2254 }, 0x4|3, 0x4|3 },
+ {{ 0x808d3dc8, 0x808cee60, 0x808d2f18, 0x808c2260 }, 0x4c|1, 0x4c|1 },
+ {{ 0x808d3e14, 0x808ceeac, 0x808d2f64, 0x808c22ac }, 0x4|0, 0x124|1 },
+ {{ 0x808d3f3c, 0x808d5204, 0x808d308c, 0x808c23d4 }, 0x44|2, 0x44|3 },
+ {{ 0x808d3f80, 0x808cf018, 0x808d30d0, 0x808c2418 }, 0x4|3, 0x4|3 },
+ {{ 0x808d3f84, 0x808d524c, 0x808d30d4, 0x808c241c }, 0x3c|2, 0x3c|3 },
+ {{ 0x808d3fc0, 0x808d5380, 0x808d3110, 0x808c2458 }, 0x4|3, 0x4|3 },
+ {{ 0x808d3fc4, 0x808ced5c, 0x808d3114, 0x808c245c }, 0x4|3, 0x4|3 },
+ {{ 0x808d4010, 0x808cf058, 0x808d3160, 0x808c24a8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d4024, 0x808d5334, 0x808d3174, 0x808c24bc }, 0x4|3, 0x4|3 },
+ {{ 0x808d4070, 0x808d53d0, 0x808d31c0, 0x808c2508 }, 0xa4|3, 0xa4|3 },
+ {{ 0x808d4118, 0x808cf070, 0x808d3268, 0x808c25b0 }, 0x34|2, 0x48|3 },
+ {{ 0x808d4160, 0x808cf0b8, 0x808d32b0, 0x808c25f8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d416c, 0x808c9ea4, 0x808d32bc, 0x808c2604 }, 0x4|3, 0x4|3 },
+ {{ 0x808d4170, 0x808d54c0, 0x808d32c0, 0x808c2608 }, 0x4|3, 0x4|3 },
+ {{ 0x808d4174, 0x808cbde4, 0x808d32c4, 0x808c260c }, 0x4|3, 0x4|3 },
+ {{ 0x808d4178, 0x808d54c8, 0x808d32c8, 0x808c2610 }, 0x4|3, 0x4|3 },
+ {{ 0x808d417c, 0x808cbdec, 0x808d32cc, 0x808c2614 }, 0x4|3, 0x4|3 },
+ {{ 0x808d4298, 0x808cf0c8, 0x808d33e8, 0x808c2730 }, 0x604|2, 0x750|3 },
+ {{ 0x808d49e8, 0x808cf818, 0x808d3b38, 0x808c2e80 }, 0x4|3, 0x4|3 },
+ {{ 0x808d4a20, 0x808d54d0, 0x808d3b70, 0x808c2eb8 }, 0x4c4|2, 0x4c4|3 },
+ {{ 0x808d4ef0, 0x808cf968, 0x808d4040, 0x808c3388 }, 0x3c4|2, 0x3c4|3 },
+ {{ 0x808d52b8, 0x808d59a0, 0x808d4408, 0x808c3750 }, 0x24|2, 0x24|3 },
+ {{ 0x808d52dc, 0x808d0284, 0x808d442c, 0x808c3774 }, 0x11c|2, 0x11c|3 },
+ {{ 0x808d53f8, 0x808c95e8, 0x808d4548, 0x808c3890 }, 0x30|2, 0x30|3 },
+ {{ 0x808d5430, 0x808cfd30, 0x808d4580, 0x808c38c8 }, 0x554|2, 0x554|3 },
+ {{ 0x808d5984, 0x808d59c4, 0x808d4ad4, 0x808c3e1c }, 0x160|2, 0x160|3 },
+ {{ 0x808d5c30, 0x808d03d8, 0x808d4d80, 0x808c40c8 }, 0x50c|2, 0x50c|3 },
+ {{ 0x808d6178, 0x808d5c70, 0x808d52c8, 0x808c4610 }, 0x160|2, 0x160|3 },
+ {{ 0x808d62e4, 0x808d091c, 0x808d5434, 0x808c477c }, 0xa44|2, 0xac4|3 },
+ {{ 0x808d6da8, 0x808d13e0, 0x808d5ef8, 0x808c5240 }, 0x4|3, 0x4|3 },
+ {{ 0x808d6dbc, 0x808d5ddc, 0x808d5f0c, 0x808c5254 }, 0x14|2, 0x14|3 },
+ {{ 0x808d6dd8, 0x808d13f8, 0x808d5f28, 0x808c5270 }, 0x1aa0|2, 0x1aa0|3 },
+ {{ 0x808d8960, 0x808d5df8, 0x808d7ab0, 0x808c6df8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d8a50, 0x808d2f80, 0x808d7ba0, 0x808c6ee8 }, 0xfc|2, 0xfc|3 },
+ {{ 0x808d8b58, 0x808d5ee8, 0x808d7ca8, 0x808c6ff0 }, 0xf4|2, 0xf4|3 },
+ {{ 0x808d8c4c, 0x808d5fdc, 0x808d7d9c, 0x808c79dc }, 0xc|2, 0xc|3 },
+ {{ 0x808d8c58, 0x808d5fe8, 0x808d7da8, 0x808c70f0 }, 0x10|2, 0x28|3 },
+ {{ 0x808d8c80, 0x808d6010, 0x808d7dd0, 0x808c7118 }, 0x10|3, 0x10|3 },
+ {{ 0x808d8ca8, 0x808d3088, 0x808d7df8, 0x808c7140 }, 0x158|2, 0x158|3 },
+ {{ 0x808d8e04, 0x808d6464, 0x808d7f54, 0x808c729c }, 0xa4|2, 0xa4|3 },
+ {{ 0x808d8ea8, 0x808d6038, 0x808d7ff8, 0x808c7340 }, 0x4|3, 0x4|3 },
+ {{ 0x808d8eb0, 0x808d65e0, 0x808d8000, 0x808c7348 }, 0x84|2, 0x84|3 },
+ {{ 0x808d8f34, 0x808d31e4, 0x808d8084, 0x808c73cc }, 0xc|2, 0xc|3 },
+ {{ 0x808d8f40, 0x808d60d0, 0x808d8090, 0x808c73d8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d8f44, 0x808d31f4, 0x808d8094, 0x808c73dc }, 0x1e8|2, 0x1fc|3 },
+ {{ 0x808d9140, 0x808d33f0, 0x808d8290, 0x808c75d8 }, 0x34|3, 0x34|3 },
+ {{ 0x808d9184, 0x808c561c, 0x808d82d4, 0x808c761c }, 0x4|3, 0x4|3 },
+ {{ 0x808d9188, 0x808d3438, 0x808d82d8, 0x808c7620 }, 0x4|3, 0x4|3 },
+ {{ 0x808d918c, 0x808d620c, 0x808d82dc, 0x808c7624 }, 0x4|3, 0x4|3 },
+ {{ 0x808d9220, 0x808d6168, 0x808d8370, 0x808c76b8 }, 0xc|2, 0xc|3 },
+ {{ 0x808d922c, 0x808d343c, 0x808d837c, 0x808c76c4 }, 0xc4|1, 0xc4|1 },
+ {{ 0x808d92f0, 0x808d3500, 0x808d8440, 0x808c7788 }, 0x4|0, 0xb8|1 },
+ {{ 0x808d93c0, 0x808d63e0, 0x808d8510, 0x808c7858 }, 0x70|2, 0x70|3 },
+ {{ 0x808d9430, 0x808d3640, 0x808d8580, 0x808c78c8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d9434, 0x808d6454, 0x808d8584, 0x808c78cc }, 0x1c|2, 0x1c|3 },
+ {{ 0x808d9450, 0x808d3660, 0x808d85a0, 0x808c78e8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d9454, 0x808d6474, 0x808d85a4, 0x808c78ec }, 0x4|3, 0x4|3 },
+ {{ 0x808d9458, 0x808d60e0, 0x808d85a8, 0x808c78f0 }, 0x90|2, 0x90|3 },
+ {{ 0x808d94e8, 0x808d36f8, 0x808d8638, 0x808c7980 }, 0x4|3, 0x4|3 },
+ {{ 0x808d94ec, 0x808d6174, 0x808d863c, 0x808c7984 }, 0x13c|2, 0x1cc|3 },
+ {{ 0x808d96b8, 0x808d6340, 0x808d8808, 0x808c7b50 }, 0x4|3, 0x4|3 },
+ {{ 0x808d96c0, 0x808d35d0, 0x808d8810, 0x808c7b58 }, 0x90|2, 0x90|3 },
+ {{ 0x808d9750, 0x808d63d8, 0x808d88a0, 0x808c7be8 }, 0x4|3, 0x4|3 },
+ {{ 0x808d9754, 0x808d3664, 0x808d88a4, 0x808c7bec }, 0x94|2, 0x94|3 },
+ {{ 0x808d97e8, 0x808d6470, 0x808d8938, 0x808c7c80 }, 0x4|3, 0x4|3 },
+ {{ 0x808d97ec, 0x808d36fc, 0x808d893c, 0x808c7c84 }, 0x3d4|2, 0x3d4|3 },
+ {{ 0x808d9bc4, 0x808d3cdc, 0x808d8d14, 0x808c805c }, 0x4|3, 0x4|3 },
+ {{ 0x808d9bc8, 0x808d6508, 0x808d8d18, 0x808c8060 }, 0x9c|3, 0x9c|3 },
+ {{ 0x808d9c64, 0x808d3aec, 0x808d8db4, 0x808c80fc }, 0x4|3, 0x4|3 },
+ {{ 0x808d9cf8, 0x808d3ad8, 0x808d8e48, 0x808c8190 }, 0x398|2, 0x3a8|3 },
+ {{ 0x808da0a0, 0x808d3e80, 0x808d91f0, 0x808c8538 }, 0x4|3, 0x4|3 },
+ {{ 0x808da0a4, 0x808d65a4, 0x808d91f4, 0x808c853c }, 0x4|3, 0x4|3 },
+ {{ 0x808da0a8, 0x808d6048, 0x808d91f8, 0x808c8540 }, 0x24|2, 0x24|3 },
+ {{ 0x808da0cc, 0x808d65cc, 0x808d921c, 0x808c8564 }, 0x98|2, 0x98|3 },
+ {{ 0x808da164, 0x808d31e4, 0x808d92b4, 0x808c85fc }, 0xc|2, 0xc|3 },
+ {{ 0x808da170, 0x808d6670, 0x808d92c0, 0x808c8608 }, 0x4|3, 0x4|3 },
+ {{ 0x808da174, 0x808d31f4, 0x808d92c4, 0x808c860c }, 0x94|2, 0x94|3 },
+ {{ 0x808da208, 0x808d6708, 0x808d9358, 0x808c86a0 }, 0x4|3, 0x4|3 },
+ {{ 0x808da20c, 0x808d328c, 0x808d935c, 0x808c86a4 }, 0x8|2, 0x8|3 },
+ {{ 0x808da214, 0x808d6714, 0x808d9364, 0x808c86ac }, 0x4|3, 0x4|3 },
+ {{ 0x808da218, 0x808d3298, 0x808d9368, 0x808c86b0 }, 0x1c|2, 0x1c|3 },
+ {{ 0x808da234, 0x808d3e7c, 0x808d9384, 0x808c86cc }, 0x4|3, 0x4|3 },
+ {{ 0x808da238, 0x808d6738, 0x808d9388, 0x808c86d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808da23c, 0x808d3e84, 0x808d938c, 0x808c86d4 }, 0x130|2, 0x144|3 },
+ {{ 0x808da380, 0x808d3fc8, 0x808d94d0, 0x808c8818 }, 0x34|3, 0x34|3 },
+ {{ 0x808da3c4, 0x808d6734, 0x808d9514, 0x808c885c }, 0x4|3, 0x4|3 },
+ {{ 0x808da3c8, 0x808d4010, 0x808d9518, 0x808c8860 }, 0x4|3, 0x4|3 },
+ {{ 0x808da3cc, 0x808d673c, 0x808d951c, 0x808c8864 }, 0x64|2, 0x94|3 },
+ {{ 0x808da460, 0x808d67d0, 0x808d95b0, 0x808c88f8 }, 0x4|3, 0x4|3 },
+ {{ 0x808da4cc, 0x808d400c, 0x808d961c, 0x808c8964 }, 0x570|2, 0x570|3 },
+ {{ 0x808daa48, 0x808d68d8, 0x808d9b98, 0x808c8ee0 }, 0x2ac|2, 0x2ac|3 },
+ {{ 0x808dacf4, 0x808aeb1c, 0x808d9e44, 0x808c918c }, 0x4|3, 0x4|3 },
+ {{ 0x808dacf8, 0x808b512c, 0x808d9e48, 0x808c9190 }, 0x8|2, 0x8|3 },
+ {{ 0x808dad00, 0x808d4588, 0x808d9e50, 0x808c9198 }, 0xe0|2, 0x144|3 },
+ {{ 0x808dae44, 0x808d46cc, 0x808d9f94, 0x808c92dc }, 0x4|3, 0x4|3 },
+ {{ 0x808dae54, 0x808cedac, 0x808d9fa4, 0x808c92ec }, 0x4|3, 0x4|3 },
+ {{ 0x808daea8, 0x808c4720, 0x808d9ff8, 0x808c9340 }, 0x4|3, 0x4|3 },
+ {{ 0x808daeb8, 0x808b66e8, 0x808da008, 0x808c9350 }, 0x90|2, 0x90|3 },
+ {{ 0x808daf48, 0x808d4738, 0x808da098, 0x808c93e0 }, 0x4|3, 0x4|3 },
+ {{ 0x808daf4c, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808daf64, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808daf68, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808daf6c, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808daf70, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808daf74, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808daf78, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808daf7c, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808daf80, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808dafa4, 0x808d4794, 0x808da0f4, 0x808c943c }, 0x22c|3, 0x22c|3 },
+ {{ 0x808db228, 0x808d1138, 0x808da378, 0x808c96c0 }, 0x144|2, 0x144|3 },
+ {{ 0x808db370, 0x808d4b60, 0x808da4c0, 0x808c9808 }, 0x4|3, 0x4|3 },
+ {{ 0x808db37c, 0x808b5604, 0x808da4cc, 0x808c9814 }, 0x4|3, 0x4|3 },
+ {{ 0x808db380, 0x808d6c28, 0x808da4d0, 0x808c9818 }, 0x874|2, 0x874|3 },
+ {{ 0x808dbc14, 0x808bcf80, 0x808dad64, 0x808ca0ac }, 0x50|2, 0x50|3 },
+ {{ 0x808dbc74, 0x808b6a24, 0x808dadc4, 0x808ca10c }, 0x10|2, 0x10|3 },
+ {{ 0x808dbd30, 0x808d7660, 0x808dae80, 0x808ca1c8 }, 0x4|3, 0x4|3 },
+ {{ 0x808dbdec, 0x808af3b4, 0x808daf3c, 0x808ca284 }, 0x4|3, 0x4|3 },
+ {{ 0x808dbdf0, 0x808d75d8, 0x808daf40, 0x808ca288 }, 0x4|3, 0x4|3 },
+ {{ 0x808dbdf4, 0x808b239c, 0x808daf44, 0x808ca28c }, 0x4|3, 0x4|3 },
+ {{ 0x808dbdfc, 0x808d75e4, 0x808daf4c, 0x808ca294 }, 0x4|3, 0x4|3 },
+ {{ 0x808dbe08, 0x808d7720, 0x808daf58, 0x808ca2a0 }, 0x4|3, 0x4|3 },
+ {{ 0x808dbe10, 0x808d31bc, 0x808daf60, 0x808ca2a8 }, 0x4|3, 0x4|3 },
+ {{ 0x808dbe14, 0x808c5280, 0x808daf64, 0x808ca2ac }, 0x4|3, 0x4|3 },
+ {{ 0x808dbe18, 0x808d75f0, 0x808daf68, 0x808ca2b0 }, 0x1c|2, 0x1c|3 },
+ {{ 0x808dbe34, 0x808ae974, 0x808daf84, 0x808ca2cc }, 0x4|3, 0x4|3 },
+ {{ 0x808dbe38, 0x808d7610, 0x808daf88, 0x808ca2d0 }, 0x4|3, 0x4|3 },
+ {{ 0x808dbe3c, 0x808c46dc, 0x808daf8c, 0x808ca2d4 }, 0xc|2, 0xc|3 },
+ {{ 0x808dbe48, 0x808d7620, 0x808daf98, 0x808ca2e0 }, 0x4|3, 0x4|3 },
+ {{ 0x808dbe4c, 0x808c46ec, 0x808daf9c, 0x808ca2e4 }, 0x24|2, 0x24|3 },
+ {{ 0x808dbe78, 0x808d7650, 0x808dafc8, 0x808ca310 }, 0x4|3, 0x4|3 },
+ {{ 0x808dbe84, 0x808d7d4c, 0x808dafd4, 0x808ca31c }, 0x6c4|2, 0x6c4|3 },
+ {{ 0x808dc580, 0x808bda70, 0x808db6d0, 0x808caa18 }, 0x34|2, 0x34|3 },
+ {{ 0x808dc5b4, 0x808d772c, 0x808db704, 0x808caa4c }, 0x57c|2, 0x594|3 },
+ {{ 0x808dcb48, 0x808d7cc0, 0x808dbc98, 0x808cafe0 }, 0x4|3, 0x4|3 },
+ {{ 0x808dcbd4, 0x808d847c, 0x808dbd24, 0x808cb06c }, 0x84c|2, 0x84c|3 },
+ {{ 0x809bd6e8, 0x809b8f28, 0x809bc748, 0x809abd28 }, 0x4|0, 0x40|1 },
+ {{ 0x809bd728, 0x809b8f68, 0x809bc788, 0x809abd68 }, 0x14|0, 0x20|1 },
+ {{ 0x809bd748, 0x809b8f88, 0x809bc7a8, 0x809abd88 }, 0x4|0, 0x4|0 },
+ {{ 0x809c18f8, 0x809bd110, 0x809c0958, 0x809aff38 }, 0xc|0, 0xc|0 },
+ {{ 0x809c1e38, 0x809bd508, 0x809c0e98, 0x809b0478 }, 0x4|0, 0x4|0 },
+ {{ 0x809c20d8, 0x809bd918, 0x809c1138, 0x809b0718 }, 0x4|0, 0x4|0 },
+ {{ 0x809c20f8, 0x809bd950, 0x809c1158, 0x809b0738 }, 0x4|0, 0x4|0 },
+ {{ 0x809c2100, 0x809bd930, 0x809c1160, 0x809b0740 }, 0x4|0, 0x4|0 },
+ {{ 0x809c3618, 0x809bee20, 0x809c2678, 0x809b1c58 }, 0x4|0, 0x4|0 },
+ {{ 0x809c38b8, 0x809bf0b0, 0x809c2918, 0x809b13f8 }, 0x4|0, 0x4|0 },
+ {{ 0x809c38bc, 0x809bf0b4, 0x809c291c, 0x809b1efc }, 0x8|0, 0x8|0 },
+ {{ 0xcd000000, 0xcd000000, 0xcd000000, 0xcd000000 }, 0x8000|0, 0x8000|0 },
+}; // 2304 records
+
diff --git a/project/src/lib-brres.c b/project/src/lib-brres.c
index 10ab6d4..4bb1058 100644
--- a/project/src/lib-brres.c
+++ b/project/src/lib-brres.c
@@ -710,8 +710,6 @@ enumError CreateBRRES
if ( f_ptr->dir_id != dir_id )
continue;
- noPRINT("*** %d %3u %s\n",f_ptr->is_dir,f_ptr->dir_id,f_ptr->path);
-
//--- write name data
IsolateFilename(path_buf,sizeof(path_buf),f_ptr->path,f_ptr->fform);
@@ -849,22 +847,36 @@ static int iterate_brres_group
{
it->name = 0;
ccp name = "";
- uint name_len = 0;
+ int name_len = 0;
uint new_path_len = path_len;
const uint name_off = it->endian->rd32(&entry->name_off);
- if (name_off)
+
+ if ( name_off && name_off < szs->size )
{
it->name = name = (ccp)grp + name_off;
name_len = it->endian->rd32(name-4);
- if ( path_len + name_len < sizeof(it->path)-2 )
- {
- it->trail_path = it->path+path_len;
- memcpy(it->trail_path,name,name_len);
- new_path_len += name_len;
- it->path[new_path_len] = 0;
- }
+ if ( name_len < 0 )
+ name_len = strlen(name);
+ if ( name_len < 1 || name_off + name_len > szs->size )
+ name_len = 0;
+ }
+
+ char name_buf[20];
+ if ( name_len < 1 )
+ {
+ name_len = snprintf(name_buf,sizeof(name_buf),"_file_%zu",entry-grp->entry);
+ name = name_buf;
+ it->name = 0;
}
+ if ( path_len + name_len < sizeof(it->path)-2 )
+ {
+ it->trail_path = it->path+path_len;
+ memcpy(it->trail_path,name,name_len);
+ new_path_len += name_len;
+ it->path[new_path_len] = 0;
+ }
+
const u8 * data = (u8*)grp + it->endian->rd32(&entry->data_off);
it->index++;
if ( data < it->root_end )
diff --git a/project/src/lib-file.c b/project/src/lib-file.c
index c4cce3d..80be732 100644
--- a/project/src/lib-file.c
+++ b/project/src/lib-file.c
@@ -3626,15 +3626,13 @@ void AnalyzeSlotAttrib ( slot_info_t *si, bool reset_si, mem_t attrib )
if ( src[0]=='r' && src[1]>='1' && src[1]<='8' && src[2]>='1' && src[2]<='4' )
{
const u16 slot = strtoul(src+1,0,10);
- if ( !si->have_31_71 && !si->have_31_42_71 && !si->have_31_62_71 )
+ if ( !si->have_31_71 && !si->have_31_42_71 )
{
si->race_mode = SIT_RECOMMEND;
si->race_slot = slot;
StringCopySM(si->race_info,sizeof(si->race_info),src,3);
}
- else if ( slot == 31 || slot == 71
- || slot == 42 && si->have_31_42_71
- || slot == 62 && si->have_31_62_71 )
+ else if ( slot == 31 || slot == 71 || slot == 42 && si->have_31_42_71 )
{
si->race_mode = SIT_MANDATORY;
si->race_slot = slot;
@@ -3718,22 +3716,6 @@ void AnalyzeSlotAttrib ( slot_info_t *si, bool reset_si, mem_t attrib )
StringCopySM(si->race_info,sizeof(si->race_info),src,8);
}
}
- else if (!memcmp(src,"31+62+71",8))
- {
- si->have_31_62_71 = true;
- if ( si->race_mode != SIT_MANDATORY3
- && (si->race_slot == 31 || si->race_slot == 62 || si->race_slot == 71 ))
- {
- si->race_mode = SIT_MANDATORY;
- snprintf(si->race_info,sizeof(si->race_info),"%u",si->race_slot);
- }
- else
- {
- si->race_mode = SIT_MANDATORY3;
- si->race_slot = 31;
- StringCopySM(si->race_info,sizeof(si->race_info),src,8);
- }
- }
break;
}
}
diff --git a/project/src/lib-lecode.c b/project/src/lib-lecode.c
index 05d3c00..8c71067 100644
--- a/project/src/lib-lecode.c
+++ b/project/src/lib-lecode.c
@@ -228,6 +228,18 @@ ccp GetLecodeDebugName ( le_debug_mode_t mode )
//-----------------------------------------------------------------------------
+ccp GetCheatModeInfo ( uint cheat_mode )
+{
+ switch (cheat_mode)
+ {
+ case 0: return "disabled";
+ case 1: return "debug only";
+ default: return "all";
+ }
+}
+
+//-----------------------------------------------------------------------------
+
ccp GetLecodeDebugInfo ( le_debug_mode_t mode )
{
switch (mode)
@@ -463,6 +475,8 @@ bool GetNextDebugMode ( lecode_debug_info_t *ldi )
{ LEDEB_CHECK_POINT, LEDEB_S_CHECK_POINT, "CHECK-POINT" },
{ LEDEB_RESPAWN, 0, "RESPAWN" },
{ LEDEB_LAP_POS, 0, "LAP-POS" },
+ { LEDEB_XPF, LEDEB_S_XPF, "XPF" },
+// [[xpf+]]
};
while ( ldi->index >= 0 && ldi->index < sizeof(tab)/sizeof(*tab) )
@@ -505,6 +519,7 @@ lecode_debug_t DecodeLecodeDebug ( lecode_debug_ex_t *lde, lecode_debug_t mode )
lde->check_point = mode >> LEDEB_S_CHECK_POINT & LEDEB_M_CHECK_POINT;
lde->respawn = ( mode & LEDEB_RESPAWN ) > 0;
lde->lap_pos = ( mode & LEDEB_LAP_POS ) > 0;
+ lde->xpf = mode >> LEDEB_S_XPF & LEDEB_M_XPF;
lde->have_output = isDebugModeOutput(mode);
lde->is_active = isDebugModeActive(mode);
@@ -518,7 +533,9 @@ lecode_debug_t EncodeLecodeDebug ( lecode_debug_ex_t *lde )
{
DASSERT(lde);
- lecode_debug_t mode = ( lde->check_point & LEDEB_M_CHECK_POINT ) << LEDEB_S_CHECK_POINT;
+ lecode_debug_t mode = ( lde->check_point & LEDEB_M_CHECK_POINT ) << LEDEB_S_CHECK_POINT
+ | ( lde->xpf & LEDEB_M_XPF ) << LEDEB_S_XPF;
+
if ( lde->enabled ) mode |= LEDEB_ENABLED;
if ( lde->opponent ) mode |= LEDEB_OPPONENT;
if ( lde->space ) mode |= LEDEB_SPACE;
@@ -572,7 +589,7 @@ bool SetupLecodeDebugLPAR
{
{ PREDEBUG_CLEAR, 0, 0 },
- { PREDEBUG_STANDARD, 1, LEDEB__STD },
+ { PREDEBUG_STANDARD, 1, LEDEB__STD|LEDEB_SHORT_XPF },
{ PREDEBUG_OPPONENT, 1, LEDEB__STD },
{ PREDEBUG_OPPONENT, 2, LEDEB__STD|LEDEB_OPPONENT },
@@ -582,6 +599,8 @@ bool SetupLecodeDebugLPAR
{ PREDEBUG_VERTICAL, 2, LEDEB_RESPAWN },
{ PREDEBUG_VERTICAL, 3, LEDEB_LAP_POS },
{ PREDEBUG_VERTICAL, 4, LEDEB_POSITION },
+ { PREDEBUG_VERTICAL, 5, LEDEB_LONG_XPF },
+// [[xpf+]]
{0,0,0}
};
@@ -661,9 +680,12 @@ lpar_mode_t CalcCurrentLparMode ( const le_lpar_t * lp, bool use_limit_param )
if ( lp->enable_perfmon > 1 )
return LPM_EXPERIMENTAL;
+ // [[new-lpar]]
+
return lp->enable_perfmon
|| !lp->enable_xpflags
|| lp->enable_speedo > SPEEDO_FRACTION1
+ || lp->cheat_mode > 1
? LPM_TESTING : LPM_PRODUCTIVE;
}
@@ -699,6 +721,8 @@ bool LimitToLparMode ( le_lpar_t * lp, lpar_mode_t lpmode )
{ lp->enable_xpflags = 1; modified = true; }
if ( lp->enable_speedo > SPEEDO_MAX )
{ lp->enable_speedo = SPEEDO_MAX; modified = true; }
+ if ( lp->cheat_mode > 1 )
+ { lp->cheat_mode = 1; modified = true; }
}
else if ( lpmode == LPM_TESTING )
{
@@ -706,6 +730,8 @@ bool LimitToLparMode ( le_lpar_t * lp, lpar_mode_t lpmode )
{ lp->enable_perfmon = 1; modified = true; }
}
+ // [[new-lpar]]
+
return modified;
}
@@ -725,32 +751,33 @@ void ClearLparChat ( le_lpar_t * lp )
const u16 chat_mode_legacy[BMG_N_CHAT] =
{
- 0,0,0,0, 0,0,0,0, // 1 .. 8
- 0,0,0,0, 0,0,0,0, // 9 .. 16
- 0,0,0,0, 0,0,0,0, // 17 .. 24
- 0,0,0,0, 0,0,0,0, // 25 .. 32
- 0,0,0,0, 0,0,0,0, // 33 .. 40
- 0,0,0,0, 0,0,0,0, // 41 .. 48
- 0,0,0,0, 0,0,0,0, // 49 .. 56
- 0,0,0,0, 0,0,0,0, // 57 .. 64
+ 0,0,0,0, 0,0,0,0, // 1 .. 8
+ 0,0,0,0, 0,0,0,0, // 9 .. 16
+ 0,0,0,0, 0,0,0,0, // 17 .. 24
+ 0,0,0,0, 0,0,0,0, // 25 .. 32
+ 0,0,0,0, 0,0,0,0, // 33 .. 40
+ 0,0,0,0, 0,0,0,0, // 41 .. 48
+ 0,0,0,0, 0,0,0,0, // 49 .. 56
+ 0,0,0,0, 0,0,0,0, // 57 .. 64
- CHATMD_ANY_VEHICLE, 0,0,0, // 65 .. 68
- CHATMD_KARTS_ONLY, // 69
- CHATMD_BIKES_ONLY, // 70
- CHATMD_TRACK_BY_HOST, // 71
- CHATMD_ANY_TRACK, // 72
+ CHATMD_VEHICLE_BEG+CHATVEH_ANY, // 65
+ 0,0,0, // 66 .. 68
+ CHATMD_VEHICLE_BEG+CHATVEH_KART, // 69
+ CHATMD_VEHICLE_BEG+CHATVEH_BIKE, // 70
+ CHATMD_TRACK_BY_HOST, // 71
+ CHATMD_ANY_TRACK, // 72
- RACE0 + 1, // 73
- RACE0 + 2, // 74
- RACE0 + 3, // 75
- RACE0 + 4, // 76
- RACE0 + 5, // 77
- RACE0 + 6, // 78
- RACE0 + 8, // 79
- RACE0 + 10, // 80
+ RACE0 + 1, // 73
+ RACE0 + 2, // 74
+ RACE0 + 3, // 75
+ RACE0 + 4, // 76
+ RACE0 + 5, // 77
+ RACE0 + 6, // 78
+ RACE0 + 8, // 79
+ RACE0 + 10, // 80
- 0,0,0,0, 0,0,0,0, // 81 .. 88
- 0,0,0,0, 0,0,0,0, // 89 .. 96
+ 0,0,0,0, 0,0,0,0, // 81 .. 88
+ 0,0,0,0, 0,0,0,0, // 89 .. 96
};
//-----------------------------------------------------------------------------
@@ -880,20 +907,20 @@ void InitializeLPAR ( le_lpar_t *lpar, bool load_lpar )
DASSERT(lpar);
memset(lpar,0,sizeof(*lpar));
- lpar->limit_mode = LPM__DEFAULT;
-
- lpar->engine[0] = 10;
- lpar->engine[1] = 60;
- lpar->engine[2] = 30;
- lpar->enable_xpflags= 1;
- lpar->block_track = 0;
+ lpar->limit_mode = LPM__DEFAULT;
+ lpar->engine[0] = 10;
+ lpar->engine[1] = 60;
+ lpar->engine[2] = 30;
+ lpar->enable_xpflags = 1;
+ lpar->drag_blue_shell = 1;
+ lpar->thcloud_frames = 300;
if ( load_lpar && opt_lpar )
LoadLPAR(lpar,false,0,false);
}
///////////////////////////////////////////////////////////////////////////////
-
+
static void NormalizeLPAR ( le_lpar_t * lp )
{
DASSERT(lp);
@@ -912,6 +939,10 @@ static void NormalizeLPAR ( le_lpar_t * lp )
lp->engine[2] = 100 - lp->engine[0] - lp->engine[1];
}
+ if ( lp->thcloud_frames < 1 || lp->thcloud_frames > 0x7fff )
+ lp->thcloud_frames = 300;
+
+ lp->cheat_mode = lp->cheat_mode < 2 ? lp->cheat_mode : 2;
lp->enable_200cc = lp->enable_200cc > 0;
lp->enable_perfmon = lp->enable_perfmon < 2 ? lp->enable_perfmon : 2;
lp->enable_custom_tt = lp->enable_custom_tt > 0;
@@ -919,10 +950,15 @@ static void NormalizeLPAR ( le_lpar_t * lp )
lp->enable_speedo = lp->enable_speedo < SPEEDO_MAX ? lp->enable_speedo : SPEEDO_MAX;
lp->block_track = lp->block_track < LE_MAX_BLOCK_TRACK
? lp->block_track : LE_MAX_BLOCK_TRACK;
+ lp->drag_blue_shell = lp->drag_blue_shell > 0;
+ #if 0
for ( int c = 0; c < LEDEB__N_CONFIG; c++ )
for ( int l = 0; l < LEDEB__N_LINE; l++ )
lp->debug[c][l] &= LEDEB__ALL;
+ #endif
+
+ // [[new-lpar]]
}
///////////////////////////////////////////////////////////////////////////////
@@ -962,10 +998,10 @@ static void CopyLPAR2Data ( le_analyse_t * ana )
if ( offsetof(le_binpar_v1_t,item_cheat) < ana->param_size )
h->item_cheat = lp->item_cheat;
- if ( offsetof(le_binpar_v1_t,debug_predef[LEDEB__N_CONFIG]) <= ana->param_size )
+ if ( offsetof(le_binpar_v1_t,debug_predef[LEDEB__N_CONFIG-1]) < ana->param_size )
memcpy( h->debug_predef,lp->debug_predef,sizeof(h->debug_predef));
- if ( offsetof(le_binpar_v1_t,debug[LEDEB__N_CONFIG][0]) <= ana->param_size )
+ if ( offsetof(le_binpar_v1_t,debug[LEDEB__N_CONFIG-1][LEDEB__N_LINE-1]) < ana->param_size )
write_be32n( h->debug[0], lp->debug[0], LEDEB__N_CONFIG*LEDEB__N_LINE );
if ( offsetof(le_binpar_v1_t,block_track) < ana->param_size )
@@ -976,6 +1012,17 @@ static void CopyLPAR2Data ( le_analyse_t * ana )
if ( offsetof(le_binpar_v1_t,chat_mode_2) + sizeof(h->chat_mode_2) <= ana->param_size )
write_be16n(h->chat_mode_2,lp->chat_mode_2,BMG_N_CHAT);
+
+ if ( offsetof(le_binpar_v1_t,cheat_mode) < ana->param_size )
+ h->cheat_mode = lp->cheat_mode;
+
+ if ( offsetof(le_binpar_v1_t,drag_blue_shell) < ana->param_size )
+ h->drag_blue_shell = lp->drag_blue_shell;
+
+ if ( offsetof(le_binpar_v1_t,thcloud_frames) < ana->param_size )
+ h->thcloud_frames = htons(lp->thcloud_frames);
+
+ // [[new-lpar]]
}
//
@@ -1071,8 +1118,10 @@ enumError WriteSectionLPAR
if (verbose)
{
+ // [[new-lpar]]
fprintf(f,text_lpar_sect_param_cr
,GetLparModeName(CalcCurrentLparMode(lpar,true),export_count>0)
+ ,lpar->cheat_mode
,lpar->engine[0],lpar->engine[1],lpar->engine[2]
,lpar->enable_200cc
,lpar->enable_perfmon
@@ -1082,13 +1131,17 @@ enumError WriteSectionLPAR
,GetLecodeSpeedoName(lpar->enable_speedo)
,GetLecodeDebugName(lpar->debug_mode)
,lpar->item_cheat
+ ,lpar->drag_blue_shell
+ ,lpar->thcloud_frames,lpar->thcloud_frames/60.0
);
}
else
{
+ // [[new-lpar]]
fprintf(f,
"\r\n"
"LIMIT-MODE = %s\r\n\r\n"
+ "CHEAT-MODE = %d\r\n"
"ENGINE = %u,%u,%u\r\n"
"ENABLE-200CC = %u\r\n"
"PERF-MONITOR = %u\r\n"
@@ -1097,8 +1150,11 @@ enumError WriteSectionLPAR
"BLOCK-TRACK = %u\r\n"
"SPEEDOMETER = SPEEDO$%s\r\n"
"DEBUG = DEBUG$%s\r\n"
- "ITEM-CHEATS = %u\r\n"
+ "ITEM-CHEAT = %u\r\n"
+ "DRAG-BLUE-SHELL = %u\r\n"
+ "THCLOUD-TIME = %u # %.2fs\r\n"
,GetLparModeName(CalcCurrentLparMode(lpar,true),export_count>0)
+ ,lpar->cheat_mode
,lpar->engine[0],lpar->engine[1],lpar->engine[2]
,lpar->enable_200cc
,lpar->enable_perfmon
@@ -1108,6 +1164,8 @@ enumError WriteSectionLPAR
,GetLecodeSpeedoName(lpar->enable_speedo)
,GetLecodeDebugName(lpar->debug_mode)
,lpar->item_cheat
+ ,lpar->drag_blue_shell
+ ,lpar->thcloud_frames,lpar->thcloud_frames/60.0
);
}
@@ -1416,7 +1474,21 @@ enumError AnalyseLEBinary
be32n(ana->lpar.debug[0],p->debug[0],LEDEB__N_CONFIG*LEDEB__N_LINE);
ana->lpar.item_cheat = p->item_cheat;
}
- break;
+
+ if ( param_size >= sizeof(le_binpar_v1_264_t) )
+ {
+ le_binpar_v1_264_t *p = (le_binpar_v1_264_t*)(data+off_param);
+ ana->lpar.cheat_mode = p->cheat_mode;
+ ana->lpar.drag_blue_shell = p->drag_blue_shell;
+ ana->lpar.thcloud_frames = ntohs(p->thcloud_frames);
+ }
+// else
+// {
+// ana->lpar.drag_blue_shell = 1;
+// ana->lpar.thcloud_frames = 300;
+// }
+
+ break; // [[new-lpar]]
default:
// at least v1
@@ -2232,6 +2304,13 @@ void DumpLEAnalyse ( FILE *f, uint indent, const le_analyse_t *ana )
{
const le_binpar_v1_t *h = ana->param_v1;
DASSERT(h);
+
+ if ( ana->param_size >= sizeof(le_binpar_v1_264_t) )
+ fprintf(f,
+ "%*s" "Allow cheat codes: %u = %s\n"
+ ,indent,"", h->cheat_mode, GetCheatModeInfo(h->cheat_mode)
+ );
+
fprintf(f,
"%*s" "Engine chances: "
"%u + %u + %u = %u (1%s0cc+mirror=total)\n"
@@ -2287,6 +2366,19 @@ void DumpLEAnalyse ( FILE *f, uint indent, const le_analyse_t *ana )
);
}
+ if ( ana->param_size >= sizeof(le_binpar_v1_264_t) )
+ {
+ const int nframes = ntohs(h->thcloud_frames);
+ fprintf(f,
+ "%*s" "Drag blue shells: %u = %sabled\n"
+ "%*s" "Thundercloud time: %u frames = %.2fs\n"
+ ,indent,"", h->drag_blue_shell, h->drag_blue_shell ? "en" : "dis"
+ ,indent,"", nframes, nframes/60.0
+ );
+ }
+
+ // [[new-lpar]]
+
#if 0 // for later use
if ( ana->param_size >= sizeof(le_binpar_v1_1bc_t) )
{
@@ -2776,6 +2868,8 @@ void PatchLPAR ( le_lpar_t * lp )
if ( opt_lecode_debug != OFFON_AUTO )
lp->debug_mode = opt_lecode_debug >= DEBUGMD_ENABLED && opt_lecode_debug < DEBUGMD__N
? opt_lecode_debug : DEBUGMD_OFF;
+
+ // [[new-lpar]]
}
///////////////////////////////////////////////////////////////////////////////
@@ -2823,16 +2917,20 @@ static enumError ScanTextLPAR_PARAM
const ScanParam_t ptab[] =
{
{ "LIMIT-MODE", SPM_INT, &limit_mode },
- { "ENGINE", SPM_U8, lpar->engine, 3,3 },
- { "ENABLE-200CC", SPM_U8, &lpar->enable_200cc },
- { "PERF-MONITOR", SPM_U8, &lpar->enable_perfmon },
- { "CUSTOM-TT", SPM_S8, &lpar->enable_custom_tt },
- { "XPFLAGS", SPM_U8, &lpar->enable_xpflags },
- { "BLOCK-TRACK", SPM_U8, &lpar->block_track },
- { "SPEEDOMETER", SPM_U8, &lpar->enable_speedo },
- { "DEBUG", SPM_U8, &lpar->debug_mode },
- { "ITEM-CHEAT", SPM_U8, &lpar->item_cheat },
- {0}
+ { "CHEAT-MODE", SPM_U8, &lpar->cheat_mode },
+ { "ENGINE", SPM_U8, lpar->engine, 3,3 },
+ { "ENABLE-200CC", SPM_U8, &lpar->enable_200cc },
+ { "PERF-MONITOR", SPM_U8, &lpar->enable_perfmon },
+ { "CUSTOM-TT", SPM_S8, &lpar->enable_custom_tt },
+ { "XPFLAGS", SPM_U8, &lpar->enable_xpflags },
+ { "BLOCK-TRACK", SPM_U8, &lpar->block_track },
+ { "SPEEDOMETER", SPM_U8, &lpar->enable_speedo },
+ { "DEBUG", SPM_U8, &lpar->debug_mode },
+ { "ITEM-CHEAT", SPM_U8, &lpar->item_cheat },
+ { "ITEM-CHEATS", SPM_U8, &lpar->item_cheat }, // bug in 2021-04, [[obsolete]] in 2022
+ { "DRAG-BLUE-SHELL", SPM_U8, &lpar->drag_blue_shell },
+ { "THCLOUD-TIME", SPM_U16, &lpar->thcloud_frames },
+ {0} // [[new-lpar]]
};
@@ -2993,6 +3091,7 @@ static enumError ScanTextLPAR_DEBUG
{ "CHECK-POINT", SPM_U8, &debug.check_point },
{ "RESPAWN", SPM_U8, &debug.respawn },
{ "LAP-POS", SPM_U8, &debug.lap_pos },
+ { "XPF", SPM_U8, &debug.xpf },
{0}
};
diff --git a/project/src/lib-lecode.h b/project/src/lib-lecode.h
index 2f2acc2..e37b36e 100644
--- a/project/src/lib-lecode.h
+++ b/project/src/lib-lecode.h
@@ -116,16 +116,22 @@ typedef enum lecode_debug_t
LEDEB_CHECK_POINT = 0x0030, // 2 bits!
LEDEB_RESPAWN = 0x0040,
LEDEB_LAP_POS = 0x0080,
+ LEDEB_XPF = 0x0300, // 2 bits!
+ LEDEB_SHORT_XPF = 0x0100,
+ LEDEB_LONG_XPF = 0x0200,
//--- derived values
LEDEB__STD = 0x00f9, // standard output
- LEDEB__OUTPUT = 0x00f8, // flags that produce output
- LEDEB__ALL = 0x00ff, // all flags
+ LEDEB__OUTPUT = 0x03f8, // flags that produce output
+ LEDEB__ALL = 0x03ff, // all flags
- LEDEB_S_CHECK_POINT = 4, // shift for LEDEB_CHECKPOINT
+ LEDEB_S_CHECK_POINT = 4, // shift for LEDEB_CHECK_POINT
LEDEB_M_CHECK_POINT = 3, // mask after shift
+ LEDEB_S_XPF = 8, // shift for LEDEB_XPF
+ LEDEB_M_XPF = 3, // mask after shift
+
//--- special values
LEDEB__N_CONFIG = 4, // number of debug configurations
@@ -158,7 +164,7 @@ bool GetNextDebugMode ( lecode_debug_info_t *ldi );
static inline bool isDebugModeOutput ( lecode_debug_t mode )
- { return mode & LEDEB__OUTPUT; }
+ { return ( mode & LEDEB__OUTPUT ) != 0; }
static inline bool isDebugModeActive ( lecode_debug_t mode )
{ return mode & LEDEB_ENABLED && mode & LEDEB__OUTPUT; }
@@ -179,6 +185,7 @@ typedef struct lecode_debug_ex_t
u8 check_point;
u8 respawn;
u8 lap_pos;
+ u8 xpf;
// status
bool have_output; // would produce output if ENABLED
@@ -230,12 +237,15 @@ ccp GetPredefDebugName ( predef_debug_t pd_mode );
///////////////////////////////////////////////////////////////////////////////
/////////////// le_lpar_t ///////////////
///////////////////////////////////////////////////////////////////////////////
-// [[le_lpar_t]]
+// [[le_lpar_t]] [[new-lpar]]
typedef struct le_lpar_t
{
lpar_mode_t limit_mode; // limit of other params
+ u16 thcloud_frames; // number of frames a player is small after thundercloud hit
+
+ u8 cheat_mode; // 0:off, 1:debug only, 2:allow all
u8 engine[3]; // 100cc, 150cc, mirror (sum always 100)
u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror
u8 enable_perfmon; // >0: performance monitor enabled; >1: for dolphin too
@@ -245,6 +255,7 @@ typedef struct le_lpar_t
u8 block_track; // block used tracks for 0..20 races
u8 no_speedo_if_debug; // 1 bit for each debug configuration
u8 item_cheat; // 0:disabled, 1:enabled
+ u8 drag_blue_shell; // >0: allow dragging of blue shell
u8 debug_mode; // debug mode
u8 debug_predef[LEDEB__N_CONFIG];
@@ -573,9 +584,56 @@ __attribute__ ((packed)) le_binpar_v1_260_t;
_Static_assert(sizeof(le_binpar_v1_260_t)==0x260,"le_binpar_v1_260_t");
//-----------------------------------------------------------------------------
-// [[le_binpar_v1_t]]
+// [[le_binpar_v1_264_t]]
+
+typedef struct le_binpar_v1_264_t
+{
+ /*000*/ char magic[8]; // LE_PARAM_MAGIC
+ /*008*/ u32 version; // always 1 for v1
+ /*00c*/ u32 size; // size (and minor version)
+ /*010*/ u32 off_eod; // offset of end-of-data
+
+ /*014*/ u32 off_cup_par; // offset to cup param
+ /*018*/ u32 off_cup_track; // offset of cup-track list
+ /*01c*/ u32 off_cup_arena; // offset of cup-arena list
+ /*020*/ u32 off_course_par; // offset of course param
+ /*024*/ u32 off_property; // offset of property list
+ /*028*/ u32 off_music; // offset of music list
+ /*02c*/ u32 off_flags; // offset of music list
+
+ /*030*/ u8 engine[3]; // 100cc, 150cc, mirror (sum always 100)
+ /*033*/ u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror
+ /*034*/ u8 enable_perfmon; // >0: performance monitor enabled; >1: for dolphin too
+ /*035*/ u8 enable_custom_tt; // TRUE: time trial for cusotm tracks enabled
+ /*036*/ u8 enable_xpflags; // TRUE: extended presence flags enabled
+ /*037*/ u8 block_track; // block used track for 0.. tracks
+ /*038*/ u16 chat_mode_1[BMG_N_CHAT]; // mode for each chat message
+ /*0f8*/ u16 chat_mode_2[BMG_N_CHAT]; // mode for each chat message
+ /*1b8*/ u8 enable_speedo; // speedometer selection (0..2), see SPEEDO_*
+ /*1b9*/ u8 no_speedo_if_debug; // if bit is set: suppress speedometer
+ /*1ba*/ u8 debug_mode; // debug mode (0..), see DEBUGMD_*
+ /*1bb*/ u8 item_cheat; // 0:disabled, 1:enabled
+
+ /*1bc*/ u8 debug_predef[LEDEB__N_CONFIG];
+ // information about used predefined mode
+ /*1c0*/ u32 debug[LEDEB__N_CONFIG][LEDEB__N_LINE];
+ // debug line settings, see LEDEB_*
+
+ /*260*/ u8 cheat_mode; // 0:off, 1:debug only, 2:allow all
+ /*261*/ u8 drag_blue_shell; // >0: allow dragging of blue shell
+ /*262*/ u16 thcloud_frames; // number of frames a player is small after thundercloud hit
+
+ /*264*/
+
+}
+__attribute__ ((packed)) le_binpar_v1_264_t;
+
+_Static_assert(sizeof(le_binpar_v1_264_t)==0x264,"le_binpar_v1_264_t");
+
+//-----------------------------------------------------------------------------
+// [[le_binpar_v1_t]] [[new-lpar]]
-typedef struct le_binpar_v1_260_t le_binpar_v1_t;
+typedef struct le_binpar_v1_264_t le_binpar_v1_t;
//
///////////////////////////////////////////////////////////////////////////////
diff --git a/project/src/lib-staticr.c b/project/src/lib-staticr.c
index 8919309..afbd6b4 100644
--- a/project/src/lib-staticr.c
+++ b/project/src/lib-staticr.c
@@ -728,9 +728,29 @@ const str_server_patch_t ServerPatch[217+1] =
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// data: porting ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+#include "addr_port.inc"
+
+#define N_ADDR_PORT (sizeof(addr_port)/sizeof(*addr_port))
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// data access ///////////////
///////////////////////////////////////////////////////////////////////////////
+const KeywordTab_t str_mode_keyword_tab[] =
+{
+ { STR_M_PAL, "PAL", 0, 0 },
+ { STR_M_USA, "USA", 0, 0 },
+ { STR_M_JAP, "JAP", "JAPAN", 0 },
+ { STR_M_KOR, "KOR", "KOREAN", 0 },
+ {0,0,0,0},
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
ccp GetStrModeName ( str_mode_t mode )
{
switch (mode)
@@ -894,7 +914,7 @@ const u32 * GetMenuOffsetTab ( str_mode_t mode )
///////////////////////////////////////////////////////////////////////////////
-#define ORIG_VBI_VALUE 0x4e800020
+#define ORIG_VBI_VALUE 0x4e800020 // blr
static u32 GetVbiAddress ( const staticr_t * str )
{
@@ -2312,6 +2332,274 @@ static uint PatchHTTPS
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// address porting ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+const ccp addr_size_flags_info[] =
+{
+ "verified", // ASM_VERIFIED
+ "extension from verified", // ASM_EXPANDED
+ "not sure", // ASM_UNSURE
+ "suspect to be wrong", // ASM_SUSPECT
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+ccp GetAddressSizeColor ( const ColorSet_t *cs, addr_size_mode_t asmode )
+{
+ if (cs)
+ {
+ switch ( asmode & ASM_M_MODE )
+ {
+ case 0: return cs->green;
+ case 1: return cs->cyan;
+ case 2: return cs->yellow;
+ case 3: return cs->red;
+ }
+ }
+ return EmptyString;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+const addr_port_t * GetPortingRecordPAL ( u32 addr )
+{
+ int beg = 0;
+ int end = N_ADDR_PORT - 1;
+ const int region = STR_M_PAL - STR_ZBI_FIRST;
+
+ while ( beg <= end )
+ {
+ const uint idx = (beg+end)/2;
+ const addr_port_t *p = addr_port + idx;
+ if ( addr < p->addr[region] )
+ end = idx - 1 ;
+ else if ( addr >= p->addr[region] + ( p->size2 & ASM_M_SIZE ) )
+ beg = idx + 1;
+ else
+ return p;
+ }
+ return 0;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static int sort_addr_port_usa ( const addr_port_t **a, const addr_port_t **b )
+{
+ return (int)(*a)->addr[STR_M_USA-STR_ZBI_FIRST]
+ - (int)(*b)->addr[STR_M_USA-STR_ZBI_FIRST];
+}
+
+static int sort_addr_port_jap ( const addr_port_t **a, const addr_port_t **b )
+{
+ return (int)(*a)->addr[STR_M_JAP-STR_ZBI_FIRST]
+ - (int)(*b)->addr[STR_M_JAP-STR_ZBI_FIRST];
+}
+
+static int sort_addr_port_kor ( const addr_port_t **a, const addr_port_t **b )
+{
+ return (int)(*a)->addr[STR_M_KOR-STR_ZBI_FIRST]
+ - (int)(*b)->addr[STR_M_KOR-STR_ZBI_FIRST];
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+const addr_port_t * GetPortingRecord ( str_mode_t mode, u32 addr )
+{
+ static const addr_port_t **usa = 0;
+ static const addr_port_t **jap = 0;
+ static const addr_port_t **kor = 0;
+
+ const addr_port_t ***list_ptr = 0;
+ qsort_func func = 0;
+
+ switch (mode)
+ {
+ case STR_M_PAL: return GetPortingRecordPAL(addr);
+ case STR_M_USA: list_ptr = &usa; func = (qsort_func)sort_addr_port_usa; break;
+ case STR_M_JAP: list_ptr = &jap; func = (qsort_func)sort_addr_port_jap; break;
+ case STR_M_KOR: list_ptr = &kor; func = (qsort_func)sort_addr_port_kor; break;
+ default: return 0;
+ }
+
+ if (!*list_ptr)
+ {
+ u_nsec_t start = GetTimerNSec();
+ *list_ptr = MALLOC(sizeof(**list_ptr)*N_ADDR_PORT);
+ const addr_port_t *src = addr_port;
+ const addr_port_t **dest = *list_ptr;
+ for ( int i = 0; i < N_ADDR_PORT; i++ )
+ *dest++ = src++;
+ qsort( *list_ptr, N_ADDR_PORT, sizeof(**list_ptr), func );
+ if ( logging >= 3 )
+ fprintf(stdlog,"# Porting list for %s in %.1f µsec calculated.\n",
+ GetStrModeName(mode), (GetTimerNSec()-start)*1e-3 );
+
+ #if 0
+ const addr_port_t **base = *list_ptr;
+ for ( int i = 0; i < 4; i++ )
+ {
+ const addr_port_t *p = base[i];
+ printf (">>> %8x %8x %8x %8x : %6x %6x\n",
+ p->addr[0], p->addr[1], p->addr[2], p->addr[3], p->size1, p->size2 );
+ }
+ #endif
+ }
+
+ int beg = 0;
+ int end = N_ADDR_PORT - 1;
+ const int region = mode - STR_ZBI_FIRST;
+ const addr_port_t **base = *list_ptr;
+
+ while ( beg <= end )
+ {
+ const uint idx = (beg+end)/2;
+ const addr_port_t *p = base[idx];
+ const u32 raddr = p->addr[region];
+
+ if ( addr < raddr )
+ end = idx - 1 ;
+ else if ( addr >= raddr + ( p->size2 & ASM_M_SIZE ) )
+ beg = idx + 1;
+ else
+ return p;
+ }
+ return 0;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+addr_type_t GetAddressType ( str_mode_t mode, u32 addr )
+{
+ if (!addr)
+ return ADDRT_NULL;
+
+ if (IsMirroredAddress(addr))
+ return GetAddressType(mode,addr-MIRRORED_ADDRESS_DELTA)
+ + (ADDRT_MIRROR_BEGIN-ADDRT_MEMORY_BEGIN);
+
+ const dol_sect_info_t *dsi = GetInfoDOL(mode);
+ if (dsi)
+ {
+ for ( int sect = 0; sect <= DOL_IDX_BSS; sect++, dsi++ )
+ if ( addr >= dsi->addr && addr < dsi->addr + dsi->size )
+ return sect + ADDRT_DOL;
+ }
+
+ struct data_t
+ {
+ u32 rel1; // first REL address
+ u32 rel2; // last REL address+1
+ };
+
+// mountpoint file size fix size end of rel end of fixed
+// PAL 805102E0 0x4ad3c4 0x3cd104 809BD6A4 808DD3E4
+// USA 8050BF60 0x4acf94 0x3ccd2c 809B8EF4 808D8C8C
+// JAP 8050FC60 0x4acabc 0x3cc8d4 809BC71C 808DC534
+// KOR 804FE300 0x4ad9fc 0x3cd57c 809ABCFC 808CB87C
+
+ static const struct data_t pal = { 0x805102e0,0x808dd3e4 };
+ static const struct data_t usa = { 0x8050bf60,0x808d8c8c };
+ static const struct data_t jap = { 0x8050fc60,0x808dc534 };
+ static const struct data_t kor = { 0x804fe300,0x808cb87c };
+
+ const struct data_t *data;
+ switch (mode)
+ {
+ case STR_M_PAL: data = &pal; break;
+ case STR_M_USA: data = &usa; break;
+ case STR_M_JAP: data = &jap; break;
+ case STR_M_KOR: data = &kor; break;
+ default: return ADDRT_INVALID;
+ }
+
+ if ( addr >= data->rel1 && addr < data->rel2 )
+ return ADDRT_STATICR;
+
+ struct mem_layout_t
+ {
+ u32 begin;
+ u32 end;
+ u32 mode;
+ };
+
+ static const struct mem_layout_t tab[] =
+ {
+ { 0x80000000, 0x80004000, ADDRT_HEAD },
+ { 0x80000000, 0x81800000, ADDRT_MEM1 },
+ { 0x90000000, 0x94000000, ADDRT_MEM2 },
+ { 0xcd000000, 0xcd008000, ADDRT_HOLLYWOOD },
+ {0,0,0}
+ };
+
+ for ( const struct mem_layout_t *ptr = tab; ptr->end; ptr++ )
+ if ( addr >= ptr->begin && addr < ptr->end )
+ return ptr->mode;
+
+ return ADDRT_INVALID;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+ccp GetAddressTypeName ( addr_type_t type )
+{
+ if (IsMirroredAddressType(type))
+ {
+ ccp res = GetAddressTypeName(type-(ADDRT_MIRROR_BEGIN-ADDRT_MEMORY_BEGIN));
+ const uint size = strlen(res)+1;
+ char *buf = GetCircBuf(size);
+ StringLowerS(buf,size,res);
+ return buf;
+ }
+
+ if ( type >= ADDRT_DOL && type <= ADDRT_BSS )
+ return dol_section_name[ type - ADDRT_DOL ];
+
+ switch (type)
+ {
+ case ADDRT_NULL: return "null";
+ case ADDRT_INVALID: return "invalid";
+ case ADDRT_STATICR: return "REL";
+ case ADDRT_HEAD: return "HEAD";
+ case ADDRT_MEM1: return "MEM1";
+ case ADDRT_MEM2: return "MEM2";
+ case ADDRT_HOLLYWOOD: return "HLWD";
+ default: return PrintCircBuf("?%02u?",type);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+ccp GetAddressTypeColor ( const ColorSet_t *col, addr_type_t type )
+{
+ if ( !col || !col->colorize )
+ return EmptyString;
+
+ if (IsMirroredAddressType(type))
+ type -= ADDRT_MIRROR_BEGIN - ADDRT_MEMORY_BEGIN;
+
+ if ( type >= ADDRT_DOL && type < ADDRT_BSS )
+ return type < ADDRT_DOL + DOL_N_TEXT_SECTIONS ? col->b_green : col->b_yellow;
+
+ switch (type)
+ {
+ case ADDRT_BSS: return col->b_magenta_blue;
+ case ADDRT_NULL: return EmptyString;
+ case ADDRT_INVALID: return col->b_orange;
+ case ADDRT_STATICR: return col->b_cyan;
+
+ case ADDRT_HEAD:
+ case ADDRT_MEM1: return col->b_blue_cyan;
+ case ADDRT_MEM2: return col->b_blue;
+ case ADDRT_HOLLYWOOD: return col->yellow;
+
+ default: return col->error;
+ }
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// main.dol support ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -2398,11 +2686,11 @@ void AnalyzeDOL
write_be32(str->data+offset,ORIG_VBI_VALUE);
str->dol_status = str->dol_status & ~DOL_S_ORIG | DOL_S_VBI;
- if ( ( cur_value & 0xff000000 ) == 0x4b000000 )
+ if ( ( cur_value & 0xfc000000 ) == 0x48000000 )
{
- str->vbi_address = cur_value & 0x00ffffff;
- if ( str->vbi_address & 0x00800000 )
- str->vbi_address |= 0xff000000;
+ str->vbi_address = cur_value & 0x03ffffff;
+ if ( str->vbi_address & 0x02000000 )
+ str->vbi_address |= 0xfc000000;
str->vbi_address += vbi_addr;
}
}
@@ -2469,6 +2757,20 @@ void AnalyzeDOL
if ( str->dol_status & DOL_S_ORIG )
str->dol_info_flags |= DIF_ORIG;
}
+
+ #if defined(TEST) && 0 || 1
+ if (vbi_addr)
+ {
+ dol_header_t *dh = (dol_header_t*)str->data;
+ const u32 offset = GetDolOffsetByAddr(dh,vbi_addr,4,0);
+ if (offset)
+ fprintf(stderr,"#VBI: %08x: %08x %08x %08x\n",
+ vbi_addr - 0x18,
+ be32(str->data+offset-24),
+ be32(str->data+offset-4),
+ be32(str->data+offset));
+ }
+ #endif
}
///////////////////////////////////////////////////////////////////////////////
@@ -4302,8 +4604,8 @@ static enumError AddSectionHelper2
memcpy(str->data+store,str->data+offset,sizeof(u32));
}
- const u32 code = ( seg->vbi_entry - patch_addr ) & 0xffffff | 0x4b000000;
- PRINT("PATCH addr %08x off %08x from %08x to %08x\n",
+ const u32 code = ( seg->vbi_entry - patch_addr ) & 0x3ffffff | 0x48000000;
+ PRINT("PATCH addr %08x (off %08x, VBI) from %08x to %08x\n",
patch_addr, offset, be32(str->data+offset), code );
if ( verbose > 0 )
fprintf(stdlog,
@@ -6190,6 +6492,7 @@ char mkw_domain[100] = "mariokartwii.gs.wiimmfi.de";
ccp wifi_domain = mkw_domain + 16;
bool wifi_domain_is_wiimmfi = false;
wcode_t opt_wcode = WCODE_AUTO;
+ccp opt_order = 0;
///////////////////////////////////////////////////////////////////////////////
diff --git a/project/src/lib-staticr.h b/project/src/lib-staticr.h
index 48e07d1..91b5761 100644
--- a/project/src/lib-staticr.h
+++ b/project/src/lib-staticr.h
@@ -176,17 +176,16 @@ typedef enum str_mode_t
STR_M_USA,
STR_M_JAP,
STR_M_KOR,
-
- STR_M__N,
+ STR_M__N,
//--- zero based index support
STR_ZBI_FIRST = STR_M_PAL,
STR_ZBI_N = STR_M__N - STR_ZBI_FIRST,
-
}
__attribute__ ((packed)) str_mode_t;
-ccp GetStrModeName ( str_mode_t );
+ccp GetStrModeName ( str_mode_t mode );
+extern const KeywordTab_t str_mode_keyword_tab[];
//-----------------------------------------------------------------------------
// [[str_flags_t]]
@@ -579,6 +578,89 @@ int PatchByWPF
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// address porting ///////////////
+///////////////////////////////////////////////////////////////////////////////
+// [[addr_size_flags_t]]
+
+typedef enum addr_size_mode_t
+{
+ ASM_VERIFIED, // addresses verified
+ ASM_EXPANDED, // expansion of verified addresses
+ ASM_UNSURE, // unsure (not verified)
+ ASM_SUSPECT, // suspect!
+
+ ASM_M_MODE = 0x00000003,
+ ASM_M_SIZE = 0xfffffffc,
+}
+addr_size_mode_t;
+
+extern const ccp addr_size_flags_info[];
+ccp GetAddressSizeColor ( const ColorSet_t *cs, addr_size_mode_t asmode );
+
+///////////////////////////////////////////////////////////////////////////////
+// [[addr_port_t]]
+
+typedef struct addr_port_t
+{
+ u32 addr[STR_ZBI_N]; // addresses for all 4 regions (never 0)
+ u32 size1; // first size with flags ()
+ u32 size2; // second size with other flags. size2 is always ≥size1.
+}
+addr_port_t;
+
+//-----------------------------------------------------------------------------
+
+const addr_port_t * GetPortingRecord ( str_mode_t mode, u32 addr );
+const addr_port_t * GetPortingRecordPAL ( u32 addr );
+
+///////////////////////////////////////////////////////////////////////////////
+// [[addr_type_t]]
+
+typedef enum addr_type_t
+{
+ ADDRT_NULL, // address is NULL
+ ADDRT_INVALID, // invalid address
+
+ ADDRT_MEMORY_BEGIN,
+
+ ADDRT_DOL, // valid address of DOL
+ ADDRT_BSS = ADDRT_DOL + DOL_N_SECTIONS,
+ ADDRT_STATICR, // valid address of STATICR
+
+ ADDRT_HEAD, // valid address 80000000..80004000 (mirrror +0x40000000)
+ ADDRT_MEM1, // valid address 80000000..81800000 (mirrror +0x40000000)
+ ADDRT_MEM2, // valid address 90000000..94000000 (mirrror +0x40000000)
+
+ ADDRT_MEMORY_END,
+ ADDRT_MIRROR_BEGIN = ADDRT_MEMORY_END,
+ ADDRT_MIRROR_END = ADDRT_MIRROR_BEGIN + ADDRT_MEMORY_END - ADDRT_MEMORY_BEGIN,
+
+ ADDRT_HOLLYWOOD, // Hollywood registers cd000000..0xcd008000
+
+ ADDRT__N,
+}
+addr_type_t;
+
+//-----------------------------------------------------------------------------
+
+#define MIRRORED_ADDRESS_DELTA 0x40000000
+
+static inline bool IsMirroredAddress ( u32 addr )
+{
+ return addr >= 0xc0000000 && addr < 0xc1800000
+ || addr >= 0xd0000000 && addr < 0xd4000000;
+}
+
+static inline bool IsMirroredAddressType ( addr_type_t type )
+ { return type >= ADDRT_MIRROR_BEGIN && type < ADDRT_MIRROR_END; }
+
+
+addr_type_t GetAddressType ( str_mode_t mode, u32 addr );
+ccp GetAddressTypeName ( addr_type_t type );
+ccp GetAddressTypeColor ( const ColorSet_t *col, addr_type_t type );
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// main.dol support ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -734,6 +816,7 @@ extern enum VsBtMode patch_vs_mode;
extern enum VsBtMode patch_bt_mode;
extern char patch_vs_str[2];
extern char patch_bt_str[2];
+extern ccp opt_order;
int ScanOptVS ( bool is_bt, bool allow_2, ccp arg );
diff --git a/project/src/lib-std.c b/project/src/lib-std.c
index 6e5ea84..cda3b2d 100644
--- a/project/src/lib-std.c
+++ b/project/src/lib-std.c
@@ -644,6 +644,7 @@ void SetupLib ( int argc, char ** argv, ccp tname, ccp tvers, ccp ttitle )
TRACE_SIZEOF(ScanParamMode);
TRACE_SIZEOF(ScanParam_t);
TRACE_SIZEOF(SetupDef_t);
+ TRACE_SIZEOF(ListDef_t);
TRACE_SIZEOF(SetupParam_t);
TRACE_SIZEOF(StringField_t);
TRACE_SIZEOF(SubstString_t);
@@ -771,10 +772,7 @@ void SetupLib ( int argc, char ** argv, ccp tname, ccp tvers, ccp ttitle )
void NormalizeOptions
(
- uint log_level // 0: no log
- // 1: print PROGRAM_NAME
- // 2: + print SHARE_PATH + SEARCH_PATH
- // 3: + print AUTOADD_PATH
+ uint log_level // >0: print PROGRAM_NAME and pathes
)
{
SetupColors();
diff --git a/project/src/lib-std.h b/project/src/lib-std.h
index 2d68f85..c1ec7a8 100644
--- a/project/src/lib-std.h
+++ b/project/src/lib-std.h
@@ -120,10 +120,7 @@ void SetupLib ( int argc, char ** argv, ccp tname, ccp tvers, ccp ttitle );
void NormalizeOptions
(
- uint log_level // 0: no log
- // 1: print PROGRAM_NAME
- // 2: + print SHARE_PATH + SEARCH_PATH
- // 3: + print AUTOADD_PATH
+ uint log_level // >0: print PROGRAM_NAME and pathes
);
ccp GetCtLeInfo();
@@ -1286,7 +1283,7 @@ typedef enum slot_info_type_t
SIT_NOT, // not defined
SIT_GENERIC, // generic slot: "arena" or music by race/arena slot
SIT_RECOMMEND, // recommended slot: "r##" | "a##" | "m*"
- SIT_MANDATORY3, // mandatory alternative: "31+42+71" | "31+62+71"
+ SIT_MANDATORY3, // mandatory alternative: "31+42+71"
SIT_MANDATORY2, // mandatory alternative: "31+71"
SIT_MANDATORY, // mandatory slot: "##"
}
@@ -1309,7 +1306,6 @@ typedef struct slot_info_t
slot_info_type_t music_mode; // 0:not, 1:generic, 2:"m*"
bool have_31_71; // true: "31+71" found!
bool have_31_42_71; // true: "31+42+71" found!
- bool have_31_62_71; // true: "31+62+71" found!
char race_info[9]; // race slot as text: "##" | "r##" | "31+71" | "31+41+71"
char arena_info[6]; // arena slot as text: "arena" | "a##"
@@ -1687,7 +1683,7 @@ enumError ScanSetupFile
(
SetupDef_t * sdef, // object list terminated with an element 'name=NULL'
const ListDef_t * ldef, // NULL or object list terminated
- // with an element 'name=NULL'
+ // with an element 'name=NULL'
ccp path1, // filename of text file, part 1
ccp path2, // filename of text file, part 2
SubDir_t * sdir, // not NULL: use it and ignore 'path1'
@@ -1967,7 +1963,7 @@ valid_t IsValidCTCODE
ccp fname // not NULL: print warnings with file ref
);
-// //
+//
///////////////////////////////////////////////////////////////////////////////
/////////////// scan configuration ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -2009,6 +2005,7 @@ const StringField_t * GetAutoaddList(void);
extern ccp autoadd_destination;
+//
///////////////////////////////////////////////////////////////////////////////
/////////////// misc ///////////////
///////////////////////////////////////////////////////////////////////////////
diff --git a/project/src/lib-szs-create.c b/project/src/lib-szs-create.c
index 1523d2e..163d2c2 100644
--- a/project/src/lib-szs-create.c
+++ b/project/src/lib-szs-create.c
@@ -3903,6 +3903,8 @@ int FindSlotsSZS
if (required_slot)
*required_slot = 62;
}
+ else
+ SLOT(6,2) = -1;
//--- adjust special slots & terminate
@@ -3962,9 +3964,7 @@ void AnalyzeSlot ( slot_ana_t *sa, szs_file_t *szs )
if ( sa->required_slot == 31 )
{
- if ( sa->slot[ISLOT(6,2)] > 0 )
- StringCopyS(sa->mandatory_slot,sizeof(sa->mandatory_slot),"31+62+71");
- else if ( sa->slot[ISLOT(4,2)] > 0 )
+ if ( sa->slot[ISLOT(4,2)] > 0 )
StringCopyS(sa->mandatory_slot,sizeof(sa->mandatory_slot),"31+42+71");
else
StringCopyS(sa->mandatory_slot,sizeof(sa->mandatory_slot),"31+71");
diff --git a/project/src/lib-szs.c b/project/src/lib-szs.c
index f541186..edf4700 100644
--- a/project/src/lib-szs.c
+++ b/project/src/lib-szs.c
@@ -3429,7 +3429,6 @@ int IterateFilesParSZS
clean_path,recurse, cut_files, sort_mode,
GetNameFF(szs->fform_file,szs->fform_arch));
-
szs_iterator_func ifunc = GetIteratorFunction(szs->fform_arch,cut_files>=0);
if (!ifunc)
return -1;
diff --git a/project/src/ui/tab-wstrt.inc b/project/src/ui/tab-wstrt.inc
index 291c635..e6d0d22 100644
--- a/project/src/ui/tab-wstrt.inc
+++ b/project/src/ui/tab-wstrt.inc
@@ -111,6 +111,24 @@
" Select parts by --vaddr, --faddr and --sname."
" Without selectors, the whole file is dumped." },
+ { T_DEF_CMD, "PORT", "PORT",
+ "wstrt PORT param...",
+ "The command expects a list of keywords or hex numbers."
+ " Keywords are @PAL@ (default), @USA@, @JAP@, @KOR@, or any abbreviation of them."
+ " They select the region for the next numeric input values."
+ " The hex numbers are interpreted as addresses."
+ " If possible, they are ported to all other regions."
+ " The result is printed as colorized table."
+ "\n"
+ " This address porting is EXPERIMENTAL!" },
+
+ { T_DEF_CMD, "WHERE", "WHERE",
+ "wstrt WHERE address...",
+ "A list of addresses in hex format is expected as input."
+ " The segments in which the specified addresses"
+ " are located is calculated for each region."
+ " The result is output as a human and machine readable table." },
+
{ H_DEF_CMD, "HTTPS", "_HTTPS",
"wstrt _HTTPS file...",
"Collect data about https-requests and print a total summary"
@@ -627,6 +645,13 @@
{ T_OPT_C, "SECTIONS", "sections",
0, 0 /* copy of wszst */ },
+ { T_OPT_CP, "ORDER", "order",
+ "pujk",
+ "The parameter is scanend for the first appearance of letters P (for PAL),"
+ " U (USA), J (JAPAN) and K (KOREA) to define the order of the output."
+ " Case is ignored. Missing letters are added automatically."
+ " The default is @'PUJK'@." },
+
{ T_SEP_OPT, 0,0,0,0 }, //----- separator -----
{ T_OPT_CP, "VADDR", "vaddr|va",
@@ -775,8 +800,7 @@
" The effective number of bytes per line is format dependent"
" (multiple of format size)." },
-
- //
+ //
//---------- wstrt GROUP DEST ----------
{ T_GRP_BEG, "DEST", 0,0,0 },
@@ -941,6 +965,10 @@
" If set, a second table with the image map is printed."
" If set twice, a third table with delta values is printed too." },
+ //---------- COMMAND wstrt CDUMP ----------
+
+ { T_CMD_BEG, "CDUMP", 0,0,0 },
+
//---------- COMMAND wstrt HEXDUMP ----------
{ T_CMD_BEG, "HEXDUMP", 0,0,0 },
@@ -951,9 +979,25 @@
{ T_SEP_OPT, 0,0,0,0 },
{ T_COPY_GRP, "HEXDUMP", 0,0,0 },
- //---------- COMMAND wstrt CDUMP ----------
+ //---------- COMMAND wstrt PORT ----------
- { T_CMD_BEG, "CDUMP", 0,0,0 },
+ { T_CMD_BEG, "PORT", 0,0,0 },
+ { T_COPT, "ORDER", 0,0,0 },
+ { T_COPT, "NO_HEADER", 0,0,
+ "Suppress the table header and footer and output exactly 1 line for"
+ " each specified address. This makes the output more machine-readable." },
+ { T_COPT, "BRIEF", 0,0,
+ " Same as {--no-header}." },
+
+ //---------- COMMAND wstrt WHERE ----------
+
+ { T_CMD_BEG, "WHERE", 0,0,0 },
+ { T_COPT, "ORDER", 0,0,0 },
+ { T_COPT, "NO_HEADER", 0,0,
+ "Suppress the table header and footer and output exactly 1 line for"
+ " each specified address. This makes the output more machine-readable." },
+ { T_COPT, "BRIEF", 0,0,
+ " Same as {--no-header}." },
//---------- COMMAND wstrt HTTPS ----------
diff --git a/project/src/ui/ui-wstrt.c b/project/src/ui/ui-wstrt.c
index 8b83b7c..e317089 100644
--- a/project/src/ui/ui-wstrt.c
+++ b/project/src/ui/ui-wstrt.c
@@ -289,6 +289,14 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
"Print in machine readable sections and parameter lines."
},
+ { OPT_ORDER, false, false, false, false, false, 0, "order",
+ "pujk",
+ "The parameter is scanend for the first appearance of letters P (for"
+ " PAL), U (USA), J (JAPAN) and K (KOREA) to define the order of the"
+ " output. Case is ignored. Missing letters are added automatically."
+ " The default is 'PUJK'."
+ },
+
{ OPT_VADDR, false, false, false, false, true, 0, "vaddr",
"RANGE",
"Comma separated list of virtual addresses to select the hex-dump"
@@ -459,7 +467,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" dependent (multiple of format size)."
},
- {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 62
+ {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 63
//----- global options -----
@@ -849,7 +857,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] =
" directory."
},
- {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 113
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 114
};
@@ -917,6 +925,32 @@ static const InfoOption_t option_cmd_DUMP_LONG =
" If set twice, a third table with delta values is printed too."
};
+static const InfoOption_t option_cmd_PORT_NO_HEADER =
+ { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header",
+ 0,
+ "Suppress the table header and footer and output exactly 1 line for"
+ " each specified address. This makes the output more machine-readable."
+ };
+
+static const InfoOption_t option_cmd_PORT_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ " Same as --no-header."
+ };
+
+static const InfoOption_t option_cmd_WHERE_NO_HEADER =
+ { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header",
+ 0,
+ "Suppress the table header and footer and output exactly 1 line for"
+ " each specified address. This makes the output more machine-readable."
+ };
+
+static const InfoOption_t option_cmd_WHERE_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ " Same as --no-header."
+ };
+
static const InfoOption_t option_cmd_HTTPS_LONG =
{ OPT_LONG, false, false, false, false, false, 'l', "long",
0,
@@ -993,6 +1027,8 @@ static const KeywordTab_t CommandTab[] =
{ CMD_DUMP, "DUMP", 0, 0 },
{ CMD_CDUMP, "_CDUMP", 0, 0 },
{ CMD_HEXDUMP, "HEXDUMP", "XDUMP", 0 },
+ { CMD_PORT, "PORT", 0, 0 },
+ { CMD_WHERE, "WHERE", 0, 0 },
{ CMD_HTTPS, "_HTTPS", 0, 0 },
{ CMD_EXTRACT, "EXTRACT", "X", 0 },
{ CMD_TRACKS, "TRACKS", 0, 0 },
@@ -1138,6 +1174,7 @@ static const struct option OptionLong[] =
{ "cs", 1, 0, GO_CREATE_SECT },
{ "wpf", 1, 0, GO_WPF },
{ "sections", 0, 0, GO_SECTIONS },
+ { "order", 1, 0, GO_ORDER },
{ "vaddr", 1, 0, GO_VADDR },
{ "va", 1, 0, GO_VADDR },
{ "faddr", 1, 0, GO_FADDR },
@@ -1287,38 +1324,39 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/* 0x0b8 */ OPT_CREATE_SECT,
/* 0x0b9 */ OPT_WPF,
/* 0x0ba */ OPT_SECTIONS,
- /* 0x0bb */ OPT_VADDR,
- /* 0x0bc */ OPT_FADDR,
- /* 0x0bd */ OPT_SNAME,
- /* 0x0be */ OPT_INT1,
- /* 0x0bf */ OPT_INT2,
- /* 0x0c0 */ OPT_INT3,
- /* 0x0c1 */ OPT_INT4,
- /* 0x0c2 */ OPT_INT5,
- /* 0x0c3 */ OPT_INT6,
- /* 0x0c4 */ OPT_INT7,
- /* 0x0c5 */ OPT_INT8,
- /* 0x0c6 */ OPT_FLOAT,
- /* 0x0c7 */ OPT_DOUBLE,
- /* 0x0c8 */ OPT_LE,
- /* 0x0c9 */ OPT_BE,
- /* 0x0ca */ OPT_ZEROS,
- /* 0x0cb */ OPT_HEX,
- /* 0x0cc */ OPT_DEC,
- /* 0x0cd */ OPT_C_SYNTAX,
- /* 0x0ce */ OPT_ADDR,
- /* 0x0cf */ OPT_ALIGN,
- /* 0x0d0 */ OPT_TRIGGER,
- /* 0x0d1 */ OPT_NO_ADDR,
- /* 0x0d2 */ OPT_NO_NUMBERS,
- /* 0x0d3 */ OPT_NO_TEXT,
- /* 0x0d4 */ OPT_FORMAT,
- /* 0x0d5 */ OPT_NO_NULL,
- /* 0x0d6 */ OPT_NARROW,
- /* 0x0d7 */ OPT_SMALL,
- /* 0x0d8 */ OPT_WIDE,
- /* 0x0d9 */ OPT_BYTES,
- /* 0x0da */ 0,0,0,0, 0,0,
+ /* 0x0bb */ OPT_ORDER,
+ /* 0x0bc */ OPT_VADDR,
+ /* 0x0bd */ OPT_FADDR,
+ /* 0x0be */ OPT_SNAME,
+ /* 0x0bf */ OPT_INT1,
+ /* 0x0c0 */ OPT_INT2,
+ /* 0x0c1 */ OPT_INT3,
+ /* 0x0c2 */ OPT_INT4,
+ /* 0x0c3 */ OPT_INT5,
+ /* 0x0c4 */ OPT_INT6,
+ /* 0x0c5 */ OPT_INT7,
+ /* 0x0c6 */ OPT_INT8,
+ /* 0x0c7 */ OPT_FLOAT,
+ /* 0x0c8 */ OPT_DOUBLE,
+ /* 0x0c9 */ OPT_LE,
+ /* 0x0ca */ OPT_BE,
+ /* 0x0cb */ OPT_ZEROS,
+ /* 0x0cc */ OPT_HEX,
+ /* 0x0cd */ OPT_DEC,
+ /* 0x0ce */ OPT_C_SYNTAX,
+ /* 0x0cf */ OPT_ADDR,
+ /* 0x0d0 */ OPT_ALIGN,
+ /* 0x0d1 */ OPT_TRIGGER,
+ /* 0x0d2 */ OPT_NO_ADDR,
+ /* 0x0d3 */ OPT_NO_NUMBERS,
+ /* 0x0d4 */ OPT_NO_TEXT,
+ /* 0x0d5 */ OPT_FORMAT,
+ /* 0x0d6 */ OPT_NO_NULL,
+ /* 0x0d7 */ OPT_NARROW,
+ /* 0x0d8 */ OPT_SMALL,
+ /* 0x0d9 */ OPT_WIDE,
+ /* 0x0da */ OPT_BYTES,
+ /* 0x0db */ 0,0,0,0, 0,
/* 0x0e0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
/* 0x0f0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
/* 0x100 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
@@ -1332,158 +1370,172 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] =
/////////////// opt_allowed_cmd_* ///////////////
///////////////////////////////////////////////////////////////////////////////
-static u8 option_allowed_cmd_VERSION[62] = // cmd #1
+static u8 option_allowed_cmd_VERSION[63] = // cmd #1
{
0,1,1,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,
1,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
};
-static u8 option_allowed_cmd_HELP[62] = // cmd #2
+static u8 option_allowed_cmd_HELP[63] = // cmd #2
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1
+ 1,1,1
};
-static u8 option_allowed_cmd_CONFIG[62] = // cmd #3
+static u8 option_allowed_cmd_CONFIG[63] = // cmd #3
{
0,1,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
};
-static u8 option_allowed_cmd_ARGTEST[62] = // cmd #4
+static u8 option_allowed_cmd_ARGTEST[63] = // cmd #4
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1
+ 1,1,1
};
-static u8 option_allowed_cmd_TEST[62] = // cmd #5
+static u8 option_allowed_cmd_TEST[63] = // cmd #5
{
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1
+ 1,1,1
};
-static u8 option_allowed_cmd_COLORS[62] = // cmd #6
+static u8 option_allowed_cmd_COLORS[63] = // cmd #6
{
0,1,1,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
};
-static u8 option_allowed_cmd_ERROR[62] = // cmd #7
+static u8 option_allowed_cmd_ERROR[63] = // cmd #7
{
0,1,1,1,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,
1,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
};
-static u8 option_allowed_cmd_FILETYPE[62] = // cmd #8
+static u8 option_allowed_cmd_FILETYPE[63] = // cmd #8
{
0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 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
};
-static u8 option_allowed_cmd_FILEATTRIB[62] = // cmd #9
+static u8 option_allowed_cmd_FILEATTRIB[63] = // cmd #9
{
0,0,0,1,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
};
-static u8 option_allowed_cmd_RAWDUMP[62] = // cmd #10
+static u8 option_allowed_cmd_RAWDUMP[63] = // cmd #10
{
0,0,0,0,0, 0,1,1,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
};
-static u8 option_allowed_cmd_DUMP[62] = // cmd #11
+static u8 option_allowed_cmd_DUMP[63] = // cmd #11
{
0,1,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
};
-static u8 option_allowed_cmd_CDUMP[62] = // cmd #12
+static u8 option_allowed_cmd_CDUMP[63] = // cmd #12
{
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
};
-static u8 option_allowed_cmd_HEXDUMP[62] = // cmd #13
+static u8 option_allowed_cmd_HEXDUMP[63] = // cmd #13
{
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,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
- 1,1
+ 0,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
+ 1,1,1
+};
+
+static u8 option_allowed_cmd_PORT[63] = // cmd #14
+{
+ 0,0,1,1,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,1,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
+};
+
+static u8 option_allowed_cmd_WHERE[63] = // cmd #15
+{
+ 0,0,1,1,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,1,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
};
-static u8 option_allowed_cmd_HTTPS[62] = // cmd #14
+static u8 option_allowed_cmd_HTTPS[63] = // cmd #16
{
0,1,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
};
-static u8 option_allowed_cmd_EXTRACT[62] = // cmd #15
+static u8 option_allowed_cmd_EXTRACT[63] = // cmd #17
{
0,0,0,0,0, 0,1,1,0,1, 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
};
-static u8 option_allowed_cmd_TRACKS[62] = // cmd #16
+static u8 option_allowed_cmd_TRACKS[63] = // cmd #18
{
0,1,1,1,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
};
-static u8 option_allowed_cmd_ARENAS[62] = // cmd #17
+static u8 option_allowed_cmd_ARENAS[63] = // cmd #19
{
0,1,1,1,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
};
-static u8 option_allowed_cmd_FILES[62] = // cmd #18
+static u8 option_allowed_cmd_FILES[63] = // cmd #20
{
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
};
-static u8 option_allowed_cmd_FIND[62] = // cmd #19
+static u8 option_allowed_cmd_FIND[63] = // cmd #21
{
0,1,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
};
-static u8 option_allowed_cmd_POINTS[62] = // cmd #20
+static u8 option_allowed_cmd_POINTS[63] = // cmd #22
{
0,1,1,0,1, 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
};
-static u8 option_allowed_cmd_ANALYZE[62] = // cmd #21
+static u8 option_allowed_cmd_ANALYZE[63] = // cmd #23
{
0,1,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
};
-static u8 option_allowed_cmd_PATCH[62] = // cmd #22
+static u8 option_allowed_cmd_PATCH[63] = // cmd #24
{
0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1,
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
};
@@ -1677,6 +1729,24 @@ static const InfoOption_t * option_tab_cmd_HEXDUMP[] =
0
};
+static const InfoOption_t * option_tab_cmd_PORT[] =
+{
+ OptionInfo + OPT_ORDER,
+ &option_cmd_PORT_NO_HEADER,
+ &option_cmd_PORT_BRIEF,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_WHERE[] =
+{
+ OptionInfo + OPT_ORDER,
+ &option_cmd_WHERE_NO_HEADER,
+ &option_cmd_WHERE_BRIEF,
+
+ 0
+};
+
static const InfoOption_t * option_tab_cmd_HTTPS[] =
{
&option_cmd_HTTPS_LONG,
@@ -2096,6 +2166,41 @@ static const InfoCommand_t CommandInfo[CMD__N+1] =
option_allowed_cmd_HEXDUMP
},
+ { CMD_PORT,
+ false,
+ false,
+ false,
+ "PORT",
+ 0,
+ "wstrt PORT param...",
+ "The command expects a list of keywords or hex numbers. Keywords are"
+ " PAL (default), USA, JAP, KOR, or any abbreviation of them. They"
+ " select the region for the next numeric input values. The hex numbers"
+ " are interpreted as addresses. If possible, they are ported to all"
+ " other regions. The result is printed as colorized table.\n"
+ " This address porting is EXPERIMENTAL!",
+ 0,
+ 3,
+ option_tab_cmd_PORT,
+ option_allowed_cmd_PORT
+ },
+
+ { CMD_WHERE,
+ false,
+ false,
+ false,
+ "WHERE",
+ 0,
+ "wstrt WHERE address...",
+ "A list of addresses in hex format is expected as input. The segments"
+ " in which the specified addresses are located is calculated for each"
+ " region. The result is output as a human and machine readable table.",
+ 0,
+ 3,
+ option_tab_cmd_WHERE,
+ option_allowed_cmd_WHERE
+ },
+
{ CMD_HTTPS,
true,
false,
diff --git a/project/src/ui/ui-wstrt.h b/project/src/ui/ui-wstrt.h
index 9c23bd8..4662318 100644
--- a/project/src/ui/ui-wstrt.h
+++ b/project/src/ui/ui-wstrt.h
@@ -86,6 +86,7 @@ typedef enum enumOptions
OPT_CREATE_SECT,
OPT_WPF,
OPT_SECTIONS,
+ OPT_ORDER,
OPT_VADDR,
OPT_FADDR,
OPT_SNAME,
@@ -118,7 +119,7 @@ typedef enum enumOptions
OPT_WIDE,
OPT_BYTES,
- OPT__N_SPECIFIC, // == 62
+ OPT__N_SPECIFIC, // == 63
//----- global options -----
@@ -174,7 +175,7 @@ typedef enum enumOptions
OPT_CLEAN_DOL,
OPT_CT_DIR,
- OPT__N_TOTAL // == 113
+ OPT__N_TOTAL // == 114
} enumOptions;
@@ -219,6 +220,7 @@ typedef enum enumOptions
// OB_CREATE_SECT = 1llu << OPT_CREATE_SECT,
// OB_WPF = 1llu << OPT_WPF,
// OB_SECTIONS = 1llu << OPT_SECTIONS,
+// OB_ORDER = 1llu << OPT_ORDER,
// OB_VADDR = 1llu << OPT_VADDR,
// OB_FADDR = 1llu << OPT_FADDR,
// OB_SNAME = 1llu << OPT_SNAME,
@@ -323,12 +325,20 @@ typedef enum enumOptions
//
// OB_CMD_DUMP = OB_LONG,
//
+// OB_CMD_CDUMP = 0,
+//
// OB_CMD_HEXDUMP = OB_VADDR
// | OB_FADDR
// | OB_SNAME
// | OB_GRP_HEXDUMP,
//
-// OB_CMD_CDUMP = 0,
+// OB_CMD_PORT = OB_ORDER
+// | OB_NO_HEADER
+// | OB_BRIEF,
+//
+// OB_CMD_WHERE = OB_ORDER
+// | OB_NO_HEADER
+// | OB_BRIEF,
//
// OB_CMD_HTTPS = OB_LONG,
//
@@ -400,6 +410,8 @@ typedef enum enumCommands
CMD_DUMP,
CMD_CDUMP,
CMD_HEXDUMP,
+ CMD_PORT,
+ CMD_WHERE,
CMD_HTTPS,
CMD_EXTRACT,
@@ -412,7 +424,7 @@ typedef enum enumCommands
CMD_ANALYZE,
CMD_PATCH,
- CMD__N // == 23
+ CMD__N // == 25
} enumCommands;
@@ -509,6 +521,7 @@ typedef enum enumGetOpt
GO_CREATE_SECT,
GO_WPF,
GO_SECTIONS,
+ GO_ORDER,
GO_VADDR,
GO_FADDR,
GO_SNAME,
diff --git a/project/src/ui/ui.def b/project/src/ui/ui.def
index 0c8671f..0570f46 100644
--- a/project/src/ui/ui.def
+++ b/project/src/ui/ui.def
@@ -22332,6 +22332,21 @@
" Select parts by --vaddr, --faddr and --sname. Without selectors, the" \
" whole file is dumped." )
+#:def_cmd( "PORT", "PORT", \
+ "wstrt PORT param...", \
+ "The command expects a list of keywords or hex numbers. Keywords are" \
+ " @PAL@ (default), @USA@, @JAP@, @KOR@, or any abbreviation of them." \
+ " They select the region for the next numeric input values. The hex" \
+ " numbers are interpreted as addresses. If possible, they are ported" \
+ " to all other regions. The result is printed as colorized table.\n" \
+ " This address porting is EXPERIMENTAL!" )
+
+#:def_cmd( "WHERE", "WHERE", \
+ "wstrt WHERE address...", \
+ "A list of addresses in hex format is expected as input. The segments" \
+ " in which the specified addresses are located is calculated for each" \
+ " region. The result is output as a human and machine readable table." )
+
#:def_cmd( "EXTRACT", "EXTRACT|X", \
"wstrt EXTRACT dol...", \
"Extract the sections of a DOL file into a directory. StaticR.rel" \
@@ -22789,6 +22804,13 @@
"", \
"Print in machine readable sections and parameter lines." )
+#:def_opt( "ORDER", "order", "CP", \
+ "pujk", \
+ "The parameter is scanend for the first appearance of letters P (for" \
+ " PAL), U (USA), J (JAPAN) and K (KOREA) to define the order of the" \
+ " output. Case is ignored. Missing letters are added automatically." \
+ " The default is @'PUJK'@." )
+
#:def_opt( "VADDR", "vaddr|va", "CP", \
"RANGE", \
"Comma separated list of virtual addresses to select the hex-dump" \
@@ -23146,6 +23168,32 @@
"", \
"" )
+#:def_cmd_opt( "PORT", "ORDER", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "PORT", "NO_HEADER", \
+ "", \
+ "Suppress the table header and footer and output exactly 1 line for" \
+ " each specified address. This makes the output more machine-readable." )
+
+#:def_cmd_opt( "PORT", "BRIEF", \
+ "", \
+ " Same as {--no-header}." )
+
+#:def_cmd_opt( "WHERE", "ORDER", \
+ "", \
+ "" )
+
+#:def_cmd_opt( "WHERE", "NO_HEADER", \
+ "", \
+ "Suppress the table header and footer and output exactly 1 line for" \
+ " each specified address. This makes the output more machine-readable." )
+
+#:def_cmd_opt( "WHERE", "BRIEF", \
+ "", \
+ " Same as {--no-header}." )
+
#:def_cmd_opt( "HTTPS", "LONG", \
"", \
" Print output a C source" )
diff --git a/project/src/wbmgt.c b/project/src/wbmgt.c
index c5726b6..8c9ac2e 100644
--- a/project/src/wbmgt.c
+++ b/project/src/wbmgt.c
@@ -842,7 +842,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
#ifdef DEBUG
DumpUsedOptions(&InfoUI_wbmgt,TRACE_FILE,11);
#endif
- NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 );
+ NormalizeOptions( verbose > 3 && !is_env );
SetupBMG(filter_bmg);
return !err ? ERR_OK : ProgInfo.max_error ? ProgInfo.max_error : ERR_SYNTAX;
diff --git a/project/src/wctct.c b/project/src/wctct.c
index 815126f..b81066f 100644
--- a/project/src/wctct.c
+++ b/project/src/wctct.c
@@ -844,7 +844,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
#ifdef DEBUG
DumpUsedOptions(&InfoUI_wctct,TRACE_FILE,11);
#endif
- NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 );
+ NormalizeOptions( verbose > 3 && !is_env );
SetupBMG(filter_bmg);
UsePatchingListBMG(&opt_load_bmg);
diff --git a/project/src/wimgt.c b/project/src/wimgt.c
index 8625693..61ef456 100644
--- a/project/src/wimgt.c
+++ b/project/src/wimgt.c
@@ -648,7 +648,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
#ifdef DEBUG
DumpUsedOptions(&InfoUI_wimgt,TRACE_FILE,11);
#endif
- NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 );
+ NormalizeOptions( verbose > 3 && !is_env );
return !err ? ERR_OK : ProgInfo.max_error ? ProgInfo.max_error : ERR_SYNTAX;
}
diff --git a/project/src/wkclt.c b/project/src/wkclt.c
index 10d7232..fd55727 100644
--- a/project/src/wkclt.c
+++ b/project/src/wkclt.c
@@ -1204,7 +1204,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
DumpUsedOptions(&InfoUI_wkclt,TRACE_FILE,11);
#endif
CloseTransformation();
- NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 );
+ NormalizeOptions( verbose > 3 && !is_env );
SetupKCL();
return !err ? ERR_OK : ProgInfo.max_error ? ProgInfo.max_error : ERR_SYNTAX;
diff --git a/project/src/wkmpt.c b/project/src/wkmpt.c
index 80d44c2..60ffafb 100644
--- a/project/src/wkmpt.c
+++ b/project/src/wkmpt.c
@@ -1682,7 +1682,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
DumpUsedOptions(&InfoUI_wkmpt,TRACE_FILE,11);
#endif
CloseTransformation();
- NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 );
+ NormalizeOptions( verbose > 3 && !is_env );
SetupKCL();
SetupKMP();
diff --git a/project/src/wlect.c b/project/src/wlect.c
index 123a3a8..2fc1bea 100644
--- a/project/src/wlect.c
+++ b/project/src/wlect.c
@@ -252,7 +252,7 @@ static enumError cmd_dpad()
while ( *arg && (uint)*arg <= ' ' )
arg++;
u32 num = 0;
- if ( *arg >= '0' && *arg <= '9' || *arg >= 'a' && *arg <= 'f' || *arg >= 'A' && *arg <= 'F' )
+ if ( *arg >= '0' && *arg <= '9' || *arg >= 'a' && *arg <= 'f' || *arg >= 'A' && *arg <= 'F' )
num = str2l(arg,0,16);
else
{
@@ -274,7 +274,16 @@ static enumError cmd_dpad()
{
switch (n&3)
{
- case 0: *--dest = '.'; break;
+ case 0:
+ if ( *dest == 'U' || *dest == '.' )
+ {
+ *dest = '.';
+ *--dest = '.';
+ }
+ else
+ *--dest = 'U';
+ break;
+
case 1: *--dest = 'L'; break;
case 2: *--dest = 'R'; break;
case 3: *--dest = 'D'; break;
@@ -1215,7 +1224,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
#ifdef DEBUG
DumpUsedOptions(&InfoUI_wlect,TRACE_FILE,11);
#endif
- NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 );
+ NormalizeOptions( verbose > 3 && !is_env );
SetupBMG(0);
UsePatchingListBMG(&opt_load_bmg);
diff --git a/project/src/wmdlt.c b/project/src/wmdlt.c
index bb705cc..77bc384 100644
--- a/project/src/wmdlt.c
+++ b/project/src/wmdlt.c
@@ -614,7 +614,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
DumpUsedOptions(&InfoUI_wmdlt,TRACE_FILE,11);
#endif
CloseTransformation();
- NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 );
+ NormalizeOptions( verbose > 3 && !is_env );
SetupMDL();
return !err ? ERR_OK : ProgInfo.max_error ? ProgInfo.max_error : ERR_SYNTAX;
diff --git a/project/src/wpatt.c b/project/src/wpatt.c
index 0f28c97..0cfb061 100644
--- a/project/src/wpatt.c
+++ b/project/src/wpatt.c
@@ -407,7 +407,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
DumpUsedOptions(&InfoUI_wpatt,TRACE_FILE,11);
#endif
//CloseTransformation();
- NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 );
+ NormalizeOptions( verbose > 3 && !is_env );
if (!err)
WarnDepractedOptions(&InfoUI_wpatt);
diff --git a/project/src/wstrt.c b/project/src/wstrt.c
index 31265d7..8ff727e 100644
--- a/project/src/wstrt.c
+++ b/project/src/wstrt.c
@@ -401,6 +401,207 @@ static enumError cmd_hexdump()
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// command port ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static void setup_order ( int index[STR_ZBI_N], int delta )
+{
+ int dest_index = 0;
+ char used[STR_ZBI_N] = {0};
+
+ if (opt_order)
+ {
+ ccp ptr = opt_order;
+ while ( *ptr && dest_index < STR_ZBI_N )
+ {
+ int idx = -1;
+ switch(*ptr++)
+ {
+ case 'p': case 'P': idx = STR_M_PAL - STR_ZBI_FIRST; break;
+ case 'u': case 'U': idx = STR_M_USA - STR_ZBI_FIRST; break;
+ case 'j': case 'J': idx = STR_M_JAP - STR_ZBI_FIRST; break;
+ case 'k': case 'K': idx = STR_M_KOR - STR_ZBI_FIRST; break;
+ }
+
+ if ( idx >= 0 && !used[idx] )
+ {
+ used[idx]++;
+ index[dest_index++] = idx + STR_ZBI_FIRST - delta;
+ }
+ }
+ }
+
+ for ( int i = 0; i < STR_ZBI_N && dest_index < STR_ZBI_N; i++ )
+ if (!used[i])
+ index[dest_index++] = i + STR_ZBI_FIRST - delta;
+
+ if ( logging >= 3 )
+ fprintf(stdlog,"# Region Order: %d:%s %d:%s %d:%s %d:%s\n",
+ index[0], GetStrModeName(index[0]+delta),
+ index[1], GetStrModeName(index[1]+delta),
+ index[2], GetStrModeName(index[2]+delta),
+ index[3], GetStrModeName(index[3]+delta) );
+}
+
+//-----------------------------------------------------------------------------
+
+static enumError cmd_port()
+{
+
+ if (brief_count)
+ print_header = false;
+
+ int index[STR_ZBI_N];
+ setup_order(index,STR_ZBI_FIRST);
+
+
+ //--- port addresses
+
+ int max_fw = 0;
+ for ( int md = 0; md <= ASM_M_MODE; md++ )
+ {
+ const int slen = strlen(addr_size_flags_info[md]);
+ if ( max_fw < slen )
+ max_fw = slen;
+ }
+
+ const int sep_len_3 = 3*(56+max_fw);
+
+ int count = 0;
+ str_mode_t mode = STR_M_PAL;
+ ParamList_t *param;
+ for ( param = first_param; param; param = param->next )
+ {
+ ccp arg = param->arg;
+ if ( !arg || !*arg )
+ continue;
+
+ const KeywordTab_t *cmd = ScanKeyword(0,arg,str_mode_keyword_tab);
+ if (cmd)
+ {
+ mode = cmd->id;
+ continue;
+ }
+
+ if ( print_header && !count++ )
+ printf("\n%s#%.*s\n%s# %s %s %s %s where status\n%s#%.*s%s\n",
+ colout->heading, sep_len_3, ThinLine300_3,
+ colout->heading,
+ GetStrModeName(index[0]+STR_ZBI_FIRST),
+ GetStrModeName(index[1]+STR_ZBI_FIRST),
+ GetStrModeName(index[2]+STR_ZBI_FIRST),
+ GetStrModeName(index[3]+STR_ZBI_FIRST),
+ colout->heading, sep_len_3, ThinLine300_3, colout->reset );
+
+ const u32 num = str2ul(arg,0,16);
+ const addr_type_t atype = GetAddressType(mode,num);
+ const ccp atname = GetAddressTypeName(atype);
+ const u32 mirror = IsMirroredAddress(num) ? MIRRORED_ADDRESS_DELTA : 0;
+ const u32 addr = num - mirror;
+ const addr_port_t *ap = GetPortingRecord(mode,addr);
+
+ if (!ap)
+ {
+ printf("%s! Can't port %s address 0x%08x (%s)!%s\n",
+ colout->warn, GetStrModeName(mode), num, atname, colout->reset );
+ }
+ else
+ {
+ const int idx = mode - STR_ZBI_FIRST;
+ const int offset = addr - ap->addr[idx];
+
+ for ( int i = 0; i < STR_ZBI_N; i++ )
+ {
+ const u32 val = ap->addr[index[i]] + offset + mirror;
+ if ( idx == i )
+ printf(" %s%#8x%s",colout->value,val,colout->reset);
+ else
+ printf(" %#8x",val);
+ }
+
+ const int asmode = ( offset < ap->size1 ? ap->size1 : ap->size2 ) & ASM_M_MODE;
+ printf(" %s%-5.5s%s %s%u: %s%s\n",
+ GetAddressTypeColor(colout,atype), atname, colout->reset,
+ GetAddressSizeColor(colout,asmode),
+ asmode, addr_size_flags_info[asmode],
+ colout->reset );
+ }
+ }
+
+ if (print_header)
+ {
+ if ( count > 0 )
+ printf("%s#%.*s%s\n\n", colout->heading, sep_len_3, ThinLine300_3, colout->reset );
+ else
+ putchar('\n');
+ }
+
+ return ERR_OK;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// command where ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError cmd_where()
+{
+
+ if (brief_count)
+ print_header = false;
+
+ int index[STR_ZBI_N];
+ setup_order(index,0);
+
+
+ //--- port addresses
+
+ const int sep_len_3 = 3*34;
+
+ int count = 0;
+ ParamList_t *param;
+ for ( param = first_param; param; param = param->next )
+ {
+ ccp arg = param->arg;
+ if ( !arg || !*arg )
+ continue;
+
+ if ( print_header && !count++ )
+ printf("\n%s#%.*s\n%s# Address %s %s %s %s\n%s#%.*s%s\n",
+ colout->heading, sep_len_3, ThinLine300_3,
+ colout->heading,
+ GetStrModeName(index[0]),
+ GetStrModeName(index[1]),
+ GetStrModeName(index[2]),
+ GetStrModeName(index[3]),
+ colout->heading, sep_len_3, ThinLine300_3, colout->reset );
+
+ const uint num = str2ul(arg,0,16);
+ printf(" %8x:",num);
+ for ( int i = 0; i < STR_ZBI_N; i++ )
+ {
+ addr_type_t type = GetAddressType(index[i],num);
+ printf(" %s%-4.4s%s",
+ GetAddressTypeColor(colout,type),
+ GetAddressTypeName(type),
+ colout->reset );
+ }
+ putchar('\n');
+ }
+
+ if (print_header)
+ {
+ if ( count > 0 )
+ printf("%s#%.*s%s\n\n", colout->heading, sep_len_3, ThinLine300_3, colout->reset );
+ else
+ putchar('\n');
+ }
+
+ return ERR_OK;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// command https ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -1261,6 +1462,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_BRIEF: brief_count++; break;
case GO_NO_HEADER: print_header = false; break;
case GO_SECTIONS: print_sections++; break;
+ case GO_ORDER: opt_order = optarg; break;
case GO_VADDR: InsertAddressMemMap(&vaddr,true,optarg,16); break;
case GO_FADDR: InsertAddressMemMap(&faddr,true,optarg,16); break;
@@ -1320,7 +1522,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
#ifdef DEBUG
DumpUsedOptions(&InfoUI_wstrt,TRACE_FILE,11);
#endif
- NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 );
+ NormalizeOptions( verbose > 3 && !is_env );
if (!is_env)
{
@@ -1389,6 +1591,8 @@ static enumError CheckCommand ( int argc, char ** argv )
case CMD_DUMP: err = cmd_dump(false); break;
case CMD_CDUMP: err = cmd_dump(true); break;
case CMD_HEXDUMP: err = cmd_hexdump(); break;
+ case CMD_PORT: err = cmd_port(); break;
+ case CMD_WHERE: err = cmd_where(); break;
case CMD_HTTPS: err = cmd_https(); break;
case CMD_EXTRACT: err = cmd_extract(); break;
diff --git a/project/src/wszst.c b/project/src/wszst.c
index a169ccf..419b2e8 100644
--- a/project/src/wszst.c
+++ b/project/src/wszst.c
@@ -5325,7 +5325,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
DumpUsedOptions(&InfoUI_wszst,TRACE_FILE,11);
#endif
CloseTransformation();
- NormalizeOptions( verbose > 3 && !is_env ? 3 : 0 );
+ NormalizeOptions( verbose > 3 && !is_env );
SetupBMG(filter_bmg);
SetupKCL();
SetupKMP();
diff --git a/project/src/wtest.c b/project/src/wtest.c
index dc4cca0..351e18c 100644
--- a/project/src/wtest.c
+++ b/project/src/wtest.c
@@ -57,6 +57,7 @@
#include "lib-bmg.h"
#include "lib-lecode.h"
#include "lib-common.h"
+#include "lib-staticr.h"
#define CMD1_FW 13
@@ -3824,57 +3825,6 @@ static enumError test_config ( int argc, char ** argv )
//
///////////////////////////////////////////////////////////////////////////////
-/////////////// test_search() ///////////////
-///////////////////////////////////////////////////////////////////////////////
-
-static void print_search ( const search_file_list_t *sfl, ccp title )
-{
- if (title)
- printf("> %s\n",title);
-
- uint i;
- search_file_t *sf = sfl->list;
- for ( i = 1; i <= sfl->used; i++, sf++ )
- printf("%5d. [a=%d,it=%d,h:%x] %s\n",
- i, sf->alloced, sf->itype, sf->hint, sf->fname );
-}
-
-//-----------------------------------------------------------------------------
-
-static enumError test_search ( int argc, char ** argv )
-{
- search_file_list_t sfl;
- InitializeSearchFile(&sfl);
- print_search(&sfl,"init");
-
- int i;
- for ( i = 1; i < argc; i++ )
- {
- ccp arg = argv[i];
- CopyMode_t cm = CPM_LINK;
- if ( *arg == '+' )
- {
- arg = STRDUP(arg+1);
- cm = CPM_MOVE;
- if ( i == 1 )
- {
- int res = SearchConfig1(&sfl,"wiimms-szs-tools.conf",arg,
- ".szs","/etc",std_share_path,0);
- printf("SearchConfig1(), res=%d\n",res);
- continue;
- }
- }
- AppendSearchFile(&sfl,arg,cm,"config0.txt");
- }
- print_search(&sfl,"argv[]");
-
- ResetSearchFile(&sfl);
- putchar('\n');
- return ERR_OK;
-}
-
-//
-///////////////////////////////////////////////////////////////////////////////
/////////////// test_quote() ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -3902,7 +3852,7 @@ static enumError test_quote ( int argc, char ** argv )
test_quote_helper(0);
test_quote_helper(EmptyString);
test_quote_helper("ab\ec\td\n \"xyz\' ghi");
-
+
int i;
for ( i = 1; i < argc; i++ )
test_quote_helper(argv[i]);
@@ -4000,6 +3950,742 @@ static enumError test_cygpath ( int argc, char ** argv )
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// test_scan_port() data ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+typedef struct known_addr_t
+{
+ u32 pal_addr;
+ u32 size;
+}
+known_addr_t;
+
+//-----------------------------------------------------------------------------
+
+static const known_addr_t known_addr[] =
+{
+ { 0x803457e0, 4*0x538 }, // lecode struct wiimote_t
+ { 0x80350580, 4* 8 }, // lecode struct gcn_controller_t
+};
+
+#if 0 // DUMMY
+ { 0x, xxxx }, // lecode struct xxxx
+#endif
+
+#define N_KNOWN_ADDR (sizeof(known_addr)/sizeof(*known_addr))
+
+//-----------------------------------------------------------------------------
+
+static const known_addr_t * get_known_addr ( u32 pal_addr )
+{
+ static int done = 0;
+ if (!done++)
+ {
+ // check order and overlap
+
+ int err_count = 0;
+ const known_addr_t *ptr = known_addr;
+ for ( int i = 0; i < N_KNOWN_ADDR-1; i++, ptr++ )
+ {
+ if ( ptr->pal_addr + ptr->size >= ptr[1].pal_addr )
+ {
+ fprintf(stderr,"ERR/KNOWN_ADDR: %3u: %x +%x = %x : %x +%x\n",
+ i,
+ ptr->pal_addr, ptr->size, ptr->pal_addr + ptr->size,
+ ptr[1].pal_addr, ptr[1].size );
+ err_count++;
+ }
+ }
+ ASSERT(!err_count);
+ }
+
+ //--- search
+
+ int beg = 0;
+ int end = N_KNOWN_ADDR - 1;
+
+ while ( beg <= end )
+ {
+ const uint idx = (beg+end)/2;
+ const known_addr_t *p = known_addr + idx;
+ if ( pal_addr < p->pal_addr )
+ end = idx - 1 ;
+// else if ( pal_addr >= p->pal_addr + p->size )
+ else if ( pal_addr > p->pal_addr ) // only exact addrsss match
+ beg = idx + 1;
+ else
+ return p;
+ }
+ return 0;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// test_scan_port() helpers ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+const int AUTO_EXPAND1 = 8; // tie ranges if address delta(size1) <= #
+const int AUTO_EXPAND2 = 8; // tie ranges if address delta(size2) <= #
+const int MAX_DELTA_P2 = 0x100000; // max dallowed delat for prio2
+
+#undef ADDROF
+#undef ENDOF1
+#undef ENDOF2
+#undef SIZE1
+#undef SIZE2
+#undef MODE1
+#undef MODE2
+#undef SAMEDELTA
+
+#define ADDROF(p) ( (p)->addr[STR_0_PAL])
+#define ENDOF1(p) ( (p)->addr[STR_0_PAL] + ( (p)->size1 & ASM_M_SIZE ))
+#define ENDOF2(p) ( (p)->addr[STR_0_PAL] + ( (p)->size2 & ASM_M_SIZE ))
+#define SIZE1(p) ( (p)->size1 & ASM_M_SIZE )
+#define SIZE2(p) ( (p)->size2 & ASM_M_SIZE )
+#define MODE1(p) ( (p)->size1 & ASM_M_MODE )
+#define MODE2(p) ( (p)->size2 & ASM_M_MODE )
+#define SAMEDELTA(a,b) ( \
+ (a)->addr[STR_0_USA] - (a)->addr[STR_0_PAL] == (b)->addr[STR_0_USA] - (b)->addr[STR_0_PAL] \
+ && (a)->addr[STR_0_JAP] - (a)->addr[STR_0_PAL] == (b)->addr[STR_0_JAP] - (b)->addr[STR_0_PAL] \
+ && (a)->addr[STR_0_KOR] - (a)->addr[STR_0_PAL] == (b)->addr[STR_0_KOR] - (b)->addr[STR_0_PAL] \
+ )
+
+//-----------------------------------------------------------------------------
+
+enum
+{
+ STR_0_PAL = STR_M_PAL - STR_ZBI_FIRST,
+ STR_0_USA = STR_M_USA - STR_ZBI_FIRST,
+ STR_0_JAP = STR_M_JAP - STR_ZBI_FIRST,
+ STR_0_KOR = STR_M_KOR - STR_ZBI_FIRST,
+};
+
+//-----------------------------------------------------------------------------
+
+typedef struct aport_t
+{
+ addr_port_t *list;
+ uint size;
+ uint used;
+
+ // stats
+ uint max_size1;
+ uint max_size2;
+ uint line_count;
+}
+aport_t;
+
+//-----------------------------------------------------------------------------
+
+#define MAX_APORT_PRIO 2
+aport_t aport_list[MAX_APORT_PRIO] = {{0}};
+
+//-----------------------------------------------------------------------------
+
+static int get_port_record ( aport_t *aport, u32 addr, bool *found )
+{
+ int beg = 0;
+ int end = (int)aport->used - 1;
+ const int region = STR_M_PAL - STR_ZBI_FIRST;
+
+ while ( beg <= end )
+ {
+ const uint idx = (beg+end)/2;
+ addr_port_t *p = aport->list + idx;
+ if ( addr < p->addr[region] )
+ end = idx - 1 ;
+ else if ( addr >= p->addr[region] + ( p->size2 & ASM_M_SIZE ) )
+ beg = idx + 1;
+ else
+ {
+ *found = true;
+ return idx;
+ }
+ }
+ *found = false;
+ return beg;
+}
+
+//-----------------------------------------------------------------------------
+
+static void remove_record ( aport_t *aport, addr_port_t *rec )
+{
+ ASSERT(aport);
+ ASSERT(rec);
+ ASSERT( rec >= aport->list );
+ ASSERT( rec < aport->list + aport->used );
+
+ int idx = rec - aport->list;
+ if ( idx < --aport->used )
+ memmove( rec, rec+1, (aport->used - idx) * sizeof(*rec) );
+}
+//-----------------------------------------------------------------------------
+
+static addr_port_t * insert_record ( aport_t *aport, int index, const addr_port_t *src )
+{
+ ASSERT(aport);
+
+ if ( aport->used == aport->size )
+ {
+ aport->size += 1000 + aport->size/5;
+ aport->list = REALLOC(aport->list,aport->size*sizeof(*aport->list));
+ fprintf(stderr,"ALLOC: %u/%u records\n",aport->used,aport->size);
+ }
+
+ index = CheckIndex1(aport->used,index);
+ ASSERT( index >= 0 && index <= aport->used );
+ addr_port_t *cur = aport->list + index;
+
+ if ( index < aport->used )
+ memmove( cur+1, cur, (aport->used - index) * sizeof(*cur) );
+
+ aport->used++;
+ if (src)
+ memcpy(cur,src,sizeof(*cur));
+ return cur;
+}
+
+//-----------------------------------------------------------------------------
+
+static void insert_range ( aport_t *aport, u32 addr, u32 size )
+{
+ bool found;
+ const int idx = get_port_record(aport,addr,&found);
+ addr_port_t *cur = insert_record(aport_list,idx,0);
+ cur->addr[STR_0_PAL] =
+ cur->addr[STR_0_USA] =
+ cur->addr[STR_0_JAP] =
+ cur->addr[STR_0_KOR] = addr;
+ cur->size1 = cur->size2 = size;
+}
+
+//-----------------------------------------------------------------------------
+
+static int check_overlay ( aport_t *aport, addr_port_t *cur, int def_stat )
+{
+ addr_port_t *nxt = cur + 1;
+ if ( nxt - aport->list >= aport->used )
+ return def_stat;
+
+ const u32 cur_pal = cur->addr[STR_0_PAL];
+ const u32 cur_end1 = cur_pal + ( cur->size1 & ASM_M_SIZE );
+ const u32 cur_end2 = cur_pal + ( cur->size2 & ASM_M_SIZE );
+ const u32 nxt_pal = nxt->addr[STR_0_PAL];
+
+ if ( nxt_pal - cur_end1 <= AUTO_EXPAND1 )
+ {
+ PRINT0("OVERLAY1: %x .. %x .. %x : %x .. %x .. %x\n",
+ cur_pal, cur_pal + cur->size1, cur_pal + cur->size2,
+ nxt_pal, nxt_pal + nxt->size1, nxt_pal + nxt->size2 );
+
+ cur->size1 = nxt_pal + ( nxt->size1 & ASM_M_SIZE ) - cur_pal;
+ cur->size2 = nxt_pal + ( nxt->size2 & ASM_M_SIZE ) - cur_pal | ASM_EXPANDED;
+ remove_record(aport,nxt);
+ return 6;
+ }
+
+ if ( cur_end2 <= nxt_pal )
+ return def_stat;
+
+ cur->size2 = nxt_pal - cur_pal | (cur->size2&ASM_M_MODE);
+xBINGO;
+PRINT1("OVERLAY2: %x .. %x .. %x : %x .. %x .. %x\n",
+ cur_pal, cur_pal + cur->size1, cur_pal + cur->size2,
+ nxt_pal, nxt_pal + nxt->size1, nxt_pal + nxt->size2 );
+
+ return 5;
+}
+
+//-----------------------------------------------------------------------------
+
+static int expand_address ( aport_t *aport, addr_port_t *cur, u32 addr )
+{
+ const u32 cur_pal = cur->addr[STR_0_PAL];
+ const int size1 = ( cur->size1 & ASM_M_SIZE );
+ const int size2 = ( cur->size2 & ASM_M_SIZE );
+ ASSERT( addr >= cur_pal );
+
+ if ( addr < cur_pal + size1 )
+ return 19;
+
+ if ( addr < cur_pal + size2 )
+ {
+ const int pal_delta = addr - ( cur_pal + size1 );
+ PRINT0("delta=%d, AUTO_EXPAND1=%d => %d\n",pal_delta,AUTO_EXPAND1,pal_delta<=AUTO_EXPAND1);
+ if ( pal_delta <= AUTO_EXPAND1 )
+ {
+ cur->size1 = addr - cur_pal + 4;
+ ASSERT( cur->size1 <= cur->size2 );
+ return check_overlay(aport,cur,11);
+ }
+ }
+
+ if ( addr > cur_pal + size2 + AUTO_EXPAND2 )
+ return 0;
+
+
+ //--- now we expand the current record
+
+ addr += 4;
+ cur->size2 = ( addr - cur_pal ) | ASM_EXPANDED;
+ return check_overlay(aport,cur,12);
+}
+
+//-----------------------------------------------------------------------------
+
+static void tie_records ( aport_t *aport )
+{
+ for ( int i = 0; i < aport->used-1; )
+ {
+ addr_port_t *cur = aport->list + i;
+ if ( MODE1(cur) == MODE2(cur) )
+ cur->size1 = cur->size2;
+
+ if ( ENDOF1(cur) == ADDROF(cur+1)
+ && MODE1(cur) == MODE1(cur+1)
+ && SAMEDELTA(cur,cur+1) )
+ {
+ const u32 add = ADDROF(cur+1) - ADDROF(cur);
+ cur->size1 = cur[1].size1 + add;
+ cur->size2 = cur[1].size2 + add;
+ remove_record(aport,cur+1);
+ }
+ else
+ i++;
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+static ccp check_valid_record ( const aport_t *aport, const addr_port_t *cur )
+{
+ const addr_port_t *nxt = cur+1;
+ if ( nxt >= aport->list + aport->used )
+ return 0;
+
+ if ( cur->addr[STR_0_PAL] > nxt->addr[STR_0_PAL] )
+ return "WRONG ORDER";
+
+ if ( cur->addr[STR_0_PAL] == nxt->addr[STR_0_PAL] )
+ return "SAME ADDRESS";
+
+ static char buf[50];
+ const u32 size2 = cur->size2 & ASM_M_SIZE;
+ if ( cur->addr[STR_0_PAL] + size2 > nxt->addr[STR_0_PAL] )
+ {
+ snprintf(buf,sizeof(buf),"OVERLAY: %x + %x = %x > %x",
+ cur->addr[STR_0_PAL], size2, cur->addr[STR_0_PAL]+size2,
+ nxt->addr[STR_0_PAL] );
+ return buf;
+ }
+
+ const u32 size1 = cur->size1 & ASM_M_SIZE;
+ if ( (s32)size1 <= 0 || (s32)size2 <= 0 || size1 > size2 )
+ {
+ snprintf(buf,sizeof(buf),"SIZE: %x, %x",size1,size2);
+ return buf;
+ }
+
+ return 0;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// test_scan_port() ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError test_scan_port ( int argc, char ** argv, int verbose )
+{
+ //--- well known areas
+
+ insert_range(aport_list,0x80000000,0x4000);
+
+ //--- use DOL segments
+
+#if 1
+ u32 section_max_addr[ADDRT__N] = {0};
+ u32 section_size[ADDRT__N] = {0};
+ section_size[ADDRT_DOL+0] = INT_MAX;
+ section_size[ADDRT_DOL+1] = 0xd80;
+ section_size[ADDRT_DOL+DOL_N_TEXT_SECTIONS+0] = INT_MAX;
+ section_size[ADDRT_DOL+DOL_N_TEXT_SECTIONS+1] = INT_MAX;
+ section_size[ADDRT_DOL+DOL_N_TEXT_SECTIONS+2] = INT_MAX;
+ section_size[ADDRT_DOL+DOL_N_TEXT_SECTIONS+3] = INT_MAX;
+ section_size[ADDRT_DOL+DOL_N_TEXT_SECTIONS+6] = 0xa5c;
+
+ dol_sect_info_t * GetInfoDOL ( str_mode_t mode );
+ const dol_sect_info_t *psect = GetInfoDOL(STR_M_PAL);
+ const dol_sect_info_t *usect = GetInfoDOL(STR_M_USA);
+ const dol_sect_info_t *jsect = GetInfoDOL(STR_M_JAP);
+ const dol_sect_info_t *ksect = GetInfoDOL(STR_M_KOR);
+
+ for ( int si = ADDRT_DOL; si < ADDRT__N; si++, psect++, usect++, jsect++, ksect++ )
+ {
+ if (!section_size[si])
+ continue;
+
+ if ( section_size[si] > psect->size )
+ section_size[si] = psect->size;
+ section_max_addr[si] = psect->addr + section_size[si];
+ PRINT1("SECTION[%2u] : %3s %x +%6x : %8x %8x %8x %8x\n",
+ si, psect->name, section_max_addr[si], section_size[si],
+ psect->addr, usect->addr, jsect->addr, ksect->addr );
+
+ bool found;
+ int idx = get_port_record(aport_list,psect->addr,&found);
+ addr_port_t *cur = insert_record(aport_list,idx,0);
+ cur->addr[STR_0_PAL] = psect->addr;
+ cur->addr[STR_0_USA] = usect->addr;
+ cur->addr[STR_0_JAP] = jsect->addr;
+ cur->addr[STR_0_KOR] = ksect->addr;
+ cur->size1 = cur->size2 = section_size[si];
+ }
+ tie_records(aport_list);
+
+#if 1
+ //--- scan stdin
+
+ uint line_count = 0;
+
+ while (fgets(iobuf,sizeof(iobuf)-1,stdin))
+ {
+ line_count++;
+
+ char *ptr = iobuf;
+ if ( *ptr == '#' )
+ continue;
+
+ uint prio = str2ul(ptr,&ptr,10);
+ if ( prio < 1 || prio > MAX_APORT_PRIO )
+ continue;
+ aport_t *aport = aport_list + prio - 1;
+ addr_port_t *cur = aport->used > 0 ? aport->list + aport->used - 1 : 0;
+
+ u32 pal = str2ul(ptr,&ptr,16) & ASM_M_SIZE;
+ u32 usa = str2ul(ptr,&ptr,16) & ASM_M_SIZE;
+ u32 jap = str2ul(ptr,&ptr,16) & ASM_M_SIZE;
+ u32 kor = str2ul(ptr,&ptr,16) & ASM_M_SIZE;
+ if ( !usa || !jap || !pal || !kor )
+ continue;
+ aport->line_count++;
+
+ if ( prio > 1 && (
+ abs( (int)usa - (int)pal ) > MAX_DELTA_P2
+ || abs( (int)jap - (int)pal ) > MAX_DELTA_P2
+ || abs( (int)kor - (int)pal ) > MAX_DELTA_P2
+ ))
+ {
+ continue;
+ }
+
+ const addr_type_t at_pal = GetAddressType(STR_M_PAL,pal);
+ const addr_type_t at_usa = GetAddressType(STR_M_USA,usa);
+ const addr_type_t at_jap = GetAddressType(STR_M_JAP,jap);
+ const addr_type_t at_kor = GetAddressType(STR_M_KOR,kor);
+ if ( at_pal <= ADDRT_INVALID || at_usa != at_pal || at_jap != at_pal || at_kor != at_pal )
+ {
+ if (verbose>0)
+ {
+ fflush(stdout);
+ fprintf(stderr,"!ADDR TYPE[%d:pujk]: %8x/%-3s %8x/%-3s %8x/%-3s %8x/%-3s\n",
+ prio,
+ pal, GetAddressTypeName(at_pal),
+ usa, GetAddressTypeName(at_usa),
+ jap, GetAddressTypeName(at_jap),
+ kor, GetAddressTypeName(at_kor) );
+ fflush(stderr);
+ }
+ continue;
+ }
+
+ const u32 max_addr = section_max_addr[at_pal];
+ if ( pal < max_addr )
+ continue;
+
+ if ( prio > 1 )
+ {
+ bool found;
+ int ridx = get_port_record(aport_list,pal,&found);
+ addr_port_t *prod = 0;
+ if (found)
+ prod = aport_list->list + ridx;
+ else if ( ridx > 0 )
+ prod = aport_list->list + ridx-1;
+
+ const bool same_delta
+ = prod
+ && usa - pal == prod->addr[STR_0_USA] - prod->addr[STR_0_PAL]
+ && jap - pal == prod->addr[STR_0_JAP] - prod->addr[STR_0_PAL]
+ && kor - pal == prod->addr[STR_0_KOR] - prod->addr[STR_0_PAL];
+ if (same_delta)
+ {
+ const int stat = expand_address(aport_list,prod,pal);
+ if ( stat && stat < -10 )
+ fprintf(stderr,"ADD[%u>%d]: %8x +%6x +%6x: %8x +%6x\n",
+ found, stat,
+ prod->addr[STR_0_PAL], prod->size1, prod->size2,
+ pal, pal - prod->addr[STR_0_PAL] );
+ if (stat)
+ continue;
+ }
+ }
+
+ const known_addr_t *known_addr = get_known_addr(pal);
+ const uint add_size = known_addr ? known_addr->size : 4;
+
+ const bool same_delta
+ = cur
+ && usa - pal == cur->addr[STR_0_USA] - cur->addr[STR_0_PAL]
+ && jap - pal == cur->addr[STR_0_JAP] - cur->addr[STR_0_PAL]
+ && kor - pal == cur->addr[STR_0_KOR] - cur->addr[STR_0_PAL];
+
+ if (same_delta)
+ {
+ const int offset = pal - ADDROF(cur);
+ if ( offset <= cur->size1 + AUTO_EXPAND1 )
+ {
+ cur->size1 = cur->size2 = offset + add_size;
+ continue;
+ }
+ cur->size2 = offset | ASM_EXPANDED;
+ }
+
+ bool found;
+ int ridx = get_port_record(aport,pal,&found);
+ cur = insert_record(aport,ridx,0);
+ cur->addr[STR_0_PAL] = pal;
+ cur->addr[STR_0_USA] = usa;
+ cur->addr[STR_0_JAP] = jap;
+ cur->addr[STR_0_KOR] = kor;
+ cur->size1 = add_size;
+ cur->size2 = add_size;
+ }
+
+ fputc('\n',stderr);
+ for ( int pr = 0; pr < MAX_APORT_PRIO; pr++ )
+ {
+ aport_t *aport = aport_list + pr;
+ uint max_size1 = 0;
+ uint max_size2 = 0;
+ const addr_port_t *p = aport->list;
+ for ( int i = 0; i < aport->used; i++, p++ )
+ {
+ if ( max_size1 < p->size1 )
+ max_size1 = p->size1 & ASM_M_SIZE;
+ if ( max_size2 < p->size2 )
+ max_size2 = p->size2 & ASM_M_SIZE;
+ }
+ aport->max_size1 = max_size1;
+ aport->max_size2 = max_size2;
+
+ fprintf(stderr,"PRIO-%d: %7u/%u lines scanned, %6u/%u records, max-size:%7x,%7x\n",
+ pr+1, aport->line_count, line_count,
+ aport->used, aport->size, max_size1, max_size2 );
+ }
+ fflush(stderr);
+
+
+ //--- mix tables
+
+ int index1 = 0;
+ const addr_port_t *ptr2 = aport_list[1].list;
+ const addr_port_t *end2 = ptr2 + aport_list[1].used;
+
+ while ( ptr2 < end2 && index1 < aport_list[0].used )
+ {
+ addr_port_t *ptr1 = aport_list[0].list + index1;
+ addr_port_t *end1 = ptr1 + aport_list[0].used;
+ while ( ptr1 < end1 && ENDOF2(ptr1) <= ADDROF(ptr2) )
+ ptr1++;
+
+ if ( ptr1 == end1 )
+ break;
+
+ index1 = ptr1 - aport_list[0].list;
+ int delta = (int)ADDROF(ptr1) - (int)ADDROF(ptr2);
+ PRINT0("INS: %3d/%d/%d : %p %x..%x : %p %x..%x : %d\n",
+ index1, aport_list->used, aport_list->size,
+ ptr1, ADDROF(ptr1), ENDOF2(ptr1),
+ ptr2, ADDROF(ptr2), ENDOF2(ptr2),
+ delta );
+
+ if ( delta > 0 )
+ {
+ ptr1 = insert_record(aport_list,index1,ptr2);
+ if ( ptr1->size1 > delta )
+ ptr1->size1 = delta;
+ if ( ptr1->size2 > delta )
+ ptr1->size2 = delta;
+
+ u32 mode1, mode2;
+ if ( ptr1->size2 == delta && SAMEDELTA(ptr1,ptr1+1) )
+ mode1 = mode2 = ptr1[1].size2 & ASM_M_MODE;
+ else if ( index1 && ENDOF2(ptr1-1) == ADDROF(ptr1) && SAMEDELTA(ptr1,ptr1-1) )
+ mode1 = mode2 = ptr1[-1].size2 & ASM_M_MODE;
+ else
+ {
+ mode1 = ptr1->size1 < 8 ? ASM_SUSPECT : ASM_UNSURE;
+ mode2 = ASM_SUSPECT;
+ }
+
+ ptr1->size1 = ptr1->size1 & ASM_M_SIZE | mode1;
+ ptr1->size2 = ptr1->size2 & ASM_M_SIZE | mode2;
+ }
+ else if ( ENDOF2(ptr2) > ENDOF2(ptr1) )
+ {
+xBINGO;
+// ptr1 = insert_record(aport_list,index1+1,ptr2);
+ }
+
+ ptr2++;
+ }
+
+ // add final records
+ while ( ptr2 < end2 )
+ insert_record(aport_list,INT_MAX,ptr2);
+
+#endif
+
+ //--- add finaly hollywood registers
+
+ insert_range(aport_list,0xcd000000,0x8000);
+ tie_records(aport_list);
+
+
+ //--- scan args
+
+ uint prio = 1;
+ const aport_t *aport = aport_list;
+
+ int i;
+ for ( i = 1; i < argc; i++ )
+ {
+ ccp arg = argv[i];
+ if (!strcmp(arg,"l"))
+ {
+ const addr_port_t *p = aport->list;
+ for ( int i = 0; i < aport->used; i++, p++ )
+ fprintf(stderr,"%8x %8x %8x %8x : %6x|%u %6x|%u\n",
+ p->addr[STR_0_PAL],
+ p->addr[STR_0_USA],
+ p->addr[STR_0_JAP],
+ p->addr[STR_0_KOR],
+ p->size1 & ASM_M_SIZE, p->size1 & ASM_M_MODE,
+ p->size2 & ASM_M_SIZE, p->size2 & ASM_M_MODE );
+ continue;
+ }
+
+ if ( arg[0] == 'p' && arg[1] && !arg[2] )
+ {
+ uint p = arg[1] - '0';
+ if ( p >= 1 && p <= MAX_APORT_PRIO )
+ {
+ prio = p;
+ aport = aport_list + prio - 1;
+ }
+ continue;
+ }
+
+ if (!strcmp(arg,"c"))
+ {
+ printf("\nconst static addr_port_t addr_port[%u] =\n{\n",aport->used);
+ const addr_port_t *p = aport->list;
+ for ( int i = 0; i < aport->used; i++, p++ )
+ {
+ ccp valid = check_valid_record(aport,p);
+ if (valid)
+ {
+ fflush(stdout);
+ fprintf(stderr,"INVALID[%d] %8x: %s\n",i,p->addr[STR_0_PAL],valid);
+ fflush(stderr);
+ }
+
+ printf("\t{{ 0x%08x, 0x%08x, 0x%08x, 0x%08x }, %#8x|%u, %#8x|%u },%s%s\n",
+ p->addr[0], p->addr[1], p->addr[2], p->addr[3],
+ p->size1 & ASM_M_SIZE, p->size1 & ASM_M_MODE,
+ p->size2 & ASM_M_SIZE, p->size2 & ASM_M_MODE,
+ valid ? " // " : "", valid ? valid : "" );
+ }
+ printf("}; // %u records\n\n",aport->used);
+ continue;
+ }
+
+ if (!strcmp(arg,"cc"))
+ {
+ ParamField_t pf;
+ InitializeParamField(&pf);
+
+ printf("\nconst static addr_port_t addr_port[%u] =\n{\n"
+ " //%8s%12s%12s%12s%17s%12s // >end : %24s%22s%11s N\n\n",
+ aport->used,
+ "PAL", "USA", "JAP", "KOR", "size1|f", "size2|f",
+ "USA/JAP/KOR - PAL", "JAP/KOR - USA", "KOR-JAP" );
+ const addr_port_t *p = aport->list;
+ char prev_delta[80] = {0};
+ for ( int i = 0; i < aport->used; i++, p++ )
+ {
+ ccp valid = check_valid_record(aport,p);
+ if (valid)
+ {
+ fflush(stdout);
+ fprintf(stderr,"INVALID[%d] %8x: %s\n",i,p->addr[STR_0_PAL],valid);
+ fflush(stderr);
+ }
+
+ char delta[80], count[10];
+ snprintf(delta,sizeof(delta),"%8d %8d %8d : %8d %8d : %8d",
+ p->addr[1]-p->addr[0], p->addr[2]-p->addr[0], p->addr[3]-p->addr[0],
+ p->addr[2]-p->addr[1], p->addr[3]-p->addr[1],
+ p->addr[3]-p->addr[2] );
+ const ParamFieldItem_t *it = IncrementParamField(&pf,delta,false);
+ if (strcmp(prev_delta,delta))
+ StringCopyS(prev_delta,sizeof(prev_delta),delta);
+ else
+ StringCopyS(delta,sizeof(delta),
+ " . . . : . . : .");
+
+ if ( it && it->num > 1 )
+ snprintf(count,sizeof(count),"*%u",it->num);
+ else
+ {
+ count[0] = '-';
+ count[1] = 0;
+ }
+
+ printf(" {{ 0x%08x, 0x%08x, 0x%08x, 0x%08x }, %#8x|%u, %#8x|%u }, // >%08x : %s %5s%s%s\n",
+ p->addr[0], p->addr[1], p->addr[2], p->addr[3],
+ p->size1 & ASM_M_SIZE, p->size1 & ASM_M_MODE,
+ p->size2 & ASM_M_SIZE, p->size2 & ASM_M_MODE,
+ ENDOF2(p), delta, count,
+ valid ? " ! " : "", valid ? valid : "" );
+ }
+ printf("}; // %u records\n\n",aport->used);
+ continue;
+ }
+
+ if (!strcmp(arg,"raw"))
+ {
+ fwrite(aport->list,sizeof(*aport->list),aport->used,stdout);
+ continue;
+ }
+ }
+#endif
+ return ERR_OK;
+}
+
+//-----------------------------------------------------------------------------
+
+#undef ADDROF
+#undef ENDOF1
+#undef ENDOF2
+#undef SIZE1
+#undef SIZE2
+#undef MODE1
+#undef MODE2
+#undef SAMEDELTA
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// develop() ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -4273,16 +4959,20 @@ enum
CMD_CLOCK, // test_clock(argc,argv)
CMD_ENDIAN, // test_endian(argc,argv)
CMD_CONFIG, // test_config(argc,argv)
- CMD_SEARCH, // test_search(argc,argv)
CMD_QUOTE, // test_quote(argc,argv)
CMD_EML, // test_eml(argc,argv)
CMD_CYGPATH, // test_cygpath(argc,argv)
+ CMD_SCAN_PORT, // test_scan_port(argc,argv,0)
+ CMD_SCAN_PORT_V, // test_scan_port(argc,argv,1)
CMD__N
};
///////////////////////////////////////////////////////////////////////////////
+// Options:
+// 1: suppress title output
+
static const KeywordTab_t CommandTab[] =
{
{ CMD_HELP, "HELP", "?", 0 },
@@ -4336,10 +5026,11 @@ static const KeywordTab_t CommandTab[] =
{ CMD_CLOCK, "CLOCK", 0, 0 },
{ CMD_ENDIAN, "ENDIAN", 0, 0 },
{ CMD_CONFIG, "CONFIG", 0, 0 },
- { CMD_SEARCH, "SEARCH", 0, 0 },
{ CMD_QUOTE, "QUOTE", "Q", 0 },
{ CMD_EML, "EML", 0, 0 },
{ CMD_CYGPATH, "CYGPATH", 0, 0 },
+ { CMD_SCAN_PORT, "SCAN-PORT", "SP", 1 },
+ { CMD_SCAN_PORT_V, "SCAN-PORT-V", "SPV", 1 },
{ CMD__N,0,0,0 }
};
@@ -4383,12 +5074,8 @@ void AddOne ( double m[3][4] )
int main ( int argc, char ** argv )
{
- printf("***** %s *****\n",TITLE);
print_title_func = print_title;
SetupLib(argc,argv,NAME,VERSION,TITLE);
- fflush(stdout);
-
- //printf(" |" MM1(XXX) "|" MM2(XXX) "\n");
if (0)
{
@@ -4412,7 +5099,6 @@ int main ( int argc, char ** argv )
printf(" %6.2f %6.2f %6.2f\n",x.m[0][0],x.m[1][1],x.m[2][2]);
}
- printf("term width = %d\n",GetTermWidth(80,0));
if ( argc < 2 )
help_exit();
@@ -4421,10 +5107,18 @@ int main ( int argc, char ** argv )
const KeywordTab_t * cmd_ct = ScanKeyword(&cmd_stat,argv[1],CommandTab);
if (!cmd_ct)
{
+ printf("***** %s *****\n",TITLE);
PrintKeywordError(CommandTab,argv[1],cmd_stat,0,0);
help_exit();
}
+ if (!cmd_ct->opt&1)
+ {
+ printf("***** %s *****\n",TITLE);
+ printf("term width = %d\n",GetTermWidth(80,0));
+ }
+ fflush(stdout);
+
argv[1] = argv[0];
argv++;
argc--;
@@ -4481,10 +5175,11 @@ int main ( int argc, char ** argv )
case CMD_CLOCK: test_clock(argc,argv); break;
case CMD_ENDIAN: test_endian(argc,argv); break;
case CMD_CONFIG: test_config(argc,argv); break;
- case CMD_SEARCH: test_search(argc,argv); break;
case CMD_QUOTE: test_quote(argc,argv); break;
case CMD_EML: test_eml(argc,argv); break;
case CMD_CYGPATH: test_cygpath(argc,argv); break;
+ case CMD_SCAN_PORT: test_scan_port(argc,argv,0); break;
+ case CMD_SCAN_PORT_V: test_scan_port(argc,argv,1); break;
//case CMD_HELP:
default:
help_exit();
diff --git a/project/templates/HISTORY.txt b/project/templates/HISTORY.txt
index 2b1b62f..0268540 100644
--- a/project/templates/HISTORY.txt
+++ b/project/templates/HISTORY.txt
@@ -456,13 +456,44 @@ szs v2.22a r8323 - 2020-12-26
szs v2.23a r8357 - 2021-02-03
- - Buf fix for option --le-define=FILE, if FILE is a lecode binary. In this
+ - Bug fix for option --le-define=FILE, if FILE is a lecode binary. In this
case, the special functions of chat messages are copied now.
- wszst ANALYSE: Detection of additional files (like ObjFlow.bin) that have
not been changed.
- MAC support improved.
+szs v2.24a r8414 - 2021-04-07
+
+ - The tools support a configuration file now to define different paths.
+ Therefor the file "wiimms-szs-tools.conf" is searched in different
+ directories.
+ - Option --config=file allows to define a specific config file.
+ - Command CONFIG (available for all tools) prints an information about
+ searching and the final settings.
+ - wszst CONFIG can export configuration settings for scripts.
+ - wszst CONFIG can create new or updated configuration files.
+ - wszst ANALYZE:
+ - Behavior changed for item position bug.
+ - Print item position factors.
+ - New warning if minimap is missed.
+ - Detect AIParam.
+ - Support of LE-CODE build 28.
+ - Speedometer settings changed. It is either disabled or enabled with or
+ without fraction (up to 3 digits).
+ - wlect option --speedometer=modus accpets now parameters OFF, AUTO, ON,
+ FRACTION (=1DIGIT), 2DIGITS and 3DIGITS.
+ - LE-CODE supports debug output while racing. LPAR parameter DEBUG, LPAR
+ sections [DEBUG-*] and wlect option --debug define the output format.
+ See http://wiki.tockdom.com/wiki/LPAR#debug for details.
+ - Wiimm's Item Cheat has been integrated into LE-CODE. It is enabled by a
+ LPAR setting and supports Wiimote+Nunchuk, Classic Controller and GCN
+ Controller for all 4 regions.
+ - Bug fix for CT-CODE/LE-CODE configuration file: In v2.21a command 'S' was
+ modified to accept 16 bit slot numbers. And here a copy bug is fixed now.
+ - Mac: Universal binaries for i386, x86_64 and arm64.
+
+
@@MODULE(last-history.txt)@@
diff --git a/project/templates/module/last-history.txt b/project/templates/module/last-history.txt
index 4cad383..5e7e148 100644
--- a/project/templates/module/last-history.txt
+++ b/project/templates/module/last-history.txt
@@ -1,30 +1,14 @@
szs v@@VERSION@@ r@@REV-NEXT@@ - @@@@-@@-@@
- - The tools support a configuration file now to define different paths.
- Therefor the file "wiimms-szs-tools.conf" is searched in different
- directories.
- - Option --config=file allows to define a specific config file.
- - Command CONFIG (available for all tools) prints an information about
- searching and the final settings.
- - wszst CONFIG can export configuration settings for scripts.
- - wszst CONFIG can create new or updated configuration files.
- - wszst ANALYZE:
- - Behavior changed for item position bug.
- - New warning if minimap is missed.
- - Detect AIParam.
- - Print Item Posisiton Factors.
- - Speedometer settings changed. It is either disabled or enabled with or
- without fraction (up to 3 digits).
- - wlect option --speedometer=modus accpets now parameters OFF, AUTO, ON,
- FRACTION (=1DIGIT), 2DIGITS and 3DIGITS.
- - LE-CODE supports debug output while racing. LPAR parameter DEBUG, LPAR
- sections [DEBUG-*] and wlect option --debug define the output format.
- See http://wiki.tockdom.com/wiki/LPAR#debug for details.
- - Wiimm's Item Cheat has been integrated into LE-CODE. It is enabled by a
- LPAR setting and supports Wiimote+Nunchuk, Classic Controller and GCN
- Controller for all 4 regions.
- - Bug fix for CT-CODE/LE-CODE configuration file: In v2.21a command 'S' was
- modified to accept 16 bit slot numbers. And here a copy bug is fixed now.
+ - Bug fix: If creating a LPAR file, a parameter with name ITEM-CHEATS was
+ printed. But tool wlect accepted only ITEM-CHEAT (without leading 'S').
+ - Bug fix: Since previous version the tools recomended slots 3.1 + 6.2 + 7.1
+ for some tracks.
+ - New command: wstrt WHERE address...: The segment in which the specified
+ addresses are located is calculated for each region.
+ - New command: wstrt PORT ...: Port addresses from one region to all others.
+ - Mac support improved. Universal binaries for x86_64 and arm64.
+ - Support of LE-CODE build 29.
~ - MDL support: Scanning a MDL file and transferring the data into an internal
~ format was already implemented, but only used for analysis purposes. Now it
diff --git a/project/text-files/lpar.inc/lpar-sect-debug-docu-cr.inc b/project/text-files/lpar.inc/lpar-sect-debug-docu-cr.inc
index 68dd73d..a454674 100644
--- a/project/text-files/lpar.inc/lpar-sect-debug-docu-cr.inc
+++ b/project/text-files/lpar.inc/lpar-sect-debug-docu-cr.inc
@@ -3,14 +3,13 @@
###############################################################################
[DEBUG-DOCU]
-# This section has no impact!
+# This section is documentation only and has no impact!
# If the general parameter DEBUG (see section [LECODE-PARAMETERS]) is set to
# a value ≥1, then additional information is added below the speed (even if
# speedometer is disabled). The intention is to debug tracks.
-# For DEBUG=1, the output format is defined in this section. Up to %d lines
-# can be defined.
+# 4 debug displays with up to %u lines each can be defined.
#------------------------------------------------------------------------------
@@ -26,41 +25,65 @@
# for the first opponent.
# DEBUG$VERTICAL : Arrange the output vertically for the player.
+# HIDE-SPEEDO = 0 | 1
+# This global command is independent from lines. If set and this configuration
+# becomes active, then hide the speedometer. This helps if many elements are
+# active. Otherwise a smaller font is selected by the system.
+
#------------------------------------------------------------------------------
# LINE = -1 | 0..%d
-# LINE selects a line for the next parameters. Lines are numbered from 0 to %d.
-# If set to -1, then ignore the following settings.
+# Select a line. All following commands until the next LINE command disable or
+# enable the output for the current line. Lines are numbered from 0 to %d. If
+# an invalid index is entered, the following commands are ignored. So set
+# LINE=-1 to disable a complete line.
# ENABLED = 0|1
-# ENABLED defines, if this section becomes active. If set to 0 or if all other
-# parts are disabled, then the debug line is not printed. So you can disable a
-# line without changing the other parameters.
+# ENABLED defines, if the current lines becomes active. If set to 0 or if all
+# other parts are disabled, then the debug line is not printed. So you can
+# disable a line without changing the other parameters.
# OPPONENT = 0|1
-# It is possible to display the data of the current player (0), or of the
-# first opponent (1). The intention is watch onlyine 2 players together.
-# The font color for current player if yellow and for the opponent cyan.
+# Usually the data of the current player is printed (font color yellow). If
+# OPPONENT is enabled, then print the data of the first opponent and use a
+# blue font color as indicator.
# SPACE = 0|1
-# ???
+# Usually the lines are separated by a line terminator (line feed). If SPACE
+# is set, then a space is used instead, so that the previous and the current
+# line are displayed in one visual line.
# POSITION = 0|1
-# If enabled (1), then print the position of the player. Values outside the
-# range ±131071 are highlighted to point to a item position bug. The output
-# format is »P=x,y,z«.
+# Output: P=x,y,z
+# If enabled then print the current position (x, y and z coordinates) of the
+# player. Coordinates outside the range ±131071 (see Item position bug) are
+# highlighted by an orange font, or a white font it the position is fixed by
+# LEX ITEM-POS-FACTOR.
# CHECK-POINT = 0..3
-# If enabled (1,2,3), then print the checpoint info of the player. The output
-# format is either »CK=c« (1), »CK=c,k« (2) or »CK=c,k^m«. »c« is the current
-# check point. »k« is the last relevant key check point. »m« is the highest
-# reached key check point in the current lap. If driving backwards, »k« is
-# decreased, but »m« not.
+# Output: CK=c | CK=c,k | CK=c,k^m
+# If enabled print a check point info. The mode defines how many parts are
+# printed. 'c' is the current check point. 'k' is the last relevant key check
+# point. 'm' is the highest reached key check point in the current lap. If
+# driving backwards, 'k' is decreased, but 'm' not.
# RESPAWN = 0|1
-# If enabled (1), then print the current respawn point as »R=num«.
+# Output: R=r
+# If enabled then print the respawn index defined by the current check point.
+# This information may help to test all respawn points of a track.
# LAP-POS = 0|1
-# If enabled (1), then print the current calculated lap position as a floating
-# point number with 3 fraction digits (1.234). This number is calculated by
-# Mario Kart Wii to compare positions.
+# Output: L=lap
+# Print the current lap position as floating point value with 3 digits. The
+# integer number reflects the current lap number, and the decimal (0.000 to
+# 0.999) the progress within the current lap. This number is calculated by
+# Mario Kart Wii to compare positions. Together with the opponent view it
+# can help to investigate different paths of a track and to place the check
+# points at good positions.
+
+# XPF = 0|1|2
+# Output: X:...
+# If enabled, a short (1) or long (2) information about the usage of extended
+# presence flags is printed, but only if an information is available. The long
+# information is similar to the short one, but with more or extended members.
+# See http://wiki.tockdom.com/wiki/LPAR#XPF for details.
diff --git a/project/text-files/lpar.inc/lpar-sect-param-cr.inc b/project/text-files/lpar.inc/lpar-sect-param-cr.inc
index 0579e4c..ae994eb 100644
--- a/project/text-files/lpar.inc/lpar-sect-param-cr.inc
+++ b/project/text-files/lpar.inc/lpar-sect-param-cr.inc
@@ -20,6 +20,14 @@ LIMIT-MODE = %s
#------------------------------------------------------------------------------
+# LE-CODE supports cheat codes as sequence of D-Pad keys in combination with
+# ALT keys. Here you can define, which type of cheat codes are allowed:
+# 0: Almost all cheat codes are disabled.
+# 1: Only cheat codes without impact to game play are allowed.
+# 2: All cheat codes are allowed. (Not possible if LIMIT-MODE==LE$PRODUCTIVE).
+
+CHEAT-MODE = %d
+
# Define probabilities for engine classes. A list for »100cc,150cc,mirror« is
# expected. If 200cc is enabled, the values are for »150cc,200cc,mirror«. Any
# number is accepted. They are normalized to get a total of 100 percent.
@@ -75,7 +83,18 @@ SPEEDOMETER = SPEEDO$%s
DEBUG = DEBUG$%s
-# Enable (1) or disable (0) built-in item cheats.
+# Enable (1) or disable (0) built-in item cheat.
+
+ITEM-CHEAT = %u
+
+# Allow (1) or forbid (0) players to drag blue shells behind them.
+# LE-CODE default is 1.
+
+DRAG-BLUE-SHELL = %u
+
+# Define the time in frames a player is small after being struck by a
+# thundercloud. Only values between 1 and 32767 (0x7fff) are accepted.
+# MKW uses 612 (10.2s) and LE-CODE default is 300 (5.0s).
-ITEM-CHEATS = %u
+THCLOUD-TIME = %u # %.2fs