github.com/neatio-net/neatio@v1.7.3-0.20231114194659-f4d7a2226baa/chain/accounts/abi/bind/bind_test.go (about)

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