
[VeAnalyze]
         ;    tableName,  lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
#if   NARROW_BAND_EGO
     veAnalyzeMap = veTable1Tbl, afrTSCustom, afr1, egoCorrection1, { !(status1 & 0b00100000) }
#elif LAMBDA
     veAnalyzeMap = veTable1Tbl, afrTable1Tbl, lambda1, egoCorrection1, { !(status1 & 0b00100000) }
#else
     veAnalyzeMap = veTable1Tbl, afrTable1Tbl, afr1, egoCorrection1, { !(status1 & 0b00100000) }
#endif

         lambdaTargetTables = afrTable1Tbl, afrTable2Tbl, afrTSCustom

         ; Optional Lambda targets to over-ride the afr table lookups
         lambdaTargetChannels = afrtgt1, afrtgt2
         
         lambdaChannels = afr1, afr2
         
         ; All Available ecoCorrectionChannels
         egoCorrectionChannels = egoCorrection1, egoCorrection2  ;

       ; filter =  Name,        "DisplayName", outputChannel, operator, defaultVal, userAdjustable
        filter = minRPMFilter, "Minimum RPM", rpm,           <       , 500,      , true
       ; filter = maxRPMFilter, "Maximum RPM", rpm,           >       , 18000,    , true
       
       ;  filter = std_xAxisMin ; Auto build with appropriate axis channels
         filter = std_xAxisMax ; Auto build with appropriate axis channels
         filter = std_yAxisMin ; Auto build with appropriate axis channels
         filter = std_yAxisMax ; Auto build with appropriate axis channels
#if NARROWBAND
#elif NARROW_BAND_EGO
#else
         filter = std_DeadLambda ; Auto build
#endif

#if CELSIUS          
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 71,       , true
#else
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 160,      , true
#endif
         filter = accelFilterTp, "TP Accel Enrich"  , engine,         &     , 16,       , false
         filter = decelFilterTp, "TP Decel Enrich"  , engine,         &     , 32,       , false
         filter = accelFilterMap,"MAP Accel Enrich" , engine,         &     , 64,       , false
         filter = decelFilterMap,"MAP Decel Enrich" , engine,         &     , 128,      , false
         filter = tBrakeFilter,  "T-Brake/Launch"  , status2,         &     ,   8,      , false
         filter = spkCutFilter,  "Spark Cut"  , status2,         &     ,   32,      , false
         filter = fuelCutFilter,  "Fuel Cut"  , status3,         &     ,   1,      , false
         ; this works, just another way to skin a cat
         ;filter = decelFilter, "Decel Flag" , tpsaccden,         >       , 0,        , false
         filter = overrunFilter, "Overrun"    , pulseWidth1,  =       , 0,        , false
         ;filter = std_Expression, "Table Inactive"    , { !(status1 & 0b00100000)  }, false
         filter = std_Custom ; Standard Custom Expression Filter.
         
    ; Table 2
#if   NARROW_BAND_EGO
     veAnalyzeMap = veTable2Tbl, afrTSCustom, afr2, egoCorrection2, { ((dualTable ) || (algorithm2 != 0)) }
#elif LAMBDA
     veAnalyzeMap = veTable2Tbl, afrTable2Tbl, lambda2, egoCorrection2, { ((dualTable ) || (algorithm2 != 0)) }
#else
     veAnalyzeMap = veTable2Tbl, afrTable2Tbl, afr2, egoCorrection2, { ((dualTable ) || (algorithm2 != 0)) }
#endif

         lambdaTargetTables = afrTable1Tbl, afrTable2Tbl, afrTSCustom

         ; Optional Lambda targets to over-ride the afr table lookups
         lambdaTargetChannels = afrtgt1, afrtgt2
         
         lambdaChannels = afr1, afr2
         
         ; All Available ecoCorrectionChannels
         egoCorrectionChannels = egoCorrection1, egoCorrection2  ;

       ; filter =  Name,        "DisplayName", outputChannel, operator, defaultVal, userAdjustable
       ; filter = minRPMFilter, "Minimum RPM", rpm,           <       , 500,      , true
       ; filter = maxRPMFilter, "Maximum RPM", rpm,           >       , 18000,    , true
       
         filter = std_xAxisMin ; Auto build with appropriate axis channels
         filter = std_xAxisMax ; Auto build with appropriate axis channels
         filter = std_yAxisMin ; Auto build with appropriate axis channels
         filter = std_yAxisMax ; Auto build with appropriate axis channels
#if NARROWBAND
#elif NARROW_BAND_EGO
#else
         filter = std_DeadLambda ; Auto build
#endif

#if CELSIUS          
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 71,       , true
#else
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 160,      , true
#endif
         filter = accelFilterTp, "TP Accel Enrich"  , engine,         &     , 16,       , false
         filter = decelFilterTp, "TP Decel Enrich"  , engine,         &     , 32,       , false
         filter = accelFilterMap,"MAP Accel Enrich" , engine,         &     , 64,       , false
         filter = decelFilterMap,"MAP Decel Enrich" , engine,         &     , 128,      , false
         filter = tBrakeFilter,  "T-Brake/Launch"  , status2,         &     ,   8,      , false
         filter = spkCutFilter,  "Spark Cut"  , status2,         &     ,   32,      , false
         filter = fuelCutFilter,  "Fuel Cut"  , status3,         &     ,   1,      , false
         ; this works, just another way to skin a cat
         ;filter = decelFilter, "Decel Flag" , tpsaccden,         >       , 0,        , false
         filter = overrunFilter, "Overrun"  , pulseWidth2,    =       , 0,        , false
         filter = std_Custom ; Standard Custom Expression Filter.


    ; Table 3
#if   NARROW_BAND_EGO
     veAnalyzeMap = veTable3Tbl, afrTSCustom, afr1, egoCorrection, { (status1 & 0b00100000) }
#elif LAMBDA
     veAnalyzeMap = veTable3Tbl, afrTable1Tbl, lambda1, egoCorrection, { (status1 & 0b00100000) }
#else
     veAnalyzeMap = veTable3Tbl, afrTable1Tbl, afr1, egoCorrection, { (status1 & 0b00100000) }
#endif

         lambdaTargetTables = afrTable1Tbl, afrTable2Tbl, afrTSCustom

         ; Optional Lambda targets to over-ride the afr table lookups
         lambdaTargetChannels = afrtgt1, afrtgt2
         
         lambdaChannels = afr1, afr2
         
         ; All Available ecoCorrectionChannels
         egoCorrectionChannels = egoCorrection1, egoCorrection2  ;

       ; filter =  Name,        "DisplayName", outputChannel, operator, defaultVal, userAdjustable
       ; filter = minRPMFilter, "Minimum RPM", rpm,           <       , 500,      , true
       ; filter = maxRPMFilter, "Maximum RPM", rpm,           >       , 18000,    , true
       
         filter = std_xAxisMin ; Auto build with appropriate axis channels
         filter = std_xAxisMax ; Auto build with appropriate axis channels
         filter = std_yAxisMin ; Auto build with appropriate axis channels
         filter = std_yAxisMax ; Auto build with appropriate axis channels
#if NARROWBAND
#elif NARROW_BAND_EGO
#else
         filter = std_DeadLambda ; Auto build
#endif

#if CELSIUS          
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 71,       , true
#else
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 160,      , true
#endif
         filter = accelFilterTp, "TP Accel Enrich"  , engine,         &     , 16,       , false
         filter = decelFilterTp, "TP Decel Enrich"  , engine,         &     , 32,       , false
         filter = accelFilterMap,"MAP Accel Enrich" , engine,         &     , 64,       , false
         filter = decelFilterMap,"MAP Decel Enrich" , engine,         &     , 128,      , false
         filter = tBrakeFilter,  "T-Brake/Launch"  , status2,         &     ,   8,      , false
         filter = spkCutFilter,  "Spark Cut"  , status2,         &     ,   32,      , false
         filter = fuelCutFilter,  "Fuel Cut"  , status3,         &     ,   1,      , false
         ; this works, just another way to skin a cat
         ;filter = decelFilter, "Decel Flag" , tpsaccden,         >       , 0,        , false
         filter = overrunFilter, "Overrun"   , pulseWidth1,   =       , 0,        , false
         ;filter = std_Expression, "Table Inactive"    , { (status1 & 0b00100000) }, false
         filter = std_Custom ; Standard Custom Expression Filter.
         
; ------------------------- 12X12 Tables ---------------------------
; load the 12x12 tables too
; VE Table 1         

         ;    tableName,  lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
#if   NARROW_BAND_EGO
     veAnalyzeMap = veTable1Tbldoz, afrTSCustom, afr1, egoCorrection1, { !(status1 & 0b00100000) }
#elif LAMBDA
     veAnalyzeMap = veTable1Tbldoz, afrTable1Tbl, lambda1, egoCorrection1, { !(status1 & 0b00100000) }
#else
     veAnalyzeMap = veTable1Tbldoz, afrTable1Tbl, afr1, egoCorrection1, { !(status1 & 0b00100000) }
#endif

         lambdaTargetTables = afrTable1Tbl, afrTable2Tbl, afrTSCustom

         ; Optional Lambda targets to over-ride the afr table lookups
         lambdaTargetChannels = afrtgt1, afrtgt2
         
         lambdaChannels = afr1, afr2
         
         ; All Available ecoCorrectionChannels
         egoCorrectionChannels = egoCorrection1, egoCorrection2  ;

       ; filter =  Name,        "DisplayName", outputChannel, operator, defaultVal, userAdjustable
       ; filter = minRPMFilter, "Minimum RPM", rpm,           <       , 500,      , true
       ; filter = maxRPMFilter, "Maximum RPM", rpm,           >       , 18000,    , true
       
         filter = std_xAxisMin ; Auto build with appropriate axis channels
         filter = std_xAxisMax ; Auto build with appropriate axis channels
         filter = std_yAxisMin ; Auto build with appropriate axis channels
         filter = std_yAxisMax ; Auto build with appropriate axis channels
#if NARROWBAND
#else
         filter = std_DeadLambda ; Auto build
#endif

#if CELSIUS          
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 71,       , true
#else
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 160,      , true
#endif
         filter = accelFilterTp, "TP Accel Enrich"  , engine,         &     , 16,       , false
         filter = decelFilterTp, "TP Decel Enrich"  , engine,         &     , 32,       , false
         filter = accelFilterMap,"MAP Accel Enrich" , engine,         &     , 64,       , false
         filter = decelFilterMap,"MAP Decel Enrich" , engine,         &     , 128,      , false
         filter = tBrakeFilter,  "T-Brake/Launch"  , status2,         &     ,   8,      , false
         filter = spkCutFilter,  "Spark Cut"  , status2,         &     ,   32,      , false
         filter = fuelCutFilter,  "Fuel Cut"  , status3,         &     ,   1,      , false
         ; this works, just another way to skin a cat
         ;filter = decelFilter, "Decel Flag" , tpsaccden,         >       , 0,        , false
         filter = overrunFilter, "Overrun"    , pulseWidth1,  =       , 0,        , false
         ;filter = std_Expression, "Table Inactive"    , { (status1 & 0b00100000) }, false
         filter = std_Custom ; Standard Custom Expression Filter.
         
    ; Table 2
#if   NARROW_BAND_EGO
     veAnalyzeMap = veTable2Tbldoz, afrTSCustom, afr2, egoCorrection2, { ((dualTable ) || (algorithm2 != 0)) }
#elif LAMBDA
     veAnalyzeMap = veTable2Tbldoz, afrTable2Tbl, lambda2, egoCorrection2, { ((dualTable ) || (algorithm2 != 0)) }
#else
     veAnalyzeMap = veTable2Tbldoz, afrTable2Tbl, afr2, egoCorrection2, { ((dualTable ) || (algorithm2 != 0)) }
#endif

         lambdaTargetTables = afrTable1Tbl, afrTable2Tbl, afrTSCustom

         ; Optional Lambda targets to over-ride the afr table lookups
         lambdaTargetChannels = afrtgt1, afrtgt2
         
         lambdaChannels = afr1, afr2
         
         ; All Available ecoCorrectionChannels
         egoCorrectionChannels = egoCorrection1, egoCorrection2  ;


       ; filter =  Name,        "DisplayName", outputChannel, operator, defaultVal, userAdjustable
       ; filter = minRPMFilter, "Minimum RPM", rpm,           <       , 500,      , true
       ; filter = maxRPMFilter, "Maximum RPM", rpm,           >       , 18000,    , true
       
         filter = std_xAxisMin ; Auto build with appropriate axis channels
         filter = std_xAxisMax ; Auto build with appropriate axis channels
         filter = std_yAxisMin ; Auto build with appropriate axis channels
         filter = std_yAxisMax ; Auto build with appropriate axis channels
#if NARROWBAND
#else
         filter = std_DeadLambda ; Auto build
#endif

#if CELSIUS          
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 71,       , true
#else
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 160,      , true
#endif
         filter = accelFilterTp, "TP Accel Enrich"  , engine,         &     , 16,       , false
         filter = decelFilterTp, "TP Decel Enrich"  , engine,         &     , 32,       , false
         filter = accelFilterMap,"MAP Accel Enrich" , engine,         &     , 64,       , false
         filter = decelFilterMap,"MAP Decel Enrich" , engine,         &     , 128,      , false
         filter = tBrakeFilter,  "T-Brake/Launch"  , status2,         &     ,   8,      , false
         filter = spkCutFilter,  "Spark Cut"  , status2,         &     ,   32,      , false
         filter = fuelCutFilter,  "Fuel Cut"  , status3,         &     ,   1,      , false
         ; this works, just another way to skin a cat
         ;filter = decelFilter, "Decel Flag" , tpsaccden,         >       , 0,        , false
         filter = overrunFilter, "Overrun"  , pulseWidth2,    =       , 0,        , false
         filter = std_Custom ; Standard Custom Expression Filter.


    ; Table 3
#if   NARROW_BAND_EGO
     veAnalyzeMap = veTable3Tbldoz, afrTSCustom, afr1, egoCorrection, { (status1 & 0b00100000) }
#elif LAMBDA
     veAnalyzeMap = veTable3Tbldoz, afrTable1Tbl, lambda1, egoCorrection, { (status1 & 0b00100000) }
#else
     veAnalyzeMap = veTable3Tbldoz, afrTable1Tbl, afr1, egoCorrection, { (status1 & 0b00100000) }
#endif

         lambdaTargetTables = afrTable1Tbl, afrTable2Tbl, afrTSCustom

         ; Optional Lambda targets to over-ride the afr table lookups
         lambdaTargetChannels = afrtgt1, afrtgt2
         
         lambdaChannels = afr1, afr2
         
         ; All Available ecoCorrectionChannels
         egoCorrectionChannels = egoCorrection1, egoCorrection2  ;


       ; filter =  Name,        "DisplayName", outputChannel, operator, defaultVal, userAdjustable
       ; filter = minRPMFilter, "Minimum RPM", rpm,           <       , 500,      , true
       ; filter = maxRPMFilter, "Maximum RPM", rpm,           >       , 18000,    , true
       
         filter = std_xAxisMin ; Auto build with appropriate axis channels
         filter = std_xAxisMax ; Auto build with appropriate axis channels
         filter = std_yAxisMin ; Auto build with appropriate axis channels
         filter = std_yAxisMax ; Auto build with appropriate axis channels
#if NARROWBAND
#else
         filter = std_DeadLambda ; Auto build
#endif

#if CELSIUS          
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 71,       , true
#else
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 160,      , true
#endif
         filter = accelFilterTp, "TP Accel Enrich"  , engine,         &     , 16,       , false
         filter = decelFilterTp, "TP Decel Enrich"  , engine,         &     , 32,       , false
         filter = accelFilterMap,"MAP Accel Enrich" , engine,         &     , 64,       , false
         filter = decelFilterMap,"MAP Decel Enrich" , engine,         &     , 128,      , false
         filter = tBrakeFilter,  "T-Brake/Launch"  , status2,         &     ,   8,      , false
         filter = spkCutFilter,  "Spark Cut"  , status2,         &     ,   32,      , false
         filter = fuelCutFilter,  "Fuel Cut"  , status3,         &     ,   1,      , false
         ; this works, just another way to skin a cat
         ;filter = decelFilter, "Decel Flag" , tpsaccden,         >       , 0,        , false
         filter = overrunFilter, "Overrun"   , pulseWidth1,   =       , 0,        , false
         ;filter = std_Expression, "Table Inactive"    , { !(status1 & 0b00100000)}, false
         filter = std_Custom ; Standard Custom Expression Filter.

; Trim tables 
	;    tableName,  lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
#if NARROWBAND
; NARROWBAND not supported, let's be serious...
#elif NARROW_BAND_EGO
#else

#if LAMBDA
     trimAnalyzeMap = veTrim1Tbl, afrTable1Tbl, lambda1, egoCorrection1, { seq_inj && usevetrim && (feature4_0VEtblsize==0) }
#else
     trimAnalyzeMap = veTrim1Tbl, afrTable1Tbl, afr1, egoCorrection1, { seq_inj && usevetrim && (feature4_0VEtblsize==0) }
#endif

         lambdaTargetTables = afrTable1Tbl, afrTable2Tbl
         
         ; Optional Lambda targets to over-ride the afr table lookups
         lambdaTargetChannels = afrtgt1, afrtgt2
         
         lambdaChannels = afr1, afr2
         
         ; All Available ecoCorrectionChannels
         egoCorrectionChannels = egoCorrection1, egoCorrection2  ;
         
         ; Optional field. If used, the lambdaChannels and egoCorrectionChannels will be hidden and this selection will put those both to the same index.
         pickListSelection = EGO1, EGO2 ;
         
        ;trimTable = tableName, label, afrChannel, egoCorr,  enableCondition
        ; or
        ;trimTable = tableName, label, egoSensorIndexEpression,  enableCondition
         trimTable = veTrim1Tbl, "Trim 1", { 0 }, { seq_inj && usevetrim && (feature4_0VEtblsize==0) } 
         trimTable = veTrim2Tbl, "Trim 2", { 1 }, { seq_inj && usevetrim && (feature4_0VEtblsize==0) } 
         trimTable = veTrim3Tbl, "Trim 3", { 0 }, { seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) } 
         trimTable = veTrim4Tbl, "Trim 4", { 1 }, { seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) } 
         

         filter = std_xAxisMin ; Auto build with appropriate axis channels
         filter = std_xAxisMax ; Auto build with appropriate axis channels
         filter = std_yAxisMin ; Auto build with appropriate axis channels
         filter = std_yAxisMax ; Auto build with appropriate axis channels
#if NARROWBAND
#else
         filter = std_DeadLambda ; Auto build
#endif

#if CELSIUS          
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 71,       , true
#else
         filter = minCltFilter, "Minimum CLT", coolant,       <       , 160,      , true
#endif
         filter = accelFilterTp, "TP Accel Enrich"  , engine,         &     , 16,       , false
         filter = decelFilterTp, "TP Decel Enrich"  , engine,         &     , 32,       , false
         filter = accelFilterMap,"MAP Accel Enrich" , engine,         &     , 64,       , false
         filter = decelFilterMap,"MAP Decel Enrich" , engine,         &     , 128,      , false
         filter = tBrakeFilter,  "T-Brake/Launch"  , status2,         &     ,   8,      , false
         filter = spkCutFilter,  "Spark Cut"  , status2,         &     ,   32,      , false
         filter = fuelCutFilter,  "Fuel Cut"  , status3,         &     ,   1,      , false
         ; this works, just another way to skin a cat
         ;filter = decelFilter, "Decel Flag" , tpsaccden,         >       , 0,        , false
         filter = overrunFilter, "Overrun"  , pulseWidth2,    =       , 0,        , false
         filter = std_Custom ; Standard Custom Expression Filter.
         
#endif ; end NARROWBAND if

