github.com/developcrypto/go-ethereum@v1.9.7-0.20211101122705-8c450f8ba5db/accounts/abi/bind/bind_test.go (about)

     1  // Copyright 2016 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package bind
    18  
    19  import (
    20  	"fmt"
    21  	"io/ioutil"
    22  	"os"
    23  	"os/exec"
    24  	"path/filepath"
    25  	"runtime"
    26  	"strings"
    27  	"testing"
    28  
    29  	"github.com/DevelopCrypto/go-ethereum/common"
    30  )
    31  
    32  var bindTests = []struct {
    33  	name     string
    34  	contract string
    35  	bytecode []string
    36  	abi      []string
    37  	imports  string
    38  	tester   string
    39  	fsigs    []map[string]string
    40  	libs     map[string]string
    41  	types    []string
    42  }{
    43  	// Test that the binding is available in combined and separate forms too
    44  	{
    45  		`Empty`,
    46  		`contract NilContract {}`,
    47  		[]string{`606060405260068060106000396000f3606060405200`},
    48  		[]string{`[]`},
    49  		`"github.com/DevelopCrypto/go-ethereum/common"`,
    50  		`
    51  			if b, err := NewEmpty(common.Address{}, nil); b == nil || err != nil {
    52  				t.Fatalf("combined binding (%v) nil or error (%v) not nil", b, nil)
    53  			}
    54  			if b, err := NewEmptyCaller(common.Address{}, nil); b == nil || err != nil {
    55  				t.Fatalf("caller binding (%v) nil or error (%v) not nil", b, nil)
    56  			}
    57  			if b, err := NewEmptyTransactor(common.Address{}, nil); b == nil || err != nil {
    58  				t.Fatalf("transactor binding (%v) nil or error (%v) not nil", b, nil)
    59  			}
    60  		`,
    61  		nil,
    62  		nil,
    63  		nil,
    64  	},
    65  	// Test that all the official sample contracts bind correctly
    66  	{
    67  		`Token`,
    68  		`https://ethereum.org/token`,
    69  		[]string{`60606040526040516107fd3803806107fd83398101604052805160805160a05160c051929391820192909101600160a060020a0333166000908152600360209081526040822086905581548551838052601f6002600019610100600186161502019093169290920482018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193919290918801908390106100e857805160ff19168380011785555b506101189291505b8082111561017157600081556001016100b4565b50506002805460ff19168317905550505050610658806101a56000396000f35b828001600101855582156100ac579182015b828111156100ac5782518260005055916020019190600101906100fa565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061017557805160ff19168380011785555b506100c89291506100b4565b5090565b82800160010185558215610165579182015b8281111561016557825182600050559160200191906001019061018756606060405236156100775760e060020a600035046306fdde03811461007f57806323b872dd146100dc578063313ce5671461010e57806370a082311461011a57806395d89b4114610132578063a9059cbb1461018e578063cae9ca51146101bd578063dc3080f21461031c578063dd62ed3e14610341575b610365610002565b61036760008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b6103d5600435602435604435600160a060020a038316600090815260036020526040812054829010156104f357610002565b6103e760025460ff1681565b6103d560043560036020526000908152604090205481565b610367600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b610365600435602435600160a060020a033316600090815260036020526040902054819010156103f157610002565b60806020604435600481810135601f8101849004909302840160405260608381526103d5948235946024803595606494939101919081908382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546103d59081565b60046020818152903560009081526040808220909252602435815220546103d59081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b600160a060020a03821660009081526040902054808201101561041357610002565b806003600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806003600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b505050505081565b600160a060020a03831681526040812054808301101561051257610002565b600160a060020a0380851680835260046020908152604080852033949094168086529382528085205492855260058252808520938552929052908220548301111561055c57610002565b816003600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816003600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816005600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056`},
    70  		[]string{`[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"spentAllowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"},{"name":"tokenName","type":"string"},{"name":"decimalUnits","type":"uint8"},{"name":"tokenSymbol","type":"string"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]`},
    71  		`"github.com/DevelopCrypto/go-ethereum/common"`,
    72  		`
    73  			if b, err := NewToken(common.Address{}, nil); b == nil || err != nil {
    74  				t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
    75  			}
    76  		`,
    77  		nil,
    78  		nil,
    79  		nil,
    80  	},
    81  	{
    82  		`Crowdsale`,
    83  		`https://ethereum.org/crowdsale`,
    84  		[]string{`606060408190526007805460ff1916905560a0806105a883396101006040529051608051915160c05160e05160008054600160a060020a03199081169095178155670de0b6b3a7640000958602600155603c9093024201600355930260045560058054909216909217905561052f90819061007990396000f36060604052361561006c5760e060020a600035046301cb3b20811461008257806329dcb0cf1461014457806338af3eed1461014d5780636e66f6e91461015f5780637a3a0e84146101715780637b3e5e7b1461017a578063a035b1fe14610183578063dc0d3dff1461018c575b61020060075460009060ff161561032357610002565b61020060035460009042106103205760025460015490106103cb576002548154600160a060020a0316908290606082818181858883f150915460025460408051600160a060020a039390931683526020830191909152818101869052517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6945090819003909201919050a15b60405160008054600160a060020a039081169230909116319082818181858883f150506007805460ff1916600117905550505050565b6103a160035481565b6103ab600054600160a060020a031681565b6103ab600554600160a060020a031681565b6103a160015481565b6103a160025481565b6103a160045481565b6103be60043560068054829081101561000257506000526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f8101547ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d409190910154600160a060020a03919091169082565b005b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a815481600160a060020a030219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a9004600160a060020a0316600160a060020a031663a9059cbb3360046000505484046040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506000604051808303816000876161da5a03f11561000257505060408051600160a060020a03331681526020810184905260018183015290517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf692509081900360600190a15b50565b5060a0604052336060908152346080819052600680546001810180835592939282908280158290116102025760020281600202836000526020600020918201910161020291905b8082111561039d57805473ffffffffffffffffffffffffffffffffffffffff19168155600060019190910190815561036a565b5090565b6060908152602090f35b600160a060020a03166060908152602090f35b6060918252608052604090f35b5b60065481101561010e576006805482908110156100025760009182526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600680549254600160a060020a0316928490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460405190915082818181858883f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf660066000508281548110156100025760008290526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01548154600160a060020a039190911691908490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460408051600160a060020a0394909416845260208401919091526000838201525191829003606001919050a16001016103cc56`},
    85  		[]string{`[{"constant":false,"inputs":[],"name":"checkGoalReached","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"fundingGoal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"amountRaised","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"funders","outputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"type":"function"},{"inputs":[{"name":"ifSuccessfulSendTo","type":"address"},{"name":"fundingGoalInEthers","type":"uint256"},{"name":"durationInMinutes","type":"uint256"},{"name":"etherCostOfEachToken","type":"uint256"},{"name":"addressOfTokenUsedAsReward","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"isContribution","type":"bool"}],"name":"FundTransfer","type":"event"}]`},
    86  		`"github.com/DevelopCrypto/go-ethereum/common"`,
    87  		`
    88  			if b, err := NewCrowdsale(common.Address{}, nil); b == nil || err != nil {
    89  				t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
    90  			}
    91  		`,
    92  		nil,
    93  		nil,
    94  		nil,
    95  	},
    96  	{
    97  		`DAO`,
    98  		`https://ethereum.org/dao`,
    99  		[]string{`606060405260405160808061145f833960e06040529051905160a05160c05160008054600160a060020a03191633179055600184815560028490556003839055600780549182018082558280158290116100b8576003028160030283600052602060002091820191016100b891906101c8565b50506060919091015160029190910155600160a060020a0381166000146100a65760008054600160a060020a031916821790555b505050506111f18061026e6000396000f35b505060408051608081018252600080825260208281018290528351908101845281815292820192909252426060820152600780549194509250811015610002579081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889050815181546020848101517401000000000000000000000000000000000000000002600160a060020a03199290921690921760a060020a60ff021916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f9081018390048201949192919091019083901061023e57805160ff19168380011785555b50610072929150610226565b5050600060028201556001015b8082111561023a578054600160a860020a031916815560018181018054600080835592600290821615610100026000190190911604601f81901061020c57506101bb565b601f0160209004906000526020600020908101906101bb91905b8082111561023a5760008155600101610226565b5090565b828001600101855582156101af579182015b828111156101af57825182600050559160200191906001019061025056606060405236156100b95760e060020a6000350463013cf08b81146100bb578063237e9492146101285780633910682114610281578063400e3949146102995780635daf08ca146102a257806369bd34361461032f5780638160f0b5146103385780638da5cb5b146103415780639644fcbd14610353578063aa02a90f146103be578063b1050da5146103c7578063bcca1fd3146104b5578063d3c0715b146104dc578063eceb29451461058d578063f2fde38b1461067b575b005b61069c6004356004805482908110156100025790600052602060002090600a02016000506005810154815460018301546003840154600485015460068601546007870154600160a060020a03959095169750929560020194919360ff828116946101009093041692919089565b60408051602060248035600481810135601f81018590048502860185019096528585526107759581359591946044949293909201918190840183828082843750949650505050505050600060006004600050848154811015610002575090527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e600a8402908101547f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101904210806101e65750600481015460ff165b8061026757508060000160009054906101000a9004600160a060020a03168160010160005054846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f15090500193505050506040518091039020816007016000505414155b8061027757506001546005820154105b1561109257610002565b61077560043560066020526000908152604090205481565b61077560055481565b61078760043560078054829081101561000257506000526003026000805160206111d18339815191528101547fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a820154600160a060020a0382169260a060020a90920460ff16917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689019084565b61077560025481565b61077560015481565b610830600054600160a060020a031681565b604080516020604435600481810135601f81018490048402850184019095528484526100b9948135946024803595939460649492939101918190840183828082843750949650505050505050600080548190600160a060020a03908116339091161461084d57610002565b61077560035481565b604080516020604435600481810135601f8101849004840285018401909552848452610775948135946024803595939460649492939101918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a019093528282529698976084979196506024909101945090925082915084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806104ab5750604081205460078054909190811015610002579082526003026000805160206111d1833981519152015460a060020a900460ff16155b15610ce557610002565b6100b960043560243560443560005433600160a060020a03908116911614610b1857610002565b604080516020604435600481810135601f810184900484028501840190955284845261077594813594602480359593946064949293910191819084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806105835750604081205460078054909190811015610002579082526003026000805160206111d18339815191520181505460a060020a900460ff16155b15610f1d57610002565b604080516020606435600481810135601f81018490048402850184019095528484526107759481359460248035956044359560849492019190819084018382808284375094965050505050505060006000600460005086815481101561000257908252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01815090508484846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005054149150610cdc565b6100b960043560005433600160a060020a03908116911614610f0857610002565b604051808a600160a060020a031681526020018981526020018060200188815260200187815260200186815260200185815260200184815260200183815260200182810382528981815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b50509a505050505050505050505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a038616815260208101859052606081018390526080918101828152845460026001821615610100026000190190911604928201839052909160a08301908590801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b50509550505050505060405180910390f35b60408051600160a060020a03929092168252519081900360200190f35b600160a060020a03851660009081526006602052604081205414156108a957604060002060078054918290556001820180825582801582901161095c5760030281600302836000526020600020918201910161095c9190610a4f565b600160a060020a03851660009081526006602052604090205460078054919350908390811015610002575060005250600381026000805160206111d183398151915201805474ff0000000000000000000000000000000000000000191660a060020a85021781555b60408051600160a060020a03871681526020810186905281517f27b022af4a8347100c7a041ce5ccf8e14d644ff05de696315196faae8cd50c9b929181900390910190a15050505050565b505050915081506080604051908101604052808681526020018581526020018481526020014281526020015060076000508381548110156100025790600052602060002090600302016000508151815460208481015160a060020a02600160a060020a03199290921690921774ff00000000000000000000000000000000000000001916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f90810183900482019491929190910190839010610ad357805160ff19168380011785555b50610b03929150610abb565b5050600060028201556001015b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610aa15750610a42565b601f016020900490600052602060002090810190610a4291905b80821115610acf5760008155600101610abb565b5090565b82800160010185558215610a36579182015b82811115610a36578251826000505591602001919060010190610ae5565b50506060919091015160029190910155610911565b600183905560028290556003819055604080518481526020810184905280820183905290517fa439d3fa452be5e0e1e24a8145e715f4fd8b9c08c96a42fd82a855a85e5d57de9181900360600190a1505050565b50508585846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005081905550600260005054603c024201816003016000508190555060008160040160006101000a81548160ff0219169083021790555060008160040160016101000a81548160ff02191690830217905550600081600501600050819055507f646fec02522b41e7125cfc859a64fd4f4cefd5dc3b6237ca0abe251ded1fa881828787876040518085815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1600182016005555b50949350505050565b6004805460018101808355909190828015829011610d1c57600a0281600a028360005260206000209182019101610d1c9190610db8565b505060048054929450918491508110156100025790600052602060002090600a02016000508054600160a060020a031916871781556001818101879055855160028381018054600082815260209081902096975091959481161561010002600019011691909104601f90810182900484019391890190839010610ed857805160ff19168380011785555b50610b6c929150610abb565b50506001015b80821115610acf578054600160a060020a03191681556000600182810182905560028381018054848255909281161561010002600019011604601f819010610e9c57505b5060006003830181905560048301805461ffff191690556005830181905560068301819055600783018190556008830180548282559082526020909120610db2916002028101905b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610eba57505b5050600101610e44565b601f016020900490600052602060002090810190610dfc9190610abb565b601f016020900490600052602060002090810190610e929190610abb565b82800160010185558215610da6579182015b82811115610da6578251826000505591602001919060010190610eea565b60008054600160a060020a0319168217905550565b600480548690811015610002576000918252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905033600160a060020a0316600090815260098201602052604090205490915060ff1660011415610f8457610002565b33600160a060020a031660009081526009820160205260409020805460ff1916600190811790915560058201805490910190558315610fcd576006810180546001019055610fda565b6006810180546000190190555b7fc34f869b7ff431b034b7b9aea9822dac189a685e0b015c7d1be3add3f89128e8858533866040518085815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561107a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1509392505050565b6006810154600354901315611158578060000160009054906101000a9004600160a060020a0316600160a060020a03168160010160005054670de0b6b3a76400000284604051808280519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156111225780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876185025a03f15050505060048101805460ff191660011761ff00191661010017905561116d565b60048101805460ff191660011761ff00191690555b60068101546005820154600483015460408051888152602081019490945283810192909252610100900460ff166060830152517fd220b7272a8b6d0d7d6bcdace67b936a8f175e6d5c1b3ee438b72256b32ab3af9181900360800190a1509291505056a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688`},
   100  		[]string{`[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"description","type":"string"},{"name":"votingDeadline","type":"uint256"},{"name":"executed","type":"bool"},{"name":"proposalPassed","type":"bool"},{"name":"numberOfVotes","type":"uint256"},{"name":"currentResult","type":"int256"},{"name":"proposalHash","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"executeProposal","outputs":[{"name":"result","type":"int256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"memberId","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"numProposals","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"members","outputs":[{"name":"member","type":"address"},{"name":"canVote","type":"bool"},{"name":"name","type":"string"},{"name":"memberSince","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"debatingPeriodInMinutes","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minimumQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"targetMember","type":"address"},{"name":"canVote","type":"bool"},{"name":"memberName","type":"string"}],"name":"changeMembership","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"majorityMargin","outputs":[{"name":"","type":"int256"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"JobDescription","type":"string"},{"name":"transactionBytecode","type":"bytes"}],"name":"newProposal","outputs":[{"name":"proposalID","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"}],"name":"changeVotingRules","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"supportsProposal","type":"bool"},{"name":"justificationText","type":"string"}],"name":"vote","outputs":[{"name":"voteID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"checkProposalCode","outputs":[{"name":"codeChecksOut","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"type":"function"},{"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"},{"name":"congressLeader","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"position","type":"bool"},{"indexed":false,"name":"voter","type":"address"},{"indexed":false,"name":"justification","type":"string"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"result","type":"int256"},{"indexed":false,"name":"quorum","type":"uint256"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProposalTallied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"member","type":"address"},{"indexed":false,"name":"isMember","type":"bool"}],"name":"MembershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minimumQuorum","type":"uint256"},{"indexed":false,"name":"debatingPeriodInMinutes","type":"uint256"},{"indexed":false,"name":"majorityMargin","type":"int256"}],"name":"ChangeOfRules","type":"event"}]`},
   101  		`"github.com/DevelopCrypto/go-ethereum/common"`,
   102  		`
   103  			if b, err := NewDAO(common.Address{}, nil); b == nil || err != nil {
   104  				t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
   105  			}
   106  		`,
   107  		nil,
   108  		nil,
   109  		nil,
   110  	},
   111  	// Test that named and anonymous inputs are handled correctly
   112  	{
   113  		`InputChecker`, ``, []string{``},
   114  		[]string{`
   115  			[
   116  				{"type":"function","name":"noInput","constant":true,"inputs":[],"outputs":[]},
   117  				{"type":"function","name":"namedInput","constant":true,"inputs":[{"name":"str","type":"string"}],"outputs":[]},
   118  				{"type":"function","name":"anonInput","constant":true,"inputs":[{"name":"","type":"string"}],"outputs":[]},
   119  				{"type":"function","name":"namedInputs","constant":true,"inputs":[{"name":"str1","type":"string"},{"name":"str2","type":"string"}],"outputs":[]},
   120  				{"type":"function","name":"anonInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"","type":"string"}],"outputs":[]},
   121  				{"type":"function","name":"mixedInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"str","type":"string"}],"outputs":[]}
   122  			]
   123  		`},
   124  		`
   125  			"fmt"
   126  
   127  			"github.com/DevelopCrypto/go-ethereum/common"
   128  		`,
   129  		`if b, err := NewInputChecker(common.Address{}, nil); b == nil || err != nil {
   130  			 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
   131  		 } else if false { // Don't run, just compile and test types
   132  			 var err error
   133  
   134  			 err = b.NoInput(nil)
   135  			 err = b.NamedInput(nil, "")
   136  			 err = b.AnonInput(nil, "")
   137  			 err = b.NamedInputs(nil, "", "")
   138  			 err = b.AnonInputs(nil, "", "")
   139  			 err = b.MixedInputs(nil, "", "")
   140  
   141  			 fmt.Println(err)
   142  		 }`,
   143  		nil,
   144  		nil,
   145  		nil,
   146  	},
   147  	// Test that named and anonymous outputs are handled correctly
   148  	{
   149  		`OutputChecker`, ``, []string{``},
   150  		[]string{`
   151  			[
   152  				{"type":"function","name":"noOutput","constant":true,"inputs":[],"outputs":[]},
   153  				{"type":"function","name":"namedOutput","constant":true,"inputs":[],"outputs":[{"name":"str","type":"string"}]},
   154  				{"type":"function","name":"anonOutput","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"}]},
   155  				{"type":"function","name":"namedOutputs","constant":true,"inputs":[],"outputs":[{"name":"str1","type":"string"},{"name":"str2","type":"string"}]},
   156  				{"type":"function","name":"collidingOutputs","constant":true,"inputs":[],"outputs":[{"name":"str","type":"string"},{"name":"Str","type":"string"}]},
   157  				{"type":"function","name":"anonOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"","type":"string"}]},
   158  				{"type":"function","name":"mixedOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"str","type":"string"}]}
   159  			]
   160  		`},
   161  		`
   162  			"fmt"
   163  
   164  			"github.com/DevelopCrypto/go-ethereum/common"
   165  		`,
   166  		`if b, err := NewOutputChecker(common.Address{}, nil); b == nil || err != nil {
   167  			 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
   168  		 } else if false { // Don't run, just compile and test types
   169  			 var str1, str2 string
   170  			 var err error
   171  
   172  			 err              = b.NoOutput(nil)
   173  			 str1, err        = b.NamedOutput(nil)
   174  			 str1, err        = b.AnonOutput(nil)
   175  			 res, _          := b.NamedOutputs(nil)
   176  			 str1, str2, err  = b.CollidingOutputs(nil)
   177  			 str1, str2, err  = b.AnonOutputs(nil)
   178  			 str1, str2, err  = b.MixedOutputs(nil)
   179  
   180  			 fmt.Println(str1, str2, res.Str1, res.Str2, err)
   181  		 }`,
   182  		nil,
   183  		nil,
   184  		nil,
   185  	},
   186  	// Tests that named, anonymous and indexed events are handled correctly
   187  	{
   188  		`EventChecker`, ``, []string{``},
   189  		[]string{`
   190  			[
   191  				{"type":"event","name":"empty","inputs":[]},
   192  				{"type":"event","name":"indexed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256","indexed":true}]},
   193  				{"type":"event","name":"mixed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256"}]},
   194  				{"type":"event","name":"anonymous","anonymous":true,"inputs":[]},
   195  				{"type":"event","name":"dynamic","inputs":[{"name":"idxStr","type":"string","indexed":true},{"name":"idxDat","type":"bytes","indexed":true},{"name":"str","type":"string"},{"name":"dat","type":"bytes"}]}
   196  			]
   197  		`},
   198  		`
   199  			"fmt"
   200  			"math/big"
   201  			"reflect"
   202  
   203  			"github.com/DevelopCrypto/go-ethereum/common"
   204  		`,
   205  		`if e, err := NewEventChecker(common.Address{}, nil); e == nil || err != nil {
   206  			 t.Fatalf("binding (%v) nil or error (%v) not nil", e, nil)
   207  		 } else if false { // Don't run, just compile and test types
   208  			 var (
   209  				 err  error
   210  			   res  bool
   211  				 str  string
   212  				 dat  []byte
   213  				 hash common.Hash
   214  			 )
   215  			 _, err = e.FilterEmpty(nil)
   216  			 _, err = e.FilterIndexed(nil, []common.Address{}, []*big.Int{})
   217  
   218  			 mit, err := e.FilterMixed(nil, []common.Address{})
   219  
   220  			 res = mit.Next()  // Make sure the iterator has a Next method
   221  			 err = mit.Error() // Make sure the iterator has an Error method
   222  			 err = mit.Close() // Make sure the iterator has a Close method
   223  
   224  			 fmt.Println(mit.Event.Raw.BlockHash) // Make sure the raw log is contained within the results
   225  			 fmt.Println(mit.Event.Num)           // Make sure the unpacked non-indexed fields are present
   226  			 fmt.Println(mit.Event.Addr)          // Make sure the reconstructed indexed fields are present
   227  
   228  			 dit, err := e.FilterDynamic(nil, []string{}, [][]byte{})
   229  
   230  			 str  = dit.Event.Str    // Make sure non-indexed strings retain their type
   231  			 dat  = dit.Event.Dat    // Make sure non-indexed bytes retain their type
   232  			 hash = dit.Event.IdxStr // Make sure indexed strings turn into hashes
   233  			 hash = dit.Event.IdxDat // Make sure indexed bytes turn into hashes
   234  
   235  			 sink := make(chan *EventCheckerMixed)
   236  			 sub, err := e.WatchMixed(nil, sink, []common.Address{})
   237  			 defer sub.Unsubscribe()
   238  
   239  			 event := <-sink
   240  			 fmt.Println(event.Raw.BlockHash) // Make sure the raw log is contained within the results
   241  			 fmt.Println(event.Num)           // Make sure the unpacked non-indexed fields are present
   242  			 fmt.Println(event.Addr)          // Make sure the reconstructed indexed fields are present
   243  
   244  			 fmt.Println(res, str, dat, hash, err)
   245  		 }
   246  		 // Run a tiny reflection test to ensure disallowed methods don't appear
   247  		 if _, ok := reflect.TypeOf(&EventChecker{}).MethodByName("FilterAnonymous"); ok {
   248  		 	t.Errorf("binding has disallowed method (FilterAnonymous)")
   249  		 }`,
   250  		nil,
   251  		nil,
   252  		nil,
   253  	},
   254  	// Test that contract interactions (deploy, transact and call) generate working code
   255  	{
   256  		`Interactor`,
   257  		`
   258  			contract Interactor {
   259  				string public deployString;
   260  				string public transactString;
   261  
   262  				function Interactor(string str) {
   263  				  deployString = str;
   264  				}
   265  
   266  				function transact(string str) {
   267  				  transactString = str;
   268  				}
   269  			}
   270  		`,
   271  		[]string{`6060604052604051610328380380610328833981016040528051018060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10608d57805160ff19168380011785555b50607c9291505b8082111560ba57838155600101606b565b50505061026a806100be6000396000f35b828001600101855582156064579182015b828111156064578251826000505591602001919060010190609e565b509056606060405260e060020a60003504630d86a0e181146100315780636874e8091461008d578063d736c513146100ea575b005b610190600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b61019060008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b60206004803580820135601f81018490049093026080908101604052606084815261002f946024939192918401918190838280828437509496505050505050508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023157805160ff19168380011785555b506102619291505b808211156102665760008155830161017d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b82800160010185558215610175579182015b82811115610175578251826000505591602001919060010190610243565b505050565b509056`},
   272  		[]string{`[{"constant":true,"inputs":[],"name":"transactString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"deployString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"str","type":"string"}],"name":"transact","outputs":[],"type":"function"},{"inputs":[{"name":"str","type":"string"}],"type":"constructor"}]`},
   273  		`
   274  			"math/big"
   275  
   276  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   277  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   278  			"github.com/DevelopCrypto/go-ethereum/core"
   279  			"github.com/DevelopCrypto/go-ethereum/crypto"
   280  		`,
   281  		`
   282  			// Generate a new random account and a funded simulator
   283  			key, _ := crypto.GenerateKey()
   284  			auth := bind.NewKeyedTransactor(key)
   285  
   286  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   287  			defer sim.Close()
   288  
   289  			// Deploy an interaction tester contract and call a transaction on it
   290  			_, _, interactor, err := DeployInteractor(auth, sim, "Deploy string")
   291  			if err != nil {
   292  				t.Fatalf("Failed to deploy interactor contract: %v", err)
   293  			}
   294  			if _, err := interactor.Transact(auth, "Transact string"); err != nil {
   295  				t.Fatalf("Failed to transact with interactor contract: %v", err)
   296  			}
   297  			// Commit all pending transactions in the simulator and check the contract state
   298  			sim.Commit()
   299  
   300  			if str, err := interactor.DeployString(nil); err != nil {
   301  				t.Fatalf("Failed to retrieve deploy string: %v", err)
   302  			} else if str != "Deploy string" {
   303  				t.Fatalf("Deploy string mismatch: have '%s', want 'Deploy string'", str)
   304  			}
   305  			if str, err := interactor.TransactString(nil); err != nil {
   306  				t.Fatalf("Failed to retrieve transact string: %v", err)
   307  			} else if str != "Transact string" {
   308  				t.Fatalf("Transact string mismatch: have '%s', want 'Transact string'", str)
   309  			}
   310  		`,
   311  		nil,
   312  		nil,
   313  		nil,
   314  	},
   315  	// Tests that plain values can be properly returned and deserialized
   316  	{
   317  		`Getter`,
   318  		`
   319  			contract Getter {
   320  				function getter() constant returns (string, int, bytes32) {
   321  					return ("Hi", 1, sha3(""));
   322  				}
   323  			}
   324  		`,
   325  		[]string{`606060405260dc8060106000396000f3606060405260e060020a6000350463993a04b78114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`},
   326  		[]string{`[{"constant":true,"inputs":[],"name":"getter","outputs":[{"name":"","type":"string"},{"name":"","type":"int256"},{"name":"","type":"bytes32"}],"type":"function"}]`},
   327  		`
   328  			"math/big"
   329  
   330  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   331  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   332  			"github.com/DevelopCrypto/go-ethereum/core"
   333  			"github.com/DevelopCrypto/go-ethereum/crypto"
   334  		`,
   335  		`
   336  			// Generate a new random account and a funded simulator
   337  			key, _ := crypto.GenerateKey()
   338  			auth := bind.NewKeyedTransactor(key)
   339  
   340  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   341  			defer sim.Close()
   342  
   343  			// Deploy a tuple tester contract and execute a structured call on it
   344  			_, _, getter, err := DeployGetter(auth, sim)
   345  			if err != nil {
   346  				t.Fatalf("Failed to deploy getter contract: %v", err)
   347  			}
   348  			sim.Commit()
   349  
   350  			if str, num, _, err := getter.Getter(nil); err != nil {
   351  				t.Fatalf("Failed to call anonymous field retriever: %v", err)
   352  			} else if str != "Hi" || num.Cmp(big.NewInt(1)) != 0 {
   353  				t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", str, num, "Hi", 1)
   354  			}
   355  		`,
   356  		nil,
   357  		nil,
   358  		nil,
   359  	},
   360  	// Tests that tuples can be properly returned and deserialized
   361  	{
   362  		`Tupler`,
   363  		`
   364  			contract Tupler {
   365  				function tuple() constant returns (string a, int b, bytes32 c) {
   366  					return ("Hi", 1, sha3(""));
   367  				}
   368  			}
   369  		`,
   370  		[]string{`606060405260dc8060106000396000f3606060405260e060020a60003504633175aae28114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`},
   371  		[]string{`[{"constant":true,"inputs":[],"name":"tuple","outputs":[{"name":"a","type":"string"},{"name":"b","type":"int256"},{"name":"c","type":"bytes32"}],"type":"function"}]`},
   372  		`
   373  			"math/big"
   374  
   375  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   376  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   377  			"github.com/DevelopCrypto/go-ethereum/core"
   378  			"github.com/DevelopCrypto/go-ethereum/crypto"
   379  		`,
   380  		`
   381  			// Generate a new random account and a funded simulator
   382  			key, _ := crypto.GenerateKey()
   383  			auth := bind.NewKeyedTransactor(key)
   384  
   385  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   386  			defer sim.Close()
   387  
   388  			// Deploy a tuple tester contract and execute a structured call on it
   389  			_, _, tupler, err := DeployTupler(auth, sim)
   390  			if err != nil {
   391  				t.Fatalf("Failed to deploy tupler contract: %v", err)
   392  			}
   393  			sim.Commit()
   394  
   395  			if res, err := tupler.Tuple(nil); err != nil {
   396  				t.Fatalf("Failed to call structure retriever: %v", err)
   397  			} else if res.A != "Hi" || res.B.Cmp(big.NewInt(1)) != 0 {
   398  				t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", res.A, res.B, "Hi", 1)
   399  			}
   400  		`,
   401  		nil,
   402  		nil,
   403  		nil,
   404  	},
   405  	// Tests that arrays/slices can be properly returned and deserialized.
   406  	// Only addresses are tested, remainder just compiled to keep the test small.
   407  	{
   408  		`Slicer`,
   409  		`
   410  			contract Slicer {
   411  				function echoAddresses(address[] input) constant returns (address[] output) {
   412  					return input;
   413  				}
   414  				function echoInts(int[] input) constant returns (int[] output) {
   415  					return input;
   416  				}
   417  				function echoFancyInts(uint24[23] input) constant returns (uint24[23] output) {
   418  					return input;
   419  				}
   420  				function echoBools(bool[] input) constant returns (bool[] output) {
   421  					return input;
   422  				}
   423  			}
   424  		`,
   425  		[]string{`606060405261015c806100126000396000f3606060405260e060020a6000350463be1127a3811461003c578063d88becc014610092578063e15a3db71461003c578063f637e5891461003c575b005b604080516020600480358082013583810285810185019096528085526100ee959294602494909392850192829185019084908082843750949650505050505050604080516020810190915260009052805b919050565b604080516102e0818101909252610138916004916102e491839060179083908390808284375090955050505050506102e0604051908101604052806017905b60008152602001906001900390816100d15790505081905061008d565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600f02600301f1509050019250505060405180910390f35b60405180826102e0808381846000600461015cf15090500191505060405180910390f3`},
   426  		[]string{`[{"constant":true,"inputs":[{"name":"input","type":"address[]"}],"name":"echoAddresses","outputs":[{"name":"output","type":"address[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"uint24[23]"}],"name":"echoFancyInts","outputs":[{"name":"output","type":"uint24[23]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"int256[]"}],"name":"echoInts","outputs":[{"name":"output","type":"int256[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"bool[]"}],"name":"echoBools","outputs":[{"name":"output","type":"bool[]"}],"type":"function"}]`},
   427  		`
   428  			"math/big"
   429  			"reflect"
   430  
   431  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   432  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   433  			"github.com/DevelopCrypto/go-ethereum/common"
   434  			"github.com/DevelopCrypto/go-ethereum/core"
   435  			"github.com/DevelopCrypto/go-ethereum/crypto"
   436  		`,
   437  		`
   438  			// Generate a new random account and a funded simulator
   439  			key, _ := crypto.GenerateKey()
   440  			auth := bind.NewKeyedTransactor(key)
   441  
   442  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   443  			defer sim.Close()
   444  
   445  			// Deploy a slice tester contract and execute a n array call on it
   446  			_, _, slicer, err := DeploySlicer(auth, sim)
   447  			if err != nil {
   448  					t.Fatalf("Failed to deploy slicer contract: %v", err)
   449  			}
   450  			sim.Commit()
   451  
   452  			if out, err := slicer.EchoAddresses(nil, []common.Address{auth.From, common.Address{}}); err != nil {
   453  					t.Fatalf("Failed to call slice echoer: %v", err)
   454  			} else if !reflect.DeepEqual(out, []common.Address{auth.From, common.Address{}}) {
   455  					t.Fatalf("Slice return mismatch: have %v, want %v", out, []common.Address{auth.From, common.Address{}})
   456  			}
   457  		`,
   458  		nil,
   459  		nil,
   460  		nil,
   461  	},
   462  	// Tests that anonymous default methods can be correctly invoked
   463  	{
   464  		`Defaulter`,
   465  		`
   466  			contract Defaulter {
   467  				address public caller;
   468  
   469  				function() {
   470  					caller = msg.sender;
   471  				}
   472  			}
   473  		`,
   474  		[]string{`6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`},
   475  		[]string{`[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`},
   476  		`
   477  			"math/big"
   478  
   479  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   480  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   481  			"github.com/DevelopCrypto/go-ethereum/core"
   482  			"github.com/DevelopCrypto/go-ethereum/crypto"
   483  		`,
   484  		`
   485  			// Generate a new random account and a funded simulator
   486  			key, _ := crypto.GenerateKey()
   487  			auth := bind.NewKeyedTransactor(key)
   488  
   489  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   490  			defer sim.Close()
   491  
   492  			// Deploy a default method invoker contract and execute its default method
   493  			_, _, defaulter, err := DeployDefaulter(auth, sim)
   494  			if err != nil {
   495  				t.Fatalf("Failed to deploy defaulter contract: %v", err)
   496  			}
   497  			if _, err := (&DefaulterRaw{defaulter}).Transfer(auth); err != nil {
   498  				t.Fatalf("Failed to invoke default method: %v", err)
   499  			}
   500  			sim.Commit()
   501  
   502  			if caller, err := defaulter.Caller(nil); err != nil {
   503  				t.Fatalf("Failed to call address retriever: %v", err)
   504  			} else if (caller != auth.From) {
   505  				t.Fatalf("Address mismatch: have %v, want %v", caller, auth.From)
   506  			}
   507  		`,
   508  		nil,
   509  		nil,
   510  		nil,
   511  	},
   512  	// Tests that non-existent contracts are reported as such (though only simulator test)
   513  	{
   514  		`NonExistent`,
   515  		`
   516  			contract NonExistent {
   517  				function String() constant returns(string) {
   518  					return "I don't exist";
   519  				}
   520  			}
   521  		`,
   522  		[]string{`6060604052609f8060106000396000f3606060405260e060020a6000350463f97a60058114601a575b005b600060605260c0604052600d60809081527f4920646f6e27742065786973740000000000000000000000000000000000000060a052602060c0908152600d60e081905281906101009060a09080838184600060046012f15050815172ffffffffffffffffffffffffffffffffffffff1916909152505060405161012081900392509050f3`},
   523  		[]string{`[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"type":"function"}]`},
   524  		`
   525  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   526  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   527  			"github.com/DevelopCrypto/go-ethereum/common"
   528  			"github.com/DevelopCrypto/go-ethereum/core"
   529  		`,
   530  		`
   531  			// Create a simulator and wrap a non-deployed contract
   532  
   533  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{}, uint64(10000000000))
   534  			defer sim.Close()
   535  
   536  			nonexistent, err := NewNonExistent(common.Address{}, sim)
   537  			if err != nil {
   538  				t.Fatalf("Failed to access non-existent contract: %v", err)
   539  			}
   540  			// Ensure that contract calls fail with the appropriate error
   541  			if res, err := nonexistent.String(nil); err == nil {
   542  				t.Fatalf("Call succeeded on non-existent contract: %v", res)
   543  			} else if (err != bind.ErrNoCode) {
   544  				t.Fatalf("Error mismatch: have %v, want %v", err, bind.ErrNoCode)
   545  			}
   546  		`,
   547  		nil,
   548  		nil,
   549  		nil,
   550  	},
   551  	// Tests that gas estimation works for contracts with weird gas mechanics too.
   552  	{
   553  		`FunkyGasPattern`,
   554  		`
   555  			contract FunkyGasPattern {
   556  				string public field;
   557  
   558  				function SetField(string value) {
   559  					// This check will screw gas estimation! Good, good!
   560  					if (msg.gas < 100000) {
   561  						throw;
   562  					}
   563  					field = value;
   564  				}
   565  			}
   566  		`,
   567  		[]string{`606060405261021c806100126000396000f3606060405260e060020a600035046323fcf32a81146100265780634f28bf0e1461007b575b005b6040805160206004803580820135601f8101849004840285018401909552848452610024949193602493909291840191908190840183828082843750949650505050505050620186a05a101561014e57610002565b6100db60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281529291908301828280156102145780601f106101e957610100808354040283529160200191610214565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561013b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b505050565b8060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101b557805160ff19168380011785555b506101499291505b808211156101e557600081556001016101a1565b82800160010185558215610199579182015b828111156101995782518260005055916020019190600101906101c7565b5090565b820191906000526020600020905b8154815290600101906020018083116101f757829003601f168201915b50505050508156`},
   568  		[]string{`[{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"SetField","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"field","outputs":[{"name":"","type":"string"}],"type":"function"}]`},
   569  		`
   570  			"math/big"
   571  
   572  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   573  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   574  			"github.com/DevelopCrypto/go-ethereum/core"
   575  			"github.com/DevelopCrypto/go-ethereum/crypto"
   576  		`,
   577  		`
   578  			// Generate a new random account and a funded simulator
   579  			key, _ := crypto.GenerateKey()
   580  			auth := bind.NewKeyedTransactor(key)
   581  
   582  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   583  			defer sim.Close()
   584  
   585  			// Deploy a funky gas pattern contract
   586  			_, _, limiter, err := DeployFunkyGasPattern(auth, sim)
   587  			if err != nil {
   588  				t.Fatalf("Failed to deploy funky contract: %v", err)
   589  			}
   590  			sim.Commit()
   591  
   592  			// Set the field with automatic estimation and check that it succeeds
   593  			if _, err := limiter.SetField(auth, "automatic"); err != nil {
   594  				t.Fatalf("Failed to call automatically gased transaction: %v", err)
   595  			}
   596  			sim.Commit()
   597  
   598  			if field, _ := limiter.Field(nil); field != "automatic" {
   599  				t.Fatalf("Field mismatch: have %v, want %v", field, "automatic")
   600  			}
   601  		`,
   602  		nil,
   603  		nil,
   604  		nil,
   605  	},
   606  	// Test that constant functions can be called from an (optional) specified address
   607  	{
   608  		`CallFrom`,
   609  		`
   610  			contract CallFrom {
   611  				function callFrom() constant returns(address) {
   612  					return msg.sender;
   613  				}
   614  			}
   615  		`, []string{`6060604052346000575b6086806100176000396000f300606060405263ffffffff60e060020a60003504166349f8e98281146022575b6000565b34600057602c6055565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b335b905600a165627a7a72305820aef6b7685c0fa24ba6027e4870404a57df701473fe4107741805c19f5138417c0029`},
   616  		[]string{`[{"constant":true,"inputs":[],"name":"callFrom","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"}]`},
   617  		`
   618  			"math/big"
   619  
   620  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   621  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   622  			"github.com/DevelopCrypto/go-ethereum/common"
   623  			"github.com/DevelopCrypto/go-ethereum/core"
   624  			"github.com/DevelopCrypto/go-ethereum/crypto"
   625  		`,
   626  		`
   627  			// Generate a new random account and a funded simulator
   628  			key, _ := crypto.GenerateKey()
   629  			auth := bind.NewKeyedTransactor(key)
   630  
   631  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   632  			defer sim.Close()
   633  
   634  			// Deploy a sender tester contract and execute a structured call on it
   635  			_, _, callfrom, err := DeployCallFrom(auth, sim)
   636  			if err != nil {
   637  				t.Fatalf("Failed to deploy sender contract: %v", err)
   638  			}
   639  			sim.Commit()
   640  
   641  			if res, err := callfrom.CallFrom(nil); err != nil {
   642  				t.Errorf("Failed to call constant function: %v", err)
   643  			} else if res != (common.Address{}) {
   644  				t.Errorf("Invalid address returned, want: %x, got: %x", (common.Address{}), res)
   645  			}
   646  
   647  			for _, addr := range []common.Address{common.Address{}, common.Address{1}, common.Address{2}} {
   648  				if res, err := callfrom.CallFrom(&bind.CallOpts{From: addr}); err != nil {
   649  					t.Fatalf("Failed to call constant function: %v", err)
   650  				} else if res != addr {
   651  					t.Fatalf("Invalid address returned, want: %x, got: %x", addr, res)
   652  				}
   653  			}
   654  		`,
   655  		nil,
   656  		nil,
   657  		nil,
   658  	},
   659  	// Tests that methods and returns with underscores inside work correctly.
   660  	{
   661  		`Underscorer`,
   662  		`
   663  		contract Underscorer {
   664  			function UnderscoredOutput() constant returns (int _int, string _string) {
   665  				return (314, "pi");
   666  			}
   667  			function LowerLowerCollision() constant returns (int _res, int res) {
   668  				return (1, 2);
   669  			}
   670  			function LowerUpperCollision() constant returns (int _res, int Res) {
   671  				return (1, 2);
   672  			}
   673  			function UpperLowerCollision() constant returns (int _Res, int res) {
   674  				return (1, 2);
   675  			}
   676  			function UpperUpperCollision() constant returns (int _Res, int Res) {
   677  				return (1, 2);
   678  			}
   679  			function PurelyUnderscoredOutput() constant returns (int _, int res) {
   680  				return (1, 2);
   681  			}
   682  			function AllPurelyUnderscoredOutput() constant returns (int _, int __) {
   683  				return (1, 2);
   684  			}
   685  			function _under_scored_func() constant returns (int _int) {
   686  				return 0;
   687  			}
   688  		}
   689  		`, []string{`6060604052341561000f57600080fd5b6103858061001e6000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303a592131461009357806346546dbe146100c357806367e6633d146100ec5780639df4848514610181578063af7486ab146101b1578063b564b34d146101e1578063e02ab24d14610211578063e409ca4514610241575b600080fd5b341561009e57600080fd5b6100a6610271565b604051808381526020018281526020019250505060405180910390f35b34156100ce57600080fd5b6100d6610286565b6040518082815260200191505060405180910390f35b34156100f757600080fd5b6100ff61028e565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014557808201518184015260208101905061012a565b50505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018c57600080fd5b6101946102dc565b604051808381526020018281526020019250505060405180910390f35b34156101bc57600080fd5b6101c46102f1565b604051808381526020018281526020019250505060405180910390f35b34156101ec57600080fd5b6101f4610306565b604051808381526020018281526020019250505060405180910390f35b341561021c57600080fd5b61022461031b565b604051808381526020018281526020019250505060405180910390f35b341561024c57600080fd5b610254610330565b604051808381526020018281526020019250505060405180910390f35b60008060016002819150809050915091509091565b600080905090565b6000610298610345565b61013a8090506040805190810160405280600281526020017f7069000000000000000000000000000000000000000000000000000000000000815250915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b6020604051908101604052806000815250905600a165627a7a72305820d1a53d9de9d1e3d55cb3dc591900b63c4f1ded79114f7b79b332684840e186a40029`},
   690  		[]string{`[{"constant":true,"inputs":[],"name":"LowerUpperCollision","outputs":[{"name":"_res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_under_scored_func","outputs":[{"name":"_int","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UnderscoredOutput","outputs":[{"name":"_int","type":"int256"},{"name":"_string","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperLowerCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AllPurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"__","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperUpperCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LowerLowerCollision","outputs":[{"name":"_res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"}]`},
   691  		`
   692  			"fmt"
   693  			"math/big"
   694  
   695  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   696  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   697  			"github.com/DevelopCrypto/go-ethereum/core"
   698  			"github.com/DevelopCrypto/go-ethereum/crypto"
   699  		`,
   700  		`
   701  			// Generate a new random account and a funded simulator
   702  			key, _ := crypto.GenerateKey()
   703  			auth := bind.NewKeyedTransactor(key)
   704  
   705  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   706  			defer sim.Close()
   707  
   708  			// Deploy a underscorer tester contract and execute a structured call on it
   709  			_, _, underscorer, err := DeployUnderscorer(auth, sim)
   710  			if err != nil {
   711  				t.Fatalf("Failed to deploy underscorer contract: %v", err)
   712  			}
   713  			sim.Commit()
   714  
   715  			// Verify that underscored return values correctly parse into structs
   716  			if res, err := underscorer.UnderscoredOutput(nil); err != nil {
   717  				t.Errorf("Failed to call constant function: %v", err)
   718  			} else if res.Int.Cmp(big.NewInt(314)) != 0 || res.String != "pi" {
   719  				t.Errorf("Invalid result, want: {314, \"pi\"}, got: %+v", res)
   720  			}
   721  			// Verify that underscored and non-underscored name collisions force tuple outputs
   722  			var a, b *big.Int
   723  
   724  			a, b, _ = underscorer.LowerLowerCollision(nil)
   725  			a, b, _ = underscorer.LowerUpperCollision(nil)
   726  			a, b, _ = underscorer.UpperLowerCollision(nil)
   727  			a, b, _ = underscorer.UpperUpperCollision(nil)
   728  			a, b, _ = underscorer.PurelyUnderscoredOutput(nil)
   729  			a, b, _ = underscorer.AllPurelyUnderscoredOutput(nil)
   730  			a, _ = underscorer.UnderScoredFunc(nil)
   731  
   732  			fmt.Println(a, b, err)
   733  		`,
   734  		nil,
   735  		nil,
   736  		nil,
   737  	},
   738  	// Tests that logs can be successfully filtered and decoded.
   739  	{
   740  		`Eventer`,
   741  		`
   742  			contract Eventer {
   743  				event SimpleEvent (
   744  					address indexed Addr,
   745  					bytes32 indexed Id,
   746  					bool    indexed Flag,
   747  					uint    Value
   748  				);
   749  				function raiseSimpleEvent(address addr, bytes32 id, bool flag, uint value) {
   750  					SimpleEvent(addr, id, flag, value);
   751  				}
   752  
   753  				event NodataEvent (
   754  					uint   indexed Number,
   755  					int16  indexed Short,
   756  					uint32 indexed Long
   757  				);
   758  				function raiseNodataEvent(uint number, int16 short, uint32 long) {
   759  					NodataEvent(number, short, long);
   760  				}
   761  
   762  				event DynamicEvent (
   763  					string indexed IndexedString,
   764  					bytes  indexed IndexedBytes,
   765  					string NonIndexedString,
   766  					bytes  NonIndexedBytes
   767  				);
   768  				function raiseDynamicEvent(string str, bytes blob) {
   769  					DynamicEvent(str, blob, str, blob);
   770  				}
   771  
   772  				event FixedBytesEvent (
   773  					bytes24 indexed IndexedBytes,
   774  					bytes24 NonIndexedBytes
   775  				);
   776  				function raiseFixedBytesEvent(bytes24 blob) {
   777  					FixedBytesEvent(blob, blob);
   778  				}
   779  			}
   780  		`,
   781  		[]string{`608060405234801561001057600080fd5b5061043f806100206000396000f3006080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663528300ff8114610066578063630c31e2146100ff5780636cc6b94014610138578063c7d116dd1461015b575b600080fd5b34801561007257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100fd94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506101829650505050505050565b005b34801561010b57600080fd5b506100fd73ffffffffffffffffffffffffffffffffffffffff60043516602435604435151560643561033c565b34801561014457600080fd5b506100fd67ffffffffffffffff1960043516610394565b34801561016757600080fd5b506100fd60043560243560010b63ffffffff604435166103d6565b806040518082805190602001908083835b602083106101b25780518252601f199092019160209182019101610193565b51815160209384036101000a6000190180199092169116179052604051919093018190038120875190955087945090928392508401908083835b6020831061020b5780518252601f1990920191602091820191016101ec565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561029c578181015183820152602001610284565b50505050905090810190601f1680156102c95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156102fc5781810151838201526020016102e4565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b60408051828152905183151591859173ffffffffffffffffffffffffffffffffffffffff8816917f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8919081900360200190a450505050565b6040805167ffffffffffffffff19831680825291517fcdc4c1b1aed5524ffb4198d7a5839a34712baef5fa06884fac7559f4a5854e0a9181900360200190a250565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820468b5843bf653145bd924b323c64ef035d3dd922c170644b44d61aa666ea6eee0029`},
   782  		[]string{`[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blob","type":"bytes24"}],"name":"raiseFixedBytesEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedBytes","type":"bytes24"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes24"}],"name":"FixedBytesEvent","type":"event"}]`},
   783  		`
   784  			"math/big"
   785  			"time"
   786  
   787  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   788  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   789  			"github.com/DevelopCrypto/go-ethereum/common"
   790  			"github.com/DevelopCrypto/go-ethereum/core"
   791  			"github.com/DevelopCrypto/go-ethereum/crypto"
   792  		`,
   793  		`
   794  			// Generate a new random account and a funded simulator
   795  			key, _ := crypto.GenerateKey()
   796  			auth := bind.NewKeyedTransactor(key)
   797  
   798  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   799  			defer sim.Close()
   800  
   801  			// Deploy an eventer contract
   802  			_, _, eventer, err := DeployEventer(auth, sim)
   803  			if err != nil {
   804  				t.Fatalf("Failed to deploy eventer contract: %v", err)
   805  			}
   806  			sim.Commit()
   807  
   808  			// Inject a few events into the contract, gradually more in each block
   809  			for i := 1; i <= 3; i++ {
   810  				for j := 1; j <= i; j++ {
   811  					if _, err := eventer.RaiseSimpleEvent(auth, common.Address{byte(j)}, [32]byte{byte(j)}, true, big.NewInt(int64(10*i+j))); err != nil {
   812  						t.Fatalf("block %d, event %d: raise failed: %v", i, j, err)
   813  					}
   814  				}
   815  				sim.Commit()
   816  			}
   817  			// Test filtering for certain events and ensure they can be found
   818  			sit, err := eventer.FilterSimpleEvent(nil, []common.Address{common.Address{1}, common.Address{3}}, [][32]byte{{byte(1)}, {byte(2)}, {byte(3)}}, []bool{true})
   819  			if err != nil {
   820  				t.Fatalf("failed to filter for simple events: %v", err)
   821  			}
   822  			defer sit.Close()
   823  
   824  			sit.Next()
   825  			if sit.Event.Value.Uint64() != 11 || !sit.Event.Flag {
   826  				t.Errorf("simple log content mismatch: have %v, want {11, true}", sit.Event)
   827  			}
   828  			sit.Next()
   829  			if sit.Event.Value.Uint64() != 21 || !sit.Event.Flag {
   830  				t.Errorf("simple log content mismatch: have %v, want {21, true}", sit.Event)
   831  			}
   832  			sit.Next()
   833  			if sit.Event.Value.Uint64() != 31 || !sit.Event.Flag {
   834  				t.Errorf("simple log content mismatch: have %v, want {31, true}", sit.Event)
   835  			}
   836  			sit.Next()
   837  			if sit.Event.Value.Uint64() != 33 || !sit.Event.Flag {
   838  				t.Errorf("simple log content mismatch: have %v, want {33, true}", sit.Event)
   839  			}
   840  
   841  			if sit.Next() {
   842  				t.Errorf("unexpected simple event found: %+v", sit.Event)
   843  			}
   844  			if err = sit.Error(); err != nil {
   845  				t.Fatalf("simple event iteration failed: %v", err)
   846  			}
   847  			// Test raising and filtering for an event with no data component
   848  			if _, err := eventer.RaiseNodataEvent(auth, big.NewInt(314), 141, 271); err != nil {
   849  				t.Fatalf("failed to raise nodata event: %v", err)
   850  			}
   851  			sim.Commit()
   852  
   853  			nit, err := eventer.FilterNodataEvent(nil, []*big.Int{big.NewInt(314)}, []int16{140, 141, 142}, []uint32{271})
   854  			if err != nil {
   855  				t.Fatalf("failed to filter for nodata events: %v", err)
   856  			}
   857  			defer nit.Close()
   858  
   859  			if !nit.Next() {
   860  				t.Fatalf("nodata log not found: %v", nit.Error())
   861  			}
   862  			if nit.Event.Number.Uint64() != 314 {
   863  				t.Errorf("nodata log content mismatch: have %v, want 314", nit.Event.Number)
   864  			}
   865  			if nit.Next() {
   866  				t.Errorf("unexpected nodata event found: %+v", nit.Event)
   867  			}
   868  			if err = nit.Error(); err != nil {
   869  				t.Fatalf("nodata event iteration failed: %v", err)
   870  			}
   871  			// Test raising and filtering for events with dynamic indexed components
   872  			if _, err := eventer.RaiseDynamicEvent(auth, "Hello", []byte("World")); err != nil {
   873  				t.Fatalf("failed to raise dynamic event: %v", err)
   874  			}
   875  			sim.Commit()
   876  
   877  			dit, err := eventer.FilterDynamicEvent(nil, []string{"Hi", "Hello", "Bye"}, [][]byte{[]byte("World")})
   878  			if err != nil {
   879  				t.Fatalf("failed to filter for dynamic events: %v", err)
   880  			}
   881  			defer dit.Close()
   882  
   883  			if !dit.Next() {
   884  				t.Fatalf("dynamic log not found: %v", dit.Error())
   885  			}
   886  			if dit.Event.NonIndexedString != "Hello" || string(dit.Event.NonIndexedBytes) != "World" ||	dit.Event.IndexedString != common.HexToHash("0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2") || dit.Event.IndexedBytes != common.HexToHash("0xf2208c967df089f60420785795c0a9ba8896b0f6f1867fa7f1f12ad6f79c1a18") {
   887  				t.Errorf("dynamic log content mismatch: have %v, want {'0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2, '0xf2208c967df089f60420785795c0a9ba8896b0f6f1867fa7f1f12ad6f79c1a18', 'Hello', 'World'}", dit.Event)
   888  			}
   889  			if dit.Next() {
   890  				t.Errorf("unexpected dynamic event found: %+v", dit.Event)
   891  			}
   892  			if err = dit.Error(); err != nil {
   893  				t.Fatalf("dynamic event iteration failed: %v", err)
   894  			}
   895  			// Test raising and filtering for events with fixed bytes components
   896  			var fblob [24]byte
   897  			copy(fblob[:], []byte("Fixed Bytes"))
   898  
   899  			if _, err := eventer.RaiseFixedBytesEvent(auth, fblob); err != nil {
   900  				t.Fatalf("failed to raise fixed bytes event: %v", err)
   901  			}
   902  			sim.Commit()
   903  
   904  			fit, err := eventer.FilterFixedBytesEvent(nil, [][24]byte{fblob})
   905  			if err != nil {
   906  				t.Fatalf("failed to filter for fixed bytes events: %v", err)
   907  			}
   908  			defer fit.Close()
   909  
   910  			if !fit.Next() {
   911  				t.Fatalf("fixed bytes log not found: %v", fit.Error())
   912  			}
   913  			if fit.Event.NonIndexedBytes != fblob || fit.Event.IndexedBytes != fblob {
   914  				t.Errorf("fixed bytes log content mismatch: have %v, want {'%x', '%x'}", fit.Event, fblob, fblob)
   915  			}
   916  			if fit.Next() {
   917  				t.Errorf("unexpected fixed bytes event found: %+v", fit.Event)
   918  			}
   919  			if err = fit.Error(); err != nil {
   920  				t.Fatalf("fixed bytes event iteration failed: %v", err)
   921  			}
   922  			// Test subscribing to an event and raising it afterwards
   923  			ch := make(chan *EventerSimpleEvent, 16)
   924  			sub, err := eventer.WatchSimpleEvent(nil, ch, nil, nil, nil)
   925  			if err != nil {
   926  				t.Fatalf("failed to subscribe to simple events: %v", err)
   927  			}
   928  			if _, err := eventer.RaiseSimpleEvent(auth, common.Address{255}, [32]byte{255}, true, big.NewInt(255)); err != nil {
   929  				t.Fatalf("failed to raise subscribed simple event: %v", err)
   930  			}
   931  			sim.Commit()
   932  
   933  			select {
   934  			case event := <-ch:
   935  				if event.Value.Uint64() != 255 {
   936  					t.Errorf("simple log content mismatch: have %v, want 255", event)
   937  				}
   938  			case <-time.After(250 * time.Millisecond):
   939  				t.Fatalf("subscribed simple event didn't arrive")
   940  			}
   941  			// Unsubscribe from the event and make sure we're not delivered more
   942  			sub.Unsubscribe()
   943  
   944  			if _, err := eventer.RaiseSimpleEvent(auth, common.Address{254}, [32]byte{254}, true, big.NewInt(254)); err != nil {
   945  				t.Fatalf("failed to raise subscribed simple event: %v", err)
   946  			}
   947  			sim.Commit()
   948  
   949  			select {
   950  			case event := <-ch:
   951  				t.Fatalf("unsubscribed simple event arrived: %v", event)
   952  			case <-time.After(250 * time.Millisecond):
   953  			}
   954  		`,
   955  		nil,
   956  		nil,
   957  		nil,
   958  	},
   959  	{
   960  		`DeeplyNestedArray`,
   961  		`
   962  			contract DeeplyNestedArray {
   963  				uint64[3][4][5] public deepUint64Array;
   964  				function storeDeepUintArray(uint64[3][4][5] arr) public {
   965  					deepUint64Array = arr;
   966  				}
   967  				function retrieveDeepArray() public view returns (uint64[3][4][5]) {
   968  					return deepUint64Array;
   969  				}
   970  			}
   971  		`,
   972  		[]string{`6060604052341561000f57600080fd5b6106438061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063344248551461005c5780638ed4573a1461011457806398ed1856146101ab575b600080fd5b341561006757600080fd5b610112600480806107800190600580602002604051908101604052809291906000905b828210156101055783826101800201600480602002604051908101604052809291906000905b828210156100f25783826060020160038060200260405190810160405280929190826003602002808284378201915050505050815260200190600101906100b0565b505050508152602001906001019061008a565b5050505091905050610208565b005b341561011f57600080fd5b61012761021d565b604051808260056000925b8184101561019b578284602002015160046000925b8184101561018d5782846020020151600360200280838360005b8381101561017c578082015181840152602081019050610161565b505050509050019260010192610147565b925050509260010192610132565b9250505091505060405180910390f35b34156101b657600080fd5b6101de6004808035906020019091908035906020019091908035906020019091905050610309565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b80600090600561021992919061035f565b5050565b6102256103b0565b6000600580602002604051908101604052809291906000905b8282101561030057838260040201600480602002604051908101604052809291906000905b828210156102ed578382016003806020026040519081016040528092919082600380156102d9576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116102945790505b505050505081526020019060010190610263565b505050508152602001906001019061023e565b50505050905090565b60008360058110151561031857fe5b600402018260048110151561032957fe5b018160038110151561033757fe5b6004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b826005600402810192821561039f579160200282015b8281111561039e5782518290600461038e9291906103df565b5091602001919060040190610375565b5b5090506103ac919061042d565b5090565b610780604051908101604052806005905b6103c9610459565b8152602001906001900390816103c15790505090565b826004810192821561041c579160200282015b8281111561041b5782518290600361040b929190610488565b50916020019190600101906103f2565b5b5090506104299190610536565b5090565b61045691905b8082111561045257600081816104499190610562565b50600401610433565b5090565b90565b610180604051908101604052806004905b6104726105a7565b81526020019060019003908161046a5790505090565b82600380016004900481019282156105255791602002820160005b838211156104ef57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026104a3565b80156105235782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026104ef565b505b50905061053291906105d9565b5090565b61055f91905b8082111561055b57600081816105529190610610565b5060010161053c565b5090565b90565b50600081816105719190610610565b50600101600081816105839190610610565b50600101600081816105959190610610565b5060010160006105a59190610610565b565b6060604051908101604052806003905b600067ffffffffffffffff168152602001906001900390816105b75790505090565b61060d91905b8082111561060957600081816101000a81549067ffffffffffffffff0219169055506001016105df565b5090565b90565b50600090555600a165627a7a7230582087e5a43f6965ab6ef7a4ff056ab80ed78fd8c15cff57715a1bf34ec76a93661c0029`},
   973  		[]string{`[{"constant":false,"inputs":[{"name":"arr","type":"uint64[3][4][5]"}],"name":"storeDeepUintArray","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retrieveDeepArray","outputs":[{"name":"","type":"uint64[3][4][5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"deepUint64Array","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"}]`},
   974  		`
   975  			"math/big"
   976  
   977  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
   978  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
   979  			"github.com/DevelopCrypto/go-ethereum/core"
   980  			"github.com/DevelopCrypto/go-ethereum/crypto"
   981  		`,
   982  		`
   983  			// Generate a new random account and a funded simulator
   984  			key, _ := crypto.GenerateKey()
   985  			auth := bind.NewKeyedTransactor(key)
   986  
   987  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   988  			defer sim.Close()
   989  
   990  			//deploy the test contract
   991  			_, _, testContract, err := DeployDeeplyNestedArray(auth, sim)
   992  			if err != nil {
   993  				t.Fatalf("Failed to deploy test contract: %v", err)
   994  			}
   995  
   996  			// Finish deploy.
   997  			sim.Commit()
   998  
   999  			//Create coordinate-filled array, for testing purposes.
  1000  			testArr := [5][4][3]uint64{}
  1001  			for i := 0; i < 5; i++ {
  1002  				testArr[i] = [4][3]uint64{}
  1003  				for j := 0; j < 4; j++ {
  1004  					testArr[i][j] = [3]uint64{}
  1005  					for k := 0; k < 3; k++ {
  1006  						//pack the coordinates, each array value will be unique, and can be validated easily.
  1007  						testArr[i][j][k] = uint64(i) << 16 | uint64(j) << 8 | uint64(k)
  1008  					}
  1009  				}
  1010  			}
  1011  
  1012  			if _, err := testContract.StoreDeepUintArray(&bind.TransactOpts{
  1013  				From: auth.From,
  1014  				Signer: auth.Signer,
  1015  			}, testArr); err != nil {
  1016  				t.Fatalf("Failed to store nested array in test contract: %v", err)
  1017  			}
  1018  
  1019  			sim.Commit()
  1020  
  1021  			retrievedArr, err := testContract.RetrieveDeepArray(&bind.CallOpts{
  1022  				From: auth.From,
  1023  				Pending: false,
  1024  			})
  1025  			if err != nil {
  1026  				t.Fatalf("Failed to retrieve nested array from test contract: %v", err)
  1027  			}
  1028  
  1029  			//quick check to see if contents were copied
  1030  			// (See accounts/abi/unpack_test.go for more extensive testing)
  1031  			if retrievedArr[4][3][2] != testArr[4][3][2] {
  1032  				t.Fatalf("Retrieved value does not match expected value! got: %d, expected: %d. %v", retrievedArr[4][3][2], testArr[4][3][2], err)
  1033  			}
  1034  		`,
  1035  		nil,
  1036  		nil,
  1037  		nil,
  1038  	},
  1039  	{
  1040  		`CallbackParam`,
  1041  		`
  1042  			contract FunctionPointerTest {
  1043  				function test(function(uint256) external callback) external {
  1044  					callback(1);
  1045  				}
  1046  			}
  1047  		`,
  1048  		[]string{`608060405234801561001057600080fd5b5061015e806100206000396000f3fe60806040526004361061003b576000357c010000000000000000000000000000000000000000000000000000000090048063d7a5aba214610040575b600080fd5b34801561004c57600080fd5b506100be6004803603602081101561006357600080fd5b810190808035806c0100000000000000000000000090049068010000000000000000900463ffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff169091602001919093929190939291905050506100c0565b005b818160016040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561011657600080fd5b505af115801561012a573d6000803e3d6000fd5b50505050505056fea165627a7a7230582062f87455ff84be90896dbb0c4e4ddb505c600d23089f8e80a512548440d7e2580029`},
  1049  		[]string{`[
  1050  			{
  1051  				"constant": false,
  1052  				"inputs": [
  1053  					{
  1054  						"name": "callback",
  1055  						"type": "function"
  1056  					}
  1057  				],
  1058  				"name": "test",
  1059  				"outputs": [],
  1060  				"payable": false,
  1061  				"stateMutability": "nonpayable",
  1062  				"type": "function"
  1063  			}
  1064  		]`}, `
  1065  			"strings"
  1066  		`,
  1067  		`
  1068  			if strings.Compare("test(function)", CallbackParamFuncSigs["d7a5aba2"]) != 0 {
  1069  				t.Fatalf("")
  1070  			}
  1071  		`,
  1072  		[]map[string]string{
  1073  			{
  1074  				"test(function)": "d7a5aba2",
  1075  			},
  1076  		},
  1077  		nil,
  1078  		nil,
  1079  	}, {
  1080  		`Tuple`,
  1081  		`
  1082  		pragma solidity >=0.4.19 <0.6.0;
  1083  		pragma experimental ABIEncoderV2;
  1084  
  1085  		contract Tuple {
  1086  			struct S { uint a; uint[] b; T[] c; }
  1087  			struct T { uint x; uint y; }
  1088  			event TupleEvent(S a, T[2][] b, T[][2] c, S[] d, uint[] e);
  1089  
  1090  			function func1(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public pure returns (S memory, T[2][] memory, T[][2] memory, S[] memory, uint[] memory) {
  1091  				return (a, b, c, d, e);
  1092  			}
  1093  			function func2(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public {
  1094  				emit TupleEvent(a, b, c, d, e);
  1095  			}
  1096  		}
  1097  
  1098  		`,
  1099  		[]string{`608060405234801561001057600080fd5b50610eb2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063443c79b41461003b578063d0062cdd1461006f575b600080fd5b61005560048036036100509190810190610624565b61008b565b604051610066959493929190610b28565b60405180910390f35b61008960048036036100849190810190610624565b6100bc565b005b610093610102565b606061009d610123565b6060808989898989945094509450945094509550955095509550959050565b7f18d6e66efa53739ca6d13626f35ebc700b31cced3eddb50c70bbe9c082c6cd0085858585856040516100f3959493929190610b28565b60405180910390a15050505050565b60405180606001604052806000815260200160608152602001606081525090565b60405180604001604052806002905b60608152602001906001900390816101325790505090565b600082601f83011261015b57600080fd5b813561016e61016982610bcb565b610b9e565b9150818183526020840193506020810190508385608084028201111561019357600080fd5b60005b838110156101c357816101a988826102a6565b845260208401935060808301925050600181019050610196565b5050505092915050565b600082601f8301126101de57600080fd5b60026101f16101ec82610bf3565b610b9e565b9150818360005b83811015610228578135860161020e888261031a565b8452602084019350602083019250506001810190506101f8565b5050505092915050565b600082601f83011261024357600080fd5b813561025661025182610c15565b610b9e565b9150818183526020840193506020810190508360005b8381101561029c578135860161028288826104a3565b84526020840193506020830192505060018101905061026c565b5050505092915050565b600082601f8301126102b757600080fd5b60026102ca6102c582610c3d565b610b9e565b915081838560408402820111156102e057600080fd5b60005b8381101561031057816102f688826105c3565b8452602084019350604083019250506001810190506102e3565b5050505092915050565b600082601f83011261032b57600080fd5b813561033e61033982610c5f565b610b9e565b9150818183526020840193506020810190508385604084028201111561036357600080fd5b60005b83811015610393578161037988826105c3565b845260208401935060408301925050600181019050610366565b5050505092915050565b600082601f8301126103ae57600080fd5b81356103c16103bc82610c87565b610b9e565b915081818352602084019350602081019050838560208402820111156103e657600080fd5b60005b8381101561041657816103fc888261060f565b8452602084019350602083019250506001810190506103e9565b5050505092915050565b600082601f83011261043157600080fd5b813561044461043f82610caf565b610b9e565b9150818183526020840193506020810190508385602084028201111561046957600080fd5b60005b83811015610499578161047f888261060f565b84526020840193506020830192505060018101905061046c565b5050505092915050565b6000606082840312156104b557600080fd5b6104bf6060610b9e565b905060006104cf8482850161060f565b600083015250602082013567ffffffffffffffff8111156104ef57600080fd5b6104fb8482850161039d565b602083015250604082013567ffffffffffffffff81111561051b57600080fd5b6105278482850161031a565b60408301525092915050565b60006060828403121561054557600080fd5b61054f6060610b9e565b9050600061055f8482850161060f565b600083015250602082013567ffffffffffffffff81111561057f57600080fd5b61058b8482850161039d565b602083015250604082013567ffffffffffffffff8111156105ab57600080fd5b6105b78482850161031a565b60408301525092915050565b6000604082840312156105d557600080fd5b6105df6040610b9e565b905060006105ef8482850161060f565b60008301525060206106038482850161060f565b60208301525092915050565b60008135905061061e81610e58565b92915050565b600080600080600060a0868803121561063c57600080fd5b600086013567ffffffffffffffff81111561065657600080fd5b61066288828901610533565b955050602086013567ffffffffffffffff81111561067f57600080fd5b61068b8882890161014a565b945050604086013567ffffffffffffffff8111156106a857600080fd5b6106b4888289016101cd565b935050606086013567ffffffffffffffff8111156106d157600080fd5b6106dd88828901610232565b925050608086013567ffffffffffffffff8111156106fa57600080fd5b61070688828901610420565b9150509295509295909350565b600061071f83836108cb565b60808301905092915050565b60006107378383610922565b905092915050565b600061074b8383610a93565b905092915050565b600061075f8383610aea565b60408301905092915050565b60006107778383610b19565b60208301905092915050565b600061078e82610d3b565b6107988185610de3565b93506107a383610cd7565b8060005b838110156107d45781516107bb8882610713565b97506107c683610d88565b9250506001810190506107a7565b5085935050505092915050565b60006107ec82610d46565b6107f68185610df4565b93508360208202850161080885610ce7565b8060005b858110156108445784840389528151610825858261072b565b945061083083610d95565b925060208a0199505060018101905061080c565b50829750879550505050505092915050565b600061086182610d51565b61086b8185610dff565b93508360208202850161087d85610cf1565b8060005b858110156108b9578484038952815161089a858261073f565b94506108a583610da2565b925060208a01995050600181019050610881565b50829750879550505050505092915050565b6108d481610d5c565b6108de8184610e10565b92506108e982610d01565b8060005b8381101561091a5781516109018782610753565b965061090c83610daf565b9250506001810190506108ed565b505050505050565b600061092d82610d67565b6109378185610e1b565b935061094283610d0b565b8060005b8381101561097357815161095a8882610753565b975061096583610dbc565b925050600181019050610946565b5085935050505092915050565b600061098b82610d7d565b6109958185610e3d565b93506109a083610d2b565b8060005b838110156109d15781516109b8888261076b565b97506109c383610dd6565b9250506001810190506109a4565b5085935050505092915050565b60006109e982610d72565b6109f38185610e2c565b93506109fe83610d1b565b8060005b83811015610a2f578151610a16888261076b565b9750610a2183610dc9565b925050600181019050610a02565b5085935050505092915050565b6000606083016000830151610a546000860182610b19565b5060208301518482036020860152610a6c82826109de565b91505060408301518482036040860152610a868282610922565b9150508091505092915050565b6000606083016000830151610aab6000860182610b19565b5060208301518482036020860152610ac382826109de565b91505060408301518482036040860152610add8282610922565b9150508091505092915050565b604082016000820151610b006000850182610b19565b506020820151610b136020850182610b19565b50505050565b610b2281610e4e565b82525050565b600060a0820190508181036000830152610b428188610a3c565b90508181036020830152610b568187610783565b90508181036040830152610b6a81866107e1565b90508181036060830152610b7e8185610856565b90508181036080830152610b928184610980565b90509695505050505050565b6000604051905081810181811067ffffffffffffffff82111715610bc157600080fd5b8060405250919050565b600067ffffffffffffffff821115610be257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c0a57600080fd5b602082029050919050565b600067ffffffffffffffff821115610c2c57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c5457600080fd5b602082029050919050565b600067ffffffffffffffff821115610c7657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c9e57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610cc657600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000819050919050565b610e6181610e4e565b8114610e6c57600080fd5b5056fea365627a7a72305820405a6336d8c302cee779de6788527018e5a2393892328fbf12b96065df2de00a6c6578706572696d656e74616cf564736f6c634300050a0040`},
  1100  		[]string{`
  1101  		[{"constant":true,"inputs":[{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"a","type":"tuple"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"b","type":"tuple[2][]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[][2]"},{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"d","type":"tuple[]"},{"name":"e","type":"uint256[]"}],"name":"func1","outputs":[{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"","type":"tuple"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"","type":"tuple[2][]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"","type":"tuple[][2]"},{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"","type":"tuple[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"a","type":"tuple"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"b","type":"tuple[2][]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[][2]"},{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"d","type":"tuple[]"},{"name":"e","type":"uint256[]"}],"name":"func2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"indexed":false,"name":"a","type":"tuple"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"indexed":false,"name":"b","type":"tuple[2][]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"indexed":false,"name":"c","type":"tuple[][2]"},{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"indexed":false,"name":"d","type":"tuple[]"},{"indexed":false,"name":"e","type":"uint256[]"}],"name":"TupleEvent","type":"event"}]
  1102  		`},
  1103  		`
  1104  			"math/big"
  1105  			"reflect"
  1106  
  1107  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
  1108  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
  1109  			"github.com/DevelopCrypto/go-ethereum/core"
  1110  			"github.com/DevelopCrypto/go-ethereum/crypto"
  1111  		`,
  1112  
  1113  		`
  1114  			key, _ := crypto.GenerateKey()
  1115  			auth := bind.NewKeyedTransactor(key)
  1116  
  1117  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
  1118  			defer sim.Close()
  1119  
  1120  			_, _, contract, err := DeployTuple(auth, sim)
  1121  			if err != nil {
  1122  				t.Fatalf("deploy contract failed %v", err)
  1123  			}
  1124  			sim.Commit()
  1125  
  1126  			check := func(a, b interface{}, errMsg string) {
  1127  				if !reflect.DeepEqual(a, b) {
  1128  					t.Fatal(errMsg)
  1129  				}
  1130  			}
  1131  
  1132  			a := Struct1{
  1133  				A: big.NewInt(1),
  1134  				B: []*big.Int{big.NewInt(2), big.NewInt(3)},
  1135  				C: []Struct0{
  1136  					{
  1137  						X: big.NewInt(4),
  1138  						Y: big.NewInt(5),
  1139  					},
  1140  					{
  1141  						X: big.NewInt(6),
  1142  						Y: big.NewInt(7),
  1143  					},
  1144  				},
  1145  			}
  1146  
  1147  			b := [][2]Struct0{
  1148  				{
  1149  					{
  1150  						X: big.NewInt(8),
  1151  						Y: big.NewInt(9),
  1152  					},
  1153  					{
  1154  						X: big.NewInt(10),
  1155  						Y: big.NewInt(11),
  1156  					},
  1157  				},
  1158  			}
  1159  
  1160  			c := [2][]Struct0{
  1161  				{
  1162  					{
  1163  						X: big.NewInt(12),
  1164  						Y: big.NewInt(13),
  1165  					},
  1166  					{
  1167  						X: big.NewInt(14),
  1168  						Y: big.NewInt(15),
  1169  					},
  1170  				},
  1171  				{
  1172  					{
  1173  						X: big.NewInt(16),
  1174  						Y: big.NewInt(17),
  1175  					},
  1176  				},
  1177  			}
  1178  
  1179  			d := []Struct1{a}
  1180  
  1181  			e := []*big.Int{big.NewInt(18), big.NewInt(19)}
  1182  			ret1, ret2, ret3, ret4, ret5, err := contract.Func1(nil, a, b, c, d, e)
  1183  			if err != nil {
  1184  				t.Fatalf("invoke contract failed, err %v", err)
  1185  			}
  1186  			check(ret1, a, "ret1 mismatch")
  1187  			check(ret2, b, "ret2 mismatch")
  1188  			check(ret3, c, "ret3 mismatch")
  1189  			check(ret4, d, "ret4 mismatch")
  1190  			check(ret5, e, "ret5 mismatch")
  1191  
  1192  			_, err = contract.Func2(auth, a, b, c, d, e)
  1193  			if err != nil {
  1194  				t.Fatalf("invoke contract failed, err %v", err)
  1195  			}
  1196  			sim.Commit()
  1197  
  1198  			iter, err := contract.FilterTupleEvent(nil)
  1199  			if err != nil {
  1200  				t.Fatalf("failed to create event filter, err %v", err)
  1201  			}
  1202  			defer iter.Close()
  1203  
  1204  			iter.Next()
  1205  			check(iter.Event.A, a, "field1 mismatch")
  1206  			check(iter.Event.B, b, "field2 mismatch")
  1207  			check(iter.Event.C, c, "field3 mismatch")
  1208  			check(iter.Event.D, d, "field4 mismatch")
  1209  			check(iter.Event.E, e, "field5 mismatch")
  1210  		`,
  1211  		nil,
  1212  		nil,
  1213  		nil,
  1214  	},
  1215  	{
  1216  		`UseLibrary`,
  1217  		`
  1218  		library Math {
  1219      		function add(uint a, uint b) public view returns(uint) {
  1220          		return a + b;
  1221      		}
  1222  		}
  1223  
  1224  		contract UseLibrary {
  1225  			function add (uint c, uint d) public view returns(uint) {
  1226          		return Math.add(c,d);
  1227      		}
  1228  		}
  1229  		`,
  1230  		[]string{
  1231  			// Bytecode for the UseLibrary contract
  1232  			`608060405234801561001057600080fd5b5061011d806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063771602f714602d575b600080fd5b604d60048036036040811015604157600080fd5b5080359060200135605f565b60408051918252519081900360200190f35b600073__$b98c933f0a6ececcd167bd4f9d3299b1a0$__63771602f784846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801560b757600080fd5b505af415801560ca573d6000803e3d6000fd5b505050506040513d602081101560df57600080fd5b5051939250505056fea265627a7a72305820eb5c38f42445604cfa43d85e3aa5ecc48b0a646456c902dd48420ae7241d06f664736f6c63430005090032`,
  1233  			// Bytecode for the Math contract
  1234  			`60a3610024600b82828239805160001a607314601757fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063771602f7146038575b600080fd5b605860048036036040811015604c57600080fd5b5080359060200135606a565b60408051918252519081900360200190f35b019056fea265627a7a723058206fc6c05f3078327f9c763edffdb5ab5f8bd212e293a1306c7d0ad05af3ad35f464736f6c63430005090032`,
  1235  		},
  1236  		[]string{
  1237  			`[{"constant":true,"inputs":[{"name":"c","type":"uint256"},{"name":"d","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`,
  1238  			`[{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`,
  1239  		},
  1240  		`
  1241  			"math/big"
  1242  
  1243  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
  1244  			"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
  1245  			"github.com/DevelopCrypto/go-ethereum/core"
  1246  			"github.com/DevelopCrypto/go-ethereum/crypto"
  1247  		`,
  1248  		`
  1249  			// Generate a new random account and a funded simulator
  1250  			key, _ := crypto.GenerateKey()
  1251  			auth := bind.NewKeyedTransactor(key)
  1252  
  1253  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
  1254  			defer sim.Close()
  1255  
  1256  			//deploy the test contract
  1257  			_, _, testContract, err := DeployUseLibrary(auth, sim)
  1258  			if err != nil {
  1259  				t.Fatalf("Failed to deploy test contract: %v", err)
  1260  			}
  1261  
  1262  			// Finish deploy.
  1263  			sim.Commit()
  1264  
  1265  			// Check that the library contract has been deployed
  1266  			// by calling the contract's add function.
  1267  			res, err := testContract.Add(&bind.CallOpts{
  1268  				From: auth.From,
  1269  				Pending: false,
  1270  			}, big.NewInt(1), big.NewInt(2))
  1271  			if err != nil {
  1272  				t.Fatalf("Failed to call linked contract: %v", err)
  1273  			}
  1274  			if res.Cmp(big.NewInt(3)) != 0 {
  1275  				t.Fatalf("Add did not return the correct result: %d != %d", res, 3)
  1276  			}
  1277  		`,
  1278  		nil,
  1279  		map[string]string{
  1280  			"b98c933f0a6ececcd167bd4f9d3299b1a0": "Math",
  1281  		},
  1282  		[]string{"UseLibrary", "Math"},
  1283  	}, {
  1284  		"Overload",
  1285  		`
  1286  		pragma solidity ^0.5.10;
  1287  
  1288  		contract overload {
  1289  		  mapping(address => uint256) balances;
  1290  
  1291  		  event bar(uint256 i);
  1292  		  event bar(uint256 i, uint256 j);
  1293  			
  1294  		  function foo(uint256 i) public {
  1295  			  emit bar(i);
  1296  		  }
  1297  		  function foo(uint256 i, uint256 j) public {
  1298  			  emit bar(i, j);
  1299  		  }
  1300  		}
  1301  		`,
  1302  		[]string{`608060405234801561001057600080fd5b50610153806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806304bc52f81461003b5780632fbebd3814610073575b600080fd5b6100716004803603604081101561005157600080fd5b8101908080359060200190929190803590602001909291905050506100a1565b005b61009f6004803603602081101561008957600080fd5b81019080803590602001909291905050506100e4565b005b7fae42e9514233792a47a1e4554624e83fe852228e1503f63cd383e8a431f4f46d8282604051808381526020018281526020019250505060405180910390a15050565b7f0423a1321222a0a8716c22b92fac42d85a45a612b696a461784d9fa537c81e5c816040518082815260200191505060405180910390a15056fea265627a7a72305820e22b049858b33291cbe67eeaece0c5f64333e439d27032ea8337d08b1de18fe864736f6c634300050a0032`},
  1303  		[]string{`[{"constant":false,"inputs":[{"name":"i","type":"uint256"},{"name":"j","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"}],"name":"bar","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"},{"indexed":false,"name":"j","type":"uint256"}],"name":"bar","type":"event"}]`},
  1304  		`
  1305  		"math/big"
  1306  		"time"
  1307  
  1308  		"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind"
  1309  		"github.com/DevelopCrypto/go-ethereum/accounts/abi/bind/backends"
  1310  		"github.com/DevelopCrypto/go-ethereum/core"
  1311  		"github.com/DevelopCrypto/go-ethereum/crypto"
  1312  		`,
  1313  		`
  1314  		// Initialize test accounts
  1315  		key, _ := crypto.GenerateKey()
  1316  		auth := bind.NewKeyedTransactor(key)
  1317  		sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
  1318  		defer sim.Close()
  1319  
  1320  		// deploy the test contract
  1321  		_, _, contract, err := DeployOverload(auth, sim)
  1322  		if err != nil {
  1323  			t.Fatalf("Failed to deploy contract: %v", err)
  1324  		}
  1325  		// Finish deploy.
  1326  		sim.Commit()
  1327  
  1328  		resCh, stopCh := make(chan uint64), make(chan struct{})
  1329  
  1330  		go func() {
  1331  			barSink := make(chan *OverloadBar)
  1332  			sub, _ := contract.WatchBar(nil, barSink)
  1333  			defer sub.Unsubscribe()
  1334  
  1335  			bar0Sink := make(chan *OverloadBar0)
  1336  			sub0, _ := contract.WatchBar0(nil, bar0Sink)
  1337  			defer sub0.Unsubscribe()
  1338  
  1339  			for {
  1340  				select {
  1341  				case ev := <-barSink:
  1342  					resCh <- ev.I.Uint64()
  1343  				case ev := <-bar0Sink:
  1344  					resCh <- ev.I.Uint64() + ev.J.Uint64()
  1345  				case <-stopCh:
  1346  					return
  1347  				}
  1348  			}
  1349  		}()
  1350  		contract.Foo(auth, big.NewInt(1), big.NewInt(2))
  1351  		sim.Commit()
  1352  		select {
  1353  		case n := <-resCh:
  1354  			if n != 3 {
  1355  				t.Fatalf("Invalid bar0 event")
  1356  			}
  1357  		case <-time.NewTimer(100 * time.Millisecond).C:
  1358  			t.Fatalf("Wait bar0 event timeout")
  1359  		}
  1360  
  1361  		contract.Foo0(auth, big.NewInt(1))
  1362  		sim.Commit()
  1363  		select {
  1364  		case n := <-resCh:
  1365  			if n != 1 {
  1366  				t.Fatalf("Invalid bar event")
  1367  			}
  1368  		case <-time.NewTimer(100 * time.Millisecond).C:
  1369  			t.Fatalf("Wait bar event timeout")
  1370  		}
  1371  		close(stopCh)
  1372  		`,
  1373  		nil,
  1374  		nil,
  1375  		nil,
  1376  	},
  1377  }
  1378  
  1379  // Tests that packages generated by the binder can be successfully compiled and
  1380  // the requested tester run against it.
  1381  func TestGolangBindings(t *testing.T) {
  1382  	// Skip the test if no Go command can be found
  1383  	gocmd := runtime.GOROOT() + "/bin/go"
  1384  	if !common.FileExist(gocmd) {
  1385  		t.Skip("go sdk not found for testing")
  1386  	}
  1387  	// Create a temporary workspace for the test suite
  1388  	ws, err := ioutil.TempDir("", "")
  1389  	if err != nil {
  1390  		t.Fatalf("failed to create temporary workspace: %v", err)
  1391  	}
  1392  	defer os.RemoveAll(ws)
  1393  
  1394  	pkg := filepath.Join(ws, "bindtest")
  1395  	if err = os.MkdirAll(pkg, 0700); err != nil {
  1396  		t.Fatalf("failed to create package: %v", err)
  1397  	}
  1398  	// Generate the test suite for all the contracts
  1399  	for i, tt := range bindTests {
  1400  		var types []string
  1401  		if tt.types != nil {
  1402  			types = tt.types
  1403  		} else {
  1404  			types = []string{tt.name}
  1405  		}
  1406  		// Generate the binding and create a Go source file in the workspace
  1407  		bind, err := Bind(types, tt.abi, tt.bytecode, tt.fsigs, "bindtest", LangGo, tt.libs)
  1408  		if err != nil {
  1409  			t.Fatalf("test %d: failed to generate binding: %v", i, err)
  1410  		}
  1411  		if err = ioutil.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+".go"), []byte(bind), 0600); err != nil {
  1412  			t.Fatalf("test %d: failed to write binding: %v", i, err)
  1413  		}
  1414  		// Generate the test file with the injected test code
  1415  		code := fmt.Sprintf(`
  1416  			package bindtest
  1417  
  1418  			import (
  1419  				"testing"
  1420  				%s
  1421  			)
  1422  
  1423  			func Test%s(t *testing.T) {
  1424  				%s
  1425  			}
  1426  		`, tt.imports, tt.name, tt.tester)
  1427  		if err := ioutil.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+"_test.go"), []byte(code), 0600); err != nil {
  1428  			t.Fatalf("test %d: failed to write tests: %v", i, err)
  1429  		}
  1430  	}
  1431  	// Test the entire package and report any failures
  1432  	cmd := exec.Command(gocmd, "test", "-v", "-count", "1")
  1433  	cmd.Dir = pkg
  1434  	if out, err := cmd.CombinedOutput(); err != nil {
  1435  		t.Fatalf("failed to run binding test: %v\n%s", err, out)
  1436  	}
  1437  }
  1438  
  1439  // Tests that java binding generated by the binder is exactly matched.
  1440  func TestJavaBindings(t *testing.T) {
  1441  	var cases = []struct {
  1442  		name     string
  1443  		contract string
  1444  		abi      string
  1445  		bytecode string
  1446  		expected string
  1447  	}{
  1448  		{
  1449  			"test",
  1450  			`
  1451  			pragma experimental ABIEncoderV2;
  1452  			pragma solidity ^0.5.2;
  1453  
  1454  			contract test {
  1455  				function setAddress(address a) public returns(address){}
  1456  				function setAddressList(address[] memory a_l) public returns(address[] memory){}
  1457  				function setAddressArray(address[2] memory a_a) public returns(address[2] memory){}
  1458  
  1459  				function setUint8(uint8 u8) public returns(uint8){}
  1460  				function setUint16(uint16 u16) public returns(uint16){}
  1461  				function setUint32(uint32 u32) public returns(uint32){}
  1462  				function setUint64(uint64 u64) public returns(uint64){}
  1463  				function setUint256(uint256 u256) public returns(uint256){}
  1464  				function setUint256List(uint256[] memory u256_l) public returns(uint256[] memory){}
  1465  				function setUint256Array(uint256[2] memory u256_a) public returns(uint256[2] memory){}
  1466  
  1467  				function setInt8(int8 i8) public returns(int8){}
  1468  				function setInt16(int16 i16) public returns(int16){}
  1469  				function setInt32(int32 i32) public returns(int32){}
  1470  				function setInt64(int64 i64) public returns(int64){}
  1471  				function setInt256(int256 i256) public returns(int256){}
  1472  				function setInt256List(int256[] memory i256_l) public returns(int256[] memory){}
  1473  				function setInt256Array(int256[2] memory i256_a) public returns(int256[2] memory){}
  1474  
  1475  				function setBytes1(bytes1 b1) public returns(bytes1) {}
  1476  				function setBytes32(bytes32 b32) public returns(bytes32) {}
  1477  				function setBytes(bytes memory bs) public returns(bytes memory) {}
  1478  				function setBytesList(bytes[] memory bs_l) public returns(bytes[] memory) {}
  1479  				function setBytesArray(bytes[2] memory bs_a) public returns(bytes[2] memory) {}
  1480  
  1481  				function setString(string memory s) public returns(string memory) {}
  1482  				function setStringList(string[] memory s_l) public returns(string[] memory) {}
  1483  				function setStringArray(string[2] memory s_a) public returns(string[2] memory) {}
  1484  
  1485  				function setBool(bool b) public returns(bool) {}
  1486  				function setBoolList(bool[] memory b_l) public returns(bool[] memory) {}
  1487  				function setBoolArray(bool[2] memory b_a) public returns(bool[2] memory) {}
  1488  			}`,
  1489  			`[{"constant":false,"inputs":[{"name":"u16","type":"uint16"}],"name":"setUint16","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b_a","type":"bool[2]"}],"name":"setBoolArray","outputs":[{"name":"","type":"bool[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a_a","type":"address[2]"}],"name":"setAddressArray","outputs":[{"name":"","type":"address[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs_l","type":"bytes[]"}],"name":"setBytesList","outputs":[{"name":"","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u8","type":"uint8"}],"name":"setUint8","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u32","type":"uint32"}],"name":"setUint32","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b","type":"bool"}],"name":"setBool","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256_l","type":"int256[]"}],"name":"setInt256List","outputs":[{"name":"","type":"int256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256_a","type":"uint256[2]"}],"name":"setUint256Array","outputs":[{"name":"","type":"uint256[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b_l","type":"bool[]"}],"name":"setBoolList","outputs":[{"name":"","type":"bool[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs_a","type":"bytes[2]"}],"name":"setBytesArray","outputs":[{"name":"","type":"bytes[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a_l","type":"address[]"}],"name":"setAddressList","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256_a","type":"int256[2]"}],"name":"setInt256Array","outputs":[{"name":"","type":"int256[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s_a","type":"string[2]"}],"name":"setStringArray","outputs":[{"name":"","type":"string[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s","type":"string"}],"name":"setString","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u64","type":"uint64"}],"name":"setUint64","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i16","type":"int16"}],"name":"setInt16","outputs":[{"name":"","type":"int16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i8","type":"int8"}],"name":"setInt8","outputs":[{"name":"","type":"int8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256_l","type":"uint256[]"}],"name":"setUint256List","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256","type":"int256"}],"name":"setInt256","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i32","type":"int32"}],"name":"setInt32","outputs":[{"name":"","type":"int32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b32","type":"bytes32"}],"name":"setBytes32","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s_l","type":"string[]"}],"name":"setStringList","outputs":[{"name":"","type":"string[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256","type":"uint256"}],"name":"setUint256","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs","type":"bytes"}],"name":"setBytes","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"address"}],"name":"setAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i64","type":"int64"}],"name":"setInt64","outputs":[{"name":"","type":"int64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b1","type":"bytes1"}],"name":"setBytes1","outputs":[{"name":"","type":"bytes1"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]`,
  1490  			`608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037`,
  1491  			`
  1492  // This file is an automatically generated Java binding. Do not modify as any
  1493  // change will likely be lost upon the next re-generation!
  1494  
  1495  package bindtest;
  1496  
  1497  import org.ethereum.geth.*;
  1498  import java.util.*;
  1499  
  1500  
  1501  
  1502  public class Test {
  1503  	// ABI is the input ABI used to generate the binding from.
  1504  	public final static String ABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"u16\",\"type\":\"uint16\"}],\"name\":\"setUint16\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b_a\",\"type\":\"bool[2]\"}],\"name\":\"setBoolArray\",\"outputs\":[{\"name\":\"\",\"type\":\"bool[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a_a\",\"type\":\"address[2]\"}],\"name\":\"setAddressArray\",\"outputs\":[{\"name\":\"\",\"type\":\"address[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs_l\",\"type\":\"bytes[]\"}],\"name\":\"setBytesList\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u8\",\"type\":\"uint8\"}],\"name\":\"setUint8\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u32\",\"type\":\"uint32\"}],\"name\":\"setUint32\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b\",\"type\":\"bool\"}],\"name\":\"setBool\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256_l\",\"type\":\"int256[]\"}],\"name\":\"setInt256List\",\"outputs\":[{\"name\":\"\",\"type\":\"int256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256_a\",\"type\":\"uint256[2]\"}],\"name\":\"setUint256Array\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b_l\",\"type\":\"bool[]\"}],\"name\":\"setBoolList\",\"outputs\":[{\"name\":\"\",\"type\":\"bool[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs_a\",\"type\":\"bytes[2]\"}],\"name\":\"setBytesArray\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a_l\",\"type\":\"address[]\"}],\"name\":\"setAddressList\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256_a\",\"type\":\"int256[2]\"}],\"name\":\"setInt256Array\",\"outputs\":[{\"name\":\"\",\"type\":\"int256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s_a\",\"type\":\"string[2]\"}],\"name\":\"setStringArray\",\"outputs\":[{\"name\":\"\",\"type\":\"string[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s\",\"type\":\"string\"}],\"name\":\"setString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u64\",\"type\":\"uint64\"}],\"name\":\"setUint64\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i16\",\"type\":\"int16\"}],\"name\":\"setInt16\",\"outputs\":[{\"name\":\"\",\"type\":\"int16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i8\",\"type\":\"int8\"}],\"name\":\"setInt8\",\"outputs\":[{\"name\":\"\",\"type\":\"int8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256_l\",\"type\":\"uint256[]\"}],\"name\":\"setUint256List\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256\",\"type\":\"int256\"}],\"name\":\"setInt256\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i32\",\"type\":\"int32\"}],\"name\":\"setInt32\",\"outputs\":[{\"name\":\"\",\"type\":\"int32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b32\",\"type\":\"bytes32\"}],\"name\":\"setBytes32\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s_l\",\"type\":\"string[]\"}],\"name\":\"setStringList\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256\",\"type\":\"uint256\"}],\"name\":\"setUint256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs\",\"type\":\"bytes\"}],\"name\":\"setBytes\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i64\",\"type\":\"int64\"}],\"name\":\"setInt64\",\"outputs\":[{\"name\":\"\",\"type\":\"int64\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b1\",\"type\":\"bytes1\"}],\"name\":\"setBytes1\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes1\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]";
  1505  	
  1506  	
  1507  	// BYTECODE is the compiled bytecode used for deploying new contracts.
  1508  	public final static String BYTECODE = "0x608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037";
  1509  
  1510  	// deploy deploys a new Ethereum contract, binding an instance of Test to it.
  1511  	public static Test deploy(TransactOpts auth, EthereumClient client) throws Exception {
  1512  		Interfaces args = Geth.newInterfaces(0);
  1513  		String bytecode = BYTECODE;
  1514  		
  1515  		
  1516  		return new Test(Geth.deployContract(auth, ABI, Geth.decodeFromHex(bytecode), client, args));
  1517  	}
  1518  
  1519  	// Internal constructor used by contract deployment.
  1520  	private Test(BoundContract deployment) {
  1521  		this.Address  = deployment.getAddress();
  1522  		this.Deployer = deployment.getDeployer();
  1523  		this.Contract = deployment;
  1524  	}
  1525  	
  1526  
  1527  	// Ethereum address where this contract is located at.
  1528  	public final Address Address;
  1529  
  1530  	// Ethereum transaction in which this contract was deployed (if known!).
  1531  	public final Transaction Deployer;
  1532  
  1533  	// Contract instance bound to a blockchain address.
  1534  	private final BoundContract Contract;
  1535  
  1536  	// Creates a new instance of Test, bound to a specific deployed contract.
  1537  	public Test(Address address, EthereumClient client) throws Exception {
  1538  		this(Geth.bindContract(address, ABI, client));
  1539  	}
  1540  
  1541  	
  1542  
  1543  	
  1544  	// setAddress is a paid mutator transaction binding the contract method 0xe30081a0.
  1545  	//
  1546  	// Solidity: function setAddress(address a) returns(address)
  1547  	public Transaction setAddress(TransactOpts opts, Address a) throws Exception {
  1548  		Interfaces args = Geth.newInterfaces(1);
  1549  		Interface arg0 = Geth.newInterface();arg0.setAddress(a);args.set(0,arg0);
  1550  		
  1551  		return this.Contract.transact(opts, "setAddress"	, args);
  1552  	}
  1553  	
  1554  	// setAddressArray is a paid mutator transaction binding the contract method 0x151f5471.
  1555  	//
  1556  	// Solidity: function setAddressArray(address[2] a_a) returns(address[2])
  1557  	public Transaction setAddressArray(TransactOpts opts, Addresses a_a) throws Exception {
  1558  		Interfaces args = Geth.newInterfaces(1);
  1559  		Interface arg0 = Geth.newInterface();arg0.setAddresses(a_a);args.set(0,arg0);
  1560  		
  1561  		return this.Contract.transact(opts, "setAddressArray"	, args);
  1562  	}
  1563  	
  1564  	// setAddressList is a paid mutator transaction binding the contract method 0x5be6b37e.
  1565  	//
  1566  	// Solidity: function setAddressList(address[] a_l) returns(address[])
  1567  	public Transaction setAddressList(TransactOpts opts, Addresses a_l) throws Exception {
  1568  		Interfaces args = Geth.newInterfaces(1);
  1569  		Interface arg0 = Geth.newInterface();arg0.setAddresses(a_l);args.set(0,arg0);
  1570  		
  1571  		return this.Contract.transact(opts, "setAddressList"	, args);
  1572  	}
  1573  	
  1574  	// setBool is a paid mutator transaction binding the contract method 0x1e26fd33.
  1575  	//
  1576  	// Solidity: function setBool(bool b) returns(bool)
  1577  	public Transaction setBool(TransactOpts opts, boolean b) throws Exception {
  1578  		Interfaces args = Geth.newInterfaces(1);
  1579  		Interface arg0 = Geth.newInterface();arg0.setBool(b);args.set(0,arg0);
  1580  		
  1581  		return this.Contract.transact(opts, "setBool"	, args);
  1582  	}
  1583  	
  1584  	// setBoolArray is a paid mutator transaction binding the contract method 0x118a9718.
  1585  	//
  1586  	// Solidity: function setBoolArray(bool[2] b_a) returns(bool[2])
  1587  	public Transaction setBoolArray(TransactOpts opts, Bools b_a) throws Exception {
  1588  		Interfaces args = Geth.newInterfaces(1);
  1589  		Interface arg0 = Geth.newInterface();arg0.setBools(b_a);args.set(0,arg0);
  1590  		
  1591  		return this.Contract.transact(opts, "setBoolArray"	, args);
  1592  	}
  1593  	
  1594  	// setBoolList is a paid mutator transaction binding the contract method 0x4d5ee6da.
  1595  	//
  1596  	// Solidity: function setBoolList(bool[] b_l) returns(bool[])
  1597  	public Transaction setBoolList(TransactOpts opts, Bools b_l) throws Exception {
  1598  		Interfaces args = Geth.newInterfaces(1);
  1599  		Interface arg0 = Geth.newInterface();arg0.setBools(b_l);args.set(0,arg0);
  1600  		
  1601  		return this.Contract.transact(opts, "setBoolList"	, args);
  1602  	}
  1603  	
  1604  	// setBytes is a paid mutator transaction binding the contract method 0xda359dc8.
  1605  	//
  1606  	// Solidity: function setBytes(bytes bs) returns(bytes)
  1607  	public Transaction setBytes(TransactOpts opts, byte[] bs) throws Exception {
  1608  		Interfaces args = Geth.newInterfaces(1);
  1609  		Interface arg0 = Geth.newInterface();arg0.setBinary(bs);args.set(0,arg0);
  1610  		
  1611  		return this.Contract.transact(opts, "setBytes"	, args);
  1612  	}
  1613  	
  1614  	// setBytes1 is a paid mutator transaction binding the contract method 0xfba1a1c3.
  1615  	//
  1616  	// Solidity: function setBytes1(bytes1 b1) returns(bytes1)
  1617  	public Transaction setBytes1(TransactOpts opts, byte[] b1) throws Exception {
  1618  		Interfaces args = Geth.newInterfaces(1);
  1619  		Interface arg0 = Geth.newInterface();arg0.setBinary(b1);args.set(0,arg0);
  1620  		
  1621  		return this.Contract.transact(opts, "setBytes1"	, args);
  1622  	}
  1623  	
  1624  	// setBytes32 is a paid mutator transaction binding the contract method 0xc2b12a73.
  1625  	//
  1626  	// Solidity: function setBytes32(bytes32 b32) returns(bytes32)
  1627  	public Transaction setBytes32(TransactOpts opts, byte[] b32) throws Exception {
  1628  		Interfaces args = Geth.newInterfaces(1);
  1629  		Interface arg0 = Geth.newInterface();arg0.setBinary(b32);args.set(0,arg0);
  1630  		
  1631  		return this.Contract.transact(opts, "setBytes32"	, args);
  1632  	}
  1633  	
  1634  	// setBytesArray is a paid mutator transaction binding the contract method 0x5119655d.
  1635  	//
  1636  	// Solidity: function setBytesArray(bytes[2] bs_a) returns(bytes[2])
  1637  	public Transaction setBytesArray(TransactOpts opts, Binaries bs_a) throws Exception {
  1638  		Interfaces args = Geth.newInterfaces(1);
  1639  		Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_a);args.set(0,arg0);
  1640  		
  1641  		return this.Contract.transact(opts, "setBytesArray"	, args);
  1642  	}
  1643  	
  1644  	// setBytesList is a paid mutator transaction binding the contract method 0x16c105e2.
  1645  	//
  1646  	// Solidity: function setBytesList(bytes[] bs_l) returns(bytes[])
  1647  	public Transaction setBytesList(TransactOpts opts, Binaries bs_l) throws Exception {
  1648  		Interfaces args = Geth.newInterfaces(1);
  1649  		Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_l);args.set(0,arg0);
  1650  		
  1651  		return this.Contract.transact(opts, "setBytesList"	, args);
  1652  	}
  1653  	
  1654  	// setInt16 is a paid mutator transaction binding the contract method 0x86114cea.
  1655  	//
  1656  	// Solidity: function setInt16(int16 i16) returns(int16)
  1657  	public Transaction setInt16(TransactOpts opts, short i16) throws Exception {
  1658  		Interfaces args = Geth.newInterfaces(1);
  1659  		Interface arg0 = Geth.newInterface();arg0.setInt16(i16);args.set(0,arg0);
  1660  		
  1661  		return this.Contract.transact(opts, "setInt16"	, args);
  1662  	}
  1663  	
  1664  	// setInt256 is a paid mutator transaction binding the contract method 0xa53b1c1e.
  1665  	//
  1666  	// Solidity: function setInt256(int256 i256) returns(int256)
  1667  	public Transaction setInt256(TransactOpts opts, BigInt i256) throws Exception {
  1668  		Interfaces args = Geth.newInterfaces(1);
  1669  		Interface arg0 = Geth.newInterface();arg0.setBigInt(i256);args.set(0,arg0);
  1670  		
  1671  		return this.Contract.transact(opts, "setInt256"	, args);
  1672  	}
  1673  	
  1674  	// setInt256Array is a paid mutator transaction binding the contract method 0x6aa482fc.
  1675  	//
  1676  	// Solidity: function setInt256Array(int256[2] i256_a) returns(int256[2])
  1677  	public Transaction setInt256Array(TransactOpts opts, BigInts i256_a) throws Exception {
  1678  		Interfaces args = Geth.newInterfaces(1);
  1679  		Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_a);args.set(0,arg0);
  1680  		
  1681  		return this.Contract.transact(opts, "setInt256Array"	, args);
  1682  	}
  1683  	
  1684  	// setInt256List is a paid mutator transaction binding the contract method 0x22722302.
  1685  	//
  1686  	// Solidity: function setInt256List(int256[] i256_l) returns(int256[])
  1687  	public Transaction setInt256List(TransactOpts opts, BigInts i256_l) throws Exception {
  1688  		Interfaces args = Geth.newInterfaces(1);
  1689  		Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_l);args.set(0,arg0);
  1690  		
  1691  		return this.Contract.transact(opts, "setInt256List"	, args);
  1692  	}
  1693  	
  1694  	// setInt32 is a paid mutator transaction binding the contract method 0xb7d5df31.
  1695  	//
  1696  	// Solidity: function setInt32(int32 i32) returns(int32)
  1697  	public Transaction setInt32(TransactOpts opts, int i32) throws Exception {
  1698  		Interfaces args = Geth.newInterfaces(1);
  1699  		Interface arg0 = Geth.newInterface();arg0.setInt32(i32);args.set(0,arg0);
  1700  		
  1701  		return this.Contract.transact(opts, "setInt32"	, args);
  1702  	}
  1703  	
  1704  	// setInt64 is a paid mutator transaction binding the contract method 0xe673eb32.
  1705  	//
  1706  	// Solidity: function setInt64(int64 i64) returns(int64)
  1707  	public Transaction setInt64(TransactOpts opts, long i64) throws Exception {
  1708  		Interfaces args = Geth.newInterfaces(1);
  1709  		Interface arg0 = Geth.newInterface();arg0.setInt64(i64);args.set(0,arg0);
  1710  		
  1711  		return this.Contract.transact(opts, "setInt64"	, args);
  1712  	}
  1713  	
  1714  	// setInt8 is a paid mutator transaction binding the contract method 0x9a19a953.
  1715  	//
  1716  	// Solidity: function setInt8(int8 i8) returns(int8)
  1717  	public Transaction setInt8(TransactOpts opts, byte i8) throws Exception {
  1718  		Interfaces args = Geth.newInterfaces(1);
  1719  		Interface arg0 = Geth.newInterface();arg0.setInt8(i8);args.set(0,arg0);
  1720  		
  1721  		return this.Contract.transact(opts, "setInt8"	, args);
  1722  	}
  1723  	
  1724  	// setString is a paid mutator transaction binding the contract method 0x7fcaf666.
  1725  	//
  1726  	// Solidity: function setString(string s) returns(string)
  1727  	public Transaction setString(TransactOpts opts, String s) throws Exception {
  1728  		Interfaces args = Geth.newInterfaces(1);
  1729  		Interface arg0 = Geth.newInterface();arg0.setString(s);args.set(0,arg0);
  1730  		
  1731  		return this.Contract.transact(opts, "setString"	, args);
  1732  	}
  1733  	
  1734  	// setStringArray is a paid mutator transaction binding the contract method 0x7173b695.
  1735  	//
  1736  	// Solidity: function setStringArray(string[2] s_a) returns(string[2])
  1737  	public Transaction setStringArray(TransactOpts opts, Strings s_a) throws Exception {
  1738  		Interfaces args = Geth.newInterfaces(1);
  1739  		Interface arg0 = Geth.newInterface();arg0.setStrings(s_a);args.set(0,arg0);
  1740  		
  1741  		return this.Contract.transact(opts, "setStringArray"	, args);
  1742  	}
  1743  	
  1744  	// setStringList is a paid mutator transaction binding the contract method 0xc5777961.
  1745  	//
  1746  	// Solidity: function setStringList(string[] s_l) returns(string[])
  1747  	public Transaction setStringList(TransactOpts opts, Strings s_l) throws Exception {
  1748  		Interfaces args = Geth.newInterfaces(1);
  1749  		Interface arg0 = Geth.newInterface();arg0.setStrings(s_l);args.set(0,arg0);
  1750  		
  1751  		return this.Contract.transact(opts, "setStringList"	, args);
  1752  	}
  1753  	
  1754  	// setUint16 is a paid mutator transaction binding the contract method 0x0477988a.
  1755  	//
  1756  	// Solidity: function setUint16(uint16 u16) returns(uint16)
  1757  	public Transaction setUint16(TransactOpts opts, BigInt u16) throws Exception {
  1758  		Interfaces args = Geth.newInterfaces(1);
  1759  		Interface arg0 = Geth.newInterface();arg0.setUint16(u16);args.set(0,arg0);
  1760  		
  1761  		return this.Contract.transact(opts, "setUint16"	, args);
  1762  	}
  1763  	
  1764  	// setUint256 is a paid mutator transaction binding the contract method 0xd2282dc5.
  1765  	//
  1766  	// Solidity: function setUint256(uint256 u256) returns(uint256)
  1767  	public Transaction setUint256(TransactOpts opts, BigInt u256) throws Exception {
  1768  		Interfaces args = Geth.newInterfaces(1);
  1769  		Interface arg0 = Geth.newInterface();arg0.setBigInt(u256);args.set(0,arg0);
  1770  		
  1771  		return this.Contract.transact(opts, "setUint256"	, args);
  1772  	}
  1773  	
  1774  	// setUint256Array is a paid mutator transaction binding the contract method 0x2766a755.
  1775  	//
  1776  	// Solidity: function setUint256Array(uint256[2] u256_a) returns(uint256[2])
  1777  	public Transaction setUint256Array(TransactOpts opts, BigInts u256_a) throws Exception {
  1778  		Interfaces args = Geth.newInterfaces(1);
  1779  		Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_a);args.set(0,arg0);
  1780  		
  1781  		return this.Contract.transact(opts, "setUint256Array"	, args);
  1782  	}
  1783  	
  1784  	// setUint256List is a paid mutator transaction binding the contract method 0xa0709e19.
  1785  	//
  1786  	// Solidity: function setUint256List(uint256[] u256_l) returns(uint256[])
  1787  	public Transaction setUint256List(TransactOpts opts, BigInts u256_l) throws Exception {
  1788  		Interfaces args = Geth.newInterfaces(1);
  1789  		Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_l);args.set(0,arg0);
  1790  		
  1791  		return this.Contract.transact(opts, "setUint256List"	, args);
  1792  	}
  1793  	
  1794  	// setUint32 is a paid mutator transaction binding the contract method 0x1c9352e2.
  1795  	//
  1796  	// Solidity: function setUint32(uint32 u32) returns(uint32)
  1797  	public Transaction setUint32(TransactOpts opts, BigInt u32) throws Exception {
  1798  		Interfaces args = Geth.newInterfaces(1);
  1799  		Interface arg0 = Geth.newInterface();arg0.setUint32(u32);args.set(0,arg0);
  1800  		
  1801  		return this.Contract.transact(opts, "setUint32"	, args);
  1802  	}
  1803  	
  1804  	// setUint64 is a paid mutator transaction binding the contract method 0x822cba69.
  1805  	//
  1806  	// Solidity: function setUint64(uint64 u64) returns(uint64)
  1807  	public Transaction setUint64(TransactOpts opts, BigInt u64) throws Exception {
  1808  		Interfaces args = Geth.newInterfaces(1);
  1809  		Interface arg0 = Geth.newInterface();arg0.setUint64(u64);args.set(0,arg0);
  1810  		
  1811  		return this.Contract.transact(opts, "setUint64"	, args);
  1812  	}
  1813  	
  1814  	// setUint8 is a paid mutator transaction binding the contract method 0x1774e646.
  1815  	//
  1816  	// Solidity: function setUint8(uint8 u8) returns(uint8)
  1817  	public Transaction setUint8(TransactOpts opts, BigInt u8) throws Exception {
  1818  		Interfaces args = Geth.newInterfaces(1);
  1819  		Interface arg0 = Geth.newInterface();arg0.setUint8(u8);args.set(0,arg0);
  1820  		
  1821  		return this.Contract.transact(opts, "setUint8"	, args);
  1822  	}
  1823  	
  1824  }
  1825  
  1826  `,
  1827  		},
  1828  	}
  1829  	for i, c := range cases {
  1830  		binding, err := Bind([]string{c.name}, []string{c.abi}, []string{c.bytecode}, nil, "bindtest", LangJava, nil)
  1831  		if err != nil {
  1832  			t.Fatalf("test %d: failed to generate binding: %v", i, err)
  1833  		}
  1834  		if binding != c.expected {
  1835  			t.Fatalf("test %d: generated binding mismatch, has %s, want %s", i, binding, c.expected)
  1836  		}
  1837  	}
  1838  }