arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/eth/contracts/erc777/ERC777.go
eth/contracts/erc777/ERC777.goRaw
   1// Code generated - DO NOT EDIT.
   2// This file is a generated binding and any manual changes will be lost.
   3
   4package ERC777
   5
   6import (
   7	"math/big"
   8	"strings"
   9
  10	ethereum "github.com/ethereum/go-ethereum"
  11	"github.com/ethereum/go-ethereum/accounts/abi"
  12	"github.com/ethereum/go-ethereum/accounts/abi/bind"
  13	"github.com/ethereum/go-ethereum/common"
  14	"github.com/ethereum/go-ethereum/core/types"
  15	"github.com/ethereum/go-ethereum/event"
  16)
  17
  18// Reference imports to suppress errors if they are not otherwise used.
  19var (
  20	_ = big.NewInt
  21	_ = strings.NewReader
  22	_ = ethereum.NotFound
  23	_ = bind.Bind
  24	_ = common.Big1
  25	_ = types.BloomLookup
  26	_ = event.NewSubscription
  27)
  28
  29// ERC777ABI is the input ABI used to generate the binding from.
  30const ERC777ABI = "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"defaultOperators\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"}],\"name\":\"AuthorizedOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"}],\"name\":\"RevokedOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"Sent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"authorizeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultOperators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"granularity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"}],\"name\":\"isOperatorFor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"operatorBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"operatorSend\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  31
  32// ERC777Bin is the compiled bytecode used for deploying new contracts.
  33var ERC777Bin = "0x60806040523480156200001157600080fd5b50604051620023b0380380620023b0833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001bc57600080fd5b908301906020820185811115620001d257600080fd5b8251866020820283011164010000000082111715620001f057600080fd5b82525081516020918201928201910280838360005b838110156200021f57818101518382015260200162000205565b5050505091909101604052505084516200024392506002915060208601906200040b565b508151620002599060039060208501906200040b565b5080516200026f90600490602084019062000490565b5060005b600454811015620002cf57600160056000600484815481106200029257fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905560010162000273565b50604080516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054602483015260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad24916329965a1d91606480830192600092919082900301818387803b1580156200035057600080fd5b505af115801562000365573d6000803e3d6000fd5b5050604080516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a602483015260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad2493506329965a1d9250606480830192600092919082900301818387803b158015620003e957600080fd5b505af1158015620003fe573d6000803e3d6000fd5b505050505050506200052e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200044e57805160ff19168380011785556200047e565b828001600101855582156200047e579182015b828111156200047e57825182559160200191906001019062000461565b506200048c929150620004f6565b5090565b828054828255906000526020600020908101928215620004e8579160200282015b82811115620004e857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620004b1565b506200048c9291506200050d565b5b808211156200048c5760008155600101620004f7565b5b808211156200048c5780546001600160a01b03191681556001016200050e565b611e72806200053e6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b63711461052a578063dd62ed3e14610558578063fad8b32a14610586578063fc673c4f146105ac578063fe9d9303146106ea57610116565b8063959b8c3f1461041757806395d89b411461043d5780639bd9bbc614610445578063a9059cbb146104fe57610116565b806323b872dd116100e957806323b872dd1461024a578063313ce56714610280578063556f0dc71461029e57806362ad1b83146102a657806370a08231146103f157610116565b806306e485381461011b57806306fdde0314610173578063095ea7b3146101f057806318160ddd14610230575b600080fd5b610123610795565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561015f578181015183820152602001610147565b505050509050019250505060405180910390f35b61017b6107f7565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101b557818101518382015260200161019d565b50505050905090810190601f1680156101e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61021c6004803603604081101561020657600080fd5b506001600160a01b038135169060200135610881565b604080519115158252519081900360200190f35b6102386108a3565b60408051918252519081900360200190f35b61021c6004803603606081101561026057600080fd5b506001600160a01b038135811691602081013590911690604001356108a9565b610288610a26565b6040805160ff9092168252519081900360200190f35b610238610a2b565b6103ef600480360360a08110156102bc57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156102f657600080fd5b82018360208201111561030857600080fd5b803590602001918460018302840111600160201b8311171561032957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561037b57600080fd5b82018360208201111561038d57600080fd5b803590602001918460018302840111600160201b831117156103ae57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a30945050505050565b005b6102386004803603602081101561040757600080fd5b50356001600160a01b0316610a92565b6103ef6004803603602081101561042d57600080fd5b50356001600160a01b0316610aad565b61017b610bf9565b6103ef6004803603606081101561045b57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561048a57600080fd5b82018360208201111561049c57600080fd5b803590602001918460018302840111600160201b831117156104bd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c5a945050505050565b61021c6004803603604081101561051457600080fd5b506001600160a01b038135169060200135610c84565b61021c6004803603604081101561054057600080fd5b506001600160a01b0381358116916020013516610d5d565b6102386004803603604081101561056e57600080fd5b506001600160a01b0381358116916020013516610dff565b6103ef6004803603602081101561059c57600080fd5b50356001600160a01b0316610e2a565b6103ef600480360360808110156105c257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156105f157600080fd5b82018360208201111561060357600080fd5b803590602001918460018302840111600160201b8311171561062457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561067657600080fd5b82018360208201111561068857600080fd5b803590602001918460018302840111600160201b831117156106a957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f76945050505050565b6103ef6004803603604081101561070057600080fd5b81359190810190604081016020820135600160201b81111561072157600080fd5b82018360208201111561073357600080fd5b803590602001918460018302840111600160201b8311171561075457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fd4945050505050565b606060048054806020026020016040519081016040528092919081815260200182805480156107ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107cf575b5050505050905090565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156107ed5780601f10610855576101008083540402835291602001916107ed565b820191906000526020600020905b81548152906001019060200180831161086357509395945050505050565b60008061088c610ffa565b9050610899818585610ffe565b5060019392505050565b60015490565b60006001600160a01b0383166108f05760405162461bcd60e51b8152600401808060200182810382526024815260200180611d586024913960400191505060405180910390fd5b6001600160a01b0384166109355760405162461bcd60e51b8152600401808060200182810382526026815260200180611dd16026913960400191505060405180910390fd5b600061093f610ffa565b905061096d8186868660405180602001604052806000815250604051806020016040528060008152506110ea565b610999818686866040518060200160405280600081525060405180602001604052806000815250611317565b6109ed85826109e886604051806060016040528060298152602001611da8602991396001600160a01b03808c166000908152600860209081526040808320938b16835292905220549190611530565b610ffe565b610a1b81868686604051806020016040528060008152506040518060200160405280600081525060006115c7565b506001949350505050565b601290565b600190565b610a41610a3b610ffa565b86610d5d565b610a7c5760405162461bcd60e51b815260040180806020018281038252602c815260200180611d7c602c913960400191505060405180910390fd5b610a8b8585858585600161184c565b5050505050565b6001600160a01b031660009081526020819052604090205490565b806001600160a01b0316610abf610ffa565b6001600160a01b03161415610b055760405162461bcd60e51b8152600401808060200182810382526024815260200180611cc66024913960400191505060405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615610b685760076000610b32610ffa565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff19169055610baf565b600160066000610b76610ffa565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff19169115159190911790555b610bb7610ffa565b6001600160a01b0316816001600160a01b03167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107ed5780601f10610855576101008083540402835291602001916107ed565b610c7f610c65610ffa565b84848460405180602001604052806000815250600161184c565b505050565b60006001600160a01b038316610ccb5760405162461bcd60e51b8152600401808060200182810382526024815260200180611d586024913960400191505060405180910390fd5b6000610cd5610ffa565b9050610d038182868660405180602001604052806000815250604051806020016040528060008152506110ea565b610d2f818286866040518060200160405280600081525060405180602001604052806000815250611317565b61089981828686604051806020016040528060008152506040518060200160405280600081525060006115c7565b6000816001600160a01b0316836001600160a01b03161480610dc857506001600160a01b03831660009081526005602052604090205460ff168015610dc857506001600160a01b0380831660009081526007602090815260408083209387168352929052205460ff16155b80610df857506001600160a01b0380831660009081526006602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b610e32610ffa565b6001600160a01b0316816001600160a01b03161415610e825760405162461bcd60e51b8152600401808060200182810382526021815260200180611cea6021913960400191505060405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615610eee57600160076000610eb1610ffa565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff1916911515919091179055610f2c565b60066000610efa610ffa565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff191690555b610f34610ffa565b6001600160a01b0316816001600160a01b03167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b610f87610f81610ffa565b85610d5d565b610fc25760405162461bcd60e51b815260040180806020018281038252602c815260200180611d7c602c913960400191505060405180910390fd5b610fce84848484611923565b50505050565b610ff6610fdf610ffa565b838360405180602001604052806000815250611923565b5050565b3390565b6001600160a01b0383166110435760405162461bcd60e51b8152600401808060200182810382526025815260200180611c366025913960400191505060405180910390fd5b6001600160a01b0382166110885760405162461bcd60e51b8152600401808060200182810382526023815260200180611e1a6023913960400191505060405180910390fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6040805163555ddc6560e11b81526001600160a01b03871660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe89560248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b15801561116e57600080fd5b505afa158015611182573d6000803e3d6000fd5b505050506040513d602081101561119857600080fd5b505190506001600160a01b0381161561130e57806001600160a01b03166375ab97828888888888886040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561124357818101518382015260200161122b565b50505050905090810190601f1680156112705780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156112a357818101518382015260200161128b565b50505050905090810190601f1680156112d05780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b505050505b50505050505050565b61132386868686610fce565b61136083604051806060016040528060278152602001611c7d602791396001600160a01b0388166000908152602081905260409020549190611530565b6001600160a01b03808716600090815260208190526040808220939093559086168152205461138f9084611b5d565b600080866001600160a01b03166001600160a01b0316815260200190815260200160002081905550836001600160a01b0316856001600160a01b0316876001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611440578181015183820152602001611428565b50505050905090810190601f16801561146d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156114a0578181015183820152602001611488565b50505050905090810190601f1680156114cd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050565b600081848411156115bf5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561158457818101518382015260200161156c565b50505050905090810190601f1680156115b15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6040805163555ddc6560e11b81526001600160a01b03871660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b15801561164b57600080fd5b505afa15801561165f573d6000803e3d6000fd5b505050506040513d602081101561167557600080fd5b505190506001600160a01b038116156117ee57806001600160a01b03166223de298989898989896040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561171f578181015183820152602001611707565b50505050905090810190601f16801561174c5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561177f578181015183820152602001611767565b50505050905090810190601f1680156117ac5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b1580156117d157600080fd5b505af11580156117e5573d6000803e3d6000fd5b50505050611842565b811561184257611806866001600160a01b0316611bb7565b156118425760405162461bcd60e51b815260040180806020018281038252604d815260200180611d0b604d913960600191505060405180910390fd5b5050505050505050565b6001600160a01b0386166118915760405162461bcd60e51b8152600401808060200182810382526022815260200180611c5b6022913960400191505060405180910390fd5b6001600160a01b0385166118ec576040805162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b60006118f6610ffa565b90506119068188888888886110ea565b611914818888888888611317565b61130e818888888888886115c7565b6001600160a01b0384166119685760405162461bcd60e51b8152600401808060200182810382526022815260200180611ca46022913960400191505060405180910390fd5b6000611972610ffa565b90506119818186600087610fce565b611990818660008787876110ea565b6119cd84604051806060016040528060238152602001611df7602391396001600160a01b0388166000908152602081905260409020549190611530565b6001600160a01b0386166000908152602081905260409020556001546119f39085611bf3565b600181905550846001600160a01b0316816001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611a78578181015183820152602001611a60565b50505050905090810190601f168015611aa55780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611ad8578181015183820152602001611ac0565b50505050905090810190601f168015611b055780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a36040805185815290516000916001600160a01b038816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050505050565b600082820183811015610df8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611beb57508115155b949350505050565b6000610df883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061153056fe4552433737373a20617070726f76652066726f6d20746865207a65726f20616464726573734552433737373a2073656e642066726f6d20746865207a65726f20616464726573734552433737373a207472616e7366657220616d6f756e7420657863656564732062616c616e63654552433737373a206275726e2066726f6d20746865207a65726f20616464726573734552433737373a20617574686f72697a696e672073656c66206173206f70657261746f724552433737373a207265766f6b696e672073656c66206173206f70657261746f724552433737373a20746f6b656e20726563697069656e7420636f6e747261637420686173206e6f20696d706c656d656e74657220666f7220455243373737546f6b656e73526563697069656e744552433737373a207472616e7366657220746f20746865207a65726f20616464726573734552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f7220666f7220686f6c6465724552433737373a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654552433737373a207472616e736665722066726f6d20746865207a65726f20616464726573734552433737373a206275726e20616d6f756e7420657863656564732062616c616e63654552433737373a20617070726f766520746f20746865207a65726f2061646472657373a2646970667358221220611f48202c28bfcac7a09c23557f3f0d17116120e469330e9bdeab00ad7edf6d64736f6c634300060c0033"
  34
  35// DeployERC777 deploys a new Ethereum contract, binding an instance of ERC777 to it.
  36func DeployERC777(auth *bind.TransactOpts, backend bind.ContractBackend, name string, symbol string, defaultOperators []common.Address) (common.Address, *types.Transaction, *ERC777, error) {
  37	parsed, err := abi.JSON(strings.NewReader(ERC777ABI))
  38	if err != nil {
  39		return common.Address{}, nil, nil, err
  40	}
  41
  42	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ERC777Bin), backend, name, symbol, defaultOperators)
  43	if err != nil {
  44		return common.Address{}, nil, nil, err
  45	}
  46	return address, tx, &ERC777{ERC777Caller: ERC777Caller{contract: contract}, ERC777Transactor: ERC777Transactor{contract: contract}, ERC777Filterer: ERC777Filterer{contract: contract}}, nil
  47}
  48
  49// ERC777 is an auto generated Go binding around an Ethereum contract.
  50type ERC777 struct {
  51	ERC777Caller     // Read-only binding to the contract
  52	ERC777Transactor // Write-only binding to the contract
  53	ERC777Filterer   // Log filterer for contract events
  54}
  55
  56// ERC777Caller is an auto generated read-only Go binding around an Ethereum contract.
  57type ERC777Caller struct {
  58	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  59}
  60
  61// ERC777Transactor is an auto generated write-only Go binding around an Ethereum contract.
  62type ERC777Transactor struct {
  63	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  64}
  65
  66// ERC777Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
  67type ERC777Filterer struct {
  68	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  69}
  70
  71// ERC777Session is an auto generated Go binding around an Ethereum contract,
  72// with pre-set call and transact options.
  73type ERC777Session struct {
  74	Contract     *ERC777           // Generic contract binding to set the session for
  75	CallOpts     bind.CallOpts     // Call options to use throughout this session
  76	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  77}
  78
  79// ERC777CallerSession is an auto generated read-only Go binding around an Ethereum contract,
  80// with pre-set call options.
  81type ERC777CallerSession struct {
  82	Contract *ERC777Caller // Generic contract caller binding to set the session for
  83	CallOpts bind.CallOpts // Call options to use throughout this session
  84}
  85
  86// ERC777TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  87// with pre-set transact options.
  88type ERC777TransactorSession struct {
  89	Contract     *ERC777Transactor // Generic contract transactor binding to set the session for
  90	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  91}
  92
  93// ERC777Raw is an auto generated low-level Go binding around an Ethereum contract.
  94type ERC777Raw struct {
  95	Contract *ERC777 // Generic contract binding to access the raw methods on
  96}
  97
  98// ERC777CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  99type ERC777CallerRaw struct {
 100	Contract *ERC777Caller // Generic read-only contract binding to access the raw methods on
 101}
 102
 103// ERC777TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
 104type ERC777TransactorRaw struct {
 105	Contract *ERC777Transactor // Generic write-only contract binding to access the raw methods on
 106}
 107
 108// NewERC777 creates a new instance of ERC777, bound to a specific deployed contract.
 109func NewERC777(address common.Address, backend bind.ContractBackend) (*ERC777, error) {
 110	contract, err := bindERC777(address, backend, backend, backend)
 111	if err != nil {
 112		return nil, err
 113	}
 114	return &ERC777{ERC777Caller: ERC777Caller{contract: contract}, ERC777Transactor: ERC777Transactor{contract: contract}, ERC777Filterer: ERC777Filterer{contract: contract}}, nil
 115}
 116
 117// NewERC777Caller creates a new read-only instance of ERC777, bound to a specific deployed contract.
 118func NewERC777Caller(address common.Address, caller bind.ContractCaller) (*ERC777Caller, error) {
 119	contract, err := bindERC777(address, caller, nil, nil)
 120	if err != nil {
 121		return nil, err
 122	}
 123	return &ERC777Caller{contract: contract}, nil
 124}
 125
 126// NewERC777Transactor creates a new write-only instance of ERC777, bound to a specific deployed contract.
 127func NewERC777Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC777Transactor, error) {
 128	contract, err := bindERC777(address, nil, transactor, nil)
 129	if err != nil {
 130		return nil, err
 131	}
 132	return &ERC777Transactor{contract: contract}, nil
 133}
 134
 135// NewERC777Filterer creates a new log filterer instance of ERC777, bound to a specific deployed contract.
 136func NewERC777Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC777Filterer, error) {
 137	contract, err := bindERC777(address, nil, nil, filterer)
 138	if err != nil {
 139		return nil, err
 140	}
 141	return &ERC777Filterer{contract: contract}, nil
 142}
 143
 144// bindERC777 binds a generic wrapper to an already deployed contract.
 145func bindERC777(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
 146	parsed, err := abi.JSON(strings.NewReader(ERC777ABI))
 147	if err != nil {
 148		return nil, err
 149	}
 150	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
 151}
 152
 153// Call invokes the (constant) contract method with params as input values and
 154// sets the output to result. The result type might be a single field for simple
 155// returns, a slice of interfaces for anonymous returns and a struct for named
 156// returns.
 157func (_ERC777 *ERC777Raw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
 158	return _ERC777.Contract.ERC777Caller.contract.Call(opts, result, method, params...)
 159}
 160
 161// Transfer initiates a plain transaction to move funds to the contract, calling
 162// its default method if one is available.
 163func (_ERC777 *ERC777Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
 164	return _ERC777.Contract.ERC777Transactor.contract.Transfer(opts)
 165}
 166
 167// Transact invokes the (paid) contract method with params as input values.
 168func (_ERC777 *ERC777Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
 169	return _ERC777.Contract.ERC777Transactor.contract.Transact(opts, method, params...)
 170}
 171
 172// Call invokes the (constant) contract method with params as input values and
 173// sets the output to result. The result type might be a single field for simple
 174// returns, a slice of interfaces for anonymous returns and a struct for named
 175// returns.
 176func (_ERC777 *ERC777CallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
 177	return _ERC777.Contract.contract.Call(opts, result, method, params...)
 178}
 179
 180// Transfer initiates a plain transaction to move funds to the contract, calling
 181// its default method if one is available.
 182func (_ERC777 *ERC777TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
 183	return _ERC777.Contract.contract.Transfer(opts)
 184}
 185
 186// Transact invokes the (paid) contract method with params as input values.
 187func (_ERC777 *ERC777TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
 188	return _ERC777.Contract.contract.Transact(opts, method, params...)
 189}
 190
 191// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
 192//
 193// Solidity: function allowance(address holder, address spender) view returns(uint256)
 194func (_ERC777 *ERC777Caller) Allowance(opts *bind.CallOpts, holder common.Address, spender common.Address) (*big.Int, error) {
 195	var (
 196		ret0 = new(*big.Int)
 197	)
 198	out := ret0
 199	err := _ERC777.contract.Call(opts, out, "allowance", holder, spender)
 200	return *ret0, err
 201}
 202
 203// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
 204//
 205// Solidity: function allowance(address holder, address spender) view returns(uint256)
 206func (_ERC777 *ERC777Session) Allowance(holder common.Address, spender common.Address) (*big.Int, error) {
 207	return _ERC777.Contract.Allowance(&_ERC777.CallOpts, holder, spender)
 208}
 209
 210// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
 211//
 212// Solidity: function allowance(address holder, address spender) view returns(uint256)
 213func (_ERC777 *ERC777CallerSession) Allowance(holder common.Address, spender common.Address) (*big.Int, error) {
 214	return _ERC777.Contract.Allowance(&_ERC777.CallOpts, holder, spender)
 215}
 216
 217// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
 218//
 219// Solidity: function balanceOf(address tokenHolder) view returns(uint256)
 220func (_ERC777 *ERC777Caller) BalanceOf(opts *bind.CallOpts, tokenHolder common.Address) (*big.Int, error) {
 221	var (
 222		ret0 = new(*big.Int)
 223	)
 224	out := ret0
 225	err := _ERC777.contract.Call(opts, out, "balanceOf", tokenHolder)
 226	return *ret0, err
 227}
 228
 229// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
 230//
 231// Solidity: function balanceOf(address tokenHolder) view returns(uint256)
 232func (_ERC777 *ERC777Session) BalanceOf(tokenHolder common.Address) (*big.Int, error) {
 233	return _ERC777.Contract.BalanceOf(&_ERC777.CallOpts, tokenHolder)
 234}
 235
 236// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
 237//
 238// Solidity: function balanceOf(address tokenHolder) view returns(uint256)
 239func (_ERC777 *ERC777CallerSession) BalanceOf(tokenHolder common.Address) (*big.Int, error) {
 240	return _ERC777.Contract.BalanceOf(&_ERC777.CallOpts, tokenHolder)
 241}
 242
 243// Decimals is a free data retrieval call binding the contract method 0x313ce567.
 244//
 245// Solidity: function decimals() pure returns(uint8)
 246func (_ERC777 *ERC777Caller) Decimals(opts *bind.CallOpts) (uint8, error) {
 247	var (
 248		ret0 = new(uint8)
 249	)
 250	out := ret0
 251	err := _ERC777.contract.Call(opts, out, "decimals")
 252	return *ret0, err
 253}
 254
 255// Decimals is a free data retrieval call binding the contract method 0x313ce567.
 256//
 257// Solidity: function decimals() pure returns(uint8)
 258func (_ERC777 *ERC777Session) Decimals() (uint8, error) {
 259	return _ERC777.Contract.Decimals(&_ERC777.CallOpts)
 260}
 261
 262// Decimals is a free data retrieval call binding the contract method 0x313ce567.
 263//
 264// Solidity: function decimals() pure returns(uint8)
 265func (_ERC777 *ERC777CallerSession) Decimals() (uint8, error) {
 266	return _ERC777.Contract.Decimals(&_ERC777.CallOpts)
 267}
 268
 269// DefaultOperators is a free data retrieval call binding the contract method 0x06e48538.
 270//
 271// Solidity: function defaultOperators() view returns(address[])
 272func (_ERC777 *ERC777Caller) DefaultOperators(opts *bind.CallOpts) ([]common.Address, error) {
 273	var (
 274		ret0 = new([]common.Address)
 275	)
 276	out := ret0
 277	err := _ERC777.contract.Call(opts, out, "defaultOperators")
 278	return *ret0, err
 279}
 280
 281// DefaultOperators is a free data retrieval call binding the contract method 0x06e48538.
 282//
 283// Solidity: function defaultOperators() view returns(address[])
 284func (_ERC777 *ERC777Session) DefaultOperators() ([]common.Address, error) {
 285	return _ERC777.Contract.DefaultOperators(&_ERC777.CallOpts)
 286}
 287
 288// DefaultOperators is a free data retrieval call binding the contract method 0x06e48538.
 289//
 290// Solidity: function defaultOperators() view returns(address[])
 291func (_ERC777 *ERC777CallerSession) DefaultOperators() ([]common.Address, error) {
 292	return _ERC777.Contract.DefaultOperators(&_ERC777.CallOpts)
 293}
 294
 295// Granularity is a free data retrieval call binding the contract method 0x556f0dc7.
 296//
 297// Solidity: function granularity() view returns(uint256)
 298func (_ERC777 *ERC777Caller) Granularity(opts *bind.CallOpts) (*big.Int, error) {
 299	var (
 300		ret0 = new(*big.Int)
 301	)
 302	out := ret0
 303	err := _ERC777.contract.Call(opts, out, "granularity")
 304	return *ret0, err
 305}
 306
 307// Granularity is a free data retrieval call binding the contract method 0x556f0dc7.
 308//
 309// Solidity: function granularity() view returns(uint256)
 310func (_ERC777 *ERC777Session) Granularity() (*big.Int, error) {
 311	return _ERC777.Contract.Granularity(&_ERC777.CallOpts)
 312}
 313
 314// Granularity is a free data retrieval call binding the contract method 0x556f0dc7.
 315//
 316// Solidity: function granularity() view returns(uint256)
 317func (_ERC777 *ERC777CallerSession) Granularity() (*big.Int, error) {
 318	return _ERC777.Contract.Granularity(&_ERC777.CallOpts)
 319}
 320
 321// IsOperatorFor is a free data retrieval call binding the contract method 0xd95b6371.
 322//
 323// Solidity: function isOperatorFor(address operator, address tokenHolder) view returns(bool)
 324func (_ERC777 *ERC777Caller) IsOperatorFor(opts *bind.CallOpts, operator common.Address, tokenHolder common.Address) (bool, error) {
 325	var (
 326		ret0 = new(bool)
 327	)
 328	out := ret0
 329	err := _ERC777.contract.Call(opts, out, "isOperatorFor", operator, tokenHolder)
 330	return *ret0, err
 331}
 332
 333// IsOperatorFor is a free data retrieval call binding the contract method 0xd95b6371.
 334//
 335// Solidity: function isOperatorFor(address operator, address tokenHolder) view returns(bool)
 336func (_ERC777 *ERC777Session) IsOperatorFor(operator common.Address, tokenHolder common.Address) (bool, error) {
 337	return _ERC777.Contract.IsOperatorFor(&_ERC777.CallOpts, operator, tokenHolder)
 338}
 339
 340// IsOperatorFor is a free data retrieval call binding the contract method 0xd95b6371.
 341//
 342// Solidity: function isOperatorFor(address operator, address tokenHolder) view returns(bool)
 343func (_ERC777 *ERC777CallerSession) IsOperatorFor(operator common.Address, tokenHolder common.Address) (bool, error) {
 344	return _ERC777.Contract.IsOperatorFor(&_ERC777.CallOpts, operator, tokenHolder)
 345}
 346
 347// Name is a free data retrieval call binding the contract method 0x06fdde03.
 348//
 349// Solidity: function name() view returns(string)
 350func (_ERC777 *ERC777Caller) Name(opts *bind.CallOpts) (string, error) {
 351	var (
 352		ret0 = new(string)
 353	)
 354	out := ret0
 355	err := _ERC777.contract.Call(opts, out, "name")
 356	return *ret0, err
 357}
 358
 359// Name is a free data retrieval call binding the contract method 0x06fdde03.
 360//
 361// Solidity: function name() view returns(string)
 362func (_ERC777 *ERC777Session) Name() (string, error) {
 363	return _ERC777.Contract.Name(&_ERC777.CallOpts)
 364}
 365
 366// Name is a free data retrieval call binding the contract method 0x06fdde03.
 367//
 368// Solidity: function name() view returns(string)
 369func (_ERC777 *ERC777CallerSession) Name() (string, error) {
 370	return _ERC777.Contract.Name(&_ERC777.CallOpts)
 371}
 372
 373// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
 374//
 375// Solidity: function symbol() view returns(string)
 376func (_ERC777 *ERC777Caller) Symbol(opts *bind.CallOpts) (string, error) {
 377	var (
 378		ret0 = new(string)
 379	)
 380	out := ret0
 381	err := _ERC777.contract.Call(opts, out, "symbol")
 382	return *ret0, err
 383}
 384
 385// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
 386//
 387// Solidity: function symbol() view returns(string)
 388func (_ERC777 *ERC777Session) Symbol() (string, error) {
 389	return _ERC777.Contract.Symbol(&_ERC777.CallOpts)
 390}
 391
 392// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
 393//
 394// Solidity: function symbol() view returns(string)
 395func (_ERC777 *ERC777CallerSession) Symbol() (string, error) {
 396	return _ERC777.Contract.Symbol(&_ERC777.CallOpts)
 397}
 398
 399// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
 400//
 401// Solidity: function totalSupply() view returns(uint256)
 402func (_ERC777 *ERC777Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
 403	var (
 404		ret0 = new(*big.Int)
 405	)
 406	out := ret0
 407	err := _ERC777.contract.Call(opts, out, "totalSupply")
 408	return *ret0, err
 409}
 410
 411// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
 412//
 413// Solidity: function totalSupply() view returns(uint256)
 414func (_ERC777 *ERC777Session) TotalSupply() (*big.Int, error) {
 415	return _ERC777.Contract.TotalSupply(&_ERC777.CallOpts)
 416}
 417
 418// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
 419//
 420// Solidity: function totalSupply() view returns(uint256)
 421func (_ERC777 *ERC777CallerSession) TotalSupply() (*big.Int, error) {
 422	return _ERC777.Contract.TotalSupply(&_ERC777.CallOpts)
 423}
 424
 425// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
 426//
 427// Solidity: function approve(address spender, uint256 value) returns(bool)
 428func (_ERC777 *ERC777Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) {
 429	return _ERC777.contract.Transact(opts, "approve", spender, value)
 430}
 431
 432// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
 433//
 434// Solidity: function approve(address spender, uint256 value) returns(bool)
 435func (_ERC777 *ERC777Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
 436	return _ERC777.Contract.Approve(&_ERC777.TransactOpts, spender, value)
 437}
 438
 439// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
 440//
 441// Solidity: function approve(address spender, uint256 value) returns(bool)
 442func (_ERC777 *ERC777TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
 443	return _ERC777.Contract.Approve(&_ERC777.TransactOpts, spender, value)
 444}
 445
 446// AuthorizeOperator is a paid mutator transaction binding the contract method 0x959b8c3f.
 447//
 448// Solidity: function authorizeOperator(address operator) returns()
 449func (_ERC777 *ERC777Transactor) AuthorizeOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
 450	return _ERC777.contract.Transact(opts, "authorizeOperator", operator)
 451}
 452
 453// AuthorizeOperator is a paid mutator transaction binding the contract method 0x959b8c3f.
 454//
 455// Solidity: function authorizeOperator(address operator) returns()
 456func (_ERC777 *ERC777Session) AuthorizeOperator(operator common.Address) (*types.Transaction, error) {
 457	return _ERC777.Contract.AuthorizeOperator(&_ERC777.TransactOpts, operator)
 458}
 459
 460// AuthorizeOperator is a paid mutator transaction binding the contract method 0x959b8c3f.
 461//
 462// Solidity: function authorizeOperator(address operator) returns()
 463func (_ERC777 *ERC777TransactorSession) AuthorizeOperator(operator common.Address) (*types.Transaction, error) {
 464	return _ERC777.Contract.AuthorizeOperator(&_ERC777.TransactOpts, operator)
 465}
 466
 467// Burn is a paid mutator transaction binding the contract method 0xfe9d9303.
 468//
 469// Solidity: function burn(uint256 amount, bytes data) returns()
 470func (_ERC777 *ERC777Transactor) Burn(opts *bind.TransactOpts, amount *big.Int, data []byte) (*types.Transaction, error) {
 471	return _ERC777.contract.Transact(opts, "burn", amount, data)
 472}
 473
 474// Burn is a paid mutator transaction binding the contract method 0xfe9d9303.
 475//
 476// Solidity: function burn(uint256 amount, bytes data) returns()
 477func (_ERC777 *ERC777Session) Burn(amount *big.Int, data []byte) (*types.Transaction, error) {
 478	return _ERC777.Contract.Burn(&_ERC777.TransactOpts, amount, data)
 479}
 480
 481// Burn is a paid mutator transaction binding the contract method 0xfe9d9303.
 482//
 483// Solidity: function burn(uint256 amount, bytes data) returns()
 484func (_ERC777 *ERC777TransactorSession) Burn(amount *big.Int, data []byte) (*types.Transaction, error) {
 485	return _ERC777.Contract.Burn(&_ERC777.TransactOpts, amount, data)
 486}
 487
 488// OperatorBurn is a paid mutator transaction binding the contract method 0xfc673c4f.
 489//
 490// Solidity: function operatorBurn(address account, uint256 amount, bytes data, bytes operatorData) returns()
 491func (_ERC777 *ERC777Transactor) OperatorBurn(opts *bind.TransactOpts, account common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) {
 492	return _ERC777.contract.Transact(opts, "operatorBurn", account, amount, data, operatorData)
 493}
 494
 495// OperatorBurn is a paid mutator transaction binding the contract method 0xfc673c4f.
 496//
 497// Solidity: function operatorBurn(address account, uint256 amount, bytes data, bytes operatorData) returns()
 498func (_ERC777 *ERC777Session) OperatorBurn(account common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) {
 499	return _ERC777.Contract.OperatorBurn(&_ERC777.TransactOpts, account, amount, data, operatorData)
 500}
 501
 502// OperatorBurn is a paid mutator transaction binding the contract method 0xfc673c4f.
 503//
 504// Solidity: function operatorBurn(address account, uint256 amount, bytes data, bytes operatorData) returns()
 505func (_ERC777 *ERC777TransactorSession) OperatorBurn(account common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) {
 506	return _ERC777.Contract.OperatorBurn(&_ERC777.TransactOpts, account, amount, data, operatorData)
 507}
 508
 509// OperatorSend is a paid mutator transaction binding the contract method 0x62ad1b83.
 510//
 511// Solidity: function operatorSend(address sender, address recipient, uint256 amount, bytes data, bytes operatorData) returns()
 512func (_ERC777 *ERC777Transactor) OperatorSend(opts *bind.TransactOpts, sender common.Address, recipient common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) {
 513	return _ERC777.contract.Transact(opts, "operatorSend", sender, recipient, amount, data, operatorData)
 514}
 515
 516// OperatorSend is a paid mutator transaction binding the contract method 0x62ad1b83.
 517//
 518// Solidity: function operatorSend(address sender, address recipient, uint256 amount, bytes data, bytes operatorData) returns()
 519func (_ERC777 *ERC777Session) OperatorSend(sender common.Address, recipient common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) {
 520	return _ERC777.Contract.OperatorSend(&_ERC777.TransactOpts, sender, recipient, amount, data, operatorData)
 521}
 522
 523// OperatorSend is a paid mutator transaction binding the contract method 0x62ad1b83.
 524//
 525// Solidity: function operatorSend(address sender, address recipient, uint256 amount, bytes data, bytes operatorData) returns()
 526func (_ERC777 *ERC777TransactorSession) OperatorSend(sender common.Address, recipient common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) {
 527	return _ERC777.Contract.OperatorSend(&_ERC777.TransactOpts, sender, recipient, amount, data, operatorData)
 528}
 529
 530// RevokeOperator is a paid mutator transaction binding the contract method 0xfad8b32a.
 531//
 532// Solidity: function revokeOperator(address operator) returns()
 533func (_ERC777 *ERC777Transactor) RevokeOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
 534	return _ERC777.contract.Transact(opts, "revokeOperator", operator)
 535}
 536
 537// RevokeOperator is a paid mutator transaction binding the contract method 0xfad8b32a.
 538//
 539// Solidity: function revokeOperator(address operator) returns()
 540func (_ERC777 *ERC777Session) RevokeOperator(operator common.Address) (*types.Transaction, error) {
 541	return _ERC777.Contract.RevokeOperator(&_ERC777.TransactOpts, operator)
 542}
 543
 544// RevokeOperator is a paid mutator transaction binding the contract method 0xfad8b32a.
 545//
 546// Solidity: function revokeOperator(address operator) returns()
 547func (_ERC777 *ERC777TransactorSession) RevokeOperator(operator common.Address) (*types.Transaction, error) {
 548	return _ERC777.Contract.RevokeOperator(&_ERC777.TransactOpts, operator)
 549}
 550
 551// Send is a paid mutator transaction binding the contract method 0x9bd9bbc6.
 552//
 553// Solidity: function send(address recipient, uint256 amount, bytes data) returns()
 554func (_ERC777 *ERC777Transactor) Send(opts *bind.TransactOpts, recipient common.Address, amount *big.Int, data []byte) (*types.Transaction, error) {
 555	return _ERC777.contract.Transact(opts, "send", recipient, amount, data)
 556}
 557
 558// Send is a paid mutator transaction binding the contract method 0x9bd9bbc6.
 559//
 560// Solidity: function send(address recipient, uint256 amount, bytes data) returns()
 561func (_ERC777 *ERC777Session) Send(recipient common.Address, amount *big.Int, data []byte) (*types.Transaction, error) {
 562	return _ERC777.Contract.Send(&_ERC777.TransactOpts, recipient, amount, data)
 563}
 564
 565// Send is a paid mutator transaction binding the contract method 0x9bd9bbc6.
 566//
 567// Solidity: function send(address recipient, uint256 amount, bytes data) returns()
 568func (_ERC777 *ERC777TransactorSession) Send(recipient common.Address, amount *big.Int, data []byte) (*types.Transaction, error) {
 569	return _ERC777.Contract.Send(&_ERC777.TransactOpts, recipient, amount, data)
 570}
 571
 572// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
 573//
 574// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
 575func (_ERC777 *ERC777Transactor) Transfer(opts *bind.TransactOpts, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
 576	return _ERC777.contract.Transact(opts, "transfer", recipient, amount)
 577}
 578
 579// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
 580//
 581// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
 582func (_ERC777 *ERC777Session) Transfer(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
 583	return _ERC777.Contract.Transfer(&_ERC777.TransactOpts, recipient, amount)
 584}
 585
 586// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
 587//
 588// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
 589func (_ERC777 *ERC777TransactorSession) Transfer(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
 590	return _ERC777.Contract.Transfer(&_ERC777.TransactOpts, recipient, amount)
 591}
 592
 593// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
 594//
 595// Solidity: function transferFrom(address holder, address recipient, uint256 amount) returns(bool)
 596func (_ERC777 *ERC777Transactor) TransferFrom(opts *bind.TransactOpts, holder common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
 597	return _ERC777.contract.Transact(opts, "transferFrom", holder, recipient, amount)
 598}
 599
 600// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
 601//
 602// Solidity: function transferFrom(address holder, address recipient, uint256 amount) returns(bool)
 603func (_ERC777 *ERC777Session) TransferFrom(holder common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
 604	return _ERC777.Contract.TransferFrom(&_ERC777.TransactOpts, holder, recipient, amount)
 605}
 606
 607// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
 608//
 609// Solidity: function transferFrom(address holder, address recipient, uint256 amount) returns(bool)
 610func (_ERC777 *ERC777TransactorSession) TransferFrom(holder common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
 611	return _ERC777.Contract.TransferFrom(&_ERC777.TransactOpts, holder, recipient, amount)
 612}
 613
 614// ERC777ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC777 contract.
 615type ERC777ApprovalIterator struct {
 616	Event *ERC777Approval // Event containing the contract specifics and raw log
 617
 618	contract *bind.BoundContract // Generic contract to use for unpacking event data
 619	event    string              // Event name to use for unpacking event data
 620
 621	logs chan types.Log        // Log channel receiving the found contract events
 622	sub  ethereum.Subscription // Subscription for errors, completion and termination
 623	done bool                  // Whether the subscription completed delivering logs
 624	fail error                 // Occurred error to stop iteration
 625}
 626
 627// Next advances the iterator to the subsequent event, returning whether there
 628// are any more events found. In case of a retrieval or parsing error, false is
 629// returned and Error() can be queried for the exact failure.
 630func (it *ERC777ApprovalIterator) Next() bool {
 631	// If the iterator failed, stop iterating
 632	if it.fail != nil {
 633		return false
 634	}
 635	// If the iterator completed, deliver directly whatever's available
 636	if it.done {
 637		select {
 638		case log := <-it.logs:
 639			it.Event = new(ERC777Approval)
 640			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 641				it.fail = err
 642				return false
 643			}
 644			it.Event.Raw = log
 645			return true
 646
 647		default:
 648			return false
 649		}
 650	}
 651	// Iterator still in progress, wait for either a data or an error event
 652	select {
 653	case log := <-it.logs:
 654		it.Event = new(ERC777Approval)
 655		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 656			it.fail = err
 657			return false
 658		}
 659		it.Event.Raw = log
 660		return true
 661
 662	case err := <-it.sub.Err():
 663		it.done = true
 664		it.fail = err
 665		return it.Next()
 666	}
 667}
 668
 669// Error returns any retrieval or parsing error occurred during filtering.
 670func (it *ERC777ApprovalIterator) Error() error {
 671	return it.fail
 672}
 673
 674// Close terminates the iteration process, releasing any pending underlying
 675// resources.
 676func (it *ERC777ApprovalIterator) Close() error {
 677	it.sub.Unsubscribe()
 678	return nil
 679}
 680
 681// ERC777Approval represents a Approval event raised by the ERC777 contract.
 682type ERC777Approval struct {
 683	Owner   common.Address
 684	Spender common.Address
 685	Value   *big.Int
 686	Raw     types.Log // Blockchain specific contextual infos
 687}
 688
 689// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
 690//
 691// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
 692func (_ERC777 *ERC777Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ERC777ApprovalIterator, error) {
 693
 694	var ownerRule []interface{}
 695	for _, ownerItem := range owner {
 696		ownerRule = append(ownerRule, ownerItem)
 697	}
 698	var spenderRule []interface{}
 699	for _, spenderItem := range spender {
 700		spenderRule = append(spenderRule, spenderItem)
 701	}
 702
 703	logs, sub, err := _ERC777.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
 704	if err != nil {
 705		return nil, err
 706	}
 707	return &ERC777ApprovalIterator{contract: _ERC777.contract, event: "Approval", logs: logs, sub: sub}, nil
 708}
 709
 710// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
 711//
 712// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
 713func (_ERC777 *ERC777Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC777Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
 714
 715	var ownerRule []interface{}
 716	for _, ownerItem := range owner {
 717		ownerRule = append(ownerRule, ownerItem)
 718	}
 719	var spenderRule []interface{}
 720	for _, spenderItem := range spender {
 721		spenderRule = append(spenderRule, spenderItem)
 722	}
 723
 724	logs, sub, err := _ERC777.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
 725	if err != nil {
 726		return nil, err
 727	}
 728	return event.NewSubscription(func(quit <-chan struct{}) error {
 729		defer sub.Unsubscribe()
 730		for {
 731			select {
 732			case log := <-logs:
 733				// New log arrived, parse the event and forward to the user
 734				event := new(ERC777Approval)
 735				if err := _ERC777.contract.UnpackLog(event, "Approval", log); err != nil {
 736					return err
 737				}
 738				event.Raw = log
 739
 740				select {
 741				case sink <- event:
 742				case err := <-sub.Err():
 743					return err
 744				case <-quit:
 745					return nil
 746				}
 747			case err := <-sub.Err():
 748				return err
 749			case <-quit:
 750				return nil
 751			}
 752		}
 753	}), nil
 754}
 755
 756// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
 757//
 758// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
 759func (_ERC777 *ERC777Filterer) ParseApproval(log types.Log) (*ERC777Approval, error) {
 760	event := new(ERC777Approval)
 761	if err := _ERC777.contract.UnpackLog(event, "Approval", log); err != nil {
 762		return nil, err
 763	}
 764	return event, nil
 765}
 766
 767// ERC777AuthorizedOperatorIterator is returned from FilterAuthorizedOperator and is used to iterate over the raw logs and unpacked data for AuthorizedOperator events raised by the ERC777 contract.
 768type ERC777AuthorizedOperatorIterator struct {
 769	Event *ERC777AuthorizedOperator // Event containing the contract specifics and raw log
 770
 771	contract *bind.BoundContract // Generic contract to use for unpacking event data
 772	event    string              // Event name to use for unpacking event data
 773
 774	logs chan types.Log        // Log channel receiving the found contract events
 775	sub  ethereum.Subscription // Subscription for errors, completion and termination
 776	done bool                  // Whether the subscription completed delivering logs
 777	fail error                 // Occurred error to stop iteration
 778}
 779
 780// Next advances the iterator to the subsequent event, returning whether there
 781// are any more events found. In case of a retrieval or parsing error, false is
 782// returned and Error() can be queried for the exact failure.
 783func (it *ERC777AuthorizedOperatorIterator) Next() bool {
 784	// If the iterator failed, stop iterating
 785	if it.fail != nil {
 786		return false
 787	}
 788	// If the iterator completed, deliver directly whatever's available
 789	if it.done {
 790		select {
 791		case log := <-it.logs:
 792			it.Event = new(ERC777AuthorizedOperator)
 793			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 794				it.fail = err
 795				return false
 796			}
 797			it.Event.Raw = log
 798			return true
 799
 800		default:
 801			return false
 802		}
 803	}
 804	// Iterator still in progress, wait for either a data or an error event
 805	select {
 806	case log := <-it.logs:
 807		it.Event = new(ERC777AuthorizedOperator)
 808		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 809			it.fail = err
 810			return false
 811		}
 812		it.Event.Raw = log
 813		return true
 814
 815	case err := <-it.sub.Err():
 816		it.done = true
 817		it.fail = err
 818		return it.Next()
 819	}
 820}
 821
 822// Error returns any retrieval or parsing error occurred during filtering.
 823func (it *ERC777AuthorizedOperatorIterator) Error() error {
 824	return it.fail
 825}
 826
 827// Close terminates the iteration process, releasing any pending underlying
 828// resources.
 829func (it *ERC777AuthorizedOperatorIterator) Close() error {
 830	it.sub.Unsubscribe()
 831	return nil
 832}
 833
 834// ERC777AuthorizedOperator represents a AuthorizedOperator event raised by the ERC777 contract.
 835type ERC777AuthorizedOperator struct {
 836	Operator    common.Address
 837	TokenHolder common.Address
 838	Raw         types.Log // Blockchain specific contextual infos
 839}
 840
 841// FilterAuthorizedOperator is a free log retrieval operation binding the contract event 0xf4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f9.
 842//
 843// Solidity: event AuthorizedOperator(address indexed operator, address indexed tokenHolder)
 844func (_ERC777 *ERC777Filterer) FilterAuthorizedOperator(opts *bind.FilterOpts, operator []common.Address, tokenHolder []common.Address) (*ERC777AuthorizedOperatorIterator, error) {
 845
 846	var operatorRule []interface{}
 847	for _, operatorItem := range operator {
 848		operatorRule = append(operatorRule, operatorItem)
 849	}
 850	var tokenHolderRule []interface{}
 851	for _, tokenHolderItem := range tokenHolder {
 852		tokenHolderRule = append(tokenHolderRule, tokenHolderItem)
 853	}
 854
 855	logs, sub, err := _ERC777.contract.FilterLogs(opts, "AuthorizedOperator", operatorRule, tokenHolderRule)
 856	if err != nil {
 857		return nil, err
 858	}
 859	return &ERC777AuthorizedOperatorIterator{contract: _ERC777.contract, event: "AuthorizedOperator", logs: logs, sub: sub}, nil
 860}
 861
 862// WatchAuthorizedOperator is a free log subscription operation binding the contract event 0xf4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f9.
 863//
 864// Solidity: event AuthorizedOperator(address indexed operator, address indexed tokenHolder)
 865func (_ERC777 *ERC777Filterer) WatchAuthorizedOperator(opts *bind.WatchOpts, sink chan<- *ERC777AuthorizedOperator, operator []common.Address, tokenHolder []common.Address) (event.Subscription, error) {
 866
 867	var operatorRule []interface{}
 868	for _, operatorItem := range operator {
 869		operatorRule = append(operatorRule, operatorItem)
 870	}
 871	var tokenHolderRule []interface{}
 872	for _, tokenHolderItem := range tokenHolder {
 873		tokenHolderRule = append(tokenHolderRule, tokenHolderItem)
 874	}
 875
 876	logs, sub, err := _ERC777.contract.WatchLogs(opts, "AuthorizedOperator", operatorRule, tokenHolderRule)
 877	if err != nil {
 878		return nil, err
 879	}
 880	return event.NewSubscription(func(quit <-chan struct{}) error {
 881		defer sub.Unsubscribe()
 882		for {
 883			select {
 884			case log := <-logs:
 885				// New log arrived, parse the event and forward to the user
 886				event := new(ERC777AuthorizedOperator)
 887				if err := _ERC777.contract.UnpackLog(event, "AuthorizedOperator", log); err != nil {
 888					return err
 889				}
 890				event.Raw = log
 891
 892				select {
 893				case sink <- event:
 894				case err := <-sub.Err():
 895					return err
 896				case <-quit:
 897					return nil
 898				}
 899			case err := <-sub.Err():
 900				return err
 901			case <-quit:
 902				return nil
 903			}
 904		}
 905	}), nil
 906}
 907
 908// ParseAuthorizedOperator is a log parse operation binding the contract event 0xf4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f9.
 909//
 910// Solidity: event AuthorizedOperator(address indexed operator, address indexed tokenHolder)
 911func (_ERC777 *ERC777Filterer) ParseAuthorizedOperator(log types.Log) (*ERC777AuthorizedOperator, error) {
 912	event := new(ERC777AuthorizedOperator)
 913	if err := _ERC777.contract.UnpackLog(event, "AuthorizedOperator", log); err != nil {
 914		return nil, err
 915	}
 916	return event, nil
 917}
 918
 919// ERC777BurnedIterator is returned from FilterBurned and is used to iterate over the raw logs and unpacked data for Burned events raised by the ERC777 contract.
 920type ERC777BurnedIterator struct {
 921	Event *ERC777Burned // Event containing the contract specifics and raw log
 922
 923	contract *bind.BoundContract // Generic contract to use for unpacking event data
 924	event    string              // Event name to use for unpacking event data
 925
 926	logs chan types.Log        // Log channel receiving the found contract events
 927	sub  ethereum.Subscription // Subscription for errors, completion and termination
 928	done bool                  // Whether the subscription completed delivering logs
 929	fail error                 // Occurred error to stop iteration
 930}
 931
 932// Next advances the iterator to the subsequent event, returning whether there
 933// are any more events found. In case of a retrieval or parsing error, false is
 934// returned and Error() can be queried for the exact failure.
 935func (it *ERC777BurnedIterator) Next() bool {
 936	// If the iterator failed, stop iterating
 937	if it.fail != nil {
 938		return false
 939	}
 940	// If the iterator completed, deliver directly whatever's available
 941	if it.done {
 942		select {
 943		case log := <-it.logs:
 944			it.Event = new(ERC777Burned)
 945			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 946				it.fail = err
 947				return false
 948			}
 949			it.Event.Raw = log
 950			return true
 951
 952		default:
 953			return false
 954		}
 955	}
 956	// Iterator still in progress, wait for either a data or an error event
 957	select {
 958	case log := <-it.logs:
 959		it.Event = new(ERC777Burned)
 960		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 961			it.fail = err
 962			return false
 963		}
 964		it.Event.Raw = log
 965		return true
 966
 967	case err := <-it.sub.Err():
 968		it.done = true
 969		it.fail = err
 970		return it.Next()
 971	}
 972}
 973
 974// Error returns any retrieval or parsing error occurred during filtering.
 975func (it *ERC777BurnedIterator) Error() error {
 976	return it.fail
 977}
 978
 979// Close terminates the iteration process, releasing any pending underlying
 980// resources.
 981func (it *ERC777BurnedIterator) Close() error {
 982	it.sub.Unsubscribe()
 983	return nil
 984}
 985
 986// ERC777Burned represents a Burned event raised by the ERC777 contract.
 987type ERC777Burned struct {
 988	Operator     common.Address
 989	From         common.Address
 990	Amount       *big.Int
 991	Data         []byte
 992	OperatorData []byte
 993	Raw          types.Log // Blockchain specific contextual infos
 994}
 995
 996// FilterBurned is a free log retrieval operation binding the contract event 0xa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098.
 997//
 998// Solidity: event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData)
 999func (_ERC777 *ERC777Filterer) FilterBurned(opts *bind.FilterOpts, operator []common.Address, from []common.Address) (*ERC777BurnedIterator, error) {
1000
1001	var operatorRule []interface{}
1002	for _, operatorItem := range operator {
1003		operatorRule = append(operatorRule, operatorItem)
1004	}
1005	var fromRule []interface{}
1006	for _, fromItem := range from {
1007		fromRule = append(fromRule, fromItem)
1008	}
1009
1010	logs, sub, err := _ERC777.contract.FilterLogs(opts, "Burned", operatorRule, fromRule)
1011	if err != nil {
1012		return nil, err
1013	}
1014	return &ERC777BurnedIterator{contract: _ERC777.contract, event: "Burned", logs: logs, sub: sub}, nil
1015}
1016
1017// WatchBurned is a free log subscription operation binding the contract event 0xa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098.
1018//
1019// Solidity: event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData)
1020func (_ERC777 *ERC777Filterer) WatchBurned(opts *bind.WatchOpts, sink chan<- *ERC777Burned, operator []common.Address, from []common.Address) (event.Subscription, error) {
1021
1022	var operatorRule []interface{}
1023	for _, operatorItem := range operator {
1024		operatorRule = append(operatorRule, operatorItem)
1025	}
1026	var fromRule []interface{}
1027	for _, fromItem := range from {
1028		fromRule = append(fromRule, fromItem)
1029	}
1030
1031	logs, sub, err := _ERC777.contract.WatchLogs(opts, "Burned", operatorRule, fromRule)
1032	if err != nil {
1033		return nil, err
1034	}
1035	return event.NewSubscription(func(quit <-chan struct{}) error {
1036		defer sub.Unsubscribe()
1037		for {
1038			select {
1039			case log := <-logs:
1040				// New log arrived, parse the event and forward to the user
1041				event := new(ERC777Burned)
1042				if err := _ERC777.contract.UnpackLog(event, "Burned", log); err != nil {
1043					return err
1044				}
1045				event.Raw = log
1046
1047				select {
1048				case sink <- event:
1049				case err := <-sub.Err():
1050					return err
1051				case <-quit:
1052					return nil
1053				}
1054			case err := <-sub.Err():
1055				return err
1056			case <-quit:
1057				return nil
1058			}
1059		}
1060	}), nil
1061}
1062
1063// ParseBurned is a log parse operation binding the contract event 0xa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098.
1064//
1065// Solidity: event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData)
1066func (_ERC777 *ERC777Filterer) ParseBurned(log types.Log) (*ERC777Burned, error) {
1067	event := new(ERC777Burned)
1068	if err := _ERC777.contract.UnpackLog(event, "Burned", log); err != nil {
1069		return nil, err
1070	}
1071	return event, nil
1072}
1073
1074// ERC777MintedIterator is returned from FilterMinted and is used to iterate over the raw logs and unpacked data for Minted events raised by the ERC777 contract.
1075type ERC777MintedIterator struct {
1076	Event *ERC777Minted // Event containing the contract specifics and raw log
1077
1078	contract *bind.BoundContract // Generic contract to use for unpacking event data
1079	event    string              // Event name to use for unpacking event data
1080
1081	logs chan types.Log        // Log channel receiving the found contract events
1082	sub  ethereum.Subscription // Subscription for errors, completion and termination
1083	done bool                  // Whether the subscription completed delivering logs
1084	fail error                 // Occurred error to stop iteration
1085}
1086
1087// Next advances the iterator to the subsequent event, returning whether there
1088// are any more events found. In case of a retrieval or parsing error, false is
1089// returned and Error() can be queried for the exact failure.
1090func (it *ERC777MintedIterator) Next() bool {
1091	// If the iterator failed, stop iterating
1092	if it.fail != nil {
1093		return false
1094	}
1095	// If the iterator completed, deliver directly whatever's available
1096	if it.done {
1097		select {
1098		case log := <-it.logs:
1099			it.Event = new(ERC777Minted)
1100			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1101				it.fail = err
1102				return false
1103			}
1104			it.Event.Raw = log
1105			return true
1106
1107		default:
1108			return false
1109		}
1110	}
1111	// Iterator still in progress, wait for either a data or an error event
1112	select {
1113	case log := <-it.logs:
1114		it.Event = new(ERC777Minted)
1115		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1116			it.fail = err
1117			return false
1118		}
1119		it.Event.Raw = log
1120		return true
1121
1122	case err := <-it.sub.Err():
1123		it.done = true
1124		it.fail = err
1125		return it.Next()
1126	}
1127}
1128
1129// Error returns any retrieval or parsing error occurred during filtering.
1130func (it *ERC777MintedIterator) Error() error {
1131	return it.fail
1132}
1133
1134// Close terminates the iteration process, releasing any pending underlying
1135// resources.
1136func (it *ERC777MintedIterator) Close() error {
1137	it.sub.Unsubscribe()
1138	return nil
1139}
1140
1141// ERC777Minted represents a Minted event raised by the ERC777 contract.
1142type ERC777Minted struct {
1143	Operator     common.Address
1144	To           common.Address
1145	Amount       *big.Int
1146	Data         []byte
1147	OperatorData []byte
1148	Raw          types.Log // Blockchain specific contextual infos
1149}
1150
1151// FilterMinted is a free log retrieval operation binding the contract event 0x2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d.
1152//
1153// Solidity: event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData)
1154func (_ERC777 *ERC777Filterer) FilterMinted(opts *bind.FilterOpts, operator []common.Address, to []common.Address) (*ERC777MintedIterator, error) {
1155
1156	var operatorRule []interface{}
1157	for _, operatorItem := range operator {
1158		operatorRule = append(operatorRule, operatorItem)
1159	}
1160	var toRule []interface{}
1161	for _, toItem := range to {
1162		toRule = append(toRule, toItem)
1163	}
1164
1165	logs, sub, err := _ERC777.contract.FilterLogs(opts, "Minted", operatorRule, toRule)
1166	if err != nil {
1167		return nil, err
1168	}
1169	return &ERC777MintedIterator{contract: _ERC777.contract, event: "Minted", logs: logs, sub: sub}, nil
1170}
1171
1172// WatchMinted is a free log subscription operation binding the contract event 0x2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d.
1173//
1174// Solidity: event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData)
1175func (_ERC777 *ERC777Filterer) WatchMinted(opts *bind.WatchOpts, sink chan<- *ERC777Minted, operator []common.Address, to []common.Address) (event.Subscription, error) {
1176
1177	var operatorRule []interface{}
1178	for _, operatorItem := range operator {
1179		operatorRule = append(operatorRule, operatorItem)
1180	}
1181	var toRule []interface{}
1182	for _, toItem := range to {
1183		toRule = append(toRule, toItem)
1184	}
1185
1186	logs, sub, err := _ERC777.contract.WatchLogs(opts, "Minted", operatorRule, toRule)
1187	if err != nil {
1188		return nil, err
1189	}
1190	return event.NewSubscription(func(quit <-chan struct{}) error {
1191		defer sub.Unsubscribe()
1192		for {
1193			select {
1194			case log := <-logs:
1195				// New log arrived, parse the event and forward to the user
1196				event := new(ERC777Minted)
1197				if err := _ERC777.contract.UnpackLog(event, "Minted", log); err != nil {
1198					return err
1199				}
1200				event.Raw = log
1201
1202				select {
1203				case sink <- event:
1204				case err := <-sub.Err():
1205					return err
1206				case <-quit:
1207					return nil
1208				}
1209			case err := <-sub.Err():
1210				return err
1211			case <-quit:
1212				return nil
1213			}
1214		}
1215	}), nil
1216}
1217
1218// ParseMinted is a log parse operation binding the contract event 0x2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d.
1219//
1220// Solidity: event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData)
1221func (_ERC777 *ERC777Filterer) ParseMinted(log types.Log) (*ERC777Minted, error) {
1222	event := new(ERC777Minted)
1223	if err := _ERC777.contract.UnpackLog(event, "Minted", log); err != nil {
1224		return nil, err
1225	}
1226	return event, nil
1227}
1228
1229// ERC777RevokedOperatorIterator is returned from FilterRevokedOperator and is used to iterate over the raw logs and unpacked data for RevokedOperator events raised by the ERC777 contract.
1230type ERC777RevokedOperatorIterator struct {
1231	Event *ERC777RevokedOperator // Event containing the contract specifics and raw log
1232
1233	contract *bind.BoundContract // Generic contract to use for unpacking event data
1234	event    string              // Event name to use for unpacking event data
1235
1236	logs chan types.Log        // Log channel receiving the found contract events
1237	sub  ethereum.Subscription // Subscription for errors, completion and termination
1238	done bool                  // Whether the subscription completed delivering logs
1239	fail error                 // Occurred error to stop iteration
1240}
1241
1242// Next advances the iterator to the subsequent event, returning whether there
1243// are any more events found. In case of a retrieval or parsing error, false is
1244// returned and Error() can be queried for the exact failure.
1245func (it *ERC777RevokedOperatorIterator) Next() bool {
1246	// If the iterator failed, stop iterating
1247	if it.fail != nil {
1248		return false
1249	}
1250	// If the iterator completed, deliver directly whatever's available
1251	if it.done {
1252		select {
1253		case log := <-it.logs:
1254			it.Event = new(ERC777RevokedOperator)
1255			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1256				it.fail = err
1257				return false
1258			}
1259			it.Event.Raw = log
1260			return true
1261
1262		default:
1263			return false
1264		}
1265	}
1266	// Iterator still in progress, wait for either a data or an error event
1267	select {
1268	case log := <-it.logs:
1269		it.Event = new(ERC777RevokedOperator)
1270		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1271			it.fail = err
1272			return false
1273		}
1274		it.Event.Raw = log
1275		return true
1276
1277	case err := <-it.sub.Err():
1278		it.done = true
1279		it.fail = err
1280		return it.Next()
1281	}
1282}
1283
1284// Error returns any retrieval or parsing error occurred during filtering.
1285func (it *ERC777RevokedOperatorIterator) Error() error {
1286	return it.fail
1287}
1288
1289// Close terminates the iteration process, releasing any pending underlying
1290// resources.
1291func (it *ERC777RevokedOperatorIterator) Close() error {
1292	it.sub.Unsubscribe()
1293	return nil
1294}
1295
1296// ERC777RevokedOperator represents a RevokedOperator event raised by the ERC777 contract.
1297type ERC777RevokedOperator struct {
1298	Operator    common.Address
1299	TokenHolder common.Address
1300	Raw         types.Log // Blockchain specific contextual infos
1301}
1302
1303// FilterRevokedOperator is a free log retrieval operation binding the contract event 0x50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa1.
1304//
1305// Solidity: event RevokedOperator(address indexed operator, address indexed tokenHolder)
1306func (_ERC777 *ERC777Filterer) FilterRevokedOperator(opts *bind.FilterOpts, operator []common.Address, tokenHolder []common.Address) (*ERC777RevokedOperatorIterator, error) {
1307
1308	var operatorRule []interface{}
1309	for _, operatorItem := range operator {
1310		operatorRule = append(operatorRule, operatorItem)
1311	}
1312	var tokenHolderRule []interface{}
1313	for _, tokenHolderItem := range tokenHolder {
1314		tokenHolderRule = append(tokenHolderRule, tokenHolderItem)
1315	}
1316
1317	logs, sub, err := _ERC777.contract.FilterLogs(opts, "RevokedOperator", operatorRule, tokenHolderRule)
1318	if err != nil {
1319		return nil, err
1320	}
1321	return &ERC777RevokedOperatorIterator{contract: _ERC777.contract, event: "RevokedOperator", logs: logs, sub: sub}, nil
1322}
1323
1324// WatchRevokedOperator is a free log subscription operation binding the contract event 0x50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa1.
1325//
1326// Solidity: event RevokedOperator(address indexed operator, address indexed tokenHolder)
1327func (_ERC777 *ERC777Filterer) WatchRevokedOperator(opts *bind.WatchOpts, sink chan<- *ERC777RevokedOperator, operator []common.Address, tokenHolder []common.Address) (event.Subscription, error) {
1328
1329	var operatorRule []interface{}
1330	for _, operatorItem := range operator {
1331		operatorRule = append(operatorRule, operatorItem)
1332	}
1333	var tokenHolderRule []interface{}
1334	for _, tokenHolderItem := range tokenHolder {
1335		tokenHolderRule = append(tokenHolderRule, tokenHolderItem)
1336	}
1337
1338	logs, sub, err := _ERC777.contract.WatchLogs(opts, "RevokedOperator", operatorRule, tokenHolderRule)
1339	if err != nil {
1340		return nil, err
1341	}
1342	return event.NewSubscription(func(quit <-chan struct{}) error {
1343		defer sub.Unsubscribe()
1344		for {
1345			select {
1346			case log := <-logs:
1347				// New log arrived, parse the event and forward to the user
1348				event := new(ERC777RevokedOperator)
1349				if err := _ERC777.contract.UnpackLog(event, "RevokedOperator", log); err != nil {
1350					return err
1351				}
1352				event.Raw = log
1353
1354				select {
1355				case sink <- event:
1356				case err := <-sub.Err():
1357					return err
1358				case <-quit:
1359					return nil
1360				}
1361			case err := <-sub.Err():
1362				return err
1363			case <-quit:
1364				return nil
1365			}
1366		}
1367	}), nil
1368}
1369
1370// ParseRevokedOperator is a log parse operation binding the contract event 0x50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa1.
1371//
1372// Solidity: event RevokedOperator(address indexed operator, address indexed tokenHolder)
1373func (_ERC777 *ERC777Filterer) ParseRevokedOperator(log types.Log) (*ERC777RevokedOperator, error) {
1374	event := new(ERC777RevokedOperator)
1375	if err := _ERC777.contract.UnpackLog(event, "RevokedOperator", log); err != nil {
1376		return nil, err
1377	}
1378	return event, nil
1379}
1380
1381// ERC777SentIterator is returned from FilterSent and is used to iterate over the raw logs and unpacked data for Sent events raised by the ERC777 contract.
1382type ERC777SentIterator struct {
1383	Event *ERC777Sent // Event containing the contract specifics and raw log
1384
1385	contract *bind.BoundContract // Generic contract to use for unpacking event data
1386	event    string              // Event name to use for unpacking event data
1387
1388	logs chan types.Log        // Log channel receiving the found contract events
1389	sub  ethereum.Subscription // Subscription for errors, completion and termination
1390	done bool                  // Whether the subscription completed delivering logs
1391	fail error                 // Occurred error to stop iteration
1392}
1393
1394// Next advances the iterator to the subsequent event, returning whether there
1395// are any more events found. In case of a retrieval or parsing error, false is
1396// returned and Error() can be queried for the exact failure.
1397func (it *ERC777SentIterator) Next() bool {
1398	// If the iterator failed, stop iterating
1399	if it.fail != nil {
1400		return false
1401	}
1402	// If the iterator completed, deliver directly whatever's available
1403	if it.done {
1404		select {
1405		case log := <-it.logs:
1406			it.Event = new(ERC777Sent)
1407			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1408				it.fail = err
1409				return false
1410			}
1411			it.Event.Raw = log
1412			return true
1413
1414		default:
1415			return false
1416		}
1417	}
1418	// Iterator still in progress, wait for either a data or an error event
1419	select {
1420	case log := <-it.logs:
1421		it.Event = new(ERC777Sent)
1422		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1423			it.fail = err
1424			return false
1425		}
1426		it.Event.Raw = log
1427		return true
1428
1429	case err := <-it.sub.Err():
1430		it.done = true
1431		it.fail = err
1432		return it.Next()
1433	}
1434}
1435
1436// Error returns any retrieval or parsing error occurred during filtering.
1437func (it *ERC777SentIterator) Error() error {
1438	return it.fail
1439}
1440
1441// Close terminates the iteration process, releasing any pending underlying
1442// resources.
1443func (it *ERC777SentIterator) Close() error {
1444	it.sub.Unsubscribe()
1445	return nil
1446}
1447
1448// ERC777Sent represents a Sent event raised by the ERC777 contract.
1449type ERC777Sent struct {
1450	Operator     common.Address
1451	From         common.Address
1452	To           common.Address
1453	Amount       *big.Int
1454	Data         []byte
1455	OperatorData []byte
1456	Raw          types.Log // Blockchain specific contextual infos
1457}
1458
1459// FilterSent is a free log retrieval operation binding the contract event 0x06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987.
1460//
1461// Solidity: event Sent(address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData)
1462func (_ERC777 *ERC777Filterer) FilterSent(opts *bind.FilterOpts, operator []common.Address, from []common.Address, to []common.Address) (*ERC777SentIterator, error) {
1463
1464	var operatorRule []interface{}
1465	for _, operatorItem := range operator {
1466		operatorRule = append(operatorRule, operatorItem)
1467	}
1468	var fromRule []interface{}
1469	for _, fromItem := range from {
1470		fromRule = append(fromRule, fromItem)
1471	}
1472	var toRule []interface{}
1473	for _, toItem := range to {
1474		toRule = append(toRule, toItem)
1475	}
1476
1477	logs, sub, err := _ERC777.contract.FilterLogs(opts, "Sent", operatorRule, fromRule, toRule)
1478	if err != nil {
1479		return nil, err
1480	}
1481	return &ERC777SentIterator{contract: _ERC777.contract, event: "Sent", logs: logs, sub: sub}, nil
1482}
1483
1484// WatchSent is a free log subscription operation binding the contract event 0x06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987.
1485//
1486// Solidity: event Sent(address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData)
1487func (_ERC777 *ERC777Filterer) WatchSent(opts *bind.WatchOpts, sink chan<- *ERC777Sent, operator []common.Address, from []common.Address, to []common.Address) (event.Subscription, error) {
1488
1489	var operatorRule []interface{}
1490	for _, operatorItem := range operator {
1491		operatorRule = append(operatorRule, operatorItem)
1492	}
1493	var fromRule []interface{}
1494	for _, fromItem := range from {
1495		fromRule = append(fromRule, fromItem)
1496	}
1497	var toRule []interface{}
1498	for _, toItem := range to {
1499		toRule = append(toRule, toItem)
1500	}
1501
1502	logs, sub, err := _ERC777.contract.WatchLogs(opts, "Sent", operatorRule, fromRule, toRule)
1503	if err != nil {
1504		return nil, err
1505	}
1506	return event.NewSubscription(func(quit <-chan struct{}) error {
1507		defer sub.Unsubscribe()
1508		for {
1509			select {
1510			case log := <-logs:
1511				// New log arrived, parse the event and forward to the user
1512				event := new(ERC777Sent)
1513				if err := _ERC777.contract.UnpackLog(event, "Sent", log); err != nil {
1514					return err
1515				}
1516				event.Raw = log
1517
1518				select {
1519				case sink <- event:
1520				case err := <-sub.Err():
1521					return err
1522				case <-quit:
1523					return nil
1524				}
1525			case err := <-sub.Err():
1526				return err
1527			case <-quit:
1528				return nil
1529			}
1530		}
1531	}), nil
1532}
1533
1534// ParseSent is a log parse operation binding the contract event 0x06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987.
1535//
1536// Solidity: event Sent(address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData)
1537func (_ERC777 *ERC777Filterer) ParseSent(log types.Log) (*ERC777Sent, error) {
1538	event := new(ERC777Sent)
1539	if err := _ERC777.contract.UnpackLog(event, "Sent", log); err != nil {
1540		return nil, err
1541	}
1542	return event, nil
1543}
1544
1545// ERC777TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC777 contract.
1546type ERC777TransferIterator struct {
1547	Event *ERC777Transfer // Event containing the contract specifics and raw log
1548
1549	contract *bind.BoundContract // Generic contract to use for unpacking event data
1550	event    string              // Event name to use for unpacking event data
1551
1552	logs chan types.Log        // Log channel receiving the found contract events
1553	sub  ethereum.Subscription // Subscription for errors, completion and termination
1554	done bool                  // Whether the subscription completed delivering logs
1555	fail error                 // Occurred error to stop iteration
1556}
1557
1558// Next advances the iterator to the subsequent event, returning whether there
1559// are any more events found. In case of a retrieval or parsing error, false is
1560// returned and Error() can be queried for the exact failure.
1561func (it *ERC777TransferIterator) Next() bool {
1562	// If the iterator failed, stop iterating
1563	if it.fail != nil {
1564		return false
1565	}
1566	// If the iterator completed, deliver directly whatever's available
1567	if it.done {
1568		select {
1569		case log := <-it.logs:
1570			it.Event = new(ERC777Transfer)
1571			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1572				it.fail = err
1573				return false
1574			}
1575			it.Event.Raw = log
1576			return true
1577
1578		default:
1579			return false
1580		}
1581	}
1582	// Iterator still in progress, wait for either a data or an error event
1583	select {
1584	case log := <-it.logs:
1585		it.Event = new(ERC777Transfer)
1586		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1587			it.fail = err
1588			return false
1589		}
1590		it.Event.Raw = log
1591		return true
1592
1593	case err := <-it.sub.Err():
1594		it.done = true
1595		it.fail = err
1596		return it.Next()
1597	}
1598}
1599
1600// Error returns any retrieval or parsing error occurred during filtering.
1601func (it *ERC777TransferIterator) Error() error {
1602	return it.fail
1603}
1604
1605// Close terminates the iteration process, releasing any pending underlying
1606// resources.
1607func (it *ERC777TransferIterator) Close() error {
1608	it.sub.Unsubscribe()
1609	return nil
1610}
1611
1612// ERC777Transfer represents a Transfer event raised by the ERC777 contract.
1613type ERC777Transfer struct {
1614	From  common.Address
1615	To    common.Address
1616	Value *big.Int
1617	Raw   types.Log // Blockchain specific contextual infos
1618}
1619
1620// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
1621//
1622// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
1623func (_ERC777 *ERC777Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ERC777TransferIterator, error) {
1624
1625	var fromRule []interface{}
1626	for _, fromItem := range from {
1627		fromRule = append(fromRule, fromItem)
1628	}
1629	var toRule []interface{}
1630	for _, toItem := range to {
1631		toRule = append(toRule, toItem)
1632	}
1633
1634	logs, sub, err := _ERC777.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
1635	if err != nil {
1636		return nil, err
1637	}
1638	return &ERC777TransferIterator{contract: _ERC777.contract, event: "Transfer", logs: logs, sub: sub}, nil
1639}
1640
1641// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
1642//
1643// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
1644func (_ERC777 *ERC777Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC777Transfer, from []common.Address, to []common.Address) (event.Subscription, error) {
1645
1646	var fromRule []interface{}
1647	for _, fromItem := range from {
1648		fromRule = append(fromRule, fromItem)
1649	}
1650	var toRule []interface{}
1651	for _, toItem := range to {
1652		toRule = append(toRule, toItem)
1653	}
1654
1655	logs, sub, err := _ERC777.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
1656	if err != nil {
1657		return nil, err
1658	}
1659	return event.NewSubscription(func(quit <-chan struct{}) error {
1660		defer sub.Unsubscribe()
1661		for {
1662			select {
1663			case log := <-logs:
1664				// New log arrived, parse the event and forward to the user
1665				event := new(ERC777Transfer)
1666				if err := _ERC777.contract.UnpackLog(event, "Transfer", log); err != nil {
1667					return err
1668				}
1669				event.Raw = log
1670
1671				select {
1672				case sink <- event:
1673				case err := <-sub.Err():
1674					return err
1675				case <-quit:
1676					return nil
1677				}
1678			case err := <-sub.Err():
1679				return err
1680			case <-quit:
1681				return nil
1682			}
1683		}
1684	}), nil
1685}
1686
1687// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
1688//
1689// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
1690func (_ERC777 *ERC777Filterer) ParseTransfer(log types.Log) (*ERC777Transfer, error) {
1691	event := new(ERC777Transfer)
1692	if err := _ERC777.contract.UnpackLog(event, "Transfer", log); err != nil {
1693		return nil, err
1694	}
1695	return event, nil
1696}