diff --git a/blockdag/scriptval_test.go b/blockdag/scriptval_test.go index ea9a312f1..33aecad18 100644 --- a/blockdag/scriptval_test.go +++ b/blockdag/scriptval_test.go @@ -40,7 +40,7 @@ func TestCheckBlockScripts(t *testing.T) { return } - scriptFlags := txscript.ScriptBip16 + scriptFlags := txscript.ScriptNoFlags err = checkBlockScripts(blocks[0], view, scriptFlags, nil) if err != nil { t.Errorf("Transaction script validation failed: %v\n", err) diff --git a/blockdag/validate.go b/blockdag/validate.go index 806101971..b2d59ec9f 100644 --- a/blockdag/validate.go +++ b/blockdag/validate.go @@ -955,12 +955,6 @@ func (dag *BlockDAG) checkConnectBlock(node *blockNode, block *util.Block, view return err } - // BIP0016 describes a pay-to-script-hash type that is considered a - // "standard" type. The rules for this BIP only apply to transactions - // after the timestamp defined by txscript.Bip16Activation. See - // https://en.bitcoin.it/wiki/BIP_0016 for more details. - enforceBIP0016 := node.timestamp >= txscript.Bip16Activation.Unix() - // The number of signature operations must be less than the maximum // allowed per block. Note that the preliminary sanity checks on a // block also include a check similar to this one, but this check @@ -971,19 +965,17 @@ func (dag *BlockDAG) checkConnectBlock(node *blockNode, block *util.Block, view totalSigOps := 0 for i, tx := range transactions { numsigOps := CountSigOps(tx) - if enforceBIP0016 { - // Since the first (and only the first) transaction has - // already been verified to be a coinbase transaction, - // use i == 0 as an optimization for the flag to - // countP2SHSigOps for whether or not the transaction is - // a coinbase transaction rather than having to do a - // full coinbase check again. - numP2SHSigOps, err := CountP2SHSigOps(tx, i == 0, view) - if err != nil { - return err - } - numsigOps += numP2SHSigOps + // Since the first (and only the first) transaction has + // already been verified to be a coinbase transaction, + // use i == 0 as an optimization for the flag to + // countP2SHSigOps for whether or not the transaction is + // a coinbase transaction rather than having to do a + // full coinbase check again. + numP2SHSigOps, err := CountP2SHSigOps(tx, i == 0, view) + if err != nil { + return err } + numsigOps += numP2SHSigOps // Check for overflow or going over the limits. We have to do // this on every loop iteration to avoid overflow. @@ -1065,12 +1057,7 @@ func (dag *BlockDAG) checkConnectBlock(node *blockNode, block *util.Block, view runScripts = false } - // Blocks created after the BIP0016 activation time need to have the - // pay-to-script-hash checks enabled. - var scriptFlags txscript.ScriptFlags - if enforceBIP0016 { - scriptFlags |= txscript.ScriptBip16 - } + scriptFlags := txscript.ScriptNoFlags // We obtain the MTP of the *previous* block in order to // determine if transactions in the current block are final. diff --git a/mempool/policy.go b/mempool/policy.go index 2f38e5924..a7605911c 100644 --- a/mempool/policy.go +++ b/mempool/policy.go @@ -10,8 +10,8 @@ import ( "github.com/daglabs/btcd/blockdag" "github.com/daglabs/btcd/txscript" - "github.com/daglabs/btcd/wire" "github.com/daglabs/btcd/util" + "github.com/daglabs/btcd/wire" ) const ( @@ -84,12 +84,7 @@ func calcMinRequiredTxRelayFee(serializedSize int64, minRelayTxFee util.Amount) // to ensure they are "standard". A standard transaction input within the // context of this function is one whose referenced public key script is of a // standard form and, for pay-to-script-hash, does not have more than -// maxStandardP2SHSigOps signature operations. However, it should also be noted -// that standard inputs also are those which have a clean stack after execution -// and only contain pushed data in their signature scripts. This function does -// not perform those checks because the script engine already does this more -// accurately and concisely via the txscript.ScriptVerifyCleanStack and -// txscript.ScriptVerifySigPushOnly flags. +// maxStandardP2SHSigOps signature operations. func checkInputsStandard(tx *util.Tx, utxoView *blockdag.UtxoViewpoint) error { // NOTE: The reference implementation also does a coinbase check here, // but coinbases have already been rejected prior to calling this diff --git a/txscript/data/script_tests.json b/txscript/data/script_tests.json index 327bebe14..3867e7c51 100644 --- a/txscript/data/script_tests.json +++ b/txscript/data/script_tests.json @@ -6,1194 +6,1063 @@ ["correct prevout hash), using the given scriptSig. All nLockTimes are 0, all"], ["nSequences are max."], -["", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK", "Test the test: we should have an empty stack after scriptSig evaluation"], -[" ", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK", "and multiple spaces should not change that."], -[" ", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -[" ", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["1 2", "2 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC", "OK", "Similarly whitespace around and between symbols"], -["1 2", "2 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC", "OK"], -[" 1 2", "2 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC", "OK"], -["1 2 ", "2 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC", "OK"], -[" 1 2 ", "2 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC", "OK"], +["", "DEPTH 0 EQUAL", "", "OK", "Test the test: we should have an empty stack after scriptSig evaluation"], +[" ", "DEPTH 0 EQUAL", "", "OK", "and multiple spaces should not change that."], +[" ", "DEPTH 0 EQUAL", "", "OK"], +[" ", "DEPTH 0 EQUAL", "", "OK"], +["1 2", "2 EQUALVERIFY 1 EQUAL", "", "OK", "Similarly whitespace around and between symbols"], +["1 2", "2 EQUALVERIFY 1 EQUAL", "", "OK"], +[" 1 2", "2 EQUALVERIFY 1 EQUAL", "", "OK"], +["1 2 ", "2 EQUALVERIFY 1 EQUAL", "", "OK"], +[" 1 2 ", "2 EQUALVERIFY 1 EQUAL", "", "OK"], -["1", "", "P2SH,STRICTENC", "OK"], -["0x02 0x01 0x00", "", "P2SH,STRICTENC", "OK", "all bytes are significant, not only the last one"], -["0x09 0x00000000 0x00000000 0x10", "", "P2SH,STRICTENC", "OK", "equals zero when cast to Int64"], +["1", "", "", "OK"], +["0x02 0x01 0x00", "", "", "OK", "all bytes are significant, not only the last one"], +["0x09 0x00000000 0x00000000 0x10", "", "", "OK", "equals zero when cast to Int64"], -["0x01 0x0b", "11 EQUAL", "P2SH,STRICTENC", "OK", "push 1 byte"], -["0x02 0x417a", "'Az' EQUAL", "P2SH,STRICTENC", "OK"], +["0x01 0x11", "17 EQUAL", "", "OK", "push 1 byte"], +["0x02 0x417a", "'Az' EQUAL", "", "OK"], ["0x4b 0x417a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a", - "'Azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz' EQUAL", "P2SH,STRICTENC", "OK", "push 75 bytes"], + "'Azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz' EQUAL", "", "OK", "push 75 bytes"], -["0x4c 0x01 0x07","7 EQUAL", "P2SH,STRICTENC", "OK", "0x4c is OP_PUSHDATA1"], -["0x4d 0x0100 0x08","8 EQUAL", "P2SH,STRICTENC", "OK", "0x4d is OP_PUSHDATA2"], -["0x4e 0x01000000 0x09","9 EQUAL", "P2SH,STRICTENC", "OK", "0x4e is OP_PUSHDATA4"], +["0x4c 0x4c 0x417a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a", + "'Azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz' EQUAL", "", "OK", "0x4c is OP_PUSHDATA1 (push 76 bytes)"], +["0x4d 0x0001 0x417a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a", + "'Azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz' EQUAL", "", "OK", "0x4d is OP_PUSHDATA2"], -["0x4c 0x00","0 EQUAL", "P2SH,STRICTENC", "OK"], -["0x4d 0x0000","0 EQUAL", "P2SH,STRICTENC", "OK"], -["0x4e 0x00000000","0 EQUAL", "P2SH,STRICTENC", "OK"], -["0x4f 1000 ADD","999 EQUAL", "P2SH,STRICTENC", "OK"], -["0", "IF 0x50 ENDIF 1", "P2SH,STRICTENC", "OK", "0x50 is reserved (ok if not executed)"], -["0x51", "0x5f ADD 0x60 EQUAL", "P2SH,STRICTENC", "OK", "0x51 through 0x60 push 1 through 16 onto stack"], -["1","NOP", "P2SH,STRICTENC", "OK"], -["0", "IF VER ELSE 1 ENDIF", "P2SH,STRICTENC", "OK", "VER non-functional (ok if not executed)"], -["0", "IF RESERVED RESERVED1 RESERVED2 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK", "RESERVED ok in un-executed IF"], +["0x4f 1000","ADD 999 EQUAL", "", "OK"], +["0", "IF 0x50 ENDIF 1", "", "OK", "0x50 is reserved (ok if not executed)"], +["0x51", "0x5f ADD 0x60 EQUAL", "", "OK", "0x51 through 0x60 push 1 through 16 onto stack"], +["1","NOP", "", "OK"], +["0", "IF VER ELSE 1 ENDIF", "", "OK", "VER non-functional (ok if not executed)"], +["0", "IF RESERVED RESERVED1 RESERVED2 ELSE 1 ENDIF", "", "OK", "RESERVED ok in un-executed IF"], -["1", "DUP IF ENDIF", "P2SH,STRICTENC", "OK"], -["1", "IF 1 ENDIF", "P2SH,STRICTENC", "OK"], -["1", "DUP IF ELSE ENDIF", "P2SH,STRICTENC", "OK"], -["1", "IF 1 ELSE ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], +["1", "DUP IF ENDIF", "", "OK"], +["1", "IF 1 ENDIF", "", "OK"], +["1", "DUP IF ELSE ENDIF", "", "OK"], +["1", "IF 1 ELSE ENDIF", "", "OK"], +["0", "IF ELSE 1 ENDIF", "", "OK"], -["1 1", "IF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC", "OK"], -["1 0", "IF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC", "OK"], -["1 1", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC", "OK"], -["0 0", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC", "OK"], +["1 1", "IF IF 1 ELSE 0 ENDIF ENDIF", "", "OK"], +["1 0", "IF IF 1 ELSE 0 ENDIF ENDIF", "", "OK"], +["1 1", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "", "OK"], +["0 0", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "", "OK"], -["1 0", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC", "OK"], -["1 1", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC", "OK"], -["1 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC", "OK"], -["0 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC", "OK"], +["1 0", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "", "OK"], +["1 1", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "", "OK"], +["1 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "", "OK"], +["0 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "", "OK"], -["0", "IF 0 ELSE 1 ELSE 0 ENDIF", "P2SH,STRICTENC", "OK", "Multiple ELSE's are valid and executed inverts on each ELSE encountered"], -["1", "IF 1 ELSE 0 ELSE ENDIF", "P2SH,STRICTENC", "OK"], -["1", "IF ELSE 0 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["1", "IF 1 ELSE 0 ELSE 1 ENDIF ADD 2 EQUAL", "P2SH,STRICTENC", "OK"], -["'' 1", "IF SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ENDIF 0x14 0x68ca4fec736264c13b859bac43d5173df6871682 EQUAL", "P2SH,STRICTENC", "OK"], +["0", "IF 0 ELSE 1 ELSE 0 ENDIF", "", "OK", "Multiple ELSE's are valid and executed inverts on each ELSE encountered"], +["1", "IF 1 ELSE 0 ELSE ENDIF", "", "OK"], +["1", "IF ELSE 0 ELSE 1 ENDIF", "", "OK"], +["1", "IF 1 ELSE 0 ELSE 1 ENDIF ADD 2 EQUAL", "", "OK"], +["'' 1", "IF SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ENDIF 0x14 0x68ca4fec736264c13b859bac43d5173df6871682 EQUAL", "", "OK"], -["1", "NOTIF 0 ELSE 1 ELSE 0 ENDIF", "P2SH,STRICTENC", "OK", "Multiple ELSE's are valid and execution inverts on each ELSE encountered"], -["0", "NOTIF 1 ELSE 0 ELSE ENDIF", "P2SH,STRICTENC", "OK"], -["0", "NOTIF ELSE 0 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "NOTIF 1 ELSE 0 ELSE 1 ENDIF ADD 2 EQUAL", "P2SH,STRICTENC", "OK"], -["'' 0", "NOTIF SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ENDIF 0x14 0x68ca4fec736264c13b859bac43d5173df6871682 EQUAL", "P2SH,STRICTENC", "OK"], +["1", "NOTIF 0 ELSE 1 ELSE 0 ENDIF", "", "OK", "Multiple ELSE's are valid and execution inverts on each ELSE encountered"], +["0", "NOTIF 1 ELSE 0 ELSE ENDIF", "", "OK"], +["0", "NOTIF ELSE 0 ELSE 1 ENDIF", "", "OK"], +["0", "NOTIF 1 ELSE 0 ELSE 1 ENDIF ADD 2 EQUAL", "", "OK"], +["'' 0", "NOTIF SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ENDIF 0x14 0x68ca4fec736264c13b859bac43d5173df6871682 EQUAL", "", "OK"], -["0", "IF 1 IF RETURN ELSE RETURN ELSE RETURN ENDIF ELSE 1 IF 1 ELSE RETURN ELSE 1 ENDIF ELSE RETURN ENDIF ADD 2 EQUAL", "P2SH,STRICTENC", "OK", "Nested ELSE ELSE"], -["1", "NOTIF 0 NOTIF RETURN ELSE RETURN ELSE RETURN ENDIF ELSE 0 NOTIF 1 ELSE RETURN ELSE 1 ENDIF ELSE RETURN ENDIF ADD 2 EQUAL", "P2SH,STRICTENC", "OK"], +["0", "IF 1 IF RETURN ELSE RETURN ELSE RETURN ENDIF ELSE 1 IF 1 ELSE RETURN ELSE 1 ENDIF ELSE RETURN ENDIF ADD 2 EQUAL", "", "OK", "Nested ELSE ELSE"], +["1", "NOTIF 0 NOTIF RETURN ELSE RETURN ELSE RETURN ENDIF ELSE 0 NOTIF 1 ELSE RETURN ELSE 1 ENDIF ELSE RETURN ENDIF ADD 2 EQUAL", "", "OK"], -["0", "IF RETURN ENDIF 1", "P2SH,STRICTENC", "OK", "RETURN only works if executed"], +["0", "IF RETURN ENDIF 1", "", "OK", "RETURN only works if executed"], -["1 1", "VERIFY", "P2SH,STRICTENC", "OK"], -["1 0x05 0x01 0x00 0x00 0x00 0x00", "VERIFY", "P2SH,STRICTENC", "OK", "values >4 bytes can be cast to boolean"], -["1 0x01 0x80", "IF 0 ENDIF", "P2SH,STRICTENC", "OK", "negative 0 is false"], +["1 1", "VERIFY", "", "OK"], +["1 0x05 0x01 0x00 0x00 0x00 0x00", "VERIFY", "", "OK", "values >4 bytes can be cast to boolean"], +["1 0x01 0x80", "IF 0 ENDIF", "", "OK", "negative 0 is false"], -["10 0 11 TOALTSTACK DROP FROMALTSTACK", "ADD 21 EQUAL", "P2SH,STRICTENC", "OK"], -["'gavin_was_here' TOALTSTACK 11 FROMALTSTACK", "'gavin_was_here' EQUALVERIFY 11 EQUAL", "P2SH,STRICTENC", "OK"], +["10 0 11", "TOALTSTACK DROP FROMALTSTACK ADD 21 EQUAL", "", "OK"], +["'gavin_was_here'", "TOALTSTACK 11 FROMALTSTACK 'gavin_was_here' EQUALVERIFY 11 EQUAL", "", "OK"], -["0 IFDUP", "DEPTH 1 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC", "OK"], -["1 IFDUP", "DEPTH 2 EQUALVERIFY 1 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC", "OK"], -["0x05 0x0100000000 IFDUP", "DEPTH 2 EQUALVERIFY 0x05 0x0100000000 EQUAL", "P2SH,STRICTENC", "OK", "IFDUP dups non ints"], -["0 DROP", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["0", "DUP 1 ADD 1 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC", "OK"], -["0 1", "NIP", "P2SH,STRICTENC", "OK"], -["1 0", "OVER DEPTH 3 EQUALVERIFY", "P2SH,STRICTENC", "OK"], -["22 21 20", "0 PICK 20 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC", "OK"], -["22 21 20", "1 PICK 21 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC", "OK"], -["22 21 20", "2 PICK 22 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC", "OK"], -["22 21 20", "0 ROLL 20 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC", "OK"], -["22 21 20", "1 ROLL 21 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC", "OK"], -["22 21 20", "2 ROLL 22 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC", "OK"], -["22 21 20", "ROT 22 EQUAL", "P2SH,STRICTENC", "OK"], -["22 21 20", "ROT DROP 20 EQUAL", "P2SH,STRICTENC", "OK"], -["22 21 20", "ROT DROP DROP 21 EQUAL", "P2SH,STRICTENC", "OK"], -["22 21 20", "ROT ROT 21 EQUAL", "P2SH,STRICTENC", "OK"], -["22 21 20", "ROT ROT ROT 20 EQUAL", "P2SH,STRICTENC", "OK"], -["25 24 23 22 21 20", "2ROT 24 EQUAL", "P2SH,STRICTENC", "OK"], -["25 24 23 22 21 20", "2ROT DROP 25 EQUAL", "P2SH,STRICTENC", "OK"], -["25 24 23 22 21 20", "2ROT 2DROP 20 EQUAL", "P2SH,STRICTENC", "OK"], -["25 24 23 22 21 20", "2ROT 2DROP DROP 21 EQUAL", "P2SH,STRICTENC", "OK"], -["25 24 23 22 21 20", "2ROT 2DROP 2DROP 22 EQUAL", "P2SH,STRICTENC", "OK"], -["25 24 23 22 21 20", "2ROT 2DROP 2DROP DROP 23 EQUAL", "P2SH,STRICTENC", "OK"], -["25 24 23 22 21 20", "2ROT 2ROT 22 EQUAL", "P2SH,STRICTENC", "OK"], -["25 24 23 22 21 20", "2ROT 2ROT 2ROT 20 EQUAL", "P2SH,STRICTENC", "OK"], -["1 0", "SWAP 1 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC", "OK"], -["0 1", "TUCK DEPTH 3 EQUALVERIFY SWAP 2DROP", "P2SH,STRICTENC", "OK"], -["13 14", "2DUP ROT EQUALVERIFY EQUAL", "P2SH,STRICTENC", "OK"], -["-1 0 1 2", "3DUP DEPTH 7 EQUALVERIFY ADD ADD 3 EQUALVERIFY 2DROP 0 EQUALVERIFY", "P2SH,STRICTENC", "OK"], -["1 2 3 5", "2OVER ADD ADD 8 EQUALVERIFY ADD ADD 6 EQUAL", "P2SH,STRICTENC", "OK"], -["1 3 5 7", "2SWAP ADD 4 EQUALVERIFY ADD 12 EQUAL", "P2SH,STRICTENC", "OK"], -["0", "SIZE 0 EQUAL", "P2SH,STRICTENC", "OK"], -["1", "SIZE 1 EQUAL", "P2SH,STRICTENC", "OK"], -["127", "SIZE 1 EQUAL", "P2SH,STRICTENC", "OK"], -["128", "SIZE 2 EQUAL", "P2SH,STRICTENC", "OK"], -["32767", "SIZE 2 EQUAL", "P2SH,STRICTENC", "OK"], -["32768", "SIZE 3 EQUAL", "P2SH,STRICTENC", "OK"], -["8388607", "SIZE 3 EQUAL", "P2SH,STRICTENC", "OK"], -["8388608", "SIZE 4 EQUAL", "P2SH,STRICTENC", "OK"], -["2147483647", "SIZE 4 EQUAL", "P2SH,STRICTENC", "OK"], -["2147483648", "SIZE 5 EQUAL", "P2SH,STRICTENC", "OK"], -["549755813887", "SIZE 5 EQUAL", "P2SH,STRICTENC", "OK"], -["549755813888", "SIZE 6 EQUAL", "P2SH,STRICTENC", "OK"], -["9223372036854775807", "SIZE 8 EQUAL", "P2SH,STRICTENC", "OK"], -["-1", "SIZE 1 EQUAL", "P2SH,STRICTENC", "OK"], -["-127", "SIZE 1 EQUAL", "P2SH,STRICTENC", "OK"], -["-128", "SIZE 2 EQUAL", "P2SH,STRICTENC", "OK"], -["-32767", "SIZE 2 EQUAL", "P2SH,STRICTENC", "OK"], -["-32768", "SIZE 3 EQUAL", "P2SH,STRICTENC", "OK"], -["-8388607", "SIZE 3 EQUAL", "P2SH,STRICTENC", "OK"], -["-8388608", "SIZE 4 EQUAL", "P2SH,STRICTENC", "OK"], -["-2147483647", "SIZE 4 EQUAL", "P2SH,STRICTENC", "OK"], -["-2147483648", "SIZE 5 EQUAL", "P2SH,STRICTENC", "OK"], -["-549755813887", "SIZE 5 EQUAL", "P2SH,STRICTENC", "OK"], -["-549755813888", "SIZE 6 EQUAL", "P2SH,STRICTENC", "OK"], -["-9223372036854775807", "SIZE 8 EQUAL", "P2SH,STRICTENC", "OK"], -["'abcdefghijklmnopqrstuvwxyz'", "SIZE 26 EQUAL", "P2SH,STRICTENC", "OK"], +["0", "IFDUP DEPTH 1 EQUALVERIFY 0 EQUAL", "", "OK"], +["1", "IFDUP DEPTH 2 EQUALVERIFY 1 EQUALVERIFY 1 EQUAL", "", "OK"], +["0x05 0x0100000000", "IFDUP DEPTH 2 EQUALVERIFY 0x05 0x0100000000 EQUALVERIFY DROP TRUE", "", "OK", "IFDUP dups non ints"], +["0", "DROP DEPTH 0 EQUAL", "", "OK"], +["0", "DUP 1 ADD 1 EQUALVERIFY 0 EQUAL", "", "OK"], +["0 1", "NIP", "", "OK"], +["1 0", "OVER DEPTH 3 EQUALVERIFY DROP DROP DROP TRUE", "", "OK"], +["22 21 20", "0 PICK 20 EQUALVERIFY DEPTH 3 EQUALVERIFY DROP DROP DROP TRUE", "", "OK"], +["22 21 20", "1 PICK 21 EQUALVERIFY DEPTH 3 EQUALVERIFY DROP DROP DROP TRUE", "", "OK"], +["22 21 20", "2 PICK 22 EQUALVERIFY DEPTH 3 EQUALVERIFY DROP DROP DROP TRUE", "", "OK"], +["22 21 20", "0 ROLL 20 EQUALVERIFY DEPTH 2 EQUALVERIFY DROP DROP TRUE", "", "OK"], +["22 21 20", "1 ROLL 21 EQUALVERIFY DEPTH 2 EQUALVERIFY DROP DROP TRUE", "", "OK"], +["22 21 20", "2 ROLL 22 EQUALVERIFY DEPTH 2 EQUALVERIFY DROP DROP TRUE", "", "OK"], +["22 21 20", "ROT 22 EQUALVERIFY DROP DROP TRUE", "", "OK"], +["22 21 20", "ROT DROP 20 EQUALVERIFY DROP TRUE", "", "OK"], +["22 21 20", "ROT DROP DROP 21 EQUAL", "", "OK"], +["22 21 20", "ROT ROT 21 EQUAL 2DROP", "", "OK"], +["22 21 20", "ROT ROT ROT 20 EQUALVERIFY DROP DROP TRUE", "", "OK"], +["25 24 23 22 21 20", "2ROT 24 EQUALVERIFY DROP DROP DROP DROP DROP TRUE", "", "OK"], +["25 24 23 22 21 20", "2ROT DROP 25 EQUALVERIFY DROP DROP DROP DROP TRUE", "", "OK"], +["25 24 23 22 21 20", "2ROT 2DROP 20 EQUALVERIFY DROP DROP DROP TRUE", "", "OK"], +["25 24 23 22 21 20", "2ROT 2DROP DROP 21 EQUALVERIFY 2DROP TRUE", "", "OK"], +["25 24 23 22 21 20", "2ROT 2DROP 2DROP 22 EQUALVERIFY DROP TRUE", "", "OK"], +["25 24 23 22 21 20", "2ROT 2DROP 2DROP DROP 23 EQUALVERIFY TRUE", "", "OK"], +["25 24 23 22 21 20", "2ROT 2ROT 22 EQUALVERIFY 2DROP DROP DROP DROP TRUE", "", "OK"], +["25 24 23 22 21 20", "2ROT 2ROT 2ROT 20 EQUALVERIFY DROP DROP DROP DROP DROP TRUE", "", "OK"], +["1 0", "SWAP 1 EQUALVERIFY 0 EQUAL", "", "OK"], +["0 1", "TUCK DEPTH 3 EQUALVERIFY SWAP 2DROP", "", "OK"], +["13 14", "2DUP ROT EQUALVERIFY EQUAL", "", "OK"], +["-1 0 1 2", "3DUP DEPTH 7 EQUALVERIFY ADD ADD 3 EQUALVERIFY 2DROP 0 EQUALVERIFY", "", "OK"], +["1 2 3 5", "2OVER ADD ADD 8 EQUALVERIFY ADD ADD 6 EQUAL", "", "OK"], +["1 3 5 7", "2SWAP ADD 4 EQUALVERIFY ADD 12 EQUAL", "", "OK"], +["0", "SIZE 0 EQUALVERIFY DROP TRUE", "", "OK"], +["1", "SIZE 1 EQUALVERIFY DROP TRUE", "", "OK"], +["127", "SIZE 1 EQUALVERIFY DROP TRUE", "", "OK"], +["128", "SIZE 2 EQUALVERIFY DROP TRUE", "", "OK"], +["32767", "SIZE 2 EQUALVERIFY DROP TRUE", "", "OK"], +["32768", "SIZE 3 EQUALVERIFY DROP TRUE", "", "OK"], +["8388607", "SIZE 3 EQUALVERIFY DROP TRUE", "", "OK"], +["8388608", "SIZE 4 EQUALVERIFY DROP TRUE", "", "OK"], +["2147483647", "SIZE 4 EQUALVERIFY DROP TRUE", "", "OK"], +["2147483648", "SIZE 5 EQUALVERIFY DROP TRUE", "", "OK"], +["549755813887", "SIZE 5 EQUALVERIFY DROP TRUE", "", "OK"], +["549755813888", "SIZE 6 EQUALVERIFY DROP TRUE", "", "OK"], +["9223372036854775807", "SIZE 8 EQUALVERIFY DROP TRUE", "", "OK"], +["-1", "SIZE 1 EQUALVERIFY DROP TRUE", "", "OK"], +["-127", "SIZE 1 EQUALVERIFY DROP TRUE", "", "OK"], +["-128", "SIZE 2 EQUALVERIFY DROP TRUE", "", "OK"], +["-32767", "SIZE 2 EQUALVERIFY DROP TRUE", "", "OK"], +["-32768", "SIZE 3 EQUALVERIFY DROP TRUE", "", "OK"], +["-8388607", "SIZE 3 EQUALVERIFY DROP TRUE", "", "OK"], +["-8388608", "SIZE 4 EQUALVERIFY DROP TRUE", "", "OK"], +["-2147483647", "SIZE 4 EQUALVERIFY DROP TRUE", "", "OK"], +["-2147483648", "SIZE 5 EQUALVERIFY DROP TRUE", "", "OK"], +["-549755813887", "SIZE 5 EQUALVERIFY DROP TRUE", "", "OK"], +["-549755813888", "SIZE 6 EQUALVERIFY DROP TRUE", "", "OK"], +["-9223372036854775807", "SIZE 8 EQUALVERIFY DROP TRUE", "", "OK"], +["'abcdefghijklmnopqrstuvwxyz'", "SIZE 26 EQUALVERIFY DROP TRUE", "", "OK"], -["42", "SIZE 1 EQUALVERIFY 42 EQUAL", "P2SH,STRICTENC", "OK", "SIZE does not consume argument"], +["42", "SIZE 1 EQUALVERIFY 42 EQUAL", "", "OK", "SIZE does not consume argument"], -["2 -2 ADD", "0 EQUAL", "P2SH,STRICTENC", "OK"], -["2147483647 -2147483647 ADD", "0 EQUAL", "P2SH,STRICTENC", "OK"], -["-1 -1 ADD", "-2 EQUAL", "P2SH,STRICTENC", "OK"], +["2 -2", "ADD 0 EQUAL", "", "OK"], +["2147483647 -2147483647", "ADD 0 EQUAL", "", "OK"], +["-1 -1", "ADD -2 EQUAL", "", "OK"], -["0 0","EQUAL", "P2SH,STRICTENC", "OK"], -["1 1 ADD", "2 EQUAL", "P2SH,STRICTENC", "OK"], -["1 1ADD", "2 EQUAL", "P2SH,STRICTENC", "OK"], -["111 1SUB", "110 EQUAL", "P2SH,STRICTENC", "OK"], -["111 1 ADD 12 SUB", "100 EQUAL", "P2SH,STRICTENC", "OK"], -["0 ABS", "0 EQUAL", "P2SH,STRICTENC", "OK"], -["16 ABS", "16 EQUAL", "P2SH,STRICTENC", "OK"], -["-16 ABS", "-16 NEGATE EQUAL", "P2SH,STRICTENC", "OK"], -["0 NOT", "NOP", "P2SH,STRICTENC", "OK"], -["1 NOT", "0 EQUAL", "P2SH,STRICTENC", "OK"], -["11 NOT", "0 EQUAL", "P2SH,STRICTENC", "OK"], -["0 0NOTEQUAL", "0 EQUAL", "P2SH,STRICTENC", "OK"], -["1 0NOTEQUAL", "1 EQUAL", "P2SH,STRICTENC", "OK"], -["111 0NOTEQUAL", "1 EQUAL", "P2SH,STRICTENC", "OK"], -["-111 0NOTEQUAL", "1 EQUAL", "P2SH,STRICTENC", "OK"], -["1 1 BOOLAND", "NOP", "P2SH,STRICTENC", "OK"], -["1 0 BOOLAND", "NOT", "P2SH,STRICTENC", "OK"], -["0 1 BOOLAND", "NOT", "P2SH,STRICTENC", "OK"], -["0 0 BOOLAND", "NOT", "P2SH,STRICTENC", "OK"], -["16 17 BOOLAND", "NOP", "P2SH,STRICTENC", "OK"], -["1 1 BOOLOR", "NOP", "P2SH,STRICTENC", "OK"], -["1 0 BOOLOR", "NOP", "P2SH,STRICTENC", "OK"], -["0 1 BOOLOR", "NOP", "P2SH,STRICTENC", "OK"], -["0 0 BOOLOR", "NOT", "P2SH,STRICTENC", "OK"], -["16 17 BOOLOR", "NOP", "P2SH,STRICTENC", "OK"], -["11 10 1 ADD", "NUMEQUAL", "P2SH,STRICTENC", "OK"], -["11 10 1 ADD", "NUMEQUALVERIFY 1", "P2SH,STRICTENC", "OK"], -["11 10 1 ADD", "NUMNOTEQUAL NOT", "P2SH,STRICTENC", "OK"], -["111 10 1 ADD", "NUMNOTEQUAL", "P2SH,STRICTENC", "OK"], -["11 10", "LESSTHAN NOT", "P2SH,STRICTENC", "OK"], -["4 4", "LESSTHAN NOT", "P2SH,STRICTENC", "OK"], -["10 11", "LESSTHAN", "P2SH,STRICTENC", "OK"], -["-11 11", "LESSTHAN", "P2SH,STRICTENC", "OK"], -["-11 -10", "LESSTHAN", "P2SH,STRICTENC", "OK"], -["11 10", "GREATERTHAN", "P2SH,STRICTENC", "OK"], -["4 4", "GREATERTHAN NOT", "P2SH,STRICTENC", "OK"], -["10 11", "GREATERTHAN NOT", "P2SH,STRICTENC", "OK"], -["-11 11", "GREATERTHAN NOT", "P2SH,STRICTENC", "OK"], -["-11 -10", "GREATERTHAN NOT", "P2SH,STRICTENC", "OK"], -["11 10", "LESSTHANOREQUAL NOT", "P2SH,STRICTENC", "OK"], -["4 4", "LESSTHANOREQUAL", "P2SH,STRICTENC", "OK"], -["10 11", "LESSTHANOREQUAL", "P2SH,STRICTENC", "OK"], -["-11 11", "LESSTHANOREQUAL", "P2SH,STRICTENC", "OK"], -["-11 -10", "LESSTHANOREQUAL", "P2SH,STRICTENC", "OK"], -["11 10", "GREATERTHANOREQUAL", "P2SH,STRICTENC", "OK"], -["4 4", "GREATERTHANOREQUAL", "P2SH,STRICTENC", "OK"], -["10 11", "GREATERTHANOREQUAL NOT", "P2SH,STRICTENC", "OK"], -["-11 11", "GREATERTHANOREQUAL NOT", "P2SH,STRICTENC", "OK"], -["-11 -10", "GREATERTHANOREQUAL NOT", "P2SH,STRICTENC", "OK"], -["1 0 MIN", "0 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["0 1 MIN", "0 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["-1 0 MIN", "-1 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["0 -2147483647 MIN", "-2147483647 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["2147483647 0 MAX", "2147483647 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["0 100 MAX", "100 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["-100 0 MAX", "0 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["0 -2147483647 MAX", "0 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["0 0 1", "WITHIN", "P2SH,STRICTENC", "OK"], -["1 0 1", "WITHIN NOT", "P2SH,STRICTENC", "OK"], -["0 -2147483647 2147483647", "WITHIN", "P2SH,STRICTENC", "OK"], -["-1 -100 100", "WITHIN", "P2SH,STRICTENC", "OK"], -["11 -100 100", "WITHIN", "P2SH,STRICTENC", "OK"], -["-2147483647 -100 100", "WITHIN NOT", "P2SH,STRICTENC", "OK"], -["2147483647 -100 100", "WITHIN NOT", "P2SH,STRICTENC", "OK"], +["0 0","EQUAL", "", "OK"], +["1 1", "ADD 2 EQUAL", "", "OK"], +["1", "1ADD 2 EQUAL", "", "OK"], +["111", "1SUB 110 EQUAL", "", "OK"], +["111 1", "ADD 12 SUB 100 EQUAL", "", "OK"], +["0", "ABS 0 EQUAL", "", "OK"], +["16", "ABS 16 EQUAL", "", "OK"], +["-16", "ABS -16 NEGATE EQUAL", "", "OK"], +["0", "NOT NOP", "", "OK"], +["1", "NOT 0 EQUAL", "", "OK"], +["11", "NOT 0 EQUAL", "", "OK"], +["0", "0NOTEQUAL 0 EQUAL", "", "OK"], +["1", "0NOTEQUAL 1 EQUAL", "", "OK"], +["111", "0NOTEQUAL 1 EQUAL", "", "OK"], +["-111", "0NOTEQUAL 1 EQUAL", "", "OK"], +["1 1", "BOOLAND NOP", "", "OK"], +["1 0", "BOOLAND NOT", "", "OK"], +["0 1", "BOOLAND NOT", "", "OK"], +["0 0", "BOOLAND NOT", "", "OK"], +["16 17", "BOOLAND NOP", "", "OK"], +["1 1", "BOOLOR NOP", "", "OK"], +["1 0", "BOOLOR NOP", "", "OK"], +["0 1", "BOOLOR NOP", "", "OK"], +["0 0", "BOOLOR NOT", "", "OK"], +["16 17", "BOOLOR NOP", "", "OK"], +["11 10 1", "ADD NUMEQUAL", "", "OK"], +["11 10 1", "ADD NUMEQUALVERIFY 1", "", "OK"], +["11 10 1", "ADD NUMNOTEQUAL NOT", "", "OK"], +["111 10 1", "ADD NUMNOTEQUAL", "", "OK"], +["11 10", "LESSTHAN NOT", "", "OK"], +["4 4", "LESSTHAN NOT", "", "OK"], +["10 11", "LESSTHAN", "", "OK"], +["-11 11", "LESSTHAN", "", "OK"], +["-11 -10", "LESSTHAN", "", "OK"], +["11 10", "GREATERTHAN", "", "OK"], +["4 4", "GREATERTHAN NOT", "", "OK"], +["10 11", "GREATERTHAN NOT", "", "OK"], +["-11 11", "GREATERTHAN NOT", "", "OK"], +["-11 -10", "GREATERTHAN NOT", "", "OK"], +["11 10", "LESSTHANOREQUAL NOT", "", "OK"], +["4 4", "LESSTHANOREQUAL", "", "OK"], +["10 11", "LESSTHANOREQUAL", "", "OK"], +["-11 11", "LESSTHANOREQUAL", "", "OK"], +["-11 -10", "LESSTHANOREQUAL", "", "OK"], +["11 10", "GREATERTHANOREQUAL", "", "OK"], +["4 4", "GREATERTHANOREQUAL", "", "OK"], +["10 11", "GREATERTHANOREQUAL NOT", "", "OK"], +["-11 11", "GREATERTHANOREQUAL NOT", "", "OK"], +["-11 -10", "GREATERTHANOREQUAL NOT", "", "OK"], +["1 0", "MIN 0 NUMEQUAL", "", "OK"], +["0 1", "MIN 0 NUMEQUAL", "", "OK"], +["-1 0", "MIN -1 NUMEQUAL", "", "OK"], +["0 -2147483647", "MIN -2147483647 NUMEQUAL", "", "OK"], +["2147483647 0", "MAX 2147483647 NUMEQUAL", "", "OK"], +["0 100", "MAX 100 NUMEQUAL", "", "OK"], +["-100 0", "MAX 0 NUMEQUAL", "", "OK"], +["0 -2147483647", "MAX 0 NUMEQUAL", "", "OK"], +["0 0 1", "WITHIN", "", "OK"], +["1 0 1", "WITHIN NOT", "", "OK"], +["0 -2147483647 2147483647", "WITHIN", "", "OK"], +["-1 -100 100", "WITHIN", "", "OK"], +["11 -100 100", "WITHIN", "", "OK"], +["-2147483647 -100 100", "WITHIN NOT", "", "OK"], +["2147483647 -100 100", "WITHIN NOT", "", "OK"], -["2147483647 2147483647 SUB", "0 EQUAL", "P2SH,STRICTENC", "OK"], -["2147483647 DUP ADD", "4294967294 EQUAL", "P2SH,STRICTENC", "OK", ">32 bit EQUAL is valid"], -["2147483647 NEGATE DUP ADD", "-4294967294 EQUAL", "P2SH,STRICTENC", "OK"], +["2147483647 2147483647", "SUB 0 EQUAL", "", "OK"], +["2147483647", "DUP ADD 4294967294 EQUAL", "", "OK", ">32 bit EQUAL is valid"], +["2147483647", "NEGATE DUP ADD -4294967294 EQUAL", "", "OK"], -["''", "RIPEMD160 0x14 0x9c1185a5c5e9fc54612808977ee8f548b2258d31 EQUAL", "P2SH,STRICTENC", "OK"], -["'a'", "RIPEMD160 0x14 0x0bdc9d2d256b3ee9daae347be6f4dc835a467ffe EQUAL", "P2SH,STRICTENC", "OK"], -["'abcdefghijklmnopqrstuvwxyz'", "RIPEMD160 0x14 0xf71c27109c692c1b56bbdceb5b9d2865b3708dbc EQUAL", "P2SH,STRICTENC", "OK"], -["''", "SHA1 0x14 0xda39a3ee5e6b4b0d3255bfef95601890afd80709 EQUAL", "P2SH,STRICTENC", "OK"], -["'a'", "SHA1 0x14 0x86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 EQUAL", "P2SH,STRICTENC", "OK"], -["'abcdefghijklmnopqrstuvwxyz'", "SHA1 0x14 0x32d10c7b8cf96570ca04ce37f2a19d84240d3a89 EQUAL", "P2SH,STRICTENC", "OK"], -["''", "SHA256 0x20 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 EQUAL", "P2SH,STRICTENC", "OK"], -["'a'", "SHA256 0x20 0xca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb EQUAL", "P2SH,STRICTENC", "OK"], -["'abcdefghijklmnopqrstuvwxyz'", "SHA256 0x20 0x71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73 EQUAL", "P2SH,STRICTENC", "OK"], -["''", "DUP HASH160 SWAP SHA256 RIPEMD160 EQUAL", "P2SH,STRICTENC", "OK"], -["''", "DUP HASH256 SWAP SHA256 SHA256 EQUAL", "P2SH,STRICTENC", "OK"], -["''", "NOP HASH160 0x14 0xb472a266d0bd89c13706a4132ccfb16f7c3b9fcb EQUAL", "P2SH,STRICTENC", "OK"], -["'a'", "HASH160 NOP 0x14 0x994355199e516ff76c4fa4aab39337b9d84cf12b EQUAL", "P2SH,STRICTENC", "OK"], -["'abcdefghijklmnopqrstuvwxyz'", "HASH160 0x4c 0x14 0xc286a1af0947f58d1ad787385b1c2c4a976f9e71 EQUAL", "P2SH,STRICTENC", "OK"], -["''", "HASH256 0x20 0x5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456 EQUAL", "P2SH,STRICTENC", "OK"], -["'a'", "HASH256 0x20 0xbf5d3affb73efd2ec6c36ad3112dd933efed63c4e1cbffcfa88e2759c144f2d8 EQUAL", "P2SH,STRICTENC", "OK"], -["'abcdefghijklmnopqrstuvwxyz'", "HASH256 0x4c 0x20 0xca139bc10c2f660da42666f72e89a225936fc60f193c161124a672050c434671 EQUAL", "P2SH,STRICTENC", "OK"], +["''", "RIPEMD160 0x14 0x9c1185a5c5e9fc54612808977ee8f548b2258d31 EQUAL", "", "OK"], +["'a'", "RIPEMD160 0x14 0x0bdc9d2d256b3ee9daae347be6f4dc835a467ffe EQUAL", "", "OK"], +["'abcdefghijklmnopqrstuvwxyz'", "RIPEMD160 0x14 0xf71c27109c692c1b56bbdceb5b9d2865b3708dbc EQUAL", "", "OK"], +["''", "SHA1 0x14 0xda39a3ee5e6b4b0d3255bfef95601890afd80709 EQUAL", "", "OK"], +["'a'", "SHA1 0x14 0x86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 EQUAL", "", "OK"], +["'abcdefghijklmnopqrstuvwxyz'", "SHA1 0x14 0x32d10c7b8cf96570ca04ce37f2a19d84240d3a89 EQUAL", "", "OK"], +["''", "SHA256 0x20 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 EQUAL", "", "OK"], +["'a'", "SHA256 0x20 0xca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb EQUAL", "", "OK"], +["'abcdefghijklmnopqrstuvwxyz'", "SHA256 0x20 0x71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73 EQUAL", "", "OK"], +["''", "DUP HASH160 SWAP SHA256 RIPEMD160 EQUAL", "", "OK"], +["''", "DUP HASH256 SWAP SHA256 SHA256 EQUAL", "", "OK"], +["''", "NOP HASH160 0x14 0xb472a266d0bd89c13706a4132ccfb16f7c3b9fcb EQUAL", "", "OK"], +["'a'", "HASH160 NOP 0x14 0x994355199e516ff76c4fa4aab39337b9d84cf12b EQUAL", "", "OK"], +["'abcdefghijklmnopqrstuvwxyz'", "NOP HASH160 0x14 0xc286a1af0947f58d1ad787385b1c2c4a976f9e71 EQUAL", "", "OK", "The NOP is added so the script won't be interpreted as P2SH"], +["''", "HASH256 0x20 0x5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456 EQUAL", "", "OK"], +["'a'", "HASH256 0x20 0xbf5d3affb73efd2ec6c36ad3112dd933efed63c4e1cbffcfa88e2759c144f2d8 EQUAL", "", "OK"], +["'abcdefghijklmnopqrstuvwxyz'", "HASH256 0x20 0xca139bc10c2f660da42666f72e89a225936fc60f193c161124a672050c434671 EQUAL", "", "OK"], -["1","NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 1 EQUAL", "P2SH,STRICTENC", "OK"], -["'NOP_1_to_10' NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10","'NOP_1_to_10' EQUAL", "P2SH,STRICTENC", "OK"], +["1","NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 1 EQUAL", "", "OK"], +["'NOP_1_to_10'","NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 'NOP_1_to_10' EQUAL", "", "OK"], -["1", "NOP", "P2SH,STRICTENC,DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discourage NOPx flag allows OP_NOP"], +["1", "NOP", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discourage NOPx flag allows OP_NOP"], -["0", "IF NOP10 ENDIF 1", "P2SH,STRICTENC,DISCOURAGE_UPGRADABLE_NOPS", "OK", +["0", "IF NOP10 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOPs are allowed if not executed"], -["0", "IF 0xbc ELSE 1 ENDIF", "P2SH,STRICTENC", "OK", "opcodes above NOP10 invalid if executed"], -["0", "IF 0xbd ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xbe ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xbf ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xc0 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xc1 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xc2 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xc3 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xc4 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xc5 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xc6 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xc7 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xc8 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xc9 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xca ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xcb ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xcc ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xcd ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xce ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xcf ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xd0 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xd1 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xd2 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xd3 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xd4 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xd5 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xd6 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xd7 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xd8 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xd9 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xda ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xdb ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xdc ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xdd ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xde ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xdf ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xe0 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xe1 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xe2 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xe3 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xe4 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xe5 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xe6 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xe7 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xe8 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xe9 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xea ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xeb ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xec ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xed ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xee ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xef ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xf0 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xf1 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xf2 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xf3 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xf4 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xf5 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xf6 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xf7 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xf8 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xf9 ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xfa ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xfb ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xfc ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xfd ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xfe ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], -["0", "IF 0xff ELSE 1 ENDIF", "P2SH,STRICTENC", "OK"], +["0", "IF 0xbc ELSE 1 ENDIF", "", "OK", "opcodes above NOP10 invalid if executed"], +["0", "IF 0xbd ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xbe ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xbf ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xc0 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xc1 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xc2 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xc3 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xc4 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xc5 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xc6 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xc7 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xc8 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xc9 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xca ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xcb ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xcc ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xcd ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xce ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xcf ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xd0 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xd1 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xd2 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xd3 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xd4 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xd5 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xd6 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xd7 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xd8 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xd9 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xda ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xdb ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xdc ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xdd ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xde ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xdf ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xe0 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xe1 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xe2 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xe3 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xe4 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xe5 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xe6 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xe7 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xe8 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xe9 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xea ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xeb ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xec ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xed ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xee ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xef ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xf0 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xf1 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xf2 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xf3 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xf4 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xf5 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xf6 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xf7 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xf8 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xf9 ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xfa ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xfb ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xfc ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xfd ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xfe ELSE 1 ENDIF", "", "OK"], +["0", "IF 0xff ELSE 1 ENDIF", "", "OK"], -["NOP", +["", "'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'", -"P2SH,STRICTENC", "OK", +"", "OK", "520 byte push"], ["1", "0x616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", -"P2SH,STRICTENC", "OK", +"", "OK", "201 opcodes executed. 0x61 is NOP"], -["1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", -"1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", -"P2SH,STRICTENC", "OK", -"1,000 stack size (0x6f is 3DUP)"], -["1 TOALTSTACK 2 TOALTSTACK 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", -"1 2 3 4 5 6 7 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", -"P2SH,STRICTENC", "OK", -"1,000 stack size (altstack cleared between scriptSig/scriptPubKey)"], -["'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", -"'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f 2DUP 0x616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", -"P2SH,STRICTENC", "OK", -"Max-size (10,000-byte), max-push(520 bytes), max-opcodes(201), max stack size(1,000 items). 0x6f is 3DUP, 0x61 is NOP"], +["1 2 3 4 5", +"0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f 1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f 0x6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d75", +"", "OK", +"244 stack size (0x6f is 3DUP, 0x6d is 2DROP, and 0x75 is DROP)"], +["'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'", +"'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f 2DUP DROP 0x6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d 0x61616161", +"", "OK", +"Max-size (10,000-byte), max-push(520 bytes), max-opcodes(201), max stack size(244 items). 0x6f is 3DUP, 0x61 is NOP, 0x6d is 2DROP"], ["0", "IF 0x5050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050 ENDIF 1", -"P2SH,STRICTENC", "OK", +"", "OK", ">201 opcodes, but RESERVED (0x50) doesn't count towards opcode limit."], -["NOP","1", "P2SH,STRICTENC", "OK"], +["","1", "", "OK"], -["1", "0x01 0x01 EQUAL", "P2SH,STRICTENC", "OK", "The following is useful for checking implementations of BN_bn2mpi"], -["127", "0x01 0x7F EQUAL", "P2SH,STRICTENC", "OK"], -["128", "0x02 0x8000 EQUAL", "P2SH,STRICTENC", "OK", "Leave room for the sign bit"], -["32767", "0x02 0xFF7F EQUAL", "P2SH,STRICTENC", "OK"], -["32768", "0x03 0x008000 EQUAL", "P2SH,STRICTENC", "OK"], -["8388607", "0x03 0xFFFF7F EQUAL", "P2SH,STRICTENC", "OK"], -["8388608", "0x04 0x00008000 EQUAL", "P2SH,STRICTENC", "OK"], -["2147483647", "0x04 0xFFFFFF7F EQUAL", "P2SH,STRICTENC", "OK"], -["2147483648", "0x05 0x0000008000 EQUAL", "P2SH,STRICTENC", "OK"], -["549755813887", "0x05 0xFFFFFFFF7F EQUAL", "P2SH,STRICTENC", "OK"], -["549755813888", "0x06 0xFFFFFFFF7F EQUAL", "P2SH,STRICTENC", "OK"], -["9223372036854775807", "0x08 0xFFFFFFFFFFFFFF7F EQUAL", "P2SH,STRICTENC", "OK"], -["-1", "0x01 0x81 EQUAL", "P2SH,STRICTENC", "OK", "Numbers are little-endian with the MSB being a sign bit"], -["-127", "0x01 0xFF EQUAL", "P2SH,STRICTENC", "OK"], -["-128", "0x02 0x8080 EQUAL", "P2SH,STRICTENC", "OK"], -["-32767", "0x02 0xFFFF EQUAL", "P2SH,STRICTENC", "OK"], -["-32768", "0x03 0x008080 EQUAL", "P2SH,STRICTENC", "OK"], -["-8388607", "0x03 0xFFFFFF EQUAL", "P2SH,STRICTENC", "OK"], -["-8388608", "0x04 0x00008080 EQUAL", "P2SH,STRICTENC", "OK"], -["-2147483647", "0x04 0xFFFFFFFF EQUAL", "P2SH,STRICTENC", "OK"], -["-2147483648", "0x05 0x0000008080 EQUAL", "P2SH,STRICTENC", "OK"], -["-4294967295", "0x05 0xFFFFFFFF80 EQUAL", "P2SH,STRICTENC", "OK"], -["-549755813887", "0x05 0xFFFFFFFFFF EQUAL", "P2SH,STRICTENC", "OK"], -["-549755813888", "0x06 0x000000008080 EQUAL", "P2SH,STRICTENC", "OK"], -["-9223372036854775807", "0x08 0xFFFFFFFFFFFFFFFF EQUAL", "P2SH,STRICTENC", "OK"], +["127", "0x01 0x7F EQUAL", "", "OK"], +["128", "0x02 0x8000 EQUAL", "", "OK", "Leave room for the sign bit"], +["32767", "0x02 0xFF7F EQUAL", "", "OK"], +["32768", "0x03 0x008000 EQUAL", "", "OK"], +["8388607", "0x03 0xFFFF7F EQUAL", "", "OK"], +["8388608", "0x04 0x00008000 EQUAL", "", "OK"], +["2147483647", "0x04 0xFFFFFF7F EQUAL", "", "OK"], +["2147483648", "0x05 0x0000008000 EQUAL", "", "OK"], +["549755813887", "0x05 0xFFFFFFFF7F EQUAL", "", "OK"], +["549755813888", "0x06 0xFFFFFFFF7F EQUALVERIFY 2DROP TRUE", "", "OK"], +["9223372036854775807", "0x08 0xFFFFFFFFFFFFFF7F EQUAL", "", "OK"], +["-2", "0x01 0x82 EQUAL", "", "OK", "Numbers are little-endian with the MSB being a sign bit"], +["-127", "0x01 0xFF EQUAL", "", "OK"], +["-128", "0x02 0x8080 EQUAL", "", "OK"], +["-32767", "0x02 0xFFFF EQUAL", "", "OK"], +["-32768", "0x03 0x008080 EQUAL", "", "OK"], +["-8388607", "0x03 0xFFFFFF EQUAL", "", "OK"], +["-8388608", "0x04 0x00008080 EQUAL", "", "OK"], +["-2147483647", "0x04 0xFFFFFFFF EQUAL", "", "OK"], +["-2147483648", "0x05 0x0000008080 EQUAL", "", "OK"], +["-4294967295", "0x05 0xFFFFFFFF80 EQUAL", "", "OK"], +["-549755813887", "0x05 0xFFFFFFFFFF EQUAL", "", "OK"], +["-549755813888", "0x06 0x000000008080 EQUAL", "", "OK"], +["-9223372036854775807", "0x08 0xFFFFFFFFFFFFFFFF EQUAL", "", "OK"], -["2147483647", "1ADD 2147483648 EQUAL", "P2SH,STRICTENC", "OK", "We can do math on 4-byte integers, and compare 5-byte ones"], -["2147483647", "1ADD 1", "P2SH,STRICTENC", "OK"], -["-2147483647", "1ADD 1", "P2SH,STRICTENC", "OK"], +["2147483647", "1ADD 2147483648 EQUAL", "", "OK", "We can do math on 4-byte integers, and compare 5-byte ones"], +["2147483647", "1ADD DROP 1", "", "OK"], +["-2147483647", "1ADD DROP 1", "", "OK"], -["1", "0x02 0x0100 EQUAL NOT", "P2SH,STRICTENC", "OK", "Not the same byte array..."], -["1", "0x02 0x0100 NUMEQUAL", "P2SH,STRICTENC", "OK", "... but they are numerically equal"], -["11", "0x4c 0x03 0x0b0000 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["0", "0x01 0x80 EQUAL NOT", "P2SH,STRICTENC", "OK"], -["0", "0x01 0x80 NUMEQUAL", "P2SH,STRICTENC", "OK", "Zero numerically equals negative zero"], -["0", "0x02 0x0080 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["0x03 0x000080", "0x04 0x00000080 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["0x03 0x100080", "0x04 0x10000080 NUMEQUAL", "P2SH,STRICTENC", "OK"], -["0x03 0x100000", "0x04 0x10000000 NUMEQUAL", "P2SH,STRICTENC", "OK"], +["1", "0x02 0x0100 EQUAL NOT", "", "OK", "Not the same byte array..."], +["0", "0x01 0x80 EQUAL NOT", "", "OK"], -["NOP", "NOP 1", "P2SH,STRICTENC", "OK", "The following tests check the if(stack.size() < N) tests in each opcode"], -["1", "IF 1 ENDIF", "P2SH,STRICTENC", "OK", "They are here to catch copy-and-paste errors"], -["0", "NOTIF 1 ENDIF", "P2SH,STRICTENC", "OK", "Most of them are duplicated elsewhere,"], -["1", "VERIFY 1", "P2SH,STRICTENC", "OK", "but, hey, more is always better, right?"], +["", "NOP 1", "", "OK", "The following tests check the if(stack.size() < N) tests in each opcode"], +["1", "IF 1 ENDIF", "", "OK", "They are here to catch copy-and-paste errors"], +["0", "NOTIF 1 ENDIF", "", "OK", "Most of them are duplicated elsewhere,"], +["1", "VERIFY 1", "", "OK", "but, hey, more is always better, right?"], -["0", "TOALTSTACK 1", "P2SH,STRICTENC", "OK"], -["1", "TOALTSTACK FROMALTSTACK", "P2SH,STRICTENC", "OK"], -["0 0", "2DROP 1", "P2SH,STRICTENC", "OK"], -["0 1", "2DUP", "P2SH,STRICTENC", "OK"], -["0 0 1", "3DUP", "P2SH,STRICTENC", "OK"], -["0 1 0 0", "2OVER", "P2SH,STRICTENC", "OK"], -["0 1 0 0 0 0", "2ROT", "P2SH,STRICTENC", "OK"], -["0 1 0 0", "2SWAP", "P2SH,STRICTENC", "OK"], -["1", "IFDUP", "P2SH,STRICTENC", "OK"], -["NOP", "DEPTH 1", "P2SH,STRICTENC", "OK"], -["0", "DROP 1", "P2SH,STRICTENC", "OK"], -["1", "DUP", "P2SH,STRICTENC", "OK"], -["0 1", "NIP", "P2SH,STRICTENC", "OK"], -["1 0", "OVER", "P2SH,STRICTENC", "OK"], -["1 0 0 0 3", "PICK", "P2SH,STRICTENC", "OK"], -["1 0", "PICK", "P2SH,STRICTENC", "OK"], -["1 0 0 0 3", "ROLL", "P2SH,STRICTENC", "OK"], -["1 0", "ROLL", "P2SH,STRICTENC", "OK"], -["1 0 0", "ROT", "P2SH,STRICTENC", "OK"], -["1 0", "SWAP", "P2SH,STRICTENC", "OK"], -["0 1", "TUCK", "P2SH,STRICTENC", "OK"], +["0", "TOALTSTACK 1", "", "OK"], +["1", "TOALTSTACK FROMALTSTACK", "", "OK"], +["0 0", "2DROP 1", "", "OK"], +["0 1", "2DUP VERIFY DROP DROP DROP TRUE", "", "OK"], +["0 0 1", "3DUP VERIFY DROP DROP DROP DROP DROP TRUE", "", "OK"], +["0 1 0 0", "2OVER VERIFY DROP DROP DROP DROP DROP TRUE", "", "OK"], +["0 1 0 0 0 0", "2ROT VERIFY DROP DROP DROP DROP DROP TRUE", "", "OK"], +["0 1 0 0", "2SWAP VERIFY DROP DROP DROP TRUE", "", "OK"], +["1", "IFDUP VERIFY", "", "OK"], +["", "DEPTH 1 VERIFY DROP TRUE", "", "OK"], +["0", "DROP 1", "", "OK"], +["1", "DUP VERIFY", "", "OK"], +["0 1", "NIP", "", "OK"], +["1 0", "OVER VERIFY DROP DROP TRUE", "", "OK"], +["1 0 0 0 3", "PICK VERIFY DROP DROP DROP DROP TRUE", "", "OK"], +["1 0", "PICK VERIFY DROP TRUE", "", "OK"], +["1 0 0 0 3", "ROLL VERIFY DROP DROP DROP TRUE", "", "OK"], +["1 0", "ROLL", "", "OK"], +["1 0 0", "ROT VERIFY DROP DROP TRUE", "", "OK"], +["1 0", "SWAP VERIFY DROP TRUE", "", "OK"], +["0 1", "TUCK VERIFY DROP DROP TRUE", "", "OK"], -["1", "SIZE", "P2SH,STRICTENC", "OK"], +["1", "SIZE VERIFY DROP TRUE", "", "OK"], -["0 0", "EQUAL", "P2SH,STRICTENC", "OK"], -["0 0", "EQUALVERIFY 1", "P2SH,STRICTENC", "OK"], -["0 0 1", "EQUAL EQUAL", "P2SH,STRICTENC", "OK", "OP_0 and bools must have identical byte representations"], +["0 0", "EQUAL", "", "OK"], +["0 0", "EQUALVERIFY 1", "", "OK"], +["0 0 1", "EQUAL EQUAL", "", "OK", "OP_0 and bools must have identical byte representations"], -["0", "1ADD", "P2SH,STRICTENC", "OK"], -["2", "1SUB", "P2SH,STRICTENC", "OK"], -["-1", "NEGATE", "P2SH,STRICTENC", "OK"], -["-1", "ABS", "P2SH,STRICTENC", "OK"], -["0", "NOT", "P2SH,STRICTENC", "OK"], -["-1", "0NOTEQUAL", "P2SH,STRICTENC", "OK"], +["0", "1ADD", "", "OK"], +["2", "1SUB", "", "OK"], +["-1", "NEGATE", "", "OK"], +["-1", "ABS", "", "OK"], +["0", "NOT", "", "OK"], +["-1", "0NOTEQUAL", "", "OK"], -["1 0", "ADD", "P2SH,STRICTENC", "OK"], -["1 0", "SUB", "P2SH,STRICTENC", "OK"], -["-1 -1", "BOOLAND", "P2SH,STRICTENC", "OK"], -["-1 0", "BOOLOR", "P2SH,STRICTENC", "OK"], -["0 0", "NUMEQUAL", "P2SH,STRICTENC", "OK"], -["0 0", "NUMEQUALVERIFY 1", "P2SH,STRICTENC", "OK"], -["-1 0", "NUMNOTEQUAL", "P2SH,STRICTENC", "OK"], -["-1 0", "LESSTHAN", "P2SH,STRICTENC", "OK"], -["1 0", "GREATERTHAN", "P2SH,STRICTENC", "OK"], -["0 0", "LESSTHANOREQUAL", "P2SH,STRICTENC", "OK"], -["0 0", "GREATERTHANOREQUAL", "P2SH,STRICTENC", "OK"], -["-1 0", "MIN", "P2SH,STRICTENC", "OK"], -["1 0", "MAX", "P2SH,STRICTENC", "OK"], -["-1 -1 0", "WITHIN", "P2SH,STRICTENC", "OK"], +["1 0", "ADD", "", "OK"], +["1 0", "SUB", "", "OK"], +["-1 -1", "BOOLAND", "", "OK"], +["-1 0", "BOOLOR", "", "OK"], +["0 0", "NUMEQUAL", "", "OK"], +["5 4", "NUMEQUAL FALSE EQUAL", "", "OK"], +["0 0", "NUMEQUALVERIFY 1", "", "OK"], +["-1 0", "NUMNOTEQUAL", "", "OK"], +["-1 0", "LESSTHAN", "", "OK"], +["1 0", "GREATERTHAN", "", "OK"], +["0 0", "LESSTHANOREQUAL", "", "OK"], +["0 0", "GREATERTHANOREQUAL", "", "OK"], +["-1 0", "MIN", "", "OK"], +["1 0", "MAX", "", "OK"], +["-1 -1 0", "WITHIN", "", "OK"], -["0", "RIPEMD160", "P2SH,STRICTENC", "OK"], -["0", "SHA1", "P2SH,STRICTENC", "OK"], -["0", "SHA256", "P2SH,STRICTENC", "OK"], -["0", "HASH160", "P2SH,STRICTENC", "OK"], -["0", "HASH256", "P2SH,STRICTENC", "OK"], +["0", "RIPEMD160", "", "OK"], +["0", "SHA1", "", "OK"], +["0", "SHA256", "", "OK"], +["0", "HASH160", "", "OK"], +["0", "HASH256", "", "OK"], -["NOP", "NOP1 1", "P2SH,STRICTENC", "OK"], -["NOP", "NOP2 1", "P2SH,STRICTENC", "OK"], -["NOP", "NOP3 1", "P2SH,STRICTENC", "OK"], -["NOP", "NOP4 1", "P2SH,STRICTENC", "OK"], -["NOP", "NOP5 1", "P2SH,STRICTENC", "OK"], -["NOP", "NOP6 1", "P2SH,STRICTENC", "OK"], -["NOP", "NOP7 1", "P2SH,STRICTENC", "OK"], -["NOP", "NOP8 1", "P2SH,STRICTENC", "OK"], -["NOP", "NOP9 1", "P2SH,STRICTENC", "OK"], -["NOP", "NOP10 1", "P2SH,STRICTENC", "OK"], +["", "NOP1 1", "", "OK"], +["", "NOP2 1", "", "OK"], +["", "NOP3 1", "", "OK"], +["", "NOP4 1", "", "OK"], +["", "NOP5 1", "", "OK"], +["", "NOP6 1", "", "OK"], +["", "NOP7 1", "", "OK"], +["", "NOP8 1", "", "OK"], +["", "NOP9 1", "", "OK"], +["", "NOP10 1", "", "OK"], -["", "0 0 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK", "CHECKMULTISIG is allowed to have zero keys and/or sigs"], -["", "0 0 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 0 1 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK", "Zero sigs means no sigs are checked"], -["", "0 0 1 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], +["", "0 0 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK", "CHECKMULTISIG is allowed to have zero keys and/or sigs"], +["", "0 0 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 0 1 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK", "Zero sigs means no sigs are checked"], +["", "0 0 1 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], -["", "0 0 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK", "CHECKMULTISIG is allowed to have zero keys and/or sigs"], -["", "0 0 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 0 1 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK", "Zero sigs means no sigs are checked"], -["", "0 0 1 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], +["", "0 0 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK", "CHECKMULTISIG is allowed to have zero keys and/or sigs"], +["", "0 0 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 0 1 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK", "Zero sigs means no sigs are checked"], +["", "0 0 1 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], -["", "0 'a' 'b' 2 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK", "Test from up to 20 pubkeys, all not checked"], -["", "0 'a' 'b' 'c' 3 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 4 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 5 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 6 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 7 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 8 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 9 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 10 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 11 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 12 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 13 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 14 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 15 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 16 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 17 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 18 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 19 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 1 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 2 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 3 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 4 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 5 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 6 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 7 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 8 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 9 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 10 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 11 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 12 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 13 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 14 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 15 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 16 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 17 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 18 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 19 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], -["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], - -["", -"0 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG", -"P2SH,STRICTENC", "OK", -"nOpCount is incremented by the number of keys evaluated in addition to the usual one op per op. In this case we have zero keys, so we can execute 201 CHECKMULTISIGS"], +["", "0 'a' 'b' 2 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK", "Test from up to 20 pubkeys, all not checked"], +["", "0 'a' 'b' 'c' 3 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 4 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 5 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 6 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 7 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 8 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 9 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 10 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 11 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 12 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 13 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 14 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 15 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 16 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 17 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 18 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 19 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 1 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 2 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 3 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 4 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 5 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 6 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 7 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 8 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 9 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 10 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 11 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 12 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 13 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 14 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 15 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 16 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 17 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 18 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 19 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], +["", "0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "", "OK"], ["1", "0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY", -"P2SH,STRICTENC", "OK"], +"", "OK", "nOpCount is incremented by the number of keys evaluated in addition to the usual one op per op. In this case we have zero keys, so we can execute 201 CHECKMULTISIGS"], ["", -"NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG", -"P2SH,STRICTENC", "OK", +"NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY DROP DROP DROP DROP DROP DROP DROP TRUE", +"", "OK", "Even though there are no signatures being checked nOpCount is incremented by the number of keys."], ["1", "NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY", -"P2SH,STRICTENC", "OK"], +"", "OK"], -["0 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "P2SH,STRICTENC", "OK", "Very basic P2SH"], -["0x4c 0 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "P2SH,STRICTENC", "OK"], +["0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "", "OK", "Very basic P2SH"], -["0x40 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242", -"0x4d 0x4000 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242 EQUAL", -"P2SH,STRICTENC", "OK", -"Basic PUSH signedness check"], - -["0x4c 0x40 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242", -"0x4d 0x4000 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242 EQUAL", -"P2SH,STRICTENC", "OK", -"Basic PUSHDATA1 signedness check"], - -["all PUSHDATA forms are equivalent"], - -["0x4c 0x4b 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "0x4b 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 EQUAL", "", "OK", "PUSHDATA1 of 75 bytes equals direct push of it"], -["0x4d 0xFF00 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "0x4c 0xFF 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 EQUAL", "", "OK", "PUSHDATA2 of 255 bytes equals PUSHDATA1 of it"], - -["0x00", "SIZE 0 EQUAL", "P2SH,STRICTENC", "OK", "Basic OP_0 execution"], +["0x00", "SIZE 0 EQUALVERIFY DROP TRUE", "", "OK", "Basic OP_0 execution"], ["Numeric pushes"], -["0x01 0x81", "0x4f EQUAL", "", "OK", "OP1_NEGATE pushes 0x81"], -["0x01 0x01", "0x51 EQUAL", "", "OK", "OP_1 pushes 0x01"], -["0x01 0x02", "0x52 EQUAL", "", "OK", "OP_2 pushes 0x02"], -["0x01 0x03", "0x53 EQUAL", "", "OK", "OP_3 pushes 0x03"], -["0x01 0x04", "0x54 EQUAL", "", "OK", "OP_4 pushes 0x04"], -["0x01 0x05", "0x55 EQUAL", "", "OK", "OP_5 pushes 0x05"], -["0x01 0x06", "0x56 EQUAL", "", "OK", "OP_6 pushes 0x06"], -["0x01 0x07", "0x57 EQUAL", "", "OK", "OP_7 pushes 0x07"], -["0x01 0x08", "0x58 EQUAL", "", "OK", "OP_8 pushes 0x08"], -["0x01 0x09", "0x59 EQUAL", "", "OK", "OP_9 pushes 0x09"], -["0x01 0x0a", "0x5a EQUAL", "", "OK", "OP_10 pushes 0x0a"], -["0x01 0x0b", "0x5b EQUAL", "", "OK", "OP_11 pushes 0x0b"], -["0x01 0x0c", "0x5c EQUAL", "", "OK", "OP_12 pushes 0x0c"], -["0x01 0x0d", "0x5d EQUAL", "", "OK", "OP_13 pushes 0x0d"], -["0x01 0x0e", "0x5e EQUAL", "", "OK", "OP_14 pushes 0x0e"], -["0x01 0x0f", "0x5f EQUAL", "", "OK", "OP_15 pushes 0x0f"], -["0x01 0x10", "0x60 EQUAL", "", "OK", "OP_16 pushes 0x10"], - -["Equivalency of different numeric encodings"], - -["0x02 0x8000", "128 NUMEQUAL", "", "OK", "0x8000 equals 128"], -["0x01 0x00", "0 NUMEQUAL", "", "OK", "0x00 numequals 0"], -["0x01 0x80", "0 NUMEQUAL", "", "OK", "0x80 (negative zero) numequals 0"], -["0x02 0x0080", "0 NUMEQUAL", "", "OK", "0x0080 numequals 0"], -["0x02 0x0500", "5 NUMEQUAL", "", "OK", "0x0500 numequals 5"], -["0x03 0xff7f80", "0x02 0xffff NUMEQUAL", "", "OK", ""], -["0x03 0xff7f00", "0x02 0xff7f NUMEQUAL", "", "OK", ""], -["0x04 0xffff7f80", "0x03 0xffffff NUMEQUAL", "", "OK", ""], -["0x04 0xffff7f00", "0x03 0xffff7f NUMEQUAL", "", "OK", ""], +["-1", "0x4f EQUAL", "", "OK", "OP1_NEGATE pushes 0x81"], +["1", "0x51 EQUAL", "", "OK", "OP_1 pushes 0x01"], +["2", "0x52 EQUAL", "", "OK", "OP_2 pushes 0x02"], +["3", "0x53 EQUAL", "", "OK", "OP_3 pushes 0x03"], +["4", "0x54 EQUAL", "", "OK", "OP_4 pushes 0x04"], +["5", "0x55 EQUAL", "", "OK", "OP_5 pushes 0x05"], +["6", "0x56 EQUAL", "", "OK", "OP_6 pushes 0x06"], +["7", "0x57 EQUAL", "", "OK", "OP_7 pushes 0x07"], +["8", "0x58 EQUAL", "", "OK", "OP_8 pushes 0x08"], +["9", "0x59 EQUAL", "", "OK", "OP_9 pushes 0x09"], +["10", "0x5a EQUAL", "", "OK", "OP_10 pushes 0x0a"], +["11", "0x5b EQUAL", "", "OK", "OP_11 pushes 0x0b"], +["12", "0x5c EQUAL", "", "OK", "OP_12 pushes 0x0c"], +["13", "0x5d EQUAL", "", "OK", "OP_13 pushes 0x0d"], +["14", "0x5e EQUAL", "", "OK", "OP_14 pushes 0x0e"], +["15", "0x5f EQUAL", "", "OK", "OP_15 pushes 0x0f"], +["16", "0x60 EQUAL", "", "OK", "OP_16 pushes 0x10"], ["Unevaluated non-minimal pushes are ignored"], -["0 IF 0x4c 0x00 ENDIF 1", "", "MINIMALDATA", "OK", "non-minimal PUSHDATA1 ignored"], -["0 IF 0x4d 0x0000 ENDIF 1", "", "MINIMALDATA", "OK", "non-minimal PUSHDATA2 ignored"], -["0 IF 0x4c 0x00000000 ENDIF 1", "", "MINIMALDATA", "OK", "non-minimal PUSHDATA4 ignored"], -["0 IF 0x01 0x81 ENDIF 1", "", "MINIMALDATA", "OK", "1NEGATE equiv"], -["0 IF 0x01 0x01 ENDIF 1", "", "MINIMALDATA", "OK", "OP_1 equiv"], -["0 IF 0x01 0x02 ENDIF 1", "", "MINIMALDATA", "OK", "OP_2 equiv"], -["0 IF 0x01 0x03 ENDIF 1", "", "MINIMALDATA", "OK", "OP_3 equiv"], -["0 IF 0x01 0x04 ENDIF 1", "", "MINIMALDATA", "OK", "OP_4 equiv"], -["0 IF 0x01 0x05 ENDIF 1", "", "MINIMALDATA", "OK", "OP_5 equiv"], -["0 IF 0x01 0x06 ENDIF 1", "", "MINIMALDATA", "OK", "OP_6 equiv"], -["0 IF 0x01 0x07 ENDIF 1", "", "MINIMALDATA", "OK", "OP_7 equiv"], -["0 IF 0x01 0x08 ENDIF 1", "", "MINIMALDATA", "OK", "OP_8 equiv"], -["0 IF 0x01 0x09 ENDIF 1", "", "MINIMALDATA", "OK", "OP_9 equiv"], -["0 IF 0x01 0x0a ENDIF 1", "", "MINIMALDATA", "OK", "OP_10 equiv"], -["0 IF 0x01 0x0b ENDIF 1", "", "MINIMALDATA", "OK", "OP_11 equiv"], -["0 IF 0x01 0x0c ENDIF 1", "", "MINIMALDATA", "OK", "OP_12 equiv"], -["0 IF 0x01 0x0d ENDIF 1", "", "MINIMALDATA", "OK", "OP_13 equiv"], -["0 IF 0x01 0x0e ENDIF 1", "", "MINIMALDATA", "OK", "OP_14 equiv"], -["0 IF 0x01 0x0f ENDIF 1", "", "MINIMALDATA", "OK", "OP_15 equiv"], -["0 IF 0x01 0x10 ENDIF 1", "", "MINIMALDATA", "OK", "OP_16 equiv"], +["0", "IF 0x4c 0x00 ENDIF 1 ", "", "OK", "non-minimal PUSHDATA1 ignored"], +["0", "IF 0x4d 0x0000 ENDIF 1 ", "", "OK", "non-minimal PUSHDATA2 ignored"], +["0", "IF 0x4c 0x00000000 ENDIF 1 ", "", "OK", "non-minimal PUSHDATA4 ignored"], +["0", "IF 0x01 0x81 ENDIF 1 ", "", "OK", "1NEGATE equiv"], +["0", "IF 0x01 0x01 ENDIF 1 ", "", "OK", "OP_1 equiv"], +["0", "IF 0x01 0x02 ENDIF 1 ", "", "OK", "OP_2 equiv"], +["0", "IF 0x01 0x03 ENDIF 1 ", "", "OK", "OP_3 equiv"], +["0", "IF 0x01 0x04 ENDIF 1 ", "", "OK", "OP_4 equiv"], +["0", "IF 0x01 0x05 ENDIF 1 ", "", "OK", "OP_5 equiv"], +["0", "IF 0x01 0x06 ENDIF 1 ", "", "OK", "OP_6 equiv"], +["0", "IF 0x01 0x07 ENDIF 1 ", "", "OK", "OP_7 equiv"], +["0", "IF 0x01 0x08 ENDIF 1 ", "", "OK", "OP_8 equiv"], +["0", "IF 0x01 0x09 ENDIF 1 ", "", "OK", "OP_9 equiv"], +["0", "IF 0x01 0x0a ENDIF 1 ", "", "OK", "OP_10 equiv"], +["0", "IF 0x01 0x0b ENDIF 1 ", "", "OK", "OP_11 equiv"], +["0", "IF 0x01 0x0c ENDIF 1 ", "", "OK", "OP_12 equiv"], +["0", "IF 0x01 0x0d ENDIF 1 ", "", "OK", "OP_13 equiv"], +["0", "IF 0x01 0x0e ENDIF 1 ", "", "OK", "OP_14 equiv"], +["0", "IF 0x01 0x0f ENDIF 1 ", "", "OK", "OP_15 equiv"], +["0", "IF 0x01 0x10 ENDIF 1 ", "", "OK", "OP_16 equiv"], ["Numeric minimaldata rules are only applied when a stack item is numerically evaluated; the push itself is allowed"], -["0x01 0x00", "1", "MINIMALDATA", "OK"], -["0x01 0x80", "1", "MINIMALDATA", "OK"], -["0x02 0x0180", "1", "MINIMALDATA", "OK"], -["0x02 0x0100", "1", "MINIMALDATA", "OK"], -["0x02 0x0200", "1", "MINIMALDATA", "OK"], -["0x02 0x0300", "1", "MINIMALDATA", "OK"], -["0x02 0x0400", "1", "MINIMALDATA", "OK"], -["0x02 0x0500", "1", "MINIMALDATA", "OK"], -["0x02 0x0600", "1", "MINIMALDATA", "OK"], -["0x02 0x0700", "1", "MINIMALDATA", "OK"], -["0x02 0x0800", "1", "MINIMALDATA", "OK"], -["0x02 0x0900", "1", "MINIMALDATA", "OK"], -["0x02 0x0a00", "1", "MINIMALDATA", "OK"], -["0x02 0x0b00", "1", "MINIMALDATA", "OK"], -["0x02 0x0c00", "1", "MINIMALDATA", "OK"], -["0x02 0x0d00", "1", "MINIMALDATA", "OK"], -["0x02 0x0e00", "1", "MINIMALDATA", "OK"], -["0x02 0x0f00", "1", "MINIMALDATA", "OK"], -["0x02 0x1000", "1", "MINIMALDATA", "OK"], +["0x01 0x00", "1 VERIFY DROP TRUE", "", "OK"], +["0x01 0x80", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0180", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0100", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0200", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0300", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0400", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0500", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0600", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0700", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0800", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0900", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0a00", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0b00", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0c00", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0d00", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0e00", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x0f00", "1 VERIFY DROP TRUE", "", "OK"], +["0x02 0x1000", "1 VERIFY DROP TRUE", "", "OK"], -["Valid version of the 'Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule' script_invalid test"], - -["1 0x02 0x0000", "PICK DROP", "", "OK"], -["1 0x02 0x0000", "ROLL DROP 1", "", "OK"], -["0x02 0x0000", "1ADD DROP 1", "", "OK"], -["0x02 0x0000", "1SUB DROP 1", "", "OK"], -["0x02 0x0000", "NEGATE DROP 1", "", "OK"], -["0x02 0x0000", "ABS DROP 1", "", "OK"], -["0x02 0x0000", "NOT DROP 1", "", "OK"], -["0x02 0x0000", "0NOTEQUAL DROP 1", "", "OK"], - -["0 0x02 0x0000", "ADD DROP 1", "", "OK"], -["0x02 0x0000 0", "ADD DROP 1", "", "OK"], -["0 0x02 0x0000", "SUB DROP 1", "", "OK"], -["0x02 0x0000 0", "SUB DROP 1", "", "OK"], -["0 0x02 0x0000", "BOOLAND DROP 1", "", "OK"], -["0x02 0x0000 0", "BOOLAND DROP 1", "", "OK"], -["0 0x02 0x0000", "BOOLOR DROP 1", "", "OK"], -["0x02 0x0000 0", "BOOLOR DROP 1", "", "OK"], -["0 0x02 0x0000", "NUMEQUAL DROP 1", "", "OK"], -["0x02 0x0000 1", "NUMEQUAL DROP 1", "", "OK"], -["0 0x02 0x0000", "NUMEQUALVERIFY 1", "", "OK"], -["0x02 0x0000 0", "NUMEQUALVERIFY 1", "", "OK"], -["0 0x02 0x0000", "NUMNOTEQUAL DROP 1", "", "OK"], -["0x02 0x0000 0", "NUMNOTEQUAL DROP 1", "", "OK"], -["0 0x02 0x0000", "LESSTHAN DROP 1", "", "OK"], -["0x02 0x0000 0", "LESSTHAN DROP 1", "", "OK"], -["0 0x02 0x0000", "GREATERTHAN DROP 1", "", "OK"], -["0x02 0x0000 0", "GREATERTHAN DROP 1", "", "OK"], -["0 0x02 0x0000", "LESSTHANOREQUAL DROP 1", "", "OK"], -["0x02 0x0000 0", "LESSTHANOREQUAL DROP 1", "", "OK"], -["0 0x02 0x0000", "GREATERTHANOREQUAL DROP 1", "", "OK"], -["0x02 0x0000 0", "GREATERTHANOREQUAL DROP 1", "", "OK"], -["0 0x02 0x0000", "MIN DROP 1", "", "OK"], -["0x02 0x0000 0", "MIN DROP 1", "", "OK"], -["0 0x02 0x0000", "MAX DROP 1", "", "OK"], -["0x02 0x0000 0", "MAX DROP 1", "", "OK"], - -["0x02 0x0000 0 0", "WITHIN DROP 1", "", "OK"], -["0 0x02 0x0000 0", "WITHIN DROP 1", "", "OK"], -["0 0 0x02 0x0000", "WITHIN DROP 1", "", "OK"], - -["0 0x02 0x0000", "CHECKMULTISIG DROP 1", "", "OK"], -["0x02 0x0000 0", "CHECKMULTISIG DROP 1", "", "OK"], -["0x02 0x0000 0 1", "CHECKMULTISIG DROP 1", "", "OK"], -["0 0x02 0x0000", "CHECKMULTISIGVERIFY 1", "", "OK"], -["0x02 0x0000 0", "CHECKMULTISIGVERIFY 1", "", "OK"], - -["While not really correctly DER encoded, the empty signature is allowed by"], -["STRICTENC to provide a compact way to provide a delibrately invalid signature."], -["0", "0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 CHECKSIG NOT", "STRICTENC", "OK"], -["0", "1 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 1 CHECKMULTISIG NOT", "STRICTENC", "OK"], - -["CHECKMULTISIG evaluation order tests. CHECKMULTISIG evaluates signatures and"], -["pubkeys in a specific order, and will exit early if the number of signatures"], -["left to check is greater than the number of keys left. As STRICTENC fails the"], -["script when it reaches an invalidly encoded signature or pubkey, we can use it"], -["to test the exact order in which signatures and pubkeys are evaluated by"], -["distinguishing CHECKMULTISIG returning false on the stack and the script as a"], -["whole failing."], -["See also the corresponding inverted versions of these tests in script_invalid.json"], -[ - "0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501 0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501", - "2 0 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 2 CHECKMULTISIG NOT", - "STRICTENC", "OK", - "2-of-2 CHECKMULTISIG NOT with the second pubkey invalid, and both signatures validly encoded. Valid pubkey fails, and CHECKMULTISIG exits early, prior to evaluation of second invalid pubkey." -], -[ - "0 0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501", - "2 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 2 CHECKMULTISIG NOT", - "STRICTENC", "OK", - "2-of-2 CHECKMULTISIG NOT with both pubkeys valid, but second signature invalid. Valid pubkey fails, and CHECKMULTISIG exits early, prior to evaluation of second invalid signature." -], +["While not really correctly DER encoded, the empty signature is allowed"], +["to provide a compact way to provide a delibrately invalid signature."], +["0", "0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 CHECKSIG NOT", "", "OK"], +["0", "1 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 1 CHECKMULTISIG NOT", "", "OK"], ["TRUE 2147483648", "CHECKSEQUENCEVERIFY", "", "OK", "CSV passes if stack top bit 1 << 31 is set"], -["", "DEPTH", "P2SH,STRICTENC", "EVAL_FALSE", "Test the test: we should have an empty stack after scriptSig evaluation"], -[" ", "DEPTH", "P2SH,STRICTENC", "EVAL_FALSE", "and multiple spaces should not change that."], -[" ", "DEPTH", "P2SH,STRICTENC", "EVAL_FALSE"], -[" ", "DEPTH", "P2SH,STRICTENC", "EVAL_FALSE"], +["", "DEPTH", "", "EVAL_FALSE", "Test the test: we should have an empty stack after scriptSig evaluation"], +[" ", "DEPTH", "", "EVAL_FALSE", "and multiple spaces should not change that."], +[" ", "DEPTH", "", "EVAL_FALSE"], +[" ", "DEPTH", "", "EVAL_FALSE"], -["", "", "P2SH,STRICTENC","EVAL_FALSE"], -["", "NOP", "P2SH,STRICTENC","EVAL_FALSE"], -["", "NOP DEPTH", "P2SH,STRICTENC", "EVAL_FALSE"], -["NOP", "", "P2SH,STRICTENC", "EVAL_FALSE"], -["NOP", "DEPTH", "P2SH,STRICTENC", "EVAL_FALSE"], -["NOP","NOP", "P2SH,STRICTENC", "EVAL_FALSE"], -["NOP","NOP DEPTH", "P2SH,STRICTENC", "EVAL_FALSE"], +["", "", "","EVAL_FALSE"], +["", "NOP", "","EVAL_FALSE"], +["", "NOP DEPTH", "", "EVAL_FALSE"], +["", "DEPTH", "", "EVAL_FALSE"], +["","NOP", "", "EVAL_FALSE"], +["","NOP DEPTH", "", "EVAL_FALSE"], -["DEPTH", "", "P2SH,STRICTENC", "EVAL_FALSE"], +["0x4c01","0x01 NOP", "","BAD_OPCODE", "PUSHDATA1 with not enough bytes"], +["0x4d0200ff","0x01 NOP", "","BAD_OPCODE", "PUSHDATA2 with not enough bytes"], +["0x4e03000000ffff","0x01 NOP", "","BAD_OPCODE", "PUSHDATA4 with not enough bytes"], -["0x4c01","0x01 NOP", "P2SH,STRICTENC","BAD_OPCODE", "PUSHDATA1 with not enough bytes"], -["0x4d0200ff","0x01 NOP", "P2SH,STRICTENC","BAD_OPCODE", "PUSHDATA2 with not enough bytes"], -["0x4e03000000ffff","0x01 NOP", "P2SH,STRICTENC","BAD_OPCODE", "PUSHDATA4 with not enough bytes"], +["1", "IF 0x50 ENDIF 1", "","BAD_OPCODE", "0x50 is reserved"], +["0x52", "0x5f ADD 0x60 EQUAL", "","EVAL_FALSE", "0x51 through 0x60 push 1 through 16 onto stack"], +["0","NOP", "","EVAL_FALSE",""], +["1", "IF VER ELSE 1 ENDIF", "", "BAD_OPCODE", "VER non-functional"], +["0", "IF VERIF ELSE 1 ENDIF", "", "BAD_OPCODE", "VERIF illegal everywhere"], +["0", "IF ELSE 1 ELSE VERIF ENDIF", "", "BAD_OPCODE", "VERIF illegal everywhere"], +["0", "IF VERNOTIF ELSE 1 ENDIF", "", "BAD_OPCODE", "VERNOTIF illegal everywhere"], +["0", "IF ELSE 1 ELSE VERNOTIF ENDIF", "", "BAD_OPCODE", "VERNOTIF illegal everywhere"], -["1", "IF 0x50 ENDIF 1", "P2SH,STRICTENC","BAD_OPCODE", "0x50 is reserved"], -["0x52", "0x5f ADD 0x60 EQUAL", "P2SH,STRICTENC","EVAL_FALSE", "0x51 through 0x60 push 1 through 16 onto stack"], -["0","NOP", "P2SH,STRICTENC","EVAL_FALSE",""], -["1", "IF VER ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE", "VER non-functional"], -["0", "IF VERIF ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE", "VERIF illegal everywhere"], -["0", "IF ELSE 1 ELSE VERIF ENDIF", "P2SH,STRICTENC", "BAD_OPCODE", "VERIF illegal everywhere"], -["0", "IF VERNOTIF ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE", "VERNOTIF illegal everywhere"], -["0", "IF ELSE 1 ELSE VERNOTIF ENDIF", "P2SH,STRICTENC", "BAD_OPCODE", "VERNOTIF illegal everywhere"], +["0", "DUP IF ENDIF", "", "EVAL_FALSE"], +["0", "IF 1 ENDIF", "", "EVAL_FALSE"], +["0", "DUP IF ELSE ENDIF", "", "EVAL_FALSE"], +["0", "IF 1 ELSE ENDIF", "", "EVAL_FALSE"], +["0", "NOTIF ELSE 1 ENDIF", "", "EVAL_FALSE"], -["1 IF", "1 ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "IF/ENDIF can't span scriptSig/scriptPubKey"], -["1 IF 0 ENDIF", "1 ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL"], -["1 ELSE 0 ENDIF", "1", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL"], -["0 NOTIF", "123", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL"], +["0 1", "IF IF 1 ELSE 0 ENDIF ENDIF", "", "EVAL_FALSE"], +["0 0", "IF IF 1 ELSE 0 ENDIF ENDIF", "", "EVAL_FALSE"], +["1 0", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "", "EVAL_FALSE"], +["0 1", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "", "EVAL_FALSE"], -["0", "DUP IF ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], -["0", "IF 1 ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], -["0", "DUP IF ELSE ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], -["0", "IF 1 ELSE ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], -["0", "NOTIF ELSE 1 ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], +["0 0", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "", "EVAL_FALSE"], +["0 1", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "", "EVAL_FALSE"], +["1 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "", "EVAL_FALSE"], +["0 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "", "EVAL_FALSE"], -["0 1", "IF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], -["0 0", "IF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], -["1 0", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], -["0 1", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], +["1", "IF RETURN ELSE ELSE 1 ENDIF", "", "OP_RETURN", "Multiple ELSEs"], +["1", "IF 1 ELSE ELSE RETURN ENDIF", "", "OP_RETURN"], -["0 0", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], -["0 1", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], -["1 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], -["0 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC", "EVAL_FALSE"], +["1", "ENDIF", "", "UNBALANCED_CONDITIONAL", "Malformed IF/ELSE/ENDIF sequence"], +["1", "ELSE ENDIF", "", "UNBALANCED_CONDITIONAL"], +["1", "ENDIF ELSE", "", "UNBALANCED_CONDITIONAL"], +["1", "ENDIF ELSE IF", "", "UNBALANCED_CONDITIONAL"], +["1", "IF ELSE ENDIF ELSE", "", "UNBALANCED_CONDITIONAL"], +["1", "IF ELSE ENDIF ELSE ENDIF", "", "UNBALANCED_CONDITIONAL"], +["1", "IF ENDIF ENDIF", "", "UNBALANCED_CONDITIONAL"], +["1", "IF ELSE ELSE ENDIF ENDIF", "", "UNBALANCED_CONDITIONAL"], -["1", "IF RETURN ELSE ELSE 1 ENDIF", "P2SH,STRICTENC", "OP_RETURN", "Multiple ELSEs"], -["1", "IF 1 ELSE ELSE RETURN ENDIF", "P2SH,STRICTENC", "OP_RETURN"], +["1", "RETURN", "", "OP_RETURN"], +["1", "DUP IF RETURN ENDIF", "", "OP_RETURN"], -["1", "ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "Malformed IF/ELSE/ENDIF sequence"], -["1", "ELSE ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL"], -["1", "ENDIF ELSE", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL"], -["1", "ENDIF ELSE IF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL"], -["1", "IF ELSE ENDIF ELSE", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL"], -["1", "IF ELSE ENDIF ELSE ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL"], -["1", "IF ENDIF ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL"], -["1", "IF ELSE ELSE ENDIF ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL"], +["1", "RETURN 'data'", "", "OP_RETURN", "canonical prunable txout format"], -["1", "RETURN", "P2SH,STRICTENC", "OP_RETURN"], -["1", "DUP IF RETURN ENDIF", "P2SH,STRICTENC", "OP_RETURN"], +["0", "VERIFY 1", "", "VERIFY"], +["1", "VERIFY", "", "EVAL_FALSE"], +["1", "VERIFY 0", "", "EVAL_FALSE"], -["1", "RETURN 'data'", "P2SH,STRICTENC", "OP_RETURN", "canonical prunable txout format"], -["0 IF", "RETURN ENDIF 1", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "still prunable because IF/ENDIF can't span scriptSig/scriptPubKey"], +["", "IFDUP DEPTH 0 EQUAL", "", "INVALID_STACK_OPERATION"], +["", "DROP DEPTH 0 EQUAL", "", "INVALID_STACK_OPERATION"], +["", "DUP DEPTH 0 EQUAL", "", "INVALID_STACK_OPERATION"], +["1", "DUP 1 ADD 2 EQUALVERIFY 0 EQUAL", "", "EVAL_FALSE"], +["", "NIP", "", "INVALID_STACK_OPERATION"], +["", "1 NIP", "", "INVALID_STACK_OPERATION"], +["", "1 0 NIP", "", "EVAL_FALSE"], +["", "OVER 1", "", "INVALID_STACK_OPERATION"], +["1", "OVER", "", "INVALID_STACK_OPERATION"], +["19 20 21", "PICK 19 EQUALVERIFY DEPTH 2 EQUAL", "", "INVALID_STACK_OPERATION"], +["", "0 PICK", "", "INVALID_STACK_OPERATION"], +["1", "-1 PICK", "", "INVALID_STACK_OPERATION"], +["19 20 21", "0 PICK 20 EQUALVERIFY DEPTH 3 EQUAL", "", "EQUALVERIFY"], +["19 20 21", "1 PICK 21 EQUALVERIFY DEPTH 3 EQUAL", "", "EQUALVERIFY"], +["19 20 21", "2 PICK 22 EQUALVERIFY DEPTH 3 EQUAL", "", "EQUALVERIFY"], +["", "0 ROLL", "", "INVALID_STACK_OPERATION"], +["1", "-1 ROLL", "", "INVALID_STACK_OPERATION"], +["19 20 21", "0 ROLL 20 EQUALVERIFY DEPTH 2 EQUAL", "", "EQUALVERIFY"], +["19 20 21", "1 ROLL 21 EQUALVERIFY DEPTH 2 EQUAL", "", "EQUALVERIFY"], +["19 20 21", "2 ROLL 22 EQUALVERIFY DEPTH 2 EQUAL", "", "EQUALVERIFY"], +["", "ROT 1", "", "INVALID_STACK_OPERATION"], +["", "1 ROT 1", "", "INVALID_STACK_OPERATION"], +["", "1 2 ROT 1", "", "INVALID_STACK_OPERATION"], +["", "SWAP 1", "", "INVALID_STACK_OPERATION"], +["1", "SWAP 1", "", "INVALID_STACK_OPERATION"], +["0 1", "SWAP 1 EQUALVERIFY", "", "EQUALVERIFY"], +["", "TUCK 1", "", "INVALID_STACK_OPERATION"], +["1", "TUCK 1", "", "INVALID_STACK_OPERATION"], +["1 0", "TUCK DEPTH 3 EQUALVERIFY SWAP 2DROP", "", "EVAL_FALSE"], +["", "2DUP 1", "", "INVALID_STACK_OPERATION"], +["1", "2DUP 1", "", "INVALID_STACK_OPERATION"], +["", "3DUP 1", "", "INVALID_STACK_OPERATION"], +["1", "3DUP 1", "", "INVALID_STACK_OPERATION"], +["1 2", "3DUP 1", "", "INVALID_STACK_OPERATION"], +["", "2OVER 1 VERIFY DROP DROP DROP DROP TRUE", "", "INVALID_STACK_OPERATION"], +["1", "2 3 2OVER 1", "", "INVALID_STACK_OPERATION"], +["", "2SWAP 1", "", "INVALID_STACK_OPERATION"], +["1", "2 3 2SWAP 1", "", "INVALID_STACK_OPERATION"], -["0", "VERIFY 1", "P2SH,STRICTENC", "VERIFY"], -["1", "VERIFY", "P2SH,STRICTENC", "EVAL_FALSE"], -["1", "VERIFY 0", "P2SH,STRICTENC", "EVAL_FALSE"], +["'a' 'b'", "CAT", "", "DISABLED_OPCODE", "CAT disabled"], +["'a' 'b' 0", "IF CAT ELSE 1 ENDIF", "", "DISABLED_OPCODE", "CAT disabled"], +["'abc' 1 1", "SUBSTR", "", "DISABLED_OPCODE", "SUBSTR disabled"], +["'abc' 1 1 0", "IF SUBSTR ELSE 1 ENDIF", "", "DISABLED_OPCODE", "SUBSTR disabled"], +["'abc' 2 0", "IF LEFT ELSE 1 ENDIF", "", "DISABLED_OPCODE", "LEFT disabled"], +["'abc' 2 0", "IF RIGHT ELSE 1 ENDIF", "", "DISABLED_OPCODE", "RIGHT disabled"], -["1 TOALTSTACK", "FROMALTSTACK 1", "P2SH,STRICTENC", "INVALID_ALTSTACK_OPERATION", "alt stack not shared between sig/pubkey"], +["", "SIZE 1", "", "INVALID_STACK_OPERATION"], -["IFDUP", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["DROP", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["DUP", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "DUP 1 ADD 2 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC", "EVAL_FALSE"], -["NOP", "NIP", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "1 NIP", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "1 0 NIP", "P2SH,STRICTENC", "EVAL_FALSE"], -["NOP", "OVER 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "OVER", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["0 1", "OVER DEPTH 3 EQUALVERIFY", "P2SH,STRICTENC", "EVAL_FALSE"], -["19 20 21", "PICK 19 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "0 PICK", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "-1 PICK", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["19 20 21", "0 PICK 20 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC", "EQUALVERIFY"], -["19 20 21", "1 PICK 21 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC", "EQUALVERIFY"], -["19 20 21", "2 PICK 22 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC", "EQUALVERIFY"], -["NOP", "0 ROLL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "-1 ROLL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["19 20 21", "0 ROLL 20 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC", "EQUALVERIFY"], -["19 20 21", "1 ROLL 21 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC", "EQUALVERIFY"], -["19 20 21", "2 ROLL 22 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC", "EQUALVERIFY"], -["NOP", "ROT 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "1 ROT 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "1 2 ROT 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "0 1 2 ROT", "P2SH,STRICTENC", "EVAL_FALSE"], -["NOP", "SWAP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "SWAP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["0 1", "SWAP 1 EQUALVERIFY", "P2SH,STRICTENC", "EQUALVERIFY"], -["NOP", "TUCK 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "TUCK 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1 0", "TUCK DEPTH 3 EQUALVERIFY SWAP 2DROP", "P2SH,STRICTENC", "EVAL_FALSE"], -["NOP", "2DUP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "2DUP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "3DUP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "3DUP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1 2", "3DUP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "2OVER 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "2 3 2OVER 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "2SWAP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "2 3 2SWAP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], +["", "NOP", "", "EMPTY_STACK", "Checks EMPTY_STACK error"], -["'a' 'b'", "CAT", "P2SH,STRICTENC", "DISABLED_OPCODE", "CAT disabled"], -["'a' 'b' 0", "IF CAT ELSE 1 ENDIF", "P2SH,STRICTENC", "DISABLED_OPCODE", "CAT disabled"], -["'abc' 1 1", "SUBSTR", "P2SH,STRICTENC", "DISABLED_OPCODE", "SUBSTR disabled"], -["'abc' 1 1 0", "IF SUBSTR ELSE 1 ENDIF", "P2SH,STRICTENC", "DISABLED_OPCODE", "SUBSTR disabled"], -["'abc' 2 0", "IF LEFT ELSE 1 ENDIF", "P2SH,STRICTENC", "DISABLED_OPCODE", "LEFT disabled"], -["'abc' 2 0", "IF RIGHT ELSE 1 ENDIF", "P2SH,STRICTENC", "DISABLED_OPCODE", "RIGHT disabled"], +["'abc'", "IF INVERT ELSE 1 ENDIF", "", "DISABLED_OPCODE", "INVERT disabled"], +["1 2 0", "IF AND ELSE 1 ENDIF NOP", "", "DISABLED_OPCODE", "AND disabled"], +["1 2 0", "IF OR ELSE 1 ENDIF NOP", "", "DISABLED_OPCODE", "OR disabled"], +["1 2 0", "IF XOR ELSE 1 ENDIF NOP", "", "DISABLED_OPCODE", "XOR disabled"], +["2 0", "IF 2MUL ELSE 1 ENDIF NOP", "", "DISABLED_OPCODE", "2MUL disabled"], +["2 0", "IF 2DIV ELSE 1 ENDIF NOP", "", "DISABLED_OPCODE", "2DIV disabled"], +["2 2 0", "IF MUL ELSE 1 ENDIF NOP", "", "DISABLED_OPCODE", "MUL disabled"], +["2 2 0", "IF DIV ELSE 1 ENDIF NOP", "", "DISABLED_OPCODE", "DIV disabled"], +["2 2 0", "IF MOD ELSE 1 ENDIF NOP", "", "DISABLED_OPCODE", "MOD disabled"], +["2 2 0", "IF LSHIFT ELSE 1 ENDIF NOP", "", "DISABLED_OPCODE", "LSHIFT disabled"], +["2 2 0", "IF RSHIFT ELSE 1 ENDIF NOP", "", "DISABLED_OPCODE", "RSHIFT disabled"], -["NOP", "SIZE 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], +["", "EQUAL NOT", "", "INVALID_STACK_OPERATION", "EQUAL must error when there are no stack items"], +["0", "EQUAL NOT", "", "INVALID_STACK_OPERATION", "EQUAL must error when there are not 2 stack items"], +["0 1","EQUAL", "", "EVAL_FALSE"], +["1 1", "ADD 0 EQUAL", "", "EVAL_FALSE"], +["11 1", "ADD 12 SUB 11 EQUAL", "", "EVAL_FALSE"], -["'abc'", "IF INVERT ELSE 1 ENDIF", "P2SH,STRICTENC", "DISABLED_OPCODE", "INVERT disabled"], -["1 2 0 IF AND ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DISABLED_OPCODE", "AND disabled"], -["1 2 0 IF OR ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DISABLED_OPCODE", "OR disabled"], -["1 2 0 IF XOR ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DISABLED_OPCODE", "XOR disabled"], -["2 0 IF 2MUL ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DISABLED_OPCODE", "2MUL disabled"], -["2 0 IF 2DIV ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DISABLED_OPCODE", "2DIV disabled"], -["2 2 0 IF MUL ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DISABLED_OPCODE", "MUL disabled"], -["2 2 0 IF DIV ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DISABLED_OPCODE", "DIV disabled"], -["2 2 0 IF MOD ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DISABLED_OPCODE", "MOD disabled"], -["2 2 0 IF LSHIFT ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DISABLED_OPCODE", "LSHIFT disabled"], -["2 2 0 IF RSHIFT ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DISABLED_OPCODE", "RSHIFT disabled"], +["2147483648 0", "ADD NOP", "", "UNKNOWN_ERROR", "arithmetic operands must be in range [-2^31...2^31] "], +["-2147483648 0", "ADD NOP", "", "UNKNOWN_ERROR", "arithmetic operands must be in range [-2^31...2^31] "], +["2147483647", "DUP ADD 4294967294 NUMEQUAL", "", "UNKNOWN_ERROR", "NUMEQUAL must be in numeric range"], +["'abcdef'", "NOT 0 EQUAL", "", "UNKNOWN_ERROR", "NOT is an arithmetic operand"], -["", "EQUAL NOT", "P2SH,STRICTENC", "INVALID_STACK_OPERATION", "EQUAL must error when there are no stack items"], -["0", "EQUAL NOT", "P2SH,STRICTENC", "INVALID_STACK_OPERATION", "EQUAL must error when there are not 2 stack items"], -["0 1","EQUAL", "P2SH,STRICTENC", "EVAL_FALSE"], -["1 1 ADD", "0 EQUAL", "P2SH,STRICTENC", "EVAL_FALSE"], -["11 1 ADD 12 SUB", "11 EQUAL", "P2SH,STRICTENC", "EVAL_FALSE"], +["2", "DUP MUL 4 EQUAL", "", "DISABLED_OPCODE", "disabled"], +["2", "DUP DIV 1 EQUAL", "", "DISABLED_OPCODE", "disabled"], +["2", "2MUL 4 EQUAL", "", "DISABLED_OPCODE", "disabled"], +["2", "2DIV 1 EQUAL", "", "DISABLED_OPCODE", "disabled"], +["7 3", "MOD 1 EQUAL", "", "DISABLED_OPCODE", "disabled"], +["2 2", "LSHIFT 8 EQUAL", "", "DISABLED_OPCODE", "disabled"], +["2 1", "RSHIFT 1 EQUAL", "", "DISABLED_OPCODE", "disabled"], -["2147483648 0 ADD", "NOP", "P2SH,STRICTENC", "UNKNOWN_ERROR", "arithmetic operands must be in range [-2^31...2^31] "], -["-2147483648 0 ADD", "NOP", "P2SH,STRICTENC", "UNKNOWN_ERROR", "arithmetic operands must be in range [-2^31...2^31] "], -["2147483647 DUP ADD", "4294967294 NUMEQUAL", "P2SH,STRICTENC", "UNKNOWN_ERROR", "NUMEQUAL must be in numeric range"], -["'abcdef' NOT", "0 EQUAL", "P2SH,STRICTENC", "UNKNOWN_ERROR", "NOT is an arithmetic operand"], - -["2 DUP MUL", "4 EQUAL", "P2SH,STRICTENC", "DISABLED_OPCODE", "disabled"], -["2 DUP DIV", "1 EQUAL", "P2SH,STRICTENC", "DISABLED_OPCODE", "disabled"], -["2 2MUL", "4 EQUAL", "P2SH,STRICTENC", "DISABLED_OPCODE", "disabled"], -["2 2DIV", "1 EQUAL", "P2SH,STRICTENC", "DISABLED_OPCODE", "disabled"], -["7 3 MOD", "1 EQUAL", "P2SH,STRICTENC", "DISABLED_OPCODE", "disabled"], -["2 2 LSHIFT", "8 EQUAL", "P2SH,STRICTENC", "DISABLED_OPCODE", "disabled"], -["2 1 RSHIFT", "1 EQUAL", "P2SH,STRICTENC", "DISABLED_OPCODE", "disabled"], - -["1", "NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 2 EQUAL", "P2SH,STRICTENC", "EVAL_FALSE"], -["'NOP_1_to_10' NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10","'NOP_1_to_11' EQUAL", "P2SH,STRICTENC", "EVAL_FALSE"], +["1", "NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 2 EQUAL", "", "EVAL_FALSE"], +["'NOP_1_to_10'","NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 'NOP_1_to_11' EQUAL", "", "EVAL_FALSE"], ["Ensure 100% coverage of discouraged NOPS"], -["1", "NOP1", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], -["1", "NOP2", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], -["1", "NOP3", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], -["1", "NOP4", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], -["1", "NOP5", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], -["1", "NOP6", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], -["1", "NOP7", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], -["1", "NOP8", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], -["1", "NOP9", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], -["1", "NOP10", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], - -["NOP10", "1", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS", "Discouraged NOP10 in scriptSig"], +["1", "NOP1", "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], +["1", "NOP2", "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], +["1", "NOP3", "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], +["1", "NOP4", "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], +["1", "NOP5", "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], +["1", "NOP6", "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], +["1", "NOP7", "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], +["1", "NOP8", "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], +["1", "NOP9", "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], +["1", "NOP10", "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS"], ["1 0x01 0xbb", "HASH160 0x14 0x6b598ec091379f3d1a7f0532738e86accc36dc9f EQUAL", - "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS", "Discouraged NOP10 in redeemScript"], + "DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS", "Discouraged NOP10 in redeemScript"], -["0x50","1", "P2SH,STRICTENC", "BAD_OPCODE", "opcode 0x50 is reserved"], -["1", "IF 0xbc ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE", "opcodes above NOP10 invalid if executed"], -["1", "IF 0xbd ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xbe ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xbf ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xc0 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xc1 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xc2 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xc3 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xc4 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xc5 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xc6 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xc7 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xc8 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xc9 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xca ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xcb ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xcc ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xcd ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xce ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xcf ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xd0 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xd1 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xd2 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xd3 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xd4 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xd5 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xd6 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xd7 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xd8 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xd9 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xda ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xdb ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xdc ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xdd ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xde ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xdf ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xe0 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xe1 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xe2 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xe3 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xe4 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xe5 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xe6 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xe7 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xe8 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xe9 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xea ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xeb ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xec ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xed ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xee ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xef ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xf0 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xf1 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xf2 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xf3 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xf4 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xf5 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xf6 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xf7 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xf8 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xf9 ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xfa ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xfb ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xfc ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xfd ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xfe ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF 0xff ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], +["0x50","1", "", "BAD_OPCODE", "opcode 0x50 is reserved"], +["1", "IF 0xbc ELSE 1 ENDIF", "", "BAD_OPCODE", "opcodes above NOP10 invalid if executed"], +["1", "IF 0xbd ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xbe ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xbf ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xc0 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xc1 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xc2 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xc3 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xc4 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xc5 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xc6 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xc7 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xc8 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xc9 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xca ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xcb ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xcc ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xcd ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xce ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xcf ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xd0 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xd1 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xd2 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xd3 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xd4 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xd5 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xd6 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xd7 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xd8 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xd9 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xda ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xdb ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xdc ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xdd ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xde ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xdf ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xe0 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xe1 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xe2 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xe3 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xe4 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xe5 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xe6 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xe7 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xe8 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xe9 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xea ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xeb ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xec ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xed ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xee ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xef ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xf0 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xf1 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xf2 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xf3 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xf4 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xf5 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xf6 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xf7 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xf8 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xf9 ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xfa ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xfb ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xfc ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xfd ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xfe ELSE 1 ENDIF", "", "BAD_OPCODE"], +["1", "IF 0xff ELSE 1 ENDIF", "", "BAD_OPCODE"], -["1 IF 1 ELSE", "0xff ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "invalid because scriptSig and scriptPubKey are processed separately"], +["", "RIPEMD160", "", "INVALID_STACK_OPERATION"], +["", "SHA1", "", "INVALID_STACK_OPERATION"], +["", "SHA256", "", "INVALID_STACK_OPERATION"], +["", "HASH160", "", "INVALID_STACK_OPERATION"], +["", "HASH256", "", "INVALID_STACK_OPERATION"], -["NOP", "RIPEMD160", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "SHA1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "SHA256", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "HASH160", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "HASH256", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], - -["NOP", +["", "'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'", -"P2SH,STRICTENC", +"", "PUSH_SIZE", ">520 byte push"], ["0", "IF 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' ENDIF 1", -"P2SH,STRICTENC", +"", "PUSH_SIZE", ">520 byte push in non-executed IF branch"], ["1", "0x61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", -"P2SH,STRICTENC", +"", "OP_COUNT", ">201 opcodes executed. 0x61 is NOP"], ["0", "IF 0x6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 ENDIF 1", -"P2SH,STRICTENC", +"", "OP_COUNT", ">201 opcodes including non-executed IF branch. 0x61 is NOP"], -["1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +["", "1 2 3 4 5 6 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", -"P2SH,STRICTENC", +"", "STACK_SIZE", -">1,000 stack size (0x6f is 3DUP)"], -["1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", -"1 TOALTSTACK 2 TOALTSTACK 3 4 5 6 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", -"P2SH,STRICTENC", +">244 stack size (0x6f is 3DUP)"], +["", +"1 TOALTSTACK 2 TOALTSTACK 3 4 5 6 7 8 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +"", "STACK_SIZE", -">1,000 stack+altstack size"], -["NOP", +">244 stack+altstack size"], +["", "0 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f 2DUP 0x616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", -"P2SH,STRICTENC", +"", "SCRIPT_SIZE", "10,001-byte scriptPubKey"], -["NOP1","NOP10", "P2SH,STRICTENC", "EVAL_FALSE"], +["","NOP1 NOP10", "", "EVAL_FALSE"], -["1","VER", "P2SH,STRICTENC", "BAD_OPCODE", "OP_VER is reserved"], -["1","VERIF", "P2SH,STRICTENC", "BAD_OPCODE", "OP_VERIF is reserved"], -["1","VERNOTIF", "P2SH,STRICTENC", "BAD_OPCODE", "OP_VERNOTIF is reserved"], -["1","RESERVED", "P2SH,STRICTENC", "BAD_OPCODE", "OP_RESERVED is reserved"], -["1","RESERVED1", "P2SH,STRICTENC", "BAD_OPCODE", "OP_RESERVED1 is reserved"], -["1","RESERVED2", "P2SH,STRICTENC", "BAD_OPCODE", "OP_RESERVED2 is reserved"], -["1","0xbc", "P2SH,STRICTENC", "BAD_OPCODE", "0xbc == OP_NOP10 + 1"], +["1","VER", "", "BAD_OPCODE", "OP_VER is reserved"], +["1","VERIF", "", "BAD_OPCODE", "OP_VERIF is reserved"], +["1","VERNOTIF", "", "BAD_OPCODE", "OP_VERNOTIF is reserved"], +["1","RESERVED", "", "BAD_OPCODE", "OP_RESERVED is reserved"], +["1","RESERVED1", "", "BAD_OPCODE", "OP_RESERVED1 is reserved"], +["1","RESERVED2", "", "BAD_OPCODE", "OP_RESERVED2 is reserved"], +["1","0xbc", "", "BAD_OPCODE", "0xbc == OP_NOP10 + 1"], -["2147483648", "1ADD 1", "P2SH,STRICTENC", "UNKNOWN_ERROR", "We cannot do math on 5-byte integers"], -["2147483648", "NEGATE 1", "P2SH,STRICTENC", "UNKNOWN_ERROR", "We cannot do math on 5-byte integers"], -["-2147483648", "1ADD 1", "P2SH,STRICTENC", "UNKNOWN_ERROR", "Because we use a sign bit, -2147483648 is also 5 bytes"], -["2147483647", "1ADD 1SUB 1", "P2SH,STRICTENC", "UNKNOWN_ERROR", "We cannot do math on 5-byte integers, even if the result is 4-bytes"], -["2147483648", "1SUB 1", "P2SH,STRICTENC", "UNKNOWN_ERROR", "We cannot do math on 5-byte integers, even if the result is 4-bytes"], +["2147483648", "1ADD 1", "", "UNKNOWN_ERROR", "We cannot do math on 5-byte integers"], +["2147483648", "NEGATE 1", "", "UNKNOWN_ERROR", "We cannot do math on 5-byte integers"], +["-2147483648", "1ADD 1", "", "UNKNOWN_ERROR", "Because we use a sign bit, -2147483648 is also 5 bytes"], +["2147483647", "1ADD 1SUB 1", "", "UNKNOWN_ERROR", "We cannot do math on 5-byte integers, even if the result is 4-bytes"], +["2147483648", "1SUB 1", "", "UNKNOWN_ERROR", "We cannot do math on 5-byte integers, even if the result is 4-bytes"], -["2147483648 1", "BOOLOR 1", "P2SH,STRICTENC", "UNKNOWN_ERROR", "We cannot do BOOLOR on 5-byte integers (but we can still do IF etc)"], -["2147483648 1", "BOOLAND 1", "P2SH,STRICTENC", "UNKNOWN_ERROR", "We cannot do BOOLAND on 5-byte integers"], +["2147483648 1", "BOOLOR 1", "", "UNKNOWN_ERROR", "We cannot do BOOLOR on 5-byte integers (but we can still do IF etc)"], +["2147483648 1", "BOOLAND 1", "", "UNKNOWN_ERROR", "We cannot do BOOLAND on 5-byte integers"], -["1", "1 ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "ENDIF without IF"], -["1", "IF 1", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "IF without ENDIF"], -["1 IF 1", "ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "IFs don't carry over"], +["1", "1 ENDIF", "", "UNBALANCED_CONDITIONAL", "ENDIF without IF"], +["1", "IF 1", "", "UNBALANCED_CONDITIONAL", "IF without ENDIF"], -["NOP", "IF 1 ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "The following tests check the if(stack.size() < N) tests in each opcode"], -["NOP", "NOTIF 1 ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "They are here to catch copy-and-paste errors"], -["NOP", "VERIFY 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION", "Most of them are duplicated elsewhere,"], +["", "IF 1 ENDIF", "", "UNBALANCED_CONDITIONAL", "The following tests check the if(stack.size() < N) tests in each opcode"], +["", "NOTIF 1 ENDIF", "", "UNBALANCED_CONDITIONAL", "They are here to catch copy-and-paste errors"], +["", "VERIFY 1", "", "INVALID_STACK_OPERATION", "Most of them are duplicated elsewhere,"], -["NOP", "TOALTSTACK 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION", "but, hey, more is always better, right?"], -["1", "FROMALTSTACK", "P2SH,STRICTENC", "INVALID_ALTSTACK_OPERATION"], -["1", "2DROP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "2DUP", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1 1", "3DUP", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1 1 1", "2OVER", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1 1 1 1 1", "2ROT", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1 1 1", "2SWAP", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "IFDUP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "DROP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "DUP 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "NIP", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "OVER", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1 1 1 3", "PICK", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["0", "PICK 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1 1 1 3", "ROLL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["0", "ROLL 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1 1", "ROT", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "SWAP", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "TUCK", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], +["", "TOALTSTACK 1", "", "INVALID_STACK_OPERATION", "but, hey, more is always better, right?"], +["1", "FROMALTSTACK", "", "INVALID_ALTSTACK_OPERATION"], +["1", "2DROP 1", "", "INVALID_STACK_OPERATION"], +["1", "2DUP", "", "INVALID_STACK_OPERATION"], +["1 1", "3DUP", "", "INVALID_STACK_OPERATION"], +["1 1 1", "2OVER", "", "INVALID_STACK_OPERATION"], +["1 1 1 1 1", "2ROT", "", "INVALID_STACK_OPERATION"], +["1 1 1", "2SWAP", "", "INVALID_STACK_OPERATION"], +["", "IFDUP 1", "", "INVALID_STACK_OPERATION"], +["", "DROP 1", "", "INVALID_STACK_OPERATION"], +["", "DUP 1", "", "INVALID_STACK_OPERATION"], +["1", "NIP", "", "INVALID_STACK_OPERATION"], +["1", "OVER", "", "INVALID_STACK_OPERATION"], +["1 1 1 3", "PICK", "", "INVALID_STACK_OPERATION"], +["0", "PICK 1", "", "INVALID_STACK_OPERATION"], +["1 1 1 3", "ROLL", "", "INVALID_STACK_OPERATION"], +["0", "ROLL 1", "", "INVALID_STACK_OPERATION"], +["1 1", "ROT", "", "INVALID_STACK_OPERATION"], +["1", "SWAP", "", "INVALID_STACK_OPERATION"], +["1", "TUCK", "", "INVALID_STACK_OPERATION"], -["NOP", "SIZE 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], +["", "SIZE 1", "", "INVALID_STACK_OPERATION"], -["1", "EQUAL 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "EQUALVERIFY 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], +["1", "EQUAL 1", "", "INVALID_STACK_OPERATION"], +["1", "EQUALVERIFY 1", "", "INVALID_STACK_OPERATION"], -["NOP", "1ADD 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "1SUB 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "NEGATE 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "ABS 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "NOT 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "0NOTEQUAL 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], +["", "1ADD 1", "", "INVALID_STACK_OPERATION"], +["", "1SUB 1", "", "INVALID_STACK_OPERATION"], +["", "NEGATE 1", "", "INVALID_STACK_OPERATION"], +["", "ABS 1", "", "INVALID_STACK_OPERATION"], +["", "NOT 1", "", "INVALID_STACK_OPERATION"], +["", "0NOTEQUAL 1", "", "INVALID_STACK_OPERATION"], -["1", "ADD", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "SUB", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "BOOLAND", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "BOOLOR", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "NUMEQUAL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "NUMEQUALVERIFY 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "NUMNOTEQUAL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "LESSTHAN", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "GREATERTHAN", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "LESSTHANOREQUAL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "GREATERTHANOREQUAL", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "MIN", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1", "MAX", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["1 1", "WITHIN", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], +["1", "ADD", "", "INVALID_STACK_OPERATION"], +["1", "SUB", "", "INVALID_STACK_OPERATION"], +["1", "BOOLAND", "", "INVALID_STACK_OPERATION"], +["1", "BOOLOR", "", "INVALID_STACK_OPERATION"], +["1", "NUMEQUAL", "", "INVALID_STACK_OPERATION"], +["1", "NUMEQUALVERIFY 1", "", "INVALID_STACK_OPERATION"], +["1", "NUMNOTEQUAL", "", "INVALID_STACK_OPERATION"], +["1", "LESSTHAN", "", "INVALID_STACK_OPERATION"], +["1", "GREATERTHAN", "", "INVALID_STACK_OPERATION"], +["1", "LESSTHANOREQUAL", "", "INVALID_STACK_OPERATION"], +["1", "GREATERTHANOREQUAL", "", "INVALID_STACK_OPERATION"], +["1", "MIN", "", "INVALID_STACK_OPERATION"], +["1", "MAX", "", "INVALID_STACK_OPERATION"], +["1 1", "WITHIN", "", "INVALID_STACK_OPERATION"], -["NOP", "RIPEMD160 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "SHA1 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "SHA256 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "HASH160 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], -["NOP", "HASH256 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION"], +["", "RIPEMD160 1", "", "INVALID_STACK_OPERATION"], +["", "SHA1 1", "", "INVALID_STACK_OPERATION"], +["", "SHA256 1", "", "INVALID_STACK_OPERATION"], +["", "HASH160 1", "", "INVALID_STACK_OPERATION"], +["", "HASH256 1", "", "INVALID_STACK_OPERATION"], ["Increase CHECKSIG and CHECKMULTISIG negative test coverage"], -["", "CHECKSIG NOT", "STRICTENC", "INVALID_STACK_OPERATION", "CHECKSIG must error when there are no stack items"], -["0", "CHECKSIG NOT", "STRICTENC", "INVALID_STACK_OPERATION", "CHECKSIG must error when there are not 2 stack items"], -["", "CHECKMULTISIG NOT", "STRICTENC", "INVALID_STACK_OPERATION", "CHECKMULTISIG must error when there are no stack items"], -["", "-1 CHECKMULTISIG NOT", "STRICTENC", "PUBKEY_COUNT", "CHECKMULTISIG must error when the specified number of pubkeys is negative"], -["", "1 CHECKMULTISIG NOT", "STRICTENC", "INVALID_STACK_OPERATION", "CHECKMULTISIG must error when there are not enough pubkeys on the stack"], -["", "-1 0 CHECKMULTISIG NOT", "STRICTENC", "SIG_COUNT", "CHECKMULTISIG must error when the specified number of signatures is negative"], -["", "1 'pk1' 1 CHECKMULTISIG NOT", "STRICTENC", "INVALID_STACK_OPERATION", "CHECKMULTISIG must error when there are not enough signatures on the stack"], +["", "CHECKSIG NOT", "", "INVALID_STACK_OPERATION", "CHECKSIG must error when there are no stack items"], +["0", "CHECKSIG NOT", "", "INVALID_STACK_OPERATION", "CHECKSIG must error when there are not 2 stack items"], +["", "CHECKMULTISIG NOT", "", "INVALID_STACK_OPERATION", "CHECKMULTISIG must error when there are no stack items"], +["", "-1 CHECKMULTISIG NOT", "", "PUBKEY_COUNT", "CHECKMULTISIG must error when the specified number of pubkeys is negative"], +["", "1 CHECKMULTISIG NOT", "", "INVALID_STACK_OPERATION", "CHECKMULTISIG must error when there are not enough pubkeys on the stack"], +["", "-1 0 CHECKMULTISIG NOT", "", "SIG_COUNT", "CHECKMULTISIG must error when the specified number of signatures is negative"], +["", "1 'pk1' 1 CHECKMULTISIG NOT", "", "INVALID_STACK_OPERATION", "CHECKMULTISIG must error when there are not enough signatures on the stack"], ["", "0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG", -"P2SH,STRICTENC", +"", "OP_COUNT", "202 CHECKMULTISIGS, fails due to 201 op limit"], ["", "NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG", -"P2SH,STRICTENC", +"", "OP_COUNT", "Fails due to 201 script operation limit"], ["1", "NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY", -"P2SH,STRICTENC", +"", "OP_COUNT", ""], -["0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21", "21 CHECKMULTISIG 1", "P2SH,STRICTENC", "PUBKEY_COUNT", "nPubKeys > 20"], -["0 'sig' 1 0", "CHECKMULTISIG 1", "P2SH,STRICTENC", "SIG_COUNT", "nSigs > nPubKeys"], +["0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21", "21 CHECKMULTISIG 1", "", "PUBKEY_COUNT", "nPubKeys > 20"], +["0 'sig' 1 0", "CHECKMULTISIG 1", "", "SIG_COUNT", "nSigs > nPubKeys"], -["NOP 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "P2SH,STRICTENC", "SIG_PUSHONLY", "Tests for Script.IsPushOnly()"], -["NOP1 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "P2SH,STRICTENC", "SIG_PUSHONLY"], +["NOP 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "", "SIG_PUSHONLY", "Tests for Script.IsPushOnly()"], +["NOP1 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "", "SIG_PUSHONLY"], -["0 0x01 0x50", "HASH160 0x14 0xece424a6bb6ddf4db592c0faed60685047a361b1 EQUAL", "P2SH,STRICTENC", "BAD_OPCODE", "OP_RESERVED in P2SH should fail"], -["0 0x01 VER", "HASH160 0x14 0x0f4d7845db968f2a81b530b6f3c1d6246d4c7e01 EQUAL", "P2SH,STRICTENC", "BAD_OPCODE", "OP_VER in P2SH should fail"], +["0 0x01 0x50", "HASH160 0x14 0xece424a6bb6ddf4db592c0faed60685047a361b1 EQUAL", "", "BAD_OPCODE", "OP_RESERVED in P2SH should fail"], +["0 0x01", "VER HASH160 0x14 0x0f4d7845db968f2a81b530b6f3c1d6246d4c7e01 EQUAL", "", "BAD_OPCODE", "OP_VER in P2SH should fail"], -["0x00", "'00' EQUAL", "P2SH,STRICTENC", "EVAL_FALSE", "Basic OP_0 execution"], +["0x00", "'00' EQUAL", "", "EVAL_FALSE", "Basic OP_0 execution"], ["MINIMALDATA enforcement for PUSHDATAs"], -["0x4c 0x00", "DROP 1", "MINIMALDATA", "MINIMALDATA", "Empty vector minimally represented by OP_0"], -["0x01 0x81", "DROP 1", "MINIMALDATA", "MINIMALDATA", "-1 minimally represented by OP_1NEGATE"], -["0x01 0x01", "DROP 1", "MINIMALDATA", "MINIMALDATA", "1 to 16 minimally represented by OP_1 to OP_16"], -["0x01 0x02", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x03", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x04", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x05", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x06", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x07", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x08", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x09", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x0a", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x0b", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x0c", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x0d", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x0e", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x0f", "DROP 1", "MINIMALDATA", "MINIMALDATA"], -["0x01 0x10", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["0x4c 0x00", "DROP 1", "", "MINIMALDATA", "Empty vector minimally represented by OP_0"], +["0x01 0x81", "DROP 1", "", "MINIMALDATA", "-1 minimally represented by OP_1NEGATE"], +["0x01 0x01", "DROP 1", "", "MINIMALDATA", "1 to 16 minimally represented by OP_1 to OP_16"], +["0x01 0x02", "DROP 1", "", "MINIMALDATA"], +["0x01 0x03", "DROP 1", "", "MINIMALDATA"], +["0x01 0x04", "DROP 1", "", "MINIMALDATA"], +["0x01 0x05", "DROP 1", "", "MINIMALDATA"], +["0x01 0x06", "DROP 1", "", "MINIMALDATA"], +["0x01 0x07", "DROP 1", "", "MINIMALDATA"], +["0x01 0x08", "DROP 1", "", "MINIMALDATA"], +["0x01 0x09", "DROP 1", "", "MINIMALDATA"], +["0x01 0x0a", "DROP 1", "", "MINIMALDATA"], +["0x01 0x0b", "DROP 1", "", "MINIMALDATA"], +["0x01 0x0c", "DROP 1", "", "MINIMALDATA"], +["0x01 0x0d", "DROP 1", "", "MINIMALDATA"], +["0x01 0x0e", "DROP 1", "", "MINIMALDATA"], +["0x01 0x0f", "DROP 1", "", "MINIMALDATA"], +["0x01 0x10", "DROP 1", "", "MINIMALDATA"], -["0x4c 0x48 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA", +["0x4c 0x48 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "", "MINIMALDATA", "PUSHDATA1 of 72 bytes minimally represented by direct push"], -["0x4d 0xFF00 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA", +["0x4d 0xFF00 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "", "MINIMALDATA", "PUSHDATA2 of 255 bytes minimally represented by PUSHDATA1"], -["0x4e 0x00010000 0x11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA", +["0x4e 0x00010000 0x11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "", "MINIMALDATA", "PUSHDATA4 of 256 bytes minimally represented by PUSHDATA2"], ["MINIMALDATA enforcement for numeric arguments"], -["0x01 0x00", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "numequals 0"], -["0x02 0x0000", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "numequals 0"], -["0x01 0x80", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "0x80 (negative zero) numequals 0"], -["0x02 0x0080", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "numequals 0"], -["0x02 0x0500", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "numequals 5"], -["0x03 0x050000", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "numequals 5"], -["0x02 0x0580", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "numequals -5"], -["0x03 0x050080", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "numequals -5"], -["0x03 0xff7f80", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "Minimal encoding is 0xffff"], -["0x03 0xff7f00", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "Minimal encoding is 0xff7f"], -["0x04 0xffff7f80", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "Minimal encoding is 0xffffff"], -["0x04 0xffff7f00", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR", "Minimal encoding is 0xffff7f"], +["0x01 0x00", "NOT DROP 1", "", "UNKNOWN_ERROR", "numequals 0"], +["0x02 0x0000", "NOT DROP 1", "", "UNKNOWN_ERROR", "numequals 0"], +["0x01 0x80", "NOT DROP 1", "", "UNKNOWN_ERROR", "0x80 (negative zero) numequals 0"], +["0x02 0x0080", "NOT DROP 1", "", "UNKNOWN_ERROR", "numequals 0"], +["0x02 0x0500", "NOT DROP 1", "", "UNKNOWN_ERROR", "numequals 5"], +["0x03 0x050000", "NOT DROP 1", "", "UNKNOWN_ERROR", "numequals 5"], +["0x02 0x0580", "NOT DROP 1", "", "UNKNOWN_ERROR", "numequals -5"], +["0x03 0x050080", "NOT DROP 1", "", "UNKNOWN_ERROR", "numequals -5"], +["0x03 0xff7f80", "NOT DROP 1", "", "UNKNOWN_ERROR", "Minimal encoding is 0xffff"], +["0x03 0xff7f00", "NOT DROP 1", "", "UNKNOWN_ERROR", "Minimal encoding is 0xff7f"], +["0x04 0xffff7f80", "NOT DROP 1", "", "UNKNOWN_ERROR", "Minimal encoding is 0xffffff"], +["0x04 0xffff7f00", "NOT DROP 1", "", "UNKNOWN_ERROR", "Minimal encoding is 0xffff7f"], ["Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule"], -["1 0x02 0x0000", "PICK DROP", "MINIMALDATA", "UNKNOWN_ERROR"], -["1 0x02 0x0000", "ROLL DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000", "1ADD DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000", "1SUB DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000", "NEGATE DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000", "ABS DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000", "NOT DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000", "0NOTEQUAL DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], +["1 0x02 0x0000", "PICK DROP", "", "UNKNOWN_ERROR"], +["1 0x02 0x0000", "ROLL DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000", "1ADD DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000", "1SUB DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000", "NEGATE DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000", "ABS DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000", "NOT DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000", "0NOTEQUAL DROP 1", "", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "ADD DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "ADD DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "SUB DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "SUB DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "BOOLAND DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "BOOLAND DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "BOOLOR DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "BOOLOR DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "NUMEQUAL DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 1", "NUMEQUAL DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "NUMEQUALVERIFY 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "NUMEQUALVERIFY 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "NUMNOTEQUAL DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "NUMNOTEQUAL DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "LESSTHAN DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "LESSTHAN DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "GREATERTHAN DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "GREATERTHAN DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "LESSTHANOREQUAL DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "LESSTHANOREQUAL DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "GREATERTHANOREQUAL DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "GREATERTHANOREQUAL DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "MIN DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "MIN DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "MAX DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "MAX DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "ADD DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "ADD DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "SUB DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "SUB DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "BOOLAND DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "BOOLAND DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "BOOLOR DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "BOOLOR DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "NUMEQUAL DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 1", "NUMEQUAL DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "NUMEQUALVERIFY 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "NUMEQUALVERIFY 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "NUMNOTEQUAL DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "NUMNOTEQUAL DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "LESSTHAN DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "LESSTHAN DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "GREATERTHAN DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "GREATERTHAN DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "LESSTHANOREQUAL DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "LESSTHANOREQUAL DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "GREATERTHANOREQUAL DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "GREATERTHANOREQUAL DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "MIN DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "MIN DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "MAX DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "MAX DROP 1", "", "UNKNOWN_ERROR"], -["0x02 0x0000 0 0", "WITHIN DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000 0", "WITHIN DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0 0x02 0x0000", "WITHIN DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], +["0x02 0x0000 0 0", "WITHIN DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000 0", "WITHIN DROP 1", "", "UNKNOWN_ERROR"], +["0 0 0x02 0x0000", "WITHIN DROP 1", "", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "CHECKMULTISIG DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "CHECKMULTISIG DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0 1", "CHECKMULTISIG DROP 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0 0x02 0x0000", "CHECKMULTISIGVERIFY 1", "MINIMALDATA", "UNKNOWN_ERROR"], -["0x02 0x0000 0", "CHECKMULTISIGVERIFY 1", "MINIMALDATA", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "CHECKMULTISIG DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "CHECKMULTISIG DROP 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0 1", "CHECKMULTISIG DROP 1", "", "UNKNOWN_ERROR"], +["0 0x02 0x0000", "CHECKMULTISIGVERIFY 1", "", "UNKNOWN_ERROR"], +["0x02 0x0000 0", "CHECKMULTISIGVERIFY 1", "", "UNKNOWN_ERROR"], ["Order of CHECKMULTISIG evaluation tests, inverted by swapping the order of"], @@ -1202,27 +1071,27 @@ [ "0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501 0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501", "2 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 0 2 CHECKMULTISIG NOT", - "STRICTENC", - "PUBKEYTYPE", + "", + "PUBKEYFORMAT", "2-of-2 CHECKMULTISIG NOT with the first pubkey invalid, and both signatures validly encoded." ], [ "0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501 1", "2 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 2 CHECKMULTISIG NOT", - "STRICTENC", + "", "SIG_DER", "2-of-2 CHECKMULTISIG NOT with both pubkeys valid, but first signature invalid." ], [ "0x47 0x304402205451ce65ad844dbb978b8bdedf5082e33b43cae8279c30f2c74d9e9ee49a94f802203fe95a7ccf74da7a232ee523ef4a53cb4d14bdd16289680cdb97a63819b8f42f01 0x46 0x304402205451ce65ad844dbb978b8bdedf5082e33b43cae8279c30f2c74d9e9ee49a94f802203fe95a7ccf74da7a232ee523ef4a53cb4d14bdd16289680cdb97a63819b8f42f", "2 0x21 0x02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5 0x21 0x02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5 0x21 0x02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5 3 CHECKMULTISIG", - "P2SH,STRICTENC", + "", "SIG_DER", "2-of-3 with one valid and one invalid signature due to parse error, nSigs > validSigs" ], ["Increase DERSIG test coverage"], -["0x4a 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0 CHECKSIG NOT", "", "SIG_DER", "Overly long signature is incorrectly encoded for DERSIG"], +["0x4a 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", "0 CHECKSIG NOT", "", "SIG_DER", "Overly long signature is incorrectly encoded for DERSIG"], ["0x25 0x30220220000000000000000000000000000000000000000000000000000000000000000000", "0 CHECKSIG NOT", "", "SIG_DER", "Missing S is incorrectly encoded for DERSIG"], ["0x27 0x3024021077777777777777777777777777777777020a7777777777777777777777777777777701", "0 CHECKSIG NOT", "", "SIG_DER", "S with invalid S length is incorrectly encoded for DERSIG"], ["0x27 0x302403107777777777777777777777777777777702107777777777777777777777777777777701", "0 CHECKSIG NOT", "", "SIG_DER", "Non-integer R is incorrectly encoded for DERSIG"], @@ -1234,18 +1103,15 @@ ["CHECKSEQUENCEVERIFY tests"], ["", "CHECKSEQUENCEVERIFY", "", "INVALID_STACK_OPERATION", "CSV automatically fails on a empty stack"], ["-1", "CHECKSEQUENCEVERIFY", "", "NEGATIVE_LOCKTIME", "CSV automatically fails if stack top is negative"], -["0x0100", "CHECKSEQUENCEVERIFY", "MINIMALDATA", "UNKNOWN_ERROR", "CSV fails if stack top is not minimally encoded"], +["0x0100", "CHECKSEQUENCEVERIFY", "", "UNKNOWN_ERROR", "CSV fails if stack top is not minimally encoded"], ["0", "CHECKSEQUENCEVERIFY", "", "UNSATISFIED_LOCKTIME", "CSV fails if stack top bit 1 << 31 is set and the tx version < 2"], ["4294967296", "CHECKSEQUENCEVERIFY", "", "UNSATISFIED_LOCKTIME", "CSV fails if stack top bit 1 << 31 is not set, and tx version < 2"], ["NULLFAIL should cover all signatures and signatures only"], ["0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", "0x01 0x14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0x01 0x14 CHECKMULTISIG NOT", "", "OK", "BIP66 and NULLFAIL-compliant"], -["0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", "0x01 0x14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0x01 0x14 CHECKMULTISIG NOT", "NULLFAIL", "OK", "BIP66 and NULLFAIL-compliant"], -["0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0x09 0x300602010102010101", "0x01 0x14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0x01 0x14 CHECKMULTISIG NOT", "", "OK", "BIP66-compliant but not NULLFAIL-compliant"], -["0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0x09 0x300602010102010101", "0x01 0x14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0x01 0x14 CHECKMULTISIG NOT", "NULLFAIL", "NULLFAIL", "BIP66-compliant but not NULLFAIL-compliant"], -["0x09 0x300602010102010101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", "0x01 0x14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0x01 0x14 CHECKMULTISIG NOT", "", "OK", "BIP66-compliant but not NULLFAIL-compliant"], -["0x09 0x300602010102010101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", "0x01 0x14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0x01 0x14 CHECKMULTISIG NOT", "NULLFAIL", "NULLFAIL", "BIP66-compliant but not NULLFAIL-compliant"], +["0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0x09 0x300602010102010101", "0x01 0x14 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x21 0x020101010101010101010101010101010101010101010101010101010101010101 0x01 0x14 CHECKMULTISIG NOT", "", "NULLFAIL", "BIP66-compliant but not NULLFAIL-compliant 2"], +["0x09 0x300602010102010101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", "0x01 0x14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0x01 0x14 CHECKMULTISIG NOT", "", "NULLFAIL", "BIP66-compliant but not NULLFAIL-compliant 4"], ["The End"] ] diff --git a/txscript/engine.go b/txscript/engine.go index e7f8702a9..f7b57e854 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -17,9 +17,9 @@ import ( type ScriptFlags uint32 const ( - // ScriptBip16 defines whether the bip16 threshold has passed and thus - // pay-to-script hash transactions will be fully validated. - ScriptBip16 ScriptFlags = 1 << iota + + // ScriptNoFlags is used when you want to use ScriptFlags without raising any flags + ScriptNoFlags ScriptFlags = 0 // ScriptDiscourageUpgradableNops defines whether to verify that // NOP1 through NOP10 are reserved for future soft-fork upgrades. This @@ -27,40 +27,13 @@ const ( // blocks as this flag is only for stricter standard transaction // checks. This flag is only applied when the above opcodes are // executed. - ScriptDiscourageUpgradableNops - - // ScriptVerifyCleanStack defines that the stack must contain only - // one stack element after evaluation and that the element must be - // true if interpreted as a boolean. This is rule 6 of BIP0062. - // This flag should never be used without the ScriptBip16 flag. - ScriptVerifyCleanStack - - // ScriptVerifyLowS defines that signtures are required to comply with - // the DER format and whose S value is <= order / 2. This is rule 5 - // of BIP0062. - ScriptVerifyLowS - - // ScriptVerifyMinimalData defines that signatures must use the smallest - // push operator. This is both rules 3 and 4 of BIP0062. - ScriptVerifyMinimalData - - // ScriptVerifyNullFail defines that signatures must be empty if - // a CHECKSIG or CHECKMULTISIG operation fails. - ScriptVerifyNullFail - - // ScriptVerifySigPushOnly defines that signature scripts must contain - // only pushed data. This is rule 2 of BIP0062. - ScriptVerifySigPushOnly - - // ScriptVerifyStrictEncoding defines that signature scripts and - // public keys must follow the strict encoding requirements. - ScriptVerifyStrictEncoding + ScriptDiscourageUpgradableNops ScriptFlags = 1 << iota ) const ( // MaxStackSize is the maximum combined height of stack and alt stack // during execution. - MaxStackSize = 1000 + MaxStackSize = 244 // MaxScriptSize is the maximum allowed length of a raw script. MaxScriptSize = 10000 @@ -82,8 +55,8 @@ type Engine struct { numOps int flags ScriptFlags sigCache *SigCache - bip16 bool // treat execution as pay-to-script-hash - savedFirstStack [][]byte // stack from first script for bip16 scripts + isP2SH bool // treat execution as pay-to-script-hash + savedFirstStack [][]byte // stack from first script for ps2h scripts } // hasFlag returns whether the script engine instance has the passed flag set. @@ -143,7 +116,7 @@ func (vm *Engine) executeOpcode(pop *parsedOpcode) error { // Ensure all executed data push opcodes use the minimal encoding when // the minimal data verification flag is set. - if vm.dstack.verifyMinimalData && vm.isBranchExecuting() && + if vm.isBranchExecuting() && pop.opcode.value >= 0 && pop.opcode.value <= OpPushData4 { if err := pop.checkMinimalDataPush(); err != nil { @@ -228,15 +201,16 @@ func (vm *Engine) CheckErrorCondition(finalScript bool) error { "error check when script unfinished") } - if finalScript && vm.hasFlag(ScriptVerifyCleanStack) && - vm.dstack.Depth() != 1 { + if finalScript { + if vm.dstack.Depth() > 1 { - str := fmt.Sprintf("stack contains %d unexpected items", - vm.dstack.Depth()-1) - return scriptError(ErrCleanStack, str) - } else if vm.dstack.Depth() < 1 { - return scriptError(ErrEmptyStack, - "stack empty at end of script execution") + str := fmt.Sprintf("stack contains %d unexpected items", + vm.dstack.Depth()-1) + return scriptError(ErrCleanStack, str) + } else if vm.dstack.Depth() < 1 { + return scriptError(ErrEmptyStack, + "stack empty at end of script execution") + } } v, err := vm.dstack.PopBool() @@ -302,10 +276,10 @@ func (vm *Engine) Step() (done bool, err error) { vm.numOps = 0 // number of ops is per script. vm.scriptOff = 0 - if vm.scriptIdx == 0 && vm.bip16 { + if vm.scriptIdx == 0 && vm.isP2SH { vm.scriptIdx++ vm.savedFirstStack = vm.GetStack() - } else if vm.scriptIdx == 1 && vm.bip16 { + } else if vm.scriptIdx == 1 && vm.isP2SH { // Put us past the end for CheckErrorCondition() vm.scriptIdx++ // Check script ran successfully and pull the script @@ -382,10 +356,6 @@ func (vm *Engine) currentScript() []parsedOpcode { // checkHashTypeEncoding returns whether or not the passed hashtype adheres to // the strict encoding requirements if enabled. func (vm *Engine) checkHashTypeEncoding(hashType SigHashType) error { - if !vm.hasFlag(ScriptVerifyStrictEncoding) { - return nil - } - sigHashType := hashType & ^SigHashAnyOneCanPay if sigHashType < SigHashAll || sigHashType > SigHashSingle { str := fmt.Sprintf("invalid hash type 0x%x", hashType) @@ -397,10 +367,6 @@ func (vm *Engine) checkHashTypeEncoding(hashType SigHashType) error { // checkPubKeyEncoding returns whether or not the passed public key adheres to // the strict encoding requirements if enabled. func (vm *Engine) checkPubKeyEncoding(pubKey []byte) error { - if !vm.hasFlag(ScriptVerifyStrictEncoding) { - return nil - } - if len(pubKey) == 33 && (pubKey[0] == 0x02 || pubKey[0] == 0x03) { // Compressed return nil @@ -410,7 +376,7 @@ func (vm *Engine) checkPubKeyEncoding(pubKey []byte) error { return nil } - return scriptError(ErrPubKeyType, "unsupported public key type") + return scriptError(ErrPubKeyFormat, "unsupported public key type") } // checkSignatureEncoding returns whether or not the passed signature adheres to @@ -542,13 +508,11 @@ func (vm *Engine) checkSignatureEncoding(sig []byte) error { // valid transaction with the complement while still being a valid // signature that verifies. This would result in changing the // transaction hash and thus is source of malleability. - if vm.hasFlag(ScriptVerifyLowS) { - sValue := new(big.Int).SetBytes(sig[rLen+6 : rLen+6+sLen]) - if sValue.Cmp(halfOrder) > 0 { - return scriptError(ErrSigHighS, - "signature is not canonical due to "+ - "unnecessarily high S value") - } + sValue := new(big.Int).SetBytes(sig[rLen+6 : rLen+6+sLen]) + if sValue.Cmp(halfOrder) > 0 { + return scriptError(ErrSigHighS, + "signature is not canonical due to "+ + "unnecessarily high S value") } return nil @@ -622,64 +586,43 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags "false stack entry at end of script execution") } - // The clean stack flag (ScriptVerifyCleanStack) is not allowed without - // the pay-to-script-hash (P2SH) evaluation (ScriptBip16) flag. - // - // Recall that evaluating a P2SH script without the flag set results in - // non-P2SH evaluation which leaves the P2SH inputs on the stack. Thus, - // allowing the clean stack flag without the P2SH flag would make it - // possible to have a situation where P2SH would not be a soft fork when - // it should be. vm := Engine{flags: flags, sigCache: sigCache} - if vm.hasFlag(ScriptVerifyCleanStack) && !vm.hasFlag(ScriptBip16) { - return nil, scriptError(ErrInvalidFlags, - "invalid flags combination") - } - // The signature script must only contain data pushes when the - // associated flag is set. - if vm.hasFlag(ScriptVerifySigPushOnly) && !IsPushOnlyScript(scriptSig) { + parsedScriptSig, err := parseScriptAndVerifySize(scriptSig) + if err != nil { + return nil, err + } + // The signature script must only contain data pushes + if !isPushOnly(parsedScriptSig) { return nil, scriptError(ErrNotPushOnly, "signature script is not push only") } + parsedScriptPubKey, err := parseScriptAndVerifySize(scriptPubKey) + if err != nil { + return nil, err + } + // The engine stores the scripts in parsed form using a slice. This // allows multiple scripts to be executed in sequence. For example, // with a pay-to-script-hash transaction, there will be ultimately be // a third script to execute. - scripts := [][]byte{scriptSig, scriptPubKey} - vm.scripts = make([][]parsedOpcode, len(scripts)) - for i, scr := range scripts { - if len(scr) > MaxScriptSize { - str := fmt.Sprintf("script size %d is larger than max "+ - "allowed size %d", len(scr), MaxScriptSize) - return nil, scriptError(ErrScriptTooBig, str) - } - var err error - vm.scripts[i], err = parseScript(scr) - if err != nil { - return nil, err - } - } + vm.scripts = [][]parsedOpcode{parsedScriptSig, parsedScriptPubKey} // Advance the program counter to the public key script if the signature // script is empty since there is nothing to execute for it in that // case. - if len(scripts[0]) == 0 { + if len(scriptSig) == 0 { vm.scriptIdx++ } - if vm.hasFlag(ScriptBip16) && isScriptHash(vm.scripts[1]) { + if isScriptHash(vm.scripts[1]) { // Only accept input scripts that push data for P2SH. if !isPushOnly(vm.scripts[0]) { return nil, scriptError(ErrNotPushOnly, "pay to script hash is not push only") } - vm.bip16 = true - } - if vm.hasFlag(ScriptVerifyMinimalData) { - vm.dstack.verifyMinimalData = true - vm.astack.verifyMinimalData = true + vm.isP2SH = true } vm.tx = *tx @@ -687,3 +630,12 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags return &vm, nil } + +func parseScriptAndVerifySize(script []byte) ([]parsedOpcode, error) { + if len(script) > MaxScriptSize { + str := fmt.Sprintf("script size %d is larger than max "+ + "allowed size %d", len(script), MaxScriptSize) + return nil, scriptError(ErrScriptTooBig, str) + } + return parseScript(script) +} diff --git a/txscript/engine_test.go b/txscript/engine_test.go index 687dd31bf..c0cefd627 100644 --- a/txscript/engine_test.go +++ b/txscript/engine_test.go @@ -41,7 +41,7 @@ func TestBadPC(t *testing.T) { }), Index: 0, }, - SignatureScript: mustParseShortForm("NOP"), + SignatureScript: mustParseShortForm(""), Sequence: 4294967295, }, }, @@ -145,56 +145,6 @@ func TestCheckErrorCondition(t *testing.T) { } } -// TestInvalidFlagCombinations ensures the script engine returns the expected -// error when disallowed flag combinations are specified. -func TestInvalidFlagCombinations(t *testing.T) { - t.Parallel() - - tests := []ScriptFlags{ - ScriptVerifyCleanStack, - } - - // tx with almost empty scripts. - tx := &wire.MsgTx{ - Version: 1, - TxIn: []*wire.TxIn{ - { - PreviousOutPoint: wire.OutPoint{ - Hash: daghash.Hash([32]byte{ - 0xc9, 0x97, 0xa5, 0xe5, - 0x6e, 0x10, 0x41, 0x02, - 0xfa, 0x20, 0x9c, 0x6a, - 0x85, 0x2d, 0xd9, 0x06, - 0x60, 0xa2, 0x0b, 0x2d, - 0x9c, 0x35, 0x24, 0x23, - 0xed, 0xce, 0x25, 0x85, - 0x7f, 0xcd, 0x37, 0x04, - }), - Index: 0, - }, - SignatureScript: []uint8{OpNop}, - Sequence: 4294967295, - }, - }, - TxOut: []*wire.TxOut{ - { - Value: 1000000000, - PkScript: nil, - }, - }, - LockTime: 0, - } - pkScript := []byte{OpNop} - - for i, test := range tests { - _, err := NewEngine(pkScript, tx, 0, test, nil) - if !IsErrorCode(err, ErrInvalidFlags) { - t.Fatalf("TestInvalidFlagCombinations #%d unexpected "+ - "error: %v", i, err) - } - } -} - // TestCheckPubKeyEncoding ensures the internal checkPubKeyEncoding function // works as expected. func TestCheckPubKeyEncoding(t *testing.T) { @@ -240,7 +190,7 @@ func TestCheckPubKeyEncoding(t *testing.T) { }, } - vm := Engine{flags: ScriptVerifyStrictEncoding} + vm := Engine{} for _, test := range tests { err := vm.checkPubKeyEncoding(test.key) if err != nil && test.isValid { @@ -412,7 +362,7 @@ func TestCheckSignatureEncoding(t *testing.T) { }, } - vm := Engine{flags: ScriptVerifyStrictEncoding} + vm := Engine{} for _, test := range tests { err := vm.checkSignatureEncoding(test.sig) if err != nil && test.isValid { diff --git a/txscript/error.go b/txscript/error.go index 7ec8e0a6b..a99606a52 100644 --- a/txscript/error.go +++ b/txscript/error.go @@ -166,9 +166,8 @@ const ( // Failures related to malleability. // --------------------------------- - // ErrMinimalData is returned when the ScriptVerifyMinimalData flag - // is set and the script contains push operations that do not use - // the minimal opcode required. + // ErrMinimalData is returned when the script contains + // push operations that do not use the minimal opcode required. ErrMinimalData // ErrInvalidSigHashType is returned when a signature hash type is not @@ -189,23 +188,20 @@ const ( ErrSigHighS // ErrNotPushOnly is returned when a script that is required to only - // push data to the stack performs other operations. A couple of cases - // where this applies is for a pay-to-script-hash signature script when - // bip16 is active and when the ScriptVerifySigPushOnly flag is set. + // push data to the stack performs other operations. ErrNotPushOnly - // ErrPubKeyType is returned when the ScriptVerifyStrictEncoding - // flag is set and the script contains invalid public keys. - ErrPubKeyType + // ErrPubKeyFormat is returned when the script contains invalid public keys. + // A valid pubkey should be in uncompressed format as a 64 byte string prefixed with 0x04, + // or to be in compressed format as a 32 byte string prefixed with 0x02 or 0x03 to signal oddness. + ErrPubKeyFormat - // ErrCleanStack is returned when the ScriptVerifyCleanStack flag - // is set, and after evalution, the stack does not contain only a - // single element. + // ErrCleanStack is returned when after evalution, the stack + // contains more than one element. ErrCleanStack - // ErrNullFail is returned when the ScriptVerifyNullFail flag is - // set and signatures are not empty on failed checksig or checkmultisig - // operations. + // ErrNullFail is returned when signatures are not empty + // on failed checksig or checkmultisig operations. ErrNullFail // ------------------------------- @@ -268,7 +264,7 @@ var errorCodeStrings = map[ErrorCode]string{ ErrSigDER: "ErrSigDER", ErrSigHighS: "ErrSigHighS", ErrNotPushOnly: "ErrNotPushOnly", - ErrPubKeyType: "ErrPubKeyType", + ErrPubKeyFormat: "ErrPubKeyFormat", ErrCleanStack: "ErrCleanStack", ErrNullFail: "ErrNullFail", ErrDiscourageUpgradableNOPs: "ErrDiscourageUpgradableNOPs", diff --git a/txscript/error_test.go b/txscript/error_test.go index f60563b5b..7085d98dd 100644 --- a/txscript/error_test.go +++ b/txscript/error_test.go @@ -51,7 +51,7 @@ func TestErrorCodeStringer(t *testing.T) { {ErrSigDER, "ErrSigDER"}, {ErrSigHighS, "ErrSigHighS"}, {ErrNotPushOnly, "ErrNotPushOnly"}, - {ErrPubKeyType, "ErrPubKeyType"}, + {ErrPubKeyFormat, "ErrPubKeyFormat"}, {ErrCleanStack, "ErrCleanStack"}, {ErrNullFail, "ErrNullFail"}, {ErrDiscourageUpgradableNOPs, "ErrDiscourageUpgradableNOPs"}, diff --git a/txscript/example_test.go b/txscript/example_test.go index 9926524e8..e20a33488 100644 --- a/txscript/example_test.go +++ b/txscript/example_test.go @@ -162,8 +162,7 @@ func ExampleSignTxOutput() { // Prove that the transaction has been validly signed by executing the // script pair. - flags := txscript.ScriptBip16 | - txscript.ScriptDiscourageUpgradableNops + flags := txscript.ScriptDiscourageUpgradableNops vm, err := txscript.NewEngine(originTx.TxOut[0].PkScript, redeemTx, 0, flags, nil) if err != nil { fmt.Println(err) diff --git a/txscript/opcode.go b/txscript/opcode.go index 64d333a63..4df4ddaf5 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -1101,7 +1101,7 @@ func opcodeCheckLockTimeVerify(op *parsedOpcode, vm *Engine) error { if err != nil { return err } - lockTime, err := makeScriptNum(so, vm.dstack.verifyMinimalData, 5) + lockTime, err := makeScriptNum(so, 5) if err != nil { return err } @@ -1164,7 +1164,7 @@ func opcodeCheckSequenceVerify(op *parsedOpcode, vm *Engine) error { if err != nil { return err } - stackSequence, err := makeScriptNum(so, vm.dstack.verifyMinimalData, 5) + stackSequence, err := makeScriptNum(so, 5) if err != nil { return err } @@ -2043,7 +2043,7 @@ func opcodeCheckSig(op *parsedOpcode, vm *Engine) error { valid = signature.Verify(hash, pubKey) } - if !valid && vm.hasFlag(ScriptVerifyNullFail) && len(sigBytes) > 0 { + if !valid && len(sigBytes) > 0 { str := "signature not empty on failed checksig" return scriptError(ErrNullFail, str) } @@ -2248,7 +2248,7 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { } } - if !success && vm.hasFlag(ScriptVerifyNullFail) { + if !success { for _, sig := range signatures { if len(sig.signature) > 0 { str := "not all signatures empty on failed checkmultisig" diff --git a/txscript/reference_test.go b/txscript/reference_test.go index 99c482676..f189d0480 100644 --- a/txscript/reference_test.go +++ b/txscript/reference_test.go @@ -133,24 +133,8 @@ func parseScriptFlags(flagStr string) (ScriptFlags, error) { switch flag { case "": // Nothing. - case "CLEANSTACK": - flags |= ScriptVerifyCleanStack case "DISCOURAGE_UPGRADABLE_NOPS": flags |= ScriptDiscourageUpgradableNops - case "LOW_S": - flags |= ScriptVerifyLowS - case "MINIMALDATA": - flags |= ScriptVerifyMinimalData - case "NONE": - // Nothing. - case "NULLFAIL": - flags |= ScriptVerifyNullFail - case "P2SH": - flags |= ScriptBip16 - case "SIGPUSHONLY": - flags |= ScriptVerifySigPushOnly - case "STRICTENC": - flags |= ScriptVerifyStrictEncoding default: return flags, fmt.Errorf("invalid flag: %s", flag) } @@ -167,12 +151,14 @@ func parseExpectedResult(expected string) ([]ErrorCode, error) { return nil, nil case "UNKNOWN_ERROR": return []ErrorCode{ErrNumberTooBig, ErrMinimalData}, nil - case "PUBKEYTYPE": - return []ErrorCode{ErrPubKeyType}, nil + case "PUBKEYFORMAT": + return []ErrorCode{ErrPubKeyFormat}, nil case "SIG_DER": return []ErrorCode{ErrSigDER, ErrInvalidSigHashType}, nil case "EVAL_FALSE": return []ErrorCode{ErrEvalFalse, ErrEmptyStack}, nil + case "EMPTY_STACK": + return []ErrorCode{ErrEmptyStack}, nil case "EQUALVERIFY": return []ErrorCode{ErrEqualVerify}, nil case "NULLFAIL": diff --git a/txscript/script.go b/txscript/script.go index 0130dfdcd..d879083ce 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -8,17 +8,11 @@ import ( "bytes" "encoding/binary" "fmt" - "time" "github.com/daglabs/btcd/dagconfig/daghash" "github.com/daglabs/btcd/wire" ) -// Bip16Activation is the timestamp where BIP0016 is valid to use in the -// blockchain. To be used to determine if BIP0016 should be called for or not. -// This timestamp corresponds to Sun Apr 1 00:00:00 UTC 2012. -var Bip16Activation = time.Unix(1333238400, 0) - // SigHashType represents hash type bits at the end of a signature. type SigHashType uint32 @@ -424,17 +418,17 @@ func GetSigOpCount(script []byte) int { } // GetPreciseSigOpCount returns the number of signature operations in -// scriptPubKey. If bip16 is true then scriptSig may be searched for the +// scriptPubKey. If p2sh is true then scriptSig may be searched for the // Pay-To-Script-Hash script in order to find the precise number of signature // operations in the transaction. If the script fails to parse, then the count // up to the point of failure is returned. -func GetPreciseSigOpCount(scriptSig, scriptPubKey []byte, bip16 bool) int { +func GetPreciseSigOpCount(scriptSig, scriptPubKey []byte, isP2SH bool) int { // Don't check error since parseScript returns the parsed-up-to-error // list of pops. pops, _ := parseScript(scriptPubKey) // Treat non P2SH transactions as normal. - if !(bip16 && isScriptHash(pops)) { + if !(isP2SH && isScriptHash(pops)) { return getSigOpCount(pops, true) } diff --git a/txscript/scriptnum.go b/txscript/scriptnum.go index a89d5f39c..c447698e5 100644 --- a/txscript/scriptnum.go +++ b/txscript/scriptnum.go @@ -47,6 +47,11 @@ type scriptNum int64 // checkMinimalDataEncoding returns whether or not the passed byte array adheres // to the minimal encoding requirements. +// An error will be returned if it will determined that +// the encoding is not represented with the smallest possible +// number of bytes or is the negative 0 encoding, [0x80]. For example, consider +// the number 127. It could be encoded as [0x7f], [0x7f 0x00], +// [0x7f 0x00 0x00 ...], etc. All forms except [0x7f] will return an error func checkMinimalDataEncoding(v []byte) error { if len(v) == 0 { return nil @@ -167,13 +172,6 @@ func (n scriptNum) Int32() int32 { // bytes and therefore will pass that value to this function resulting in an // allowed range of [-2^31 + 1, 2^31 - 1]. // -// The requireMinimal flag causes an error to be returned if additional checks -// on the encoding determine it is not represented with the smallest possible -// number of bytes or is the negative 0 encoding, [0x80]. For example, consider -// the number 127. It could be encoded as [0x7f], [0x7f 0x00], -// [0x7f 0x00 0x00 ...], etc. All forms except [0x7f] will return an error with -// requireMinimal enabled. -// // The scriptNumLen is the maximum number of bytes the encoded value can be // before an ErrStackNumberTooBig is returned. This effectively limits the // range of allowed values. @@ -182,7 +180,7 @@ func (n scriptNum) Int32() int32 { // overflows. // // See the Bytes function documentation for example encodings. -func makeScriptNum(v []byte, requireMinimal bool, scriptNumLen int) (scriptNum, error) { +func makeScriptNum(v []byte, scriptNumLen int) (scriptNum, error) { // Interpreting data requires that it is not larger than // the the passed scriptNumLen value. if len(v) > scriptNumLen { @@ -192,11 +190,8 @@ func makeScriptNum(v []byte, requireMinimal bool, scriptNumLen int) (scriptNum, return 0, scriptError(ErrNumberTooBig, str) } - // Enforce minimal encoded if requested. - if requireMinimal { - if err := checkMinimalDataEncoding(v); err != nil { - return 0, err - } + if err := checkMinimalDataEncoding(v); err != nil { + return 0, err } // Zero is encoded as an empty byte slice. diff --git a/txscript/scriptnum_test.go b/txscript/scriptnum_test.go index e32862b73..f2b9a9dcc 100644 --- a/txscript/scriptnum_test.go +++ b/txscript/scriptnum_test.go @@ -97,105 +97,88 @@ func TestMakeScriptNum(t *testing.T) { errMinimalData := scriptError(ErrMinimalData, "") tests := []struct { - serialized []byte - num scriptNum - numLen int - minimalEncoding bool - err error + serialized []byte + num scriptNum + numLen int + err error }{ // Minimal encoding must reject negative 0. - {hexToBytes("80"), 0, defaultScriptNumLen, true, errMinimalData}, + {hexToBytes("80"), 0, defaultScriptNumLen, errMinimalData}, // Minimally encoded valid values with minimal encoding flag. // Should not error and return expected integral number. - {nil, 0, defaultScriptNumLen, true, nil}, - {hexToBytes("01"), 1, defaultScriptNumLen, true, nil}, - {hexToBytes("81"), -1, defaultScriptNumLen, true, nil}, - {hexToBytes("7f"), 127, defaultScriptNumLen, true, nil}, - {hexToBytes("ff"), -127, defaultScriptNumLen, true, nil}, - {hexToBytes("8000"), 128, defaultScriptNumLen, true, nil}, - {hexToBytes("8080"), -128, defaultScriptNumLen, true, nil}, - {hexToBytes("8100"), 129, defaultScriptNumLen, true, nil}, - {hexToBytes("8180"), -129, defaultScriptNumLen, true, nil}, - {hexToBytes("0001"), 256, defaultScriptNumLen, true, nil}, - {hexToBytes("0081"), -256, defaultScriptNumLen, true, nil}, - {hexToBytes("ff7f"), 32767, defaultScriptNumLen, true, nil}, - {hexToBytes("ffff"), -32767, defaultScriptNumLen, true, nil}, - {hexToBytes("008000"), 32768, defaultScriptNumLen, true, nil}, - {hexToBytes("008080"), -32768, defaultScriptNumLen, true, nil}, - {hexToBytes("ffff00"), 65535, defaultScriptNumLen, true, nil}, - {hexToBytes("ffff80"), -65535, defaultScriptNumLen, true, nil}, - {hexToBytes("000008"), 524288, defaultScriptNumLen, true, nil}, - {hexToBytes("000088"), -524288, defaultScriptNumLen, true, nil}, - {hexToBytes("000070"), 7340032, defaultScriptNumLen, true, nil}, - {hexToBytes("0000f0"), -7340032, defaultScriptNumLen, true, nil}, - {hexToBytes("00008000"), 8388608, defaultScriptNumLen, true, nil}, - {hexToBytes("00008080"), -8388608, defaultScriptNumLen, true, nil}, - {hexToBytes("ffffff7f"), 2147483647, defaultScriptNumLen, true, nil}, - {hexToBytes("ffffffff"), -2147483647, defaultScriptNumLen, true, nil}, - {hexToBytes("ffffffff7f"), 549755813887, 5, true, nil}, - {hexToBytes("ffffffffff"), -549755813887, 5, true, nil}, - {hexToBytes("ffffffffffffff7f"), 9223372036854775807, 8, true, nil}, - {hexToBytes("ffffffffffffffff"), -9223372036854775807, 8, true, nil}, - {hexToBytes("ffffffffffffffff7f"), -1, 9, true, nil}, - {hexToBytes("ffffffffffffffffff"), 1, 9, true, nil}, - {hexToBytes("ffffffffffffffffff7f"), -1, 10, true, nil}, - {hexToBytes("ffffffffffffffffffff"), 1, 10, true, nil}, + {nil, 0, defaultScriptNumLen, nil}, + {hexToBytes("01"), 1, defaultScriptNumLen, nil}, + {hexToBytes("81"), -1, defaultScriptNumLen, nil}, + {hexToBytes("7f"), 127, defaultScriptNumLen, nil}, + {hexToBytes("ff"), -127, defaultScriptNumLen, nil}, + {hexToBytes("8000"), 128, defaultScriptNumLen, nil}, + {hexToBytes("8080"), -128, defaultScriptNumLen, nil}, + {hexToBytes("8100"), 129, defaultScriptNumLen, nil}, + {hexToBytes("8180"), -129, defaultScriptNumLen, nil}, + {hexToBytes("0001"), 256, defaultScriptNumLen, nil}, + {hexToBytes("0081"), -256, defaultScriptNumLen, nil}, + {hexToBytes("ff7f"), 32767, defaultScriptNumLen, nil}, + {hexToBytes("ffff"), -32767, defaultScriptNumLen, nil}, + {hexToBytes("008000"), 32768, defaultScriptNumLen, nil}, + {hexToBytes("008080"), -32768, defaultScriptNumLen, nil}, + {hexToBytes("ffff00"), 65535, defaultScriptNumLen, nil}, + {hexToBytes("ffff80"), -65535, defaultScriptNumLen, nil}, + {hexToBytes("000008"), 524288, defaultScriptNumLen, nil}, + {hexToBytes("000088"), -524288, defaultScriptNumLen, nil}, + {hexToBytes("000070"), 7340032, defaultScriptNumLen, nil}, + {hexToBytes("0000f0"), -7340032, defaultScriptNumLen, nil}, + {hexToBytes("00008000"), 8388608, defaultScriptNumLen, nil}, + {hexToBytes("00008080"), -8388608, defaultScriptNumLen, nil}, + {hexToBytes("ffffff7f"), 2147483647, defaultScriptNumLen, nil}, + {hexToBytes("ffffffff"), -2147483647, defaultScriptNumLen, nil}, + {hexToBytes("ffffffff7f"), 549755813887, 5, nil}, + {hexToBytes("ffffffffff"), -549755813887, 5, nil}, + {hexToBytes("ffffffffffffff7f"), 9223372036854775807, 8, nil}, + {hexToBytes("ffffffffffffffff"), -9223372036854775807, 8, nil}, + {hexToBytes("ffffffffffffffff7f"), -1, 9, nil}, + {hexToBytes("ffffffffffffffffff"), 1, 9, nil}, + {hexToBytes("ffffffffffffffffff7f"), -1, 10, nil}, + {hexToBytes("ffffffffffffffffffff"), 1, 10, nil}, // Minimally encoded values that are out of range for data that // is interpreted as script numbers with the minimal encoding // flag set. Should error and return 0. - {hexToBytes("0000008000"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("0000008080"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("0000009000"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("0000009080"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffff00"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffff80"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("0000000001"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("0000000081"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffff00"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffff80"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffffff00"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffffff80"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffffff7f"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffffffff"), 0, defaultScriptNumLen, true, errNumTooBig}, + {hexToBytes("0000008000"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("0000008080"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("0000009000"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("0000009080"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("ffffffff00"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("ffffffff80"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("0000000001"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("0000000081"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("ffffffffffff00"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("ffffffffffff80"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("ffffffffffffff00"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("ffffffffffffff80"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("ffffffffffffff7f"), 0, defaultScriptNumLen, errNumTooBig}, + {hexToBytes("ffffffffffffffff"), 0, defaultScriptNumLen, errNumTooBig}, // Non-minimally encoded, but otherwise valid values with // minimal encoding flag. Should error and return 0. - {hexToBytes("00"), 0, defaultScriptNumLen, true, errMinimalData}, // 0 - {hexToBytes("0100"), 0, defaultScriptNumLen, true, errMinimalData}, // 1 - {hexToBytes("7f00"), 0, defaultScriptNumLen, true, errMinimalData}, // 127 - {hexToBytes("800000"), 0, defaultScriptNumLen, true, errMinimalData}, // 128 - {hexToBytes("810000"), 0, defaultScriptNumLen, true, errMinimalData}, // 129 - {hexToBytes("000100"), 0, defaultScriptNumLen, true, errMinimalData}, // 256 - {hexToBytes("ff7f00"), 0, defaultScriptNumLen, true, errMinimalData}, // 32767 - {hexToBytes("00800000"), 0, defaultScriptNumLen, true, errMinimalData}, // 32768 - {hexToBytes("ffff0000"), 0, defaultScriptNumLen, true, errMinimalData}, // 65535 - {hexToBytes("00000800"), 0, defaultScriptNumLen, true, errMinimalData}, // 524288 - {hexToBytes("00007000"), 0, defaultScriptNumLen, true, errMinimalData}, // 7340032 - {hexToBytes("0009000100"), 0, 5, true, errMinimalData}, // 16779520 - - // Non-minimally encoded, but otherwise valid values without - // minimal encoding flag. Should not error and return expected - // integral number. - {hexToBytes("00"), 0, defaultScriptNumLen, false, nil}, - {hexToBytes("0100"), 1, defaultScriptNumLen, false, nil}, - {hexToBytes("7f00"), 127, defaultScriptNumLen, false, nil}, - {hexToBytes("800000"), 128, defaultScriptNumLen, false, nil}, - {hexToBytes("810000"), 129, defaultScriptNumLen, false, nil}, - {hexToBytes("000100"), 256, defaultScriptNumLen, false, nil}, - {hexToBytes("ff7f00"), 32767, defaultScriptNumLen, false, nil}, - {hexToBytes("00800000"), 32768, defaultScriptNumLen, false, nil}, - {hexToBytes("ffff0000"), 65535, defaultScriptNumLen, false, nil}, - {hexToBytes("00000800"), 524288, defaultScriptNumLen, false, nil}, - {hexToBytes("00007000"), 7340032, defaultScriptNumLen, false, nil}, - {hexToBytes("0009000100"), 16779520, 5, false, nil}, + {hexToBytes("00"), 0, defaultScriptNumLen, errMinimalData}, // 0 + {hexToBytes("0100"), 0, defaultScriptNumLen, errMinimalData}, // 1 + {hexToBytes("7f00"), 0, defaultScriptNumLen, errMinimalData}, // 127 + {hexToBytes("800000"), 0, defaultScriptNumLen, errMinimalData}, // 128 + {hexToBytes("810000"), 0, defaultScriptNumLen, errMinimalData}, // 129 + {hexToBytes("000100"), 0, defaultScriptNumLen, errMinimalData}, // 256 + {hexToBytes("ff7f00"), 0, defaultScriptNumLen, errMinimalData}, // 32767 + {hexToBytes("00800000"), 0, defaultScriptNumLen, errMinimalData}, // 32768 + {hexToBytes("ffff0000"), 0, defaultScriptNumLen, errMinimalData}, // 65535 + {hexToBytes("00000800"), 0, defaultScriptNumLen, errMinimalData}, // 524288 + {hexToBytes("00007000"), 0, defaultScriptNumLen, errMinimalData}, // 7340032 + {hexToBytes("0009000100"), 0, 5, errMinimalData}, // 16779520 } for _, test := range tests { // Ensure the error code is of the expected type and the error // code matches the value specified in the test instance. - gotNum, err := makeScriptNum(test.serialized, test.minimalEncoding, + gotNum, err := makeScriptNum(test.serialized, test.numLen) if e := tstCheckScriptError(err, test.err); e != nil { t.Errorf("makeScriptNum(%#x): %v", test.serialized, e) diff --git a/txscript/sign.go b/txscript/sign.go index 2d94bfb53..b8e566c28 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -314,9 +314,7 @@ sigLoop: } } - // Extra opcode to handle the extra arg consumed (due to previous bugs - // in the reference implementation). - builder := NewScriptBuilder().AddOp(OpFalse) + builder := NewScriptBuilder() doneSigs := 0 // This assumes that addresses are in the same order as in the script. for _, addr := range addresses { diff --git a/txscript/sign_test.go b/txscript/sign_test.go index 379cf7ddb..1609a82ff 100644 --- a/txscript/sign_test.go +++ b/txscript/sign_test.go @@ -55,8 +55,9 @@ func mkGetScript(scripts map[string][]byte) ScriptDB { func checkScripts(msg string, tx *wire.MsgTx, idx int, sigScript, pkScript []byte) error { tx.TxIn[idx].SignatureScript = sigScript + var flags ScriptFlags vm, err := NewEngine(pkScript, tx, idx, - ScriptBip16, nil) + flags, nil) if err != nil { return fmt.Errorf("failed to make script engine for %s: %v", msg, err) @@ -91,7 +92,6 @@ func TestSignTxOutput(t *testing.T) { // make script based on key. // sign with magic pixie dust. hashTypes := []SigHashType{ - SigHashOld, // no longer used but should act like all SigHashAll, SigHashNone, SigHashSingle, @@ -1498,7 +1498,7 @@ var sigScriptTests = []tstSigScript{ scriptAtWrongIndex: false, }, { - name: "hashType SigHashAnyoneCanPay", + name: "hashType SigHashAll | SigHashAnyoneCanPay", inputs: []tstInput{ { txout: wire.NewTxOut(coinbaseVal, uncompressedPkScript), @@ -1507,17 +1507,31 @@ var sigScriptTests = []tstSigScript{ indexOutOfRange: false, }, }, + hashType: SigHashAll | SigHashAnyOneCanPay, + compress: false, + scriptAtWrongIndex: false, + }, + { + name: "hashType SigHashAnyoneCanPay", + inputs: []tstInput{ + { + txout: wire.NewTxOut(coinbaseVal, uncompressedPkScript), + sigscriptGenerates: true, + inputValidates: false, + indexOutOfRange: false, + }, + }, hashType: SigHashAnyOneCanPay, compress: false, scriptAtWrongIndex: false, }, { - name: "hashType non-standard", + name: "hashType non-exist", inputs: []tstInput{ { txout: wire.NewTxOut(coinbaseVal, uncompressedPkScript), sigscriptGenerates: true, - inputValidates: true, + inputValidates: false, indexOutOfRange: false, }, }, @@ -1658,7 +1672,7 @@ nexttest: } // Validate tx input scripts - scriptFlags := ScriptBip16 + var scriptFlags ScriptFlags for j := range tx.TxIn { vm, err := NewEngine(sigScriptTests[i]. inputs[j].txout.PkScript, tx, j, scriptFlags, nil) diff --git a/txscript/stack.go b/txscript/stack.go index eb1d8cfdf..9aded5449 100644 --- a/txscript/stack.go +++ b/txscript/stack.go @@ -36,8 +36,7 @@ func fromBool(v bool) []byte { // changed it *must* be deep-copied first to avoid changing other values on the // stack. type stack struct { - stk [][]byte - verifyMinimalData bool + stk [][]byte } // Depth returns the number of items on the stack. @@ -86,7 +85,7 @@ func (s *stack) PopInt() (scriptNum, error) { return 0, err } - return makeScriptNum(so, s.verifyMinimalData, defaultScriptNumLen) + return makeScriptNum(so, defaultScriptNumLen) } // PopBool pops the value off the top of the stack, converts it into a bool, and @@ -123,7 +122,7 @@ func (s *stack) PeekInt(idx int32) (scriptNum, error) { return 0, err } - return makeScriptNum(so, s.verifyMinimalData, defaultScriptNumLen) + return makeScriptNum(so, defaultScriptNumLen) } // PeekBool returns the Nth item on the stack as a bool without removing it. diff --git a/txscript/stack_test.go b/txscript/stack_test.go index 9228ecff0..432eda050 100644 --- a/txscript/stack_test.go +++ b/txscript/stack_test.go @@ -186,7 +186,7 @@ func TestStack(t *testing.T) { }, { "popInt 0", - [][]byte{{0x0}}, + [][]byte{{}}, func(s *stack) error { v, err := s.PopInt() if err != nil { @@ -200,22 +200,6 @@ func TestStack(t *testing.T) { nil, nil, }, - { - "popInt -0", - [][]byte{{0x80}}, - func(s *stack) error { - v, err := s.PopInt() - if err != nil { - return err - } - if v != 0 { - return errors.New("-0 != 0 on popInt") - } - return nil - }, - nil, - nil, - }, { "popInt 1", [][]byte{{0x01}}, @@ -232,23 +216,6 @@ func TestStack(t *testing.T) { nil, nil, }, - { - "popInt 1 leading 0", - [][]byte{{0x01, 0x00, 0x00, 0x00}}, - func(s *stack) error { - v, err := s.PopInt() - if err != nil { - return err - } - if v != 1 { - fmt.Printf("%v != %v\n", v, 1) - return errors.New("1 != 1 on popInt") - } - return nil - }, - nil, - nil, - }, { "popInt -1", [][]byte{{0x81}}, @@ -265,23 +232,6 @@ func TestStack(t *testing.T) { nil, nil, }, - { - "popInt -1 leading 0", - [][]byte{{0x01, 0x00, 0x00, 0x80}}, - func(s *stack) error { - v, err := s.PopInt() - if err != nil { - return err - } - if v != -1 { - fmt.Printf("%v != %v\n", v, -1) - return errors.New("-1 != -1 on popInt") - } - return nil - }, - nil, - nil, - }, // Triggers the multibyte case in asInt { "popInt -513", @@ -300,24 +250,6 @@ func TestStack(t *testing.T) { nil, nil, }, - // Confirm that the asInt code doesn't modify the base data. - { - "peekint nomodify -1", - [][]byte{{0x01, 0x00, 0x00, 0x80}}, - func(s *stack) error { - v, err := s.PeekInt(0) - if err != nil { - return err - } - if v != -1 { - fmt.Printf("%v != %v\n", v, -1) - return errors.New("-1 != -1 on popInt") - } - return nil - }, - nil, - [][]byte{{0x01, 0x00, 0x00, 0x80}}, - }, { "PushInt 0", nil, @@ -852,24 +784,6 @@ func TestStack(t *testing.T) { nil, [][]byte{{1}}, }, - { - "Peek int 2", - [][]byte{{0}}, - func(s *stack) error { - // Peek int is otherwise pretty well tested, - // just check it works. - val, err := s.PeekInt(0) - if err != nil { - return err - } - if val != 0 { - return errors.New("invalid result") - } - return nil - }, - nil, - [][]byte{{0}}, - }, { "pop int", nil, diff --git a/txscript/standard.go b/txscript/standard.go index 7f1ea1084..9869026af 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -26,13 +26,7 @@ const ( // // TODO: This definition does not belong here. It belongs in a policy // package. - StandardVerifyFlags = ScriptBip16 | - ScriptVerifyStrictEncoding | - ScriptVerifyMinimalData | - ScriptDiscourageUpgradableNops | - ScriptVerifyCleanStack | - ScriptVerifyNullFail | - ScriptVerifyLowS + StandardVerifyFlags = ScriptDiscourageUpgradableNops ) // ScriptClass is an enumeration for the list of standard types of script. @@ -227,7 +221,7 @@ type ScriptInfo struct { // pair. It will error if the pair is in someway invalid such that they can not // be analysed, i.e. if they do not parse or the pkScript is not a push-only // script -func CalcScriptInfo(sigScript, pkScript []byte, bip16 bool) (*ScriptInfo, error) { +func CalcScriptInfo(sigScript, pkScript []byte, isP2SH bool) (*ScriptInfo, error) { sigPops, err := parseScript(sigScript) if err != nil { return nil, err @@ -253,7 +247,7 @@ func CalcScriptInfo(sigScript, pkScript []byte, bip16 bool) (*ScriptInfo, error) // All entries pushed to stack (or are OP_RESERVED and exec will fail). si.NumInputs = len(sigPops) - if si.PkScriptClass == ScriptHashTy && bip16 { + if si.PkScriptClass == ScriptHashTy && isP2SH { // The pay-to-hash-script is the final data push of the // signature script. script := sigPops[len(sigPops)-1].data @@ -552,7 +546,7 @@ func ExtractAtomicSwapDataPushes(version uint16, pkScript []byte) (*AtomicSwapDa copy(pushes.RecipientHash160[:], pops[9].data) copy(pushes.RefundHash160[:], pops[16].data) if pops[2].data != nil { - locktime, err := makeScriptNum(pops[2].data, true, 5) + locktime, err := makeScriptNum(pops[2].data, 5) if err != nil { return nil, nil } @@ -563,7 +557,7 @@ func ExtractAtomicSwapDataPushes(version uint16, pkScript []byte) (*AtomicSwapDa return nil, nil } if pops[11].data != nil { - locktime, err := makeScriptNum(pops[11].data, true, 5) + locktime, err := makeScriptNum(pops[11].data, 5) if err != nil { return nil, nil } diff --git a/txscript/standard_test.go b/txscript/standard_test.go index 42e3d1bd6..b29877323 100644 --- a/txscript/standard_test.go +++ b/txscript/standard_test.go @@ -379,7 +379,7 @@ func TestCalcScriptInfo(t *testing.T) { sigScript string pkScript string - bip16 bool + isP2SH bool scriptInfo ScriptInfo scriptInfoErr error @@ -392,7 +392,7 @@ func TestCalcScriptInfo(t *testing.T) { "SWAP ABS EQUAL", pkScript: "HASH160 DATA_20 0xfe441065b6532231de2fac56" + "3152205ec4f59c", - bip16: true, + isP2SH: true, scriptInfoErr: scriptError(ErrMalformedPush, ""), }, { @@ -402,7 +402,7 @@ func TestCalcScriptInfo(t *testing.T) { "SWAP ABS", pkScript: "HASH160 DATA_20 0xfe441065b6532231de2fac56" + "3152205ec4f59c74 EQUAL", - bip16: true, + isP2SH: true, scriptInfoErr: scriptError(ErrMalformedPush, ""), }, { @@ -413,7 +413,7 @@ func TestCalcScriptInfo(t *testing.T) { "CHECKSIG", pkScript: "HASH160 DATA_20 0xfe441065b6532231de2fac56" + "3152205ec4f59c74 EQUAL", - bip16: true, + isP2SH: true, scriptInfo: ScriptInfo{ PkScriptClass: ScriptHashTy, NumInputs: 3, @@ -429,7 +429,7 @@ func TestCalcScriptInfo(t *testing.T) { "SWAP ABS EQUAL", pkScript: "HASH160 DATA_20 0xfe441065b6532231de2fac56" + "3152205ec4f59c74 EQUAL", - bip16: true, + isP2SH: true, scriptInfo: ScriptInfo{ PkScriptClass: ScriptHashTy, NumInputs: 3, @@ -449,7 +449,7 @@ func TestCalcScriptInfo(t *testing.T) { "161718191a1b1c1d1e1f2021 DATA_33 0x010203040" + "5060708090a0b0c0d0e0f101112131415161718191a1" + "b1c1d1e1f2021 3 CHECKMULTISIG", - bip16: true, + isP2SH: true, scriptInfo: ScriptInfo{ PkScriptClass: MultiSigTy, NumInputs: 4, @@ -463,7 +463,7 @@ func TestCalcScriptInfo(t *testing.T) { sigScript := mustParseShortForm(test.sigScript) pkScript := mustParseShortForm(test.pkScript) - si, err := CalcScriptInfo(sigScript, pkScript, test.bip16) + si, err := CalcScriptInfo(sigScript, pkScript, test.isP2SH) if e := tstCheckScriptError(err, test.scriptInfoErr); e != nil { t.Errorf("scriptinfo test %q: %v", test.name, e) continue