// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.

package testapp

import (
	"math/big"
	"strings"

	ethereum "github.com/ethereum/go-ethereum"
	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/accounts/abi/bind"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/types"
	"github.com/ethereum/go-ethereum/event"
)

// Reference imports to suppress errors if they are not otherwise used.
var (
	_ = big.NewInt
	_ = strings.NewReader
	_ = ethereum.NotFound
	_ = bind.Bind
	_ = common.Big1
	_ = types.BloomLookup
	_ = event.NewSubscription
)

// MultiGomokuABI is the input ABI used to generate the binding from.
const MultiGomokuABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"_session\",\"type\":\"bytes32\"}],\"name\":\"getSettleFinalizedTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_stateProof\",\"type\":\"bytes\"}],\"name\":\"intendSettle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_session\",\"type\":\"bytes32\"}],\"name\":\"getSeqNum\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\"},{\"name\":\"_signers\",\"type\":\"address[]\"}],\"name\":\"getSessionID\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_session\",\"type\":\"bytes32\"}],\"name\":\"getStatus\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minStoneOffchain\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_session\",\"type\":\"bytes32\"}],\"name\":\"finalizeOnActionTimeout\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_query\",\"type\":\"bytes\"}],\"name\":\"isFinalized\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxStoneOnchain\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_session\",\"type\":\"bytes32\"}],\"name\":\"getActionDeadline\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_session\",\"type\":\"bytes32\"},{\"name\":\"_action\",\"type\":\"bytes\"}],\"name\":\"applyAction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_minStoneOffchain\",\"type\":\"uint8\"},{\"name\":\"_maxStoneOnchain\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"session\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"seq\",\"type\":\"uint256\"}],\"name\":\"IntendSettle\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"name\":\"_query\",\"type\":\"bytes\"}],\"name\":\"getOutcome\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_session\",\"type\":\"bytes32\"},{\"name\":\"_key\",\"type\":\"uint256\"}],\"name\":\"getState\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]"

// MultiGomokuBin is the compiled bytecode used for deploying new contracts.
var MultiGomokuBin = "0x608060405234801561001057600080fd5b50604051604080612f318339810180604052604081101561003057600080fd5b810190808051906020019092919080519060200190929190505050600280806000800181905550505081600260006101000a81548160ff021916908360ff16021790555080600260016101000a81548160ff021916908360ff1602179055505050612e91806100a06000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637ca221571161008c578063c1a2865611610066578063c1a286561461044c578063cab9244614610470578063ea4ba8eb146104b2578063f3c7719214610543576100cf565b80637ca2215714610369578063b89fa28b1461038d578063bcdbda94146103bb576100cf565b806309b65d86146100d4578063130d33fe1461011657806329dd2f8e1461018f5780633b6de66f146102405780634d8bedec146102825780635de28ae014610319575b600080fd5b610100600480360360208110156100ea57600080fd5b81019080803590602001909291905050506105c6565b6040518082815260200191505060405180910390f35b61018d6004803603602081101561012c57600080fd5b810190808035906020019064010000000081111561014957600080fd5b82018360208201111561015b57600080fd5b8035906020019184600183028401116401000000008311171561017d57600080fd5b9091929391929390505050610632565b005b6101c5600480360360408110156101a557600080fd5b810190808035906020019092919080359060200190929190505050610a39565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102055780820151818401526020810190506101ea565b50505050905090810190601f1680156102325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61026c6004803603602081101561025657600080fd5b8101908080359060200190929190505050610d07565b6040518082815260200191505060405180910390f35b6103036004803603604081101561029857600080fd5b8101908080359060200190929190803590602001906401000000008111156102bf57600080fd5b8201836020820111156102d157600080fd5b803590602001918460208302840111640100000000831117156102f357600080fd5b9091929391929390505050610d27565b6040518082815260200191505060405180910390f35b6103456004803603602081101561032f57600080fd5b8101908080359060200190929190505050610d90565b6040518082600381111561035557fe5b60ff16815260200191505060405180910390f35b610371610dbd565b604051808260ff1660ff16815260200191505060405180910390f35b6103b9600480360360208110156103a357600080fd5b8101908080359060200190929190505050610dd0565b005b610432600480360360208110156103d157600080fd5b81019080803590602001906401000000008111156103ee57600080fd5b82018360208201111561040057600080fd5b8035906020019184600183028401116401000000008311171561042257600080fd5b9091929391929390505050610e85565b604051808215151515815260200191505060405180910390f35b610454610f1c565b604051808260ff1660ff16815260200191505060405180910390f35b61049c6004803603602081101561048657600080fd5b8101908080359060200190929190505050610f2f565b6040518082815260200191505060405180910390f35b610529600480360360208110156104c857600080fd5b81019080803590602001906401000000008111156104e557600080fd5b8201836020820111156104f757600080fd5b8035906020019184600183028401116401000000008311171561051957600080fd5b9091929391929390505050611013565b604051808215151515815260200191505060405180910390f35b6105c46004803603604081101561055957600080fd5b81019080803590602001909291908035906020019064010000000081111561058057600080fd5b82018360208201111561059257600080fd5b803590602001918460018302840111640100000000831117156105b457600080fd5b9091929391929390505050611087565b005b6000600160038111156105d557fe5b6001600084815260200190815260200160002060040160009054906101000a900460ff16600381111561060457fe5b1415610628576001600083815260200190815260200160002060030154905061062d565b600090505b919050565b61063a612c7a565b61068783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506112be565b9050606061069f826000015183602001516001611435565b9050600080015481511461071b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f696e76616c6964206e756d626572206f6620706c61796572730000000000000081525060200191505060405180910390fd5b610723612c94565b610730836000015161164c565b905060008160000151836040516020018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561078657808201518184015260208101905061076b565b5050505090500193505050506040516020818303038152906040528051906020012090506000600160008381526020019081526020016000209050600060038111156107ce57fe5b8160040160009054906101000a900460ff1660038111156107eb57fe5b141561080b5783816000019080519060200190610809929190612cbc565b505b60038081111561081757fe5b8160040160009054906101000a900460ff16600381111561083457fe5b14156108a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f73746174652069732066696e616c697a6564000000000000000000000000000081525060200191505060405180910390fd5b8260200151816001015410610925576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f696e76616c69642073657175656e6365206e756d62657200000000000000000081525060200191505060405180910390fd5b8260200151816001018190555060018160040160006101000a81548160ff0219169083600381111561095357fe5b02179055508260600151816002018190555082606001514301816003018190555061098282846040015161173a565b6109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f737461746520757064617465206661696c65640000000000000000000000000081525060200191505060405180910390fd5b817f82c4eeba939ff9358877334330e22a5cdb0472113cd14f90625ea634b60d2e5b82600101546040518082815260200191505060405180910390a250505050505050565b606060016002811115610a4857fe5b821415610b4557606060016040519080825280601f01601f191660200182016040528015610a855781602001600182028038833980820191505090505b509050600360008581526020019081526020016000206000016000815460018160011615610100020316600290048110610abb57fe5b815460011615610ada5790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000281600081518110610b0d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080915050610d01565b60006002811115610b5257fe5b821415610c4f57606060016040519080825280601f01601f191660200182016040528015610b8f5781602001600182028038833980820191505090505b509050600360008581526020019081526020016000206000016001815460018160011615610100020316600290048110610bc557fe5b815460011615610be45790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000281600081518110610c1757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080915050610d01565b600360008481526020019081526020016000206000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cf95780601f10610cce57610100808354040283529160200191610cf9565b820191906000526020600020905b815481529060010190602001808311610cdc57829003601f168201915b505050505090505b92915050565b600060016000838152602001908152602001600020600101549050919050565b600083838360405160200180848152602001806020018281038252848482818152602001925060200280828437600081840152601f19601f8201169050808301925050509450505050506040516020818303038152906040528051906020012090509392505050565b60006001600083815260200190815260200160002060040160009054906101000a900460ff169050919050565b600260009054906101000a900460ff1681565b600060016000838152602001908152602001600020905060008160040160009054906101000a900460ff16905060008260030154905060026003811115610e1357fe5b826003811115610e1f57fe5b1415610e3657804311610e3157600080fd5b610e75565b60016003811115610e4357fe5b826003811115610e4f57fe5b1415610e6c57826002015481014311610e6757600080fd5b610e74565b505050610e82565b5b610e7e846119ba565b5050505b50565b600080610ed584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611a08565b9050600380811115610ee357fe5b6001600083815260200190815260200160002060040160009054906101000a900460ff166003811115610f1257fe5b1491505092915050565b600260019054906101000a900460ff1681565b600060026003811115610f3e57fe5b6001600084815260200190815260200160002060040160009054906101000a900460ff166003811115610f6d57fe5b1415610f91576001600083815260200190815260200160002060030154905061100e565b60016003811115610f9e57fe5b6001600084815260200190815260200160002060040160009054906101000a900460ff166003811115610fcd57fe5b1415611009576001600083815260200190815260200160002060020154600160008481526020019081526020016000206003015401905061100e565b600090505b919050565b600061101d612d46565b61106a84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611a24565b905061107e81600001518260200151611ad8565b91505092915050565b60006001600085815260200190815260200160002090506003808111156110aa57fe5b8160040160009054906101000a900460ff1660038111156110c757fe5b141561113b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6170702073746174652069732066696e616c697a65640000000000000000000081525060200191505060405180910390fd5b6001600381111561114857fe5b8160040160009054906101000a900460ff16600381111561116557fe5b1480156111755750438160030154105b156111a15760028160040160006101000a81548160ff0219169083600381111561119b57fe5b02179055505b600260038111156111ae57fe5b8160040160009054906101000a900460ff1660038111156111cb57fe5b1461123e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f617070206e6f7420696e20616374696f6e206d6f64650000000000000000000081525060200191505060405180910390fd5b80600101600081548092919060010191905055508060020154430181600301819055506112af8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611c2e565b6112b857600080fd5b50505050565b6112c6612c7a565b6112ce612d63565b6112d78361237e565b905060606112ef6002836123ad90919063ffffffff16565b9050806002815181106112fe57fe5b602002602001015160405190808252806020026020018201604052801561133957816020015b60608152602001906001900390816113245790505b50836020018190525060008160028151811061135157fe5b6020026020010181815250506000805b61136a84612452565b1561142c5761137884612467565b809250819350505060001561138c57611427565b60018214156113ab5761139e8461249b565b8560000181905250611426565b6002821415611411576113bd8461249b565b8560200151846002815181106113cf57fe5b6020026020010151815181106113e157fe5b6020026020010181905250826002815181106113f957fe5b60200260200101805180919060010181525050611425565b611424818561255490919063ffffffff16565b5b5b5b611361565b50505050919050565b60608083516040519080825280602002602001820160405280156114685781602001602082028038833980820191505090505b50905060006114e7866040516020018082805190602001908083835b602083106114a75780518252602082019150602081019050602083039250611484565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206125e4565b9050600080905060008090505b865181101561163e5761151a8388838151811061150d57fe5b602002602001015161263c565b84828151811061152657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508515611631578173ffffffffffffffffffffffffffffffffffffffff1684828151811061158957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161161161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f7369676e657273206e6f7420696e20617363656e64696e67206f72646572000081525060200191505060405180910390fd5b83818151811061162657fe5b602002602001015191505b80806001019150506114f4565b508293505050509392505050565b611654612c94565b61165c612d63565b6116658361237e565b90506000805b61167483612452565b156117325761168283612467565b80925081935050506000156116965761172d565b60018214156116b6576116a88361271c565b84600001818152505061172c565b60028214156116d6576116c88361271c565b84602001818152505061172b565b60038214156116f5576116e88361249b565b846040018190525061172a565b6004821415611715576117078361271c565b846060018181525050611729565b611728818461255490919063ffffffff16565b5b5b5b5b5b61166b565b505050919050565b600060e48251146117b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e76616c6964207374617465206c656e67746800000000000000000000000081525060200191505060405180910390fd5b600060036000858152602001908152602001600020905060008160000180546001816001161561010002031660029004905014156118395760e46040519080825280601f01601f19166020018201604052801561181f5781602001600182028038833980820191505090505b50816000019080519060200190611837929190612d7d565b505b60008360008151811061184857fe5b602001015160f81c60f81b60f81c60ff161461188757611882848460008151811061186f57fe5b602001015160f81c60f81b60f81c6127a2565b611996565b60008090506000600390505b60e48110156118d65760008582815181106118aa57fe5b602001015160f81c60f81b60f81c60ff16146118c95781806001019250505b8080600101915050611893565b50808260010160006101000a81548161ffff021916908361ffff160217905550600260009054906101000a900460ff1660ff168260010160009054906101000a900461ffff1661ffff161015611994576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f7420656e6f756768206f66666368616e2073746f6e65730000000000000081525060200191505060405180910390fd5b505b828160000190805190602001906119ae929190612d7d565b50600191505092915050565b600160ff166119c882612889565b60ff1614156119e1576119dc8160026127a2565b611a05565b600260ff166119ef82612889565b60ff161415611a0457611a038160016127a2565b5b5b50565b60006020825114611a1857600080fd5b60208201519050919050565b611a2c612d46565b611a34612d63565b611a3d8361237e565b90506000805b611a4c83612452565b15611ad057611a5a83612467565b8092508193505050600015611a6e57611acb565b6001821415611a9657611a88611a838461249b565b611a08565b846000018181525050611aca565b6002821415611ab557611aa88361249b565b8460200181905250611ac9565b611ac8818461255490919063ffffffff16565b5b5b5b611a43565b505050919050565b60006001825114611b51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e76616c6964207175657279206c656e67746800000000000000000000000081525060200191505060405180910390fd5b81600081518110611b5e57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600360008581526020019081526020016000206000016000815460018160011615610100020316600290048110611bbe57fe5b815460011615611bdd5790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614905092915050565b600080611c3a84612889565b90506000611c478561290d565b905060018160ff161415611d4c57600160008681526020019081526020016000206000016001830360ff1681548110611c7c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4e6f7420796f7572207475726e0000000000000000000000000000000000000081525060200191505060405180910390fd5b611e59565b60028160ff161415611e4f57600160008681526020019081526020016000206000018260020360ff1681548110611d7f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4e6f7420796f7572207475726e0000000000000000000000000000000000000081525060200191505060405180910390fd5b611e58565b6000611e5757fe5b5b5b6002845114611ed0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e76616c696420616374696f6e206c656e677468000000000000000000000081525060200191505060405180910390fd5b600084600081518110611edf57fe5b602001015160f81c60f81b60f81c9050600085600181518110611efe57fe5b602001015160f81c60f81b60f81c9050611f188282612991565b611f8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6f7574206f6620626f756e64617279000000000000000000000000000000000081525060200191505060405180910390fd5b60006003600089815260200190815260200160002090506000611fad84846129b7565b905060008260000182815460018160011615610100020316600290048110611fd157fe5b815460011615611ff05790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000260f81c60ff161461208f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f736c6f74206973206f636375706965640000000000000000000000000000000081525060200191505060405180910390fd5b8560f81b82600001828154600181600116156101000203166002900481106120b357fe5b8154600116156120d25790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555081600101600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff1602179055505081600101600281819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550506060826000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122125780601f106121e757610100808354040283529160200191612212565b820191906000526020600020905b8154815290600101906020018083116121f557829003601f168201915b50505050509050612228818686600160006129cd565b8061223e575061223d818686600060016129cd565b5b8061225357506122528186866001806129cd565b5b80612288575061228781868660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6129cd565b5b156122a7576122978a886127a2565b6001975050505050505050612378565b60e18360010160009054906101000a900461ffff1661ffff1614806122f35750600260019054906101000a900460ff1660ff168360010160029054906101000a900461ffff1661ffff16115b15612340576003600160008c815260200190815260200160002060040160006101000a81548160ff0219169083600381111561232b57fe5b021790555061233b8a6000612a61565b61236c565b600160ff168760ff16141561235f5761235a8a6002612a61565b61236b565b61236a8a6001612a61565b5b5b60019750505050505050505b92915050565b612386612d63565b600182511161239457600080fd5b8181602001819052506000816000018181525050919050565b6060600083600001519050600183016040519080825280602002602001820160405280156123ea5781602001602082028038833980820191505090505b5091506000805b6123fa86612452565b1561243f5761240886612467565b8092508193505050600184838151811061241e57fe5b60200260200101818151019150818152505061243a8682612554565b6123f1565b8286600001818152505050505092915050565b60008160200151518260000151109050919050565b60008060006124758461271c565b90506008818161248157fe5b04925060078116600581111561249357fe5b915050915091565b606060006124a88361271c565b905060008184600001510190508360200151518111156124c757600080fd5b816040519080825280601f01601f1916602001820160405280156124fa5781602001600182028038833980820191505090505b50925060608460200151905060008086600001519050602086019150806020840101905060008090505b8581101561253f578082015181840152602081019050612524565b50838760000181815250505050505050919050565b6000600581111561256157fe5b81600581111561256d57fe5b14156125825761257c8261271c565b506125e0565b6002600581111561258f57fe5b81600581111561259b57fe5b14156125da5760006125ac8361271c565b905080836000018181510191508181525050826020015151836000015111156125d457600080fd5b506125df565b600080fd5b5b5050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251146126505760009050612716565b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561268057601b810190505b601b8160ff16141580156126985750601c8160ff1614155b156126a95760009350505050612716565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612706573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008060608360200151905083600001519250826020820101519150600080935060008090505b600a8110156127975783811a915060078102607f8316901b85179450600060808316141561278a57600181018660000181815101915081815250508494505050505061279d565b8080600101915050612743565b50600080fd5b919050565b8060ff166000111580156127ba575060028160ff1611155b61282c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e76616c69642077696e6e657220737461746500000000000000000000000081525060200191505060405180910390fd5b6128368282612af3565b60008160ff16146128855761284c826000612a61565b60036001600084815260200190815260200160002060040160006101000a81548160ff0219169083600381111561287f57fe5b02179055505b5050565b60006003600083815260200190815260200160002060000160018154600181600116156101000203166002900481106128be57fe5b8154600116156128dd5790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000260f81c9050919050565b600060036000838152602001908152602001600020600001600281546001816001161561010002031660029004811061294257fe5b8154600116156129615790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000260f81c9050919050565b6000600f60ff168360ff161080156129af5750600f60ff168260ff16105b905092915050565b60008183600f026003010160ff16905092915050565b600080600090506129e18787878787612b85565b810190506001612a38888888887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02612b85565b038101905060058160ff1610612a52576001915050612a58565b60009150505b95945050505050565b8060f81b600360008481526020019081526020016000206000016001815460018160011615610100020316600290048110612a9857fe5b815460011615612ab75790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505050565b8060f81b600360008481526020019081526020016000206000016000815460018160011615610100020316600290048110612b2a57fe5b815460011615612b495790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505050565b600080600190505b60058160ff1611612c6f5760008160ff1685028760000b01905060008260ff1685028760000b019050612bc08282612991565b8015612c4d575088612bd289896129b7565b81518110612bdc57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191689612c1484846129b7565b81518110612c1e57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15612c5d57600183019250612c68565b829350505050612c71565b5050612b8d565b505b95945050505050565b604051806040016040528060608152602001606081525090565b6040518060800160405280600081526020016000815260200160608152602001600081525090565b828054828255906000526020600020908101928215612d35579160200282015b82811115612d345782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612cdc565b5b509050612d429190612dfd565b5090565b604051806040016040528060008019168152602001606081525090565b604051806040016040528060008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612dbe57805160ff1916838001178555612dec565b82800160010185558215612dec579182015b82811115612deb578251825591602001919060010190612dd0565b5b509050612df99190612e40565b5090565b612e3d91905b80821115612e3957600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612e03565b5090565b90565b612e6291905b80821115612e5e576000816000905550600101612e46565b5090565b9056fea165627a7a72305820c801bcde661f1fc80ad421a95e4db04852738b81313077640d20e3ef73557d620029"

// DeployMultiGomoku deploys a new Ethereum contract, binding an instance of MultiGomoku to it.
func DeployMultiGomoku(auth *bind.TransactOpts, backend bind.ContractBackend, _minStoneOffchain uint8, _maxStoneOnchain uint8) (common.Address, *types.Transaction, *MultiGomoku, error) {
	parsed, err := abi.JSON(strings.NewReader(MultiGomokuABI))
	if err != nil {
		return common.Address{}, nil, nil, err
	}

	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(MultiGomokuBin), backend, _minStoneOffchain, _maxStoneOnchain)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &MultiGomoku{MultiGomokuCaller: MultiGomokuCaller{contract: contract}, MultiGomokuTransactor: MultiGomokuTransactor{contract: contract}, MultiGomokuFilterer: MultiGomokuFilterer{contract: contract}}, nil
}

// MultiGomoku is an auto generated Go binding around an Ethereum contract.
type MultiGomoku struct {
	MultiGomokuCaller     // Read-only binding to the contract
	MultiGomokuTransactor // Write-only binding to the contract
	MultiGomokuFilterer   // Log filterer for contract events
}

// MultiGomokuCaller is an auto generated read-only Go binding around an Ethereum contract.
type MultiGomokuCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// MultiGomokuTransactor is an auto generated write-only Go binding around an Ethereum contract.
type MultiGomokuTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// MultiGomokuFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type MultiGomokuFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// MultiGomokuSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type MultiGomokuSession struct {
	Contract     *MultiGomoku      // Generic contract binding to set the session for
	CallOpts     bind.CallOpts     // Call options to use throughout this session
	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}

// MultiGomokuCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type MultiGomokuCallerSession struct {
	Contract *MultiGomokuCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts      // Call options to use throughout this session
}

// MultiGomokuTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type MultiGomokuTransactorSession struct {
	Contract     *MultiGomokuTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
}

// MultiGomokuRaw is an auto generated low-level Go binding around an Ethereum contract.
type MultiGomokuRaw struct {
	Contract *MultiGomoku // Generic contract binding to access the raw methods on
}

// MultiGomokuCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type MultiGomokuCallerRaw struct {
	Contract *MultiGomokuCaller // Generic read-only contract binding to access the raw methods on
}

// MultiGomokuTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type MultiGomokuTransactorRaw struct {
	Contract *MultiGomokuTransactor // Generic write-only contract binding to access the raw methods on
}

// NewMultiGomoku creates a new instance of MultiGomoku, bound to a specific deployed contract.
func NewMultiGomoku(address common.Address, backend bind.ContractBackend) (*MultiGomoku, error) {
	contract, err := bindMultiGomoku(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &MultiGomoku{MultiGomokuCaller: MultiGomokuCaller{contract: contract}, MultiGomokuTransactor: MultiGomokuTransactor{contract: contract}, MultiGomokuFilterer: MultiGomokuFilterer{contract: contract}}, nil
}

// NewMultiGomokuCaller creates a new read-only instance of MultiGomoku, bound to a specific deployed contract.
func NewMultiGomokuCaller(address common.Address, caller bind.ContractCaller) (*MultiGomokuCaller, error) {
	contract, err := bindMultiGomoku(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &MultiGomokuCaller{contract: contract}, nil
}

// NewMultiGomokuTransactor creates a new write-only instance of MultiGomoku, bound to a specific deployed contract.
func NewMultiGomokuTransactor(address common.Address, transactor bind.ContractTransactor) (*MultiGomokuTransactor, error) {
	contract, err := bindMultiGomoku(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &MultiGomokuTransactor{contract: contract}, nil
}

// NewMultiGomokuFilterer creates a new log filterer instance of MultiGomoku, bound to a specific deployed contract.
func NewMultiGomokuFilterer(address common.Address, filterer bind.ContractFilterer) (*MultiGomokuFilterer, error) {
	contract, err := bindMultiGomoku(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &MultiGomokuFilterer{contract: contract}, nil
}

// bindMultiGomoku binds a generic wrapper to an already deployed contract.
func bindMultiGomoku(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(MultiGomokuABI))
	if err != nil {
		return nil, err
	}
	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_MultiGomoku *MultiGomokuRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
	return _MultiGomoku.Contract.MultiGomokuCaller.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_MultiGomoku *MultiGomokuRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _MultiGomoku.Contract.MultiGomokuTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_MultiGomoku *MultiGomokuRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _MultiGomoku.Contract.MultiGomokuTransactor.contract.Transact(opts, method, params...)
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_MultiGomoku *MultiGomokuCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
	return _MultiGomoku.Contract.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_MultiGomoku *MultiGomokuTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _MultiGomoku.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_MultiGomoku *MultiGomokuTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _MultiGomoku.Contract.contract.Transact(opts, method, params...)
}

// GetActionDeadline is a free data retrieval call binding the contract method 0xcab92446.
//
// Solidity: function getActionDeadline(bytes32 _session) view returns(uint256)
func (_MultiGomoku *MultiGomokuCaller) GetActionDeadline(opts *bind.CallOpts, _session [32]byte) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MultiGomoku.contract.Call(opts, out, "getActionDeadline", _session)
	return *ret0, err
}

// GetActionDeadline is a free data retrieval call binding the contract method 0xcab92446.
//
// Solidity: function getActionDeadline(bytes32 _session) view returns(uint256)
func (_MultiGomoku *MultiGomokuSession) GetActionDeadline(_session [32]byte) (*big.Int, error) {
	return _MultiGomoku.Contract.GetActionDeadline(&_MultiGomoku.CallOpts, _session)
}

// GetActionDeadline is a free data retrieval call binding the contract method 0xcab92446.
//
// Solidity: function getActionDeadline(bytes32 _session) view returns(uint256)
func (_MultiGomoku *MultiGomokuCallerSession) GetActionDeadline(_session [32]byte) (*big.Int, error) {
	return _MultiGomoku.Contract.GetActionDeadline(&_MultiGomoku.CallOpts, _session)
}

// GetOutcome is a free data retrieval call binding the contract method 0xea4ba8eb.
//
// Solidity: function getOutcome(bytes _query) view returns(bool)
func (_MultiGomoku *MultiGomokuCaller) GetOutcome(opts *bind.CallOpts, _query []byte) (bool, error) {
	var (
		ret0 = new(bool)
	)
	out := ret0
	err := _MultiGomoku.contract.Call(opts, out, "getOutcome", _query)
	return *ret0, err
}

// GetOutcome is a free data retrieval call binding the contract method 0xea4ba8eb.
//
// Solidity: function getOutcome(bytes _query) view returns(bool)
func (_MultiGomoku *MultiGomokuSession) GetOutcome(_query []byte) (bool, error) {
	return _MultiGomoku.Contract.GetOutcome(&_MultiGomoku.CallOpts, _query)
}

// GetOutcome is a free data retrieval call binding the contract method 0xea4ba8eb.
//
// Solidity: function getOutcome(bytes _query) view returns(bool)
func (_MultiGomoku *MultiGomokuCallerSession) GetOutcome(_query []byte) (bool, error) {
	return _MultiGomoku.Contract.GetOutcome(&_MultiGomoku.CallOpts, _query)
}

// GetSeqNum is a free data retrieval call binding the contract method 0x3b6de66f.
//
// Solidity: function getSeqNum(bytes32 _session) view returns(uint256)
func (_MultiGomoku *MultiGomokuCaller) GetSeqNum(opts *bind.CallOpts, _session [32]byte) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MultiGomoku.contract.Call(opts, out, "getSeqNum", _session)
	return *ret0, err
}

// GetSeqNum is a free data retrieval call binding the contract method 0x3b6de66f.
//
// Solidity: function getSeqNum(bytes32 _session) view returns(uint256)
func (_MultiGomoku *MultiGomokuSession) GetSeqNum(_session [32]byte) (*big.Int, error) {
	return _MultiGomoku.Contract.GetSeqNum(&_MultiGomoku.CallOpts, _session)
}

// GetSeqNum is a free data retrieval call binding the contract method 0x3b6de66f.
//
// Solidity: function getSeqNum(bytes32 _session) view returns(uint256)
func (_MultiGomoku *MultiGomokuCallerSession) GetSeqNum(_session [32]byte) (*big.Int, error) {
	return _MultiGomoku.Contract.GetSeqNum(&_MultiGomoku.CallOpts, _session)
}

// GetSessionID is a free data retrieval call binding the contract method 0x4d8bedec.
//
// Solidity: function getSessionID(uint256 _nonce, address[] _signers) pure returns(bytes32)
func (_MultiGomoku *MultiGomokuCaller) GetSessionID(opts *bind.CallOpts, _nonce *big.Int, _signers []common.Address) ([32]byte, error) {
	var (
		ret0 = new([32]byte)
	)
	out := ret0
	err := _MultiGomoku.contract.Call(opts, out, "getSessionID", _nonce, _signers)
	return *ret0, err
}

// GetSessionID is a free data retrieval call binding the contract method 0x4d8bedec.
//
// Solidity: function getSessionID(uint256 _nonce, address[] _signers) pure returns(bytes32)
func (_MultiGomoku *MultiGomokuSession) GetSessionID(_nonce *big.Int, _signers []common.Address) ([32]byte, error) {
	return _MultiGomoku.Contract.GetSessionID(&_MultiGomoku.CallOpts, _nonce, _signers)
}

// GetSessionID is a free data retrieval call binding the contract method 0x4d8bedec.
//
// Solidity: function getSessionID(uint256 _nonce, address[] _signers) pure returns(bytes32)
func (_MultiGomoku *MultiGomokuCallerSession) GetSessionID(_nonce *big.Int, _signers []common.Address) ([32]byte, error) {
	return _MultiGomoku.Contract.GetSessionID(&_MultiGomoku.CallOpts, _nonce, _signers)
}

// GetSettleFinalizedTime is a free data retrieval call binding the contract method 0x09b65d86.
//
// Solidity: function getSettleFinalizedTime(bytes32 _session) view returns(uint256)
func (_MultiGomoku *MultiGomokuCaller) GetSettleFinalizedTime(opts *bind.CallOpts, _session [32]byte) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MultiGomoku.contract.Call(opts, out, "getSettleFinalizedTime", _session)
	return *ret0, err
}

// GetSettleFinalizedTime is a free data retrieval call binding the contract method 0x09b65d86.
//
// Solidity: function getSettleFinalizedTime(bytes32 _session) view returns(uint256)
func (_MultiGomoku *MultiGomokuSession) GetSettleFinalizedTime(_session [32]byte) (*big.Int, error) {
	return _MultiGomoku.Contract.GetSettleFinalizedTime(&_MultiGomoku.CallOpts, _session)
}

// GetSettleFinalizedTime is a free data retrieval call binding the contract method 0x09b65d86.
//
// Solidity: function getSettleFinalizedTime(bytes32 _session) view returns(uint256)
func (_MultiGomoku *MultiGomokuCallerSession) GetSettleFinalizedTime(_session [32]byte) (*big.Int, error) {
	return _MultiGomoku.Contract.GetSettleFinalizedTime(&_MultiGomoku.CallOpts, _session)
}

// GetState is a free data retrieval call binding the contract method 0x29dd2f8e.
//
// Solidity: function getState(bytes32 _session, uint256 _key) view returns(bytes)
func (_MultiGomoku *MultiGomokuCaller) GetState(opts *bind.CallOpts, _session [32]byte, _key *big.Int) ([]byte, error) {
	var (
		ret0 = new([]byte)
	)
	out := ret0
	err := _MultiGomoku.contract.Call(opts, out, "getState", _session, _key)
	return *ret0, err
}

// GetState is a free data retrieval call binding the contract method 0x29dd2f8e.
//
// Solidity: function getState(bytes32 _session, uint256 _key) view returns(bytes)
func (_MultiGomoku *MultiGomokuSession) GetState(_session [32]byte, _key *big.Int) ([]byte, error) {
	return _MultiGomoku.Contract.GetState(&_MultiGomoku.CallOpts, _session, _key)
}

// GetState is a free data retrieval call binding the contract method 0x29dd2f8e.
//
// Solidity: function getState(bytes32 _session, uint256 _key) view returns(bytes)
func (_MultiGomoku *MultiGomokuCallerSession) GetState(_session [32]byte, _key *big.Int) ([]byte, error) {
	return _MultiGomoku.Contract.GetState(&_MultiGomoku.CallOpts, _session, _key)
}

// GetStatus is a free data retrieval call binding the contract method 0x5de28ae0.
//
// Solidity: function getStatus(bytes32 _session) view returns(uint8)
func (_MultiGomoku *MultiGomokuCaller) GetStatus(opts *bind.CallOpts, _session [32]byte) (uint8, error) {
	var (
		ret0 = new(uint8)
	)
	out := ret0
	err := _MultiGomoku.contract.Call(opts, out, "getStatus", _session)
	return *ret0, err
}

// GetStatus is a free data retrieval call binding the contract method 0x5de28ae0.
//
// Solidity: function getStatus(bytes32 _session) view returns(uint8)
func (_MultiGomoku *MultiGomokuSession) GetStatus(_session [32]byte) (uint8, error) {
	return _MultiGomoku.Contract.GetStatus(&_MultiGomoku.CallOpts, _session)
}

// GetStatus is a free data retrieval call binding the contract method 0x5de28ae0.
//
// Solidity: function getStatus(bytes32 _session) view returns(uint8)
func (_MultiGomoku *MultiGomokuCallerSession) GetStatus(_session [32]byte) (uint8, error) {
	return _MultiGomoku.Contract.GetStatus(&_MultiGomoku.CallOpts, _session)
}

// IsFinalized is a free data retrieval call binding the contract method 0xbcdbda94.
//
// Solidity: function isFinalized(bytes _query) view returns(bool)
func (_MultiGomoku *MultiGomokuCaller) IsFinalized(opts *bind.CallOpts, _query []byte) (bool, error) {
	var (
		ret0 = new(bool)
	)
	out := ret0
	err := _MultiGomoku.contract.Call(opts, out, "isFinalized", _query)
	return *ret0, err
}

// IsFinalized is a free data retrieval call binding the contract method 0xbcdbda94.
//
// Solidity: function isFinalized(bytes _query) view returns(bool)
func (_MultiGomoku *MultiGomokuSession) IsFinalized(_query []byte) (bool, error) {
	return _MultiGomoku.Contract.IsFinalized(&_MultiGomoku.CallOpts, _query)
}

// IsFinalized is a free data retrieval call binding the contract method 0xbcdbda94.
//
// Solidity: function isFinalized(bytes _query) view returns(bool)
func (_MultiGomoku *MultiGomokuCallerSession) IsFinalized(_query []byte) (bool, error) {
	return _MultiGomoku.Contract.IsFinalized(&_MultiGomoku.CallOpts, _query)
}

// MaxStoneOnchain is a free data retrieval call binding the contract method 0xc1a28656.
//
// Solidity: function maxStoneOnchain() view returns(uint8)
func (_MultiGomoku *MultiGomokuCaller) MaxStoneOnchain(opts *bind.CallOpts) (uint8, error) {
	var (
		ret0 = new(uint8)
	)
	out := ret0
	err := _MultiGomoku.contract.Call(opts, out, "maxStoneOnchain")
	return *ret0, err
}

// MaxStoneOnchain is a free data retrieval call binding the contract method 0xc1a28656.
//
// Solidity: function maxStoneOnchain() view returns(uint8)
func (_MultiGomoku *MultiGomokuSession) MaxStoneOnchain() (uint8, error) {
	return _MultiGomoku.Contract.MaxStoneOnchain(&_MultiGomoku.CallOpts)
}

// MaxStoneOnchain is a free data retrieval call binding the contract method 0xc1a28656.
//
// Solidity: function maxStoneOnchain() view returns(uint8)
func (_MultiGomoku *MultiGomokuCallerSession) MaxStoneOnchain() (uint8, error) {
	return _MultiGomoku.Contract.MaxStoneOnchain(&_MultiGomoku.CallOpts)
}

// MinStoneOffchain is a free data retrieval call binding the contract method 0x7ca22157.
//
// Solidity: function minStoneOffchain() view returns(uint8)
func (_MultiGomoku *MultiGomokuCaller) MinStoneOffchain(opts *bind.CallOpts) (uint8, error) {
	var (
		ret0 = new(uint8)
	)
	out := ret0
	err := _MultiGomoku.contract.Call(opts, out, "minStoneOffchain")
	return *ret0, err
}

// MinStoneOffchain is a free data retrieval call binding the contract method 0x7ca22157.
//
// Solidity: function minStoneOffchain() view returns(uint8)
func (_MultiGomoku *MultiGomokuSession) MinStoneOffchain() (uint8, error) {
	return _MultiGomoku.Contract.MinStoneOffchain(&_MultiGomoku.CallOpts)
}

// MinStoneOffchain is a free data retrieval call binding the contract method 0x7ca22157.
//
// Solidity: function minStoneOffchain() view returns(uint8)
func (_MultiGomoku *MultiGomokuCallerSession) MinStoneOffchain() (uint8, error) {
	return _MultiGomoku.Contract.MinStoneOffchain(&_MultiGomoku.CallOpts)
}

// ApplyAction is a paid mutator transaction binding the contract method 0xf3c77192.
//
// Solidity: function applyAction(bytes32 _session, bytes _action) returns()
func (_MultiGomoku *MultiGomokuTransactor) ApplyAction(opts *bind.TransactOpts, _session [32]byte, _action []byte) (*types.Transaction, error) {
	return _MultiGomoku.contract.Transact(opts, "applyAction", _session, _action)
}

// ApplyAction is a paid mutator transaction binding the contract method 0xf3c77192.
//
// Solidity: function applyAction(bytes32 _session, bytes _action) returns()
func (_MultiGomoku *MultiGomokuSession) ApplyAction(_session [32]byte, _action []byte) (*types.Transaction, error) {
	return _MultiGomoku.Contract.ApplyAction(&_MultiGomoku.TransactOpts, _session, _action)
}

// ApplyAction is a paid mutator transaction binding the contract method 0xf3c77192.
//
// Solidity: function applyAction(bytes32 _session, bytes _action) returns()
func (_MultiGomoku *MultiGomokuTransactorSession) ApplyAction(_session [32]byte, _action []byte) (*types.Transaction, error) {
	return _MultiGomoku.Contract.ApplyAction(&_MultiGomoku.TransactOpts, _session, _action)
}

// FinalizeOnActionTimeout is a paid mutator transaction binding the contract method 0xb89fa28b.
//
// Solidity: function finalizeOnActionTimeout(bytes32 _session) returns()
func (_MultiGomoku *MultiGomokuTransactor) FinalizeOnActionTimeout(opts *bind.TransactOpts, _session [32]byte) (*types.Transaction, error) {
	return _MultiGomoku.contract.Transact(opts, "finalizeOnActionTimeout", _session)
}

// FinalizeOnActionTimeout is a paid mutator transaction binding the contract method 0xb89fa28b.
//
// Solidity: function finalizeOnActionTimeout(bytes32 _session) returns()
func (_MultiGomoku *MultiGomokuSession) FinalizeOnActionTimeout(_session [32]byte) (*types.Transaction, error) {
	return _MultiGomoku.Contract.FinalizeOnActionTimeout(&_MultiGomoku.TransactOpts, _session)
}

// FinalizeOnActionTimeout is a paid mutator transaction binding the contract method 0xb89fa28b.
//
// Solidity: function finalizeOnActionTimeout(bytes32 _session) returns()
func (_MultiGomoku *MultiGomokuTransactorSession) FinalizeOnActionTimeout(_session [32]byte) (*types.Transaction, error) {
	return _MultiGomoku.Contract.FinalizeOnActionTimeout(&_MultiGomoku.TransactOpts, _session)
}

// IntendSettle is a paid mutator transaction binding the contract method 0x130d33fe.
//
// Solidity: function intendSettle(bytes _stateProof) returns()
func (_MultiGomoku *MultiGomokuTransactor) IntendSettle(opts *bind.TransactOpts, _stateProof []byte) (*types.Transaction, error) {
	return _MultiGomoku.contract.Transact(opts, "intendSettle", _stateProof)
}

// IntendSettle is a paid mutator transaction binding the contract method 0x130d33fe.
//
// Solidity: function intendSettle(bytes _stateProof) returns()
func (_MultiGomoku *MultiGomokuSession) IntendSettle(_stateProof []byte) (*types.Transaction, error) {
	return _MultiGomoku.Contract.IntendSettle(&_MultiGomoku.TransactOpts, _stateProof)
}

// IntendSettle is a paid mutator transaction binding the contract method 0x130d33fe.
//
// Solidity: function intendSettle(bytes _stateProof) returns()
func (_MultiGomoku *MultiGomokuTransactorSession) IntendSettle(_stateProof []byte) (*types.Transaction, error) {
	return _MultiGomoku.Contract.IntendSettle(&_MultiGomoku.TransactOpts, _stateProof)
}

// MultiGomokuIntendSettleIterator is returned from FilterIntendSettle and is used to iterate over the raw logs and unpacked data for IntendSettle events raised by the MultiGomoku contract.
type MultiGomokuIntendSettleIterator struct {
	Event *MultiGomokuIntendSettle // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *MultiGomokuIntendSettleIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(MultiGomokuIntendSettle)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(MultiGomokuIntendSettle)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *MultiGomokuIntendSettleIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *MultiGomokuIntendSettleIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// MultiGomokuIntendSettle represents a IntendSettle event raised by the MultiGomoku contract.
type MultiGomokuIntendSettle struct {
	Session [32]byte
	Seq     *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterIntendSettle is a free log retrieval operation binding the contract event 0x82c4eeba939ff9358877334330e22a5cdb0472113cd14f90625ea634b60d2e5b.
//
// Solidity: event IntendSettle(bytes32 indexed session, uint256 seq)
func (_MultiGomoku *MultiGomokuFilterer) FilterIntendSettle(opts *bind.FilterOpts, session [][32]byte) (*MultiGomokuIntendSettleIterator, error) {

	var sessionRule []interface{}
	for _, sessionItem := range session {
		sessionRule = append(sessionRule, sessionItem)
	}

	logs, sub, err := _MultiGomoku.contract.FilterLogs(opts, "IntendSettle", sessionRule)
	if err != nil {
		return nil, err
	}
	return &MultiGomokuIntendSettleIterator{contract: _MultiGomoku.contract, event: "IntendSettle", logs: logs, sub: sub}, nil
}

// WatchIntendSettle is a free log subscription operation binding the contract event 0x82c4eeba939ff9358877334330e22a5cdb0472113cd14f90625ea634b60d2e5b.
//
// Solidity: event IntendSettle(bytes32 indexed session, uint256 seq)
func (_MultiGomoku *MultiGomokuFilterer) WatchIntendSettle(opts *bind.WatchOpts, sink chan<- *MultiGomokuIntendSettle, session [][32]byte) (event.Subscription, error) {

	var sessionRule []interface{}
	for _, sessionItem := range session {
		sessionRule = append(sessionRule, sessionItem)
	}

	logs, sub, err := _MultiGomoku.contract.WatchLogs(opts, "IntendSettle", sessionRule)
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(MultiGomokuIntendSettle)
				if err := _MultiGomoku.contract.UnpackLog(event, "IntendSettle", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseIntendSettle is a log parse operation binding the contract event 0x82c4eeba939ff9358877334330e22a5cdb0472113cd14f90625ea634b60d2e5b.
//
// Solidity: event IntendSettle(bytes32 indexed session, uint256 seq)
func (_MultiGomoku *MultiGomokuFilterer) ParseIntendSettle(log types.Log) (*MultiGomokuIntendSettle, error) {
	event := new(MultiGomokuIntendSettle)
	if err := _MultiGomoku.contract.UnpackLog(event, "IntendSettle", log); err != nil {
		return nil, err
	}
	return event, nil
}
