From 1dbaa23d645e8dc96f0b02166675fec82e2963df Mon Sep 17 00:00:00 2001 From: James Wallace Date: Tue, 2 Feb 2021 19:51:22 +0000 Subject: - jpmimpct: Added emulation of X9C103, fixes volume setting Clones promoted to working ---------------------------- Ace Of Clubs (Crystal) (IMPACT, GND D 4) Ace Of Clubs (Crystal) (IMPACT, GND D 4 P, Protocol) --- src/mame/drivers/jpmimpct.cpp | 24 +- src/mame/drivers/jpmimpctsw.cpp | 22 +- src/mame/includes/jpmimpct.h | 2 + src/mame/layout/j6aceclb.lay | 2428 ++-------- src/mame/layout/j6bnkrcl.lay | 227 +- src/mame/layout/j6sonic10.lay | 135 +- src/mame/layout/j6untch.lay | 9653 +++++++++++++++------------------------ 7 files changed, 4133 insertions(+), 8358 deletions(-) diff --git a/src/mame/drivers/jpmimpct.cpp b/src/mame/drivers/jpmimpct.cpp index 55fcd9695c0..ff9fea3761e 100644 --- a/src/mame/drivers/jpmimpct.cpp +++ b/src/mame/drivers/jpmimpct.cpp @@ -19,9 +19,6 @@ ROMS wanted: * Snakes and Ladders - Known issues: - * Digital volume control is not emulated. - Mechanical games note: Anything writing to 4800a0 within the first few instructions is guessed @@ -292,10 +289,31 @@ void jpmimpct_state::machine_reset() *************************************/ void jpmimpct_state::volume_w(offs_t offset, uint16_t data, uint16_t mem_mask) { + if (ACCESSING_BITS_0_7) { + int changed = m_volume_latch^(data&0xf0); m_upd7759->set_rom_bank((data >> 1) & 3); m_upd7759->reset_w(BIT(data, 0)); + + if ( changed & 0x10) + { // digital volume clock line changed + if ( !(data & 0x10) ) + { // changed from high to low, + if ( !(data & 0x20) )//down + { + if ( m_global_volume > 0 ) m_global_volume--; + } + else + { + if ( m_global_volume < 99 ) m_global_volume++; + } + + float percent = (m_global_volume)/99.0; + m_upd7759->set_output_gain(0, percent); + } + } + m_volume_latch = (data & 0xf0); } } diff --git a/src/mame/drivers/jpmimpctsw.cpp b/src/mame/drivers/jpmimpctsw.cpp index d96da57ae0b..c4f9df82994 100644 --- a/src/mame/drivers/jpmimpctsw.cpp +++ b/src/mame/drivers/jpmimpctsw.cpp @@ -599,7 +599,7 @@ INPUT_PORTS_START( j6sonicg ) // only runs without a key? PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Nudge 3/Lo") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Nudge 2/Hi") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Nudge 1") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Cancel") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Cancel/Collect") INPUT_PORTS_END INPUT_PORTS_START( j6arcade ) @@ -11584,23 +11584,25 @@ ROM_END #define GAME_FLAGS_WORKING MACHINE_MECHANICAL|MACHINE_CLICKABLE_ARTWORK +#define GAME_FLAGS_WORKING_NO_SOUND MACHINE_MECHANICAL|MACHINE_CLICKABLE_ARTWORK|MACHINE_NO_SOUND + // ************************************************************************************************************* // JPM + others games with old 'error log' style codes for errors // ************************************************************************************************************* -GAMEL( 199?, j6aceclb, 0, impact_nonvideo, j6aceclb, jpmimpct_state, empty_init, ROT0, "Crystal", "Ace Of Clubs (Crystal) (IMPACT, set 1)", GAME_FLAGS, layout_j6aceclb ) -GAMEL( 199?, j6aceclba, j6aceclb, impact_nonvideo, j6aceclb, jpmimpct_state, empty_init, ROT0, "Crystal", "Ace Of Clubs (Crystal) (IMPACT, set 2, Protocol)", GAME_FLAGS, layout_j6aceclb ) +GAMEL( 199?, j6aceclb, 0, impact_nonvideo, j6aceclb, jpmimpct_state, empty_init, ROT0, "Crystal", "Ace Of Clubs (Crystal) (IMPACT, GND D 4)", GAME_FLAGS_WORKING, layout_j6aceclb ) +GAMEL( 199?, j6aceclba, j6aceclb, impact_nonvideo, j6aceclb, jpmimpct_state, empty_init, ROT0, "Crystal", "Ace Of Clubs (Crystal) (IMPACT, GND D 4 P, Protocol)", GAME_FLAGS_WORKING, layout_j6aceclb ) GAMEL( 199?, j6bnkrcl, 0, impact_nonvideo, j6bnkrcl, jpmimpct_state, empty_init, ROT0, "JPM", "Banker Club (JPM) (IMPACT) (V6, set 1)", GAME_FLAGS, layout_j6bnkrcl ) GAMEL( 199?, j6bnkrcla, j6bnkrcl, impact_nonvideo, j6bnkrcl, jpmimpct_state, empty_init, ROT0, "JPM", "Banker Club (JPM) (IMPACT) (V6, set 2)", GAME_FLAGS, layout_j6bnkrcl ) GAMEL( 199?, j6bnkrclb, j6bnkrcl, impact_nonvideo, j6bnkrcl, jpmimpct_state, empty_init, ROT0, "JPM", "Banker Club (JPM) (IMPACT) (V6, set 3)", GAME_FLAGS, layout_j6bnkrcl ) GAMEL( 199?, j6bnkrclc, j6bnkrcl, impact_nonvideo, j6bnkrcl, jpmimpct_state, empty_init, ROT0, "JPM", "Banker Club (JPM) (IMPACT) (V2)", GAME_FLAGS, layout_j6bnkrcl ) -GAMEL( 199?, j6big50, 0, impact_nonvideo, j6big50, jpmimpct_state, empty_init, ROT0, "JPM", "Big 50 (JPM) (IMPACT) (set 1)", GAME_FLAGS, layout_j6big50 ) -GAMEL( 199?, j6big50a, j6big50, impact_nonvideo, j6big50, jpmimpct_state, empty_init, ROT0, "JPM", "Big 50 (JPM) (IMPACT) (set 2, Protocol)", GAME_FLAGS, layout_j6big50 ) -GAMEL( 199?, j6big50b, j6big50, impact_nonvideo, j6big50, jpmimpct_state, empty_init, ROT0, "JPM", "Big 50 (JPM) (IMPACT) (set 3)", GAME_FLAGS, layout_j6big50 ) -GAMEL( 199?, j6big50c, j6big50, impact_nonvideo, j6big50, jpmimpct_state, empty_init, ROT0, "JPM", "Big 50 (JPM) (IMPACT) (set 4, Whitbread)", GAME_FLAGS, layout_j6big50 ) -GAMEL( 199?, j6big50d, j6big50, impact_nonvideo, j6big50, jpmimpct_state, empty_init, ROT0, "JPM", "Big 50 (JPM) (IMPACT) (set 5)", GAME_FLAGS, layout_j6big50 ) +GAMEL( 199?, j6big50, 0, impact_nonvideo, j6big50, jpmimpct_state, empty_init, ROT0, "JPM", "Big 50 (JPM) (IMPACT) (set 1)", GAME_FLAGS, layout_j6big50 ) +GAMEL( 199?, j6big50a, j6big50, impact_nonvideo, j6big50, jpmimpct_state, empty_init, ROT0, "JPM", "Big 50 (JPM) (IMPACT) (set 2, Protocol)", GAME_FLAGS, layout_j6big50 ) +GAMEL( 199?, j6big50b, j6big50, impact_nonvideo, j6big50, jpmimpct_state, empty_init, ROT0, "JPM", "Big 50 (JPM) (IMPACT) (set 3)", GAME_FLAGS, layout_j6big50 ) +GAMEL( 199?, j6big50c, j6big50, impact_nonvideo, j6big50, jpmimpct_state, empty_init, ROT0, "JPM", "Big 50 (JPM) (IMPACT) (set 4, Whitbread)", GAME_FLAGS, layout_j6big50 ) +GAMEL( 199?, j6big50d, j6big50, impact_nonvideo, j6big50, jpmimpct_state, empty_init, ROT0, "JPM", "Big 50 (JPM) (IMPACT) (set 5)", GAME_FLAGS, layout_j6big50 ) GAMEL( 199?, j6bigbuk, 0, impact_nonvideo, j6bigbuk, jpmimpct_state, empty_init, ROT0, "JPM", "Big Bucks (JPM) (IMPACT) (set 1)", GAME_FLAGS, layout_j6bigbukc ) GAMEL( 199?, j6bigbuka, j6bigbuk, impact_nonvideo, j6bigbuk, jpmimpct_state, empty_init, ROT0, "JPM", "Big Bucks (JPM) (IMPACT) (set 2)", GAME_FLAGS, layout_j6bigbukc ) @@ -11986,8 +11988,8 @@ GAME( 199?, j6sonich, j6sonic, impact_nonvideo, j6sonic, jpmimpct_state, GAME( 199?, j6roof, 0, impact_nonvideo, j6roof, jpmimpct_state, empty_init, ROT0, "Ace", "Thru' The Roof (Ace) (IMPACT) (set 1)", GAME_FLAGS ) GAME( 199?, j6roofa, j6roof, impact_nonvideo, j6roof, jpmimpct_state, empty_init, ROT0, "Ace", "Thru' The Roof (Ace) (IMPACT) (set 2)", GAME_FLAGS ) -GAMEL( 199?, j6untch, 0, impact_nonvideo, j6untch, jpmimpct_state, empty_init, ROT0, "JPM", "Untouchable (JPM) (IMPACT) (set 1)", GAME_FLAGS, layout_j6untch ) -GAMEL( 199?, j6untcha, j6untch, impact_nonvideo, j6untch, jpmimpct_state, empty_init, ROT0, "JPM", "Untouchable (JPM) (IMPACT) (set 2)", GAME_FLAGS, layout_j6untch ) +GAMEL( 199?, j6untch, 0, impact_nonvideo, j6untch, jpmimpct_state, empty_init, ROT0, "JPM", "Untouchable (JPM) (IMPACT) (UN3B LO6)", GAME_FLAGS_WORKING_NO_SOUND, layout_j6untch ) +GAMEL( 199?, j6untcha, j6untch, impact_nonvideo, j6untch, jpmimpct_state, empty_init, ROT0, "JPM", "Untouchable (JPM) (IMPACT) (UN3BI LO6)", GAME_FLAGS_WORKING_NO_SOUND, layout_j6untch ) // VFD issues, but VFD is likely unused as it calls the game 'Some Indeterminate Club Machine' with clear placeholder text GAMEL( 199?, j6wldkng, 0, impact_nonvideo, j6wldkng, jpmimpct_state, empty_init, ROT0, "JPM", "Wild King Club (JPM) (IMPACT) (set 1)", GAME_FLAGS, layout_j6wldkng ) diff --git a/src/mame/includes/jpmimpct.h b/src/mame/includes/jpmimpct.h index fbcf8a82c6d..8511ea487be 100644 --- a/src/mame/includes/jpmimpct.h +++ b/src/mame/includes/jpmimpct.h @@ -151,6 +151,8 @@ private: int m_slidesout; int m_hopper[3]; int m_motor[3]; + int m_volume_latch; + int m_global_volume; uint16_t m_coinstate; required_device_array m_cointimer; diff --git a/src/mame/layout/j6aceclb.lay b/src/mame/layout/j6aceclb.lay index e90857dfcd7..dd997f4f39a 100644 --- a/src/mame/layout/j6aceclb.lay +++ b/src/mame/layout/j6aceclb.lay @@ -3113,27 +3113,27 @@ - + - + - + - + - + @@ -3240,39 +3240,46 @@ + + + + + + + - + - + - + - + - + - - + + @@ -5300,30 +5307,342 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6179,76 +6498,76 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6362,6 +6681,9 @@ + + + @@ -6381,2038 +6703,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/mame/layout/j6bnkrcl.lay b/src/mame/layout/j6bnkrcl.lay index 4f2db18e845..314f1164ec7 100644 --- a/src/mame/layout/j6bnkrcl.lay +++ b/src/mame/layout/j6bnkrcl.lay @@ -17,27 +17,27 @@ - + - + - + - + - + @@ -2168,58 +2168,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2228,58 +2228,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2288,58 +2288,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2348,58 +2348,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2409,97 +2409,60 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - diff --git a/src/mame/layout/j6sonic10.lay b/src/mame/layout/j6sonic10.lay index 6c5aa0ca71b..aff8e025b00 100644 --- a/src/mame/layout/j6sonic10.lay +++ b/src/mame/layout/j6sonic10.lay @@ -3553,6 +3553,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5118,6 +5144,7 @@ + @@ -5126,12 +5153,12 @@ - - + + - - + + @@ -5142,98 +5169,70 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - + + - - + + - - + + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + diff --git a/src/mame/layout/j6untch.lay b/src/mame/layout/j6untch.lay index 6e7a13d9058..b840e67ed36 100644 --- a/src/mame/layout/j6untch.lay +++ b/src/mame/layout/j6untch.lay @@ -8,2511 +8,3778 @@ - + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - - + + + + - - + + + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - - + + + + - - + + + + - - + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - - - - - - - - - - - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - + - + + - + + - + - + + - + + - - - - - - - - - - - - - - - + + + + + - + - + + - + + - + - + + - + + - - - + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + - - + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + - + + - + + - + - + + - + + + + + + + + - + + - + + - + + - + + - - - + + + + + @@ -2657,5543 +3924,1779 @@ - + + - - + + + - - + + + - - + + + - - + + + - + + - + + - + + - + + - + + - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - - + + + + - - + + + + - - + + + + - - + + + + - - + + + + - - + + + + - - + + + + - - + + + + - - - + + + + + - - + + + + - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - + \ No newline at end of file -- cgit v1.2.3