github.com/diadata-org/diadata@v1.4.593/pkg/dia/scraper/exchange-scrapers/uniswap/uniswap.go (about)

     1  // Code generated - DO NOT EDIT.
     2  // This file is a generated binding and any manual changes will be lost.
     3  
     4  package uniswap
     5  
     6  import (
     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.
    19  var (
    20  	_ = big.NewInt
    21  	_ = strings.NewReader
    22  	_ = ethereum.NotFound
    23  	_ = bind.Bind
    24  	_ = common.Big1
    25  	_ = types.BloomLookup
    26  	_ = event.NewSubscription
    27  )
    28  
    29  // IERC20ABI is the input ABI used to generate the binding from.
    30  const IERC20ABI = "[{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
    31  
    32  // IERC20FuncSigs maps the 4-byte function signature to its string representation.
    33  var IERC20FuncSigs = map[string]string{
    34  	"dd62ed3e": "allowance(address,address)",
    35  	"095ea7b3": "approve(address,uint256)",
    36  	"70a08231": "balanceOf(address)",
    37  	"313ce567": "decimals()",
    38  	"06fdde03": "name()",
    39  	"95d89b41": "symbol()",
    40  	"18160ddd": "totalSupply()",
    41  	"a9059cbb": "transfer(address,uint256)",
    42  	"23b872dd": "transferFrom(address,address,uint256)",
    43  }
    44  
    45  // IERC20 is an auto generated Go binding around an Ethereum contract.
    46  type IERC20 struct {
    47  	IERC20Caller     // Read-only binding to the contract
    48  	IERC20Transactor // Write-only binding to the contract
    49  	IERC20Filterer   // Log filterer for contract events
    50  }
    51  
    52  // IERC20Caller is an auto generated read-only Go binding around an Ethereum contract.
    53  type IERC20Caller struct {
    54  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    55  }
    56  
    57  // IERC20Transactor is an auto generated write-only Go binding around an Ethereum contract.
    58  type IERC20Transactor struct {
    59  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    60  }
    61  
    62  // IERC20Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
    63  type IERC20Filterer struct {
    64  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    65  }
    66  
    67  // IERC20Session is an auto generated Go binding around an Ethereum contract,
    68  // with pre-set call and transact options.
    69  type IERC20Session struct {
    70  	Contract     *IERC20           // Generic contract binding to set the session for
    71  	CallOpts     bind.CallOpts     // Call options to use throughout this session
    72  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
    73  }
    74  
    75  // IERC20CallerSession is an auto generated read-only Go binding around an Ethereum contract,
    76  // with pre-set call options.
    77  type IERC20CallerSession struct {
    78  	Contract *IERC20Caller // Generic contract caller binding to set the session for
    79  	CallOpts bind.CallOpts // Call options to use throughout this session
    80  }
    81  
    82  // IERC20TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
    83  // with pre-set transact options.
    84  type IERC20TransactorSession struct {
    85  	Contract     *IERC20Transactor // Generic contract transactor binding to set the session for
    86  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
    87  }
    88  
    89  // IERC20Raw is an auto generated low-level Go binding around an Ethereum contract.
    90  type IERC20Raw struct {
    91  	Contract *IERC20 // Generic contract binding to access the raw methods on
    92  }
    93  
    94  // IERC20CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
    95  type IERC20CallerRaw struct {
    96  	Contract *IERC20Caller // Generic read-only contract binding to access the raw methods on
    97  }
    98  
    99  // IERC20TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   100  type IERC20TransactorRaw struct {
   101  	Contract *IERC20Transactor // Generic write-only contract binding to access the raw methods on
   102  }
   103  
   104  // NewIERC20 creates a new instance of IERC20, bound to a specific deployed contract.
   105  func NewIERC20(address common.Address, backend bind.ContractBackend) (*IERC20, error) {
   106  	contract, err := bindIERC20(address, backend, backend, backend)
   107  	if err != nil {
   108  		return nil, err
   109  	}
   110  	return &IERC20{IERC20Caller: IERC20Caller{contract: contract}, IERC20Transactor: IERC20Transactor{contract: contract}, IERC20Filterer: IERC20Filterer{contract: contract}}, nil
   111  }
   112  
   113  // NewIERC20Caller creates a new read-only instance of IERC20, bound to a specific deployed contract.
   114  func NewIERC20Caller(address common.Address, caller bind.ContractCaller) (*IERC20Caller, error) {
   115  	contract, err := bindIERC20(address, caller, nil, nil)
   116  	if err != nil {
   117  		return nil, err
   118  	}
   119  	return &IERC20Caller{contract: contract}, nil
   120  }
   121  
   122  // NewIERC20Transactor creates a new write-only instance of IERC20, bound to a specific deployed contract.
   123  func NewIERC20Transactor(address common.Address, transactor bind.ContractTransactor) (*IERC20Transactor, error) {
   124  	contract, err := bindIERC20(address, nil, transactor, nil)
   125  	if err != nil {
   126  		return nil, err
   127  	}
   128  	return &IERC20Transactor{contract: contract}, nil
   129  }
   130  
   131  // NewIERC20Filterer creates a new log filterer instance of IERC20, bound to a specific deployed contract.
   132  func NewIERC20Filterer(address common.Address, filterer bind.ContractFilterer) (*IERC20Filterer, error) {
   133  	contract, err := bindIERC20(address, nil, nil, filterer)
   134  	if err != nil {
   135  		return nil, err
   136  	}
   137  	return &IERC20Filterer{contract: contract}, nil
   138  }
   139  
   140  // bindIERC20 binds a generic wrapper to an already deployed contract.
   141  func bindIERC20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   142  	parsed, err := abi.JSON(strings.NewReader(IERC20ABI))
   143  	if err != nil {
   144  		return nil, err
   145  	}
   146  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   147  }
   148  
   149  // Call invokes the (constant) contract method with params as input values and
   150  // sets the output to result. The result type might be a single field for simple
   151  // returns, a slice of interfaces for anonymous returns and a struct for named
   152  // returns.
   153  func (_IERC20 *IERC20Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   154  	return _IERC20.Contract.IERC20Caller.contract.Call(opts, result, method, params...)
   155  }
   156  
   157  // Transfer initiates a plain transaction to move funds to the contract, calling
   158  // its default method if one is available.
   159  func (_IERC20 *IERC20Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   160  	return _IERC20.Contract.IERC20Transactor.contract.Transfer(opts)
   161  }
   162  
   163  // Transact invokes the (paid) contract method with params as input values.
   164  func (_IERC20 *IERC20Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   165  	return _IERC20.Contract.IERC20Transactor.contract.Transact(opts, method, params...)
   166  }
   167  
   168  // Call invokes the (constant) contract method with params as input values and
   169  // sets the output to result. The result type might be a single field for simple
   170  // returns, a slice of interfaces for anonymous returns and a struct for named
   171  // returns.
   172  func (_IERC20 *IERC20CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   173  	return _IERC20.Contract.contract.Call(opts, result, method, params...)
   174  }
   175  
   176  // Transfer initiates a plain transaction to move funds to the contract, calling
   177  // its default method if one is available.
   178  func (_IERC20 *IERC20TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   179  	return _IERC20.Contract.contract.Transfer(opts)
   180  }
   181  
   182  // Transact invokes the (paid) contract method with params as input values.
   183  func (_IERC20 *IERC20TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   184  	return _IERC20.Contract.contract.Transact(opts, method, params...)
   185  }
   186  
   187  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
   188  //
   189  // Solidity: function allowance(address owner, address spender) view returns(uint256)
   190  func (_IERC20 *IERC20Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
   191  	var out []interface{}
   192  	err := _IERC20.contract.Call(opts, &out, "allowance", owner, spender)
   193  
   194  	if err != nil {
   195  		return *new(*big.Int), err
   196  	}
   197  
   198  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   199  
   200  	return out0, err
   201  
   202  }
   203  
   204  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
   205  //
   206  // Solidity: function allowance(address owner, address spender) view returns(uint256)
   207  func (_IERC20 *IERC20Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
   208  	return _IERC20.Contract.Allowance(&_IERC20.CallOpts, owner, spender)
   209  }
   210  
   211  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
   212  //
   213  // Solidity: function allowance(address owner, address spender) view returns(uint256)
   214  func (_IERC20 *IERC20CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
   215  	return _IERC20.Contract.Allowance(&_IERC20.CallOpts, owner, spender)
   216  }
   217  
   218  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   219  //
   220  // Solidity: function balanceOf(address owner) view returns(uint256)
   221  func (_IERC20 *IERC20Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
   222  	var out []interface{}
   223  	err := _IERC20.contract.Call(opts, &out, "balanceOf", owner)
   224  
   225  	if err != nil {
   226  		return *new(*big.Int), err
   227  	}
   228  
   229  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   230  
   231  	return out0, err
   232  
   233  }
   234  
   235  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   236  //
   237  // Solidity: function balanceOf(address owner) view returns(uint256)
   238  func (_IERC20 *IERC20Session) BalanceOf(owner common.Address) (*big.Int, error) {
   239  	return _IERC20.Contract.BalanceOf(&_IERC20.CallOpts, owner)
   240  }
   241  
   242  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   243  //
   244  // Solidity: function balanceOf(address owner) view returns(uint256)
   245  func (_IERC20 *IERC20CallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
   246  	return _IERC20.Contract.BalanceOf(&_IERC20.CallOpts, owner)
   247  }
   248  
   249  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
   250  //
   251  // Solidity: function decimals() view returns(uint8)
   252  func (_IERC20 *IERC20Caller) Decimals(opts *bind.CallOpts) (uint8, error) {
   253  	var out []interface{}
   254  	err := _IERC20.contract.Call(opts, &out, "decimals")
   255  
   256  	if err != nil {
   257  		return *new(uint8), err
   258  	}
   259  
   260  	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
   261  
   262  	return out0, err
   263  
   264  }
   265  
   266  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
   267  //
   268  // Solidity: function decimals() view returns(uint8)
   269  func (_IERC20 *IERC20Session) Decimals() (uint8, error) {
   270  	return _IERC20.Contract.Decimals(&_IERC20.CallOpts)
   271  }
   272  
   273  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
   274  //
   275  // Solidity: function decimals() view returns(uint8)
   276  func (_IERC20 *IERC20CallerSession) Decimals() (uint8, error) {
   277  	return _IERC20.Contract.Decimals(&_IERC20.CallOpts)
   278  }
   279  
   280  // Name is a free data retrieval call binding the contract method 0x06fdde03.
   281  //
   282  // Solidity: function name() view returns(string)
   283  func (_IERC20 *IERC20Caller) Name(opts *bind.CallOpts) (string, error) {
   284  	var out []interface{}
   285  	err := _IERC20.contract.Call(opts, &out, "name")
   286  
   287  	if err != nil {
   288  		return *new(string), err
   289  	}
   290  
   291  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
   292  
   293  	return out0, err
   294  
   295  }
   296  
   297  // Name is a free data retrieval call binding the contract method 0x06fdde03.
   298  //
   299  // Solidity: function name() view returns(string)
   300  func (_IERC20 *IERC20Session) Name() (string, error) {
   301  	return _IERC20.Contract.Name(&_IERC20.CallOpts)
   302  }
   303  
   304  // Name is a free data retrieval call binding the contract method 0x06fdde03.
   305  //
   306  // Solidity: function name() view returns(string)
   307  func (_IERC20 *IERC20CallerSession) Name() (string, error) {
   308  	return _IERC20.Contract.Name(&_IERC20.CallOpts)
   309  }
   310  
   311  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
   312  //
   313  // Solidity: function symbol() view returns(string)
   314  func (_IERC20 *IERC20Caller) Symbol(opts *bind.CallOpts) (string, error) {
   315  	var out []interface{}
   316  	err := _IERC20.contract.Call(opts, &out, "symbol")
   317  
   318  	if err != nil {
   319  		return *new(string), err
   320  	}
   321  
   322  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
   323  
   324  	return out0, err
   325  
   326  }
   327  
   328  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
   329  //
   330  // Solidity: function symbol() view returns(string)
   331  func (_IERC20 *IERC20Session) Symbol() (string, error) {
   332  	return _IERC20.Contract.Symbol(&_IERC20.CallOpts)
   333  }
   334  
   335  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
   336  //
   337  // Solidity: function symbol() view returns(string)
   338  func (_IERC20 *IERC20CallerSession) Symbol() (string, error) {
   339  	return _IERC20.Contract.Symbol(&_IERC20.CallOpts)
   340  }
   341  
   342  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
   343  //
   344  // Solidity: function totalSupply() view returns(uint256)
   345  func (_IERC20 *IERC20Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
   346  	var out []interface{}
   347  	err := _IERC20.contract.Call(opts, &out, "totalSupply")
   348  
   349  	if err != nil {
   350  		return *new(*big.Int), err
   351  	}
   352  
   353  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   354  
   355  	return out0, err
   356  
   357  }
   358  
   359  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
   360  //
   361  // Solidity: function totalSupply() view returns(uint256)
   362  func (_IERC20 *IERC20Session) TotalSupply() (*big.Int, error) {
   363  	return _IERC20.Contract.TotalSupply(&_IERC20.CallOpts)
   364  }
   365  
   366  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
   367  //
   368  // Solidity: function totalSupply() view returns(uint256)
   369  func (_IERC20 *IERC20CallerSession) TotalSupply() (*big.Int, error) {
   370  	return _IERC20.Contract.TotalSupply(&_IERC20.CallOpts)
   371  }
   372  
   373  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
   374  //
   375  // Solidity: function approve(address spender, uint256 value) returns(bool)
   376  func (_IERC20 *IERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) {
   377  	return _IERC20.contract.Transact(opts, "approve", spender, value)
   378  }
   379  
   380  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
   381  //
   382  // Solidity: function approve(address spender, uint256 value) returns(bool)
   383  func (_IERC20 *IERC20Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
   384  	return _IERC20.Contract.Approve(&_IERC20.TransactOpts, spender, value)
   385  }
   386  
   387  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
   388  //
   389  // Solidity: function approve(address spender, uint256 value) returns(bool)
   390  func (_IERC20 *IERC20TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
   391  	return _IERC20.Contract.Approve(&_IERC20.TransactOpts, spender, value)
   392  }
   393  
   394  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
   395  //
   396  // Solidity: function transfer(address to, uint256 value) returns(bool)
   397  func (_IERC20 *IERC20Transactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) {
   398  	return _IERC20.contract.Transact(opts, "transfer", to, value)
   399  }
   400  
   401  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
   402  //
   403  // Solidity: function transfer(address to, uint256 value) returns(bool)
   404  func (_IERC20 *IERC20Session) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
   405  	return _IERC20.Contract.Transfer(&_IERC20.TransactOpts, to, value)
   406  }
   407  
   408  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
   409  //
   410  // Solidity: function transfer(address to, uint256 value) returns(bool)
   411  func (_IERC20 *IERC20TransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
   412  	return _IERC20.Contract.Transfer(&_IERC20.TransactOpts, to, value)
   413  }
   414  
   415  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
   416  //
   417  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
   418  func (_IERC20 *IERC20Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
   419  	return _IERC20.contract.Transact(opts, "transferFrom", from, to, value)
   420  }
   421  
   422  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
   423  //
   424  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
   425  func (_IERC20 *IERC20Session) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
   426  	return _IERC20.Contract.TransferFrom(&_IERC20.TransactOpts, from, to, value)
   427  }
   428  
   429  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
   430  //
   431  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
   432  func (_IERC20 *IERC20TransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
   433  	return _IERC20.Contract.TransferFrom(&_IERC20.TransactOpts, from, to, value)
   434  }
   435  
   436  // IERC20ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IERC20 contract.
   437  type IERC20ApprovalIterator struct {
   438  	Event *IERC20Approval // Event containing the contract specifics and raw log
   439  
   440  	contract *bind.BoundContract // Generic contract to use for unpacking event data
   441  	event    string              // Event name to use for unpacking event data
   442  
   443  	logs chan types.Log        // Log channel receiving the found contract events
   444  	sub  ethereum.Subscription // Subscription for errors, completion and termination
   445  	done bool                  // Whether the subscription completed delivering logs
   446  	fail error                 // Occurred error to stop iteration
   447  }
   448  
   449  // Next advances the iterator to the subsequent event, returning whether there
   450  // are any more events found. In case of a retrieval or parsing error, false is
   451  // returned and Error() can be queried for the exact failure.
   452  func (it *IERC20ApprovalIterator) Next() bool {
   453  	// If the iterator failed, stop iterating
   454  	if it.fail != nil {
   455  		return false
   456  	}
   457  	// If the iterator completed, deliver directly whatever's available
   458  	if it.done {
   459  		select {
   460  		case log := <-it.logs:
   461  			it.Event = new(IERC20Approval)
   462  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
   463  				it.fail = err
   464  				return false
   465  			}
   466  			it.Event.Raw = log
   467  			return true
   468  
   469  		default:
   470  			return false
   471  		}
   472  	}
   473  	// Iterator still in progress, wait for either a data or an error event
   474  	select {
   475  	case log := <-it.logs:
   476  		it.Event = new(IERC20Approval)
   477  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
   478  			it.fail = err
   479  			return false
   480  		}
   481  		it.Event.Raw = log
   482  		return true
   483  
   484  	case err := <-it.sub.Err():
   485  		it.done = true
   486  		it.fail = err
   487  		return it.Next()
   488  	}
   489  }
   490  
   491  // Error returns any retrieval or parsing error occurred during filtering.
   492  func (it *IERC20ApprovalIterator) Error() error {
   493  	return it.fail
   494  }
   495  
   496  // Close terminates the iteration process, releasing any pending underlying
   497  // resources.
   498  func (it *IERC20ApprovalIterator) Close() error {
   499  	it.sub.Unsubscribe()
   500  	return nil
   501  }
   502  
   503  // IERC20Approval represents a Approval event raised by the IERC20 contract.
   504  type IERC20Approval struct {
   505  	Owner   common.Address
   506  	Spender common.Address
   507  	Value   *big.Int
   508  	Raw     types.Log // Blockchain specific contextual infos
   509  }
   510  
   511  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
   512  //
   513  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
   514  func (_IERC20 *IERC20Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*IERC20ApprovalIterator, error) {
   515  
   516  	var ownerRule []interface{}
   517  	for _, ownerItem := range owner {
   518  		ownerRule = append(ownerRule, ownerItem)
   519  	}
   520  	var spenderRule []interface{}
   521  	for _, spenderItem := range spender {
   522  		spenderRule = append(spenderRule, spenderItem)
   523  	}
   524  
   525  	logs, sub, err := _IERC20.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
   526  	if err != nil {
   527  		return nil, err
   528  	}
   529  	return &IERC20ApprovalIterator{contract: _IERC20.contract, event: "Approval", logs: logs, sub: sub}, nil
   530  }
   531  
   532  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
   533  //
   534  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
   535  func (_IERC20 *IERC20Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC20Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
   536  
   537  	var ownerRule []interface{}
   538  	for _, ownerItem := range owner {
   539  		ownerRule = append(ownerRule, ownerItem)
   540  	}
   541  	var spenderRule []interface{}
   542  	for _, spenderItem := range spender {
   543  		spenderRule = append(spenderRule, spenderItem)
   544  	}
   545  
   546  	logs, sub, err := _IERC20.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
   547  	if err != nil {
   548  		return nil, err
   549  	}
   550  	return event.NewSubscription(func(quit <-chan struct{}) error {
   551  		defer sub.Unsubscribe()
   552  		for {
   553  			select {
   554  			case log := <-logs:
   555  				// New log arrived, parse the event and forward to the user
   556  				event := new(IERC20Approval)
   557  				if err := _IERC20.contract.UnpackLog(event, "Approval", log); err != nil {
   558  					return err
   559  				}
   560  				event.Raw = log
   561  
   562  				select {
   563  				case sink <- event:
   564  				case err := <-sub.Err():
   565  					return err
   566  				case <-quit:
   567  					return nil
   568  				}
   569  			case err := <-sub.Err():
   570  				return err
   571  			case <-quit:
   572  				return nil
   573  			}
   574  		}
   575  	}), nil
   576  }
   577  
   578  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
   579  //
   580  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
   581  func (_IERC20 *IERC20Filterer) ParseApproval(log types.Log) (*IERC20Approval, error) {
   582  	event := new(IERC20Approval)
   583  	if err := _IERC20.contract.UnpackLog(event, "Approval", log); err != nil {
   584  		return nil, err
   585  	}
   586  	return event, nil
   587  }
   588  
   589  // IERC20TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IERC20 contract.
   590  type IERC20TransferIterator struct {
   591  	Event *IERC20Transfer // Event containing the contract specifics and raw log
   592  
   593  	contract *bind.BoundContract // Generic contract to use for unpacking event data
   594  	event    string              // Event name to use for unpacking event data
   595  
   596  	logs chan types.Log        // Log channel receiving the found contract events
   597  	sub  ethereum.Subscription // Subscription for errors, completion and termination
   598  	done bool                  // Whether the subscription completed delivering logs
   599  	fail error                 // Occurred error to stop iteration
   600  }
   601  
   602  // Next advances the iterator to the subsequent event, returning whether there
   603  // are any more events found. In case of a retrieval or parsing error, false is
   604  // returned and Error() can be queried for the exact failure.
   605  func (it *IERC20TransferIterator) Next() bool {
   606  	// If the iterator failed, stop iterating
   607  	if it.fail != nil {
   608  		return false
   609  	}
   610  	// If the iterator completed, deliver directly whatever's available
   611  	if it.done {
   612  		select {
   613  		case log := <-it.logs:
   614  			it.Event = new(IERC20Transfer)
   615  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
   616  				it.fail = err
   617  				return false
   618  			}
   619  			it.Event.Raw = log
   620  			return true
   621  
   622  		default:
   623  			return false
   624  		}
   625  	}
   626  	// Iterator still in progress, wait for either a data or an error event
   627  	select {
   628  	case log := <-it.logs:
   629  		it.Event = new(IERC20Transfer)
   630  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
   631  			it.fail = err
   632  			return false
   633  		}
   634  		it.Event.Raw = log
   635  		return true
   636  
   637  	case err := <-it.sub.Err():
   638  		it.done = true
   639  		it.fail = err
   640  		return it.Next()
   641  	}
   642  }
   643  
   644  // Error returns any retrieval or parsing error occurred during filtering.
   645  func (it *IERC20TransferIterator) Error() error {
   646  	return it.fail
   647  }
   648  
   649  // Close terminates the iteration process, releasing any pending underlying
   650  // resources.
   651  func (it *IERC20TransferIterator) Close() error {
   652  	it.sub.Unsubscribe()
   653  	return nil
   654  }
   655  
   656  // IERC20Transfer represents a Transfer event raised by the IERC20 contract.
   657  type IERC20Transfer struct {
   658  	From  common.Address
   659  	To    common.Address
   660  	Value *big.Int
   661  	Raw   types.Log // Blockchain specific contextual infos
   662  }
   663  
   664  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
   665  //
   666  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
   667  func (_IERC20 *IERC20Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*IERC20TransferIterator, error) {
   668  
   669  	var fromRule []interface{}
   670  	for _, fromItem := range from {
   671  		fromRule = append(fromRule, fromItem)
   672  	}
   673  	var toRule []interface{}
   674  	for _, toItem := range to {
   675  		toRule = append(toRule, toItem)
   676  	}
   677  
   678  	logs, sub, err := _IERC20.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
   679  	if err != nil {
   680  		return nil, err
   681  	}
   682  	return &IERC20TransferIterator{contract: _IERC20.contract, event: "Transfer", logs: logs, sub: sub}, nil
   683  }
   684  
   685  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
   686  //
   687  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
   688  func (_IERC20 *IERC20Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC20Transfer, from []common.Address, to []common.Address) (event.Subscription, error) {
   689  
   690  	var fromRule []interface{}
   691  	for _, fromItem := range from {
   692  		fromRule = append(fromRule, fromItem)
   693  	}
   694  	var toRule []interface{}
   695  	for _, toItem := range to {
   696  		toRule = append(toRule, toItem)
   697  	}
   698  
   699  	logs, sub, err := _IERC20.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
   700  	if err != nil {
   701  		return nil, err
   702  	}
   703  	return event.NewSubscription(func(quit <-chan struct{}) error {
   704  		defer sub.Unsubscribe()
   705  		for {
   706  			select {
   707  			case log := <-logs:
   708  				// New log arrived, parse the event and forward to the user
   709  				event := new(IERC20Transfer)
   710  				if err := _IERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
   711  					return err
   712  				}
   713  				event.Raw = log
   714  
   715  				select {
   716  				case sink <- event:
   717  				case err := <-sub.Err():
   718  					return err
   719  				case <-quit:
   720  					return nil
   721  				}
   722  			case err := <-sub.Err():
   723  				return err
   724  			case <-quit:
   725  				return nil
   726  			}
   727  		}
   728  	}), nil
   729  }
   730  
   731  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
   732  //
   733  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
   734  func (_IERC20 *IERC20Filterer) ParseTransfer(log types.Log) (*IERC20Transfer, error) {
   735  	event := new(IERC20Transfer)
   736  	if err := _IERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
   737  		return nil, err
   738  	}
   739  	return event, nil
   740  }
   741  
   742  // IUniswapV2CalleeABI is the input ABI used to generate the binding from.
   743  const IUniswapV2CalleeABI = "[{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"uniswapV2Call\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
   744  
   745  // IUniswapV2CalleeFuncSigs maps the 4-byte function signature to its string representation.
   746  var IUniswapV2CalleeFuncSigs = map[string]string{
   747  	"10d1e85c": "uniswapV2Call(address,uint256,uint256,bytes)",
   748  }
   749  
   750  // IUniswapV2Callee is an auto generated Go binding around an Ethereum contract.
   751  type IUniswapV2Callee struct {
   752  	IUniswapV2CalleeCaller     // Read-only binding to the contract
   753  	IUniswapV2CalleeTransactor // Write-only binding to the contract
   754  	IUniswapV2CalleeFilterer   // Log filterer for contract events
   755  }
   756  
   757  // IUniswapV2CalleeCaller is an auto generated read-only Go binding around an Ethereum contract.
   758  type IUniswapV2CalleeCaller struct {
   759  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   760  }
   761  
   762  // IUniswapV2CalleeTransactor is an auto generated write-only Go binding around an Ethereum contract.
   763  type IUniswapV2CalleeTransactor struct {
   764  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   765  }
   766  
   767  // IUniswapV2CalleeFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
   768  type IUniswapV2CalleeFilterer struct {
   769  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   770  }
   771  
   772  // IUniswapV2CalleeSession is an auto generated Go binding around an Ethereum contract,
   773  // with pre-set call and transact options.
   774  type IUniswapV2CalleeSession struct {
   775  	Contract     *IUniswapV2Callee // Generic contract binding to set the session for
   776  	CallOpts     bind.CallOpts     // Call options to use throughout this session
   777  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   778  }
   779  
   780  // IUniswapV2CalleeCallerSession is an auto generated read-only Go binding around an Ethereum contract,
   781  // with pre-set call options.
   782  type IUniswapV2CalleeCallerSession struct {
   783  	Contract *IUniswapV2CalleeCaller // Generic contract caller binding to set the session for
   784  	CallOpts bind.CallOpts           // Call options to use throughout this session
   785  }
   786  
   787  // IUniswapV2CalleeTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   788  // with pre-set transact options.
   789  type IUniswapV2CalleeTransactorSession struct {
   790  	Contract     *IUniswapV2CalleeTransactor // Generic contract transactor binding to set the session for
   791  	TransactOpts bind.TransactOpts           // Transaction auth options to use throughout this session
   792  }
   793  
   794  // IUniswapV2CalleeRaw is an auto generated low-level Go binding around an Ethereum contract.
   795  type IUniswapV2CalleeRaw struct {
   796  	Contract *IUniswapV2Callee // Generic contract binding to access the raw methods on
   797  }
   798  
   799  // IUniswapV2CalleeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   800  type IUniswapV2CalleeCallerRaw struct {
   801  	Contract *IUniswapV2CalleeCaller // Generic read-only contract binding to access the raw methods on
   802  }
   803  
   804  // IUniswapV2CalleeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   805  type IUniswapV2CalleeTransactorRaw struct {
   806  	Contract *IUniswapV2CalleeTransactor // Generic write-only contract binding to access the raw methods on
   807  }
   808  
   809  // NewIUniswapV2Callee creates a new instance of IUniswapV2Callee, bound to a specific deployed contract.
   810  func NewIUniswapV2Callee(address common.Address, backend bind.ContractBackend) (*IUniswapV2Callee, error) {
   811  	contract, err := bindIUniswapV2Callee(address, backend, backend, backend)
   812  	if err != nil {
   813  		return nil, err
   814  	}
   815  	return &IUniswapV2Callee{IUniswapV2CalleeCaller: IUniswapV2CalleeCaller{contract: contract}, IUniswapV2CalleeTransactor: IUniswapV2CalleeTransactor{contract: contract}, IUniswapV2CalleeFilterer: IUniswapV2CalleeFilterer{contract: contract}}, nil
   816  }
   817  
   818  // NewIUniswapV2CalleeCaller creates a new read-only instance of IUniswapV2Callee, bound to a specific deployed contract.
   819  func NewIUniswapV2CalleeCaller(address common.Address, caller bind.ContractCaller) (*IUniswapV2CalleeCaller, error) {
   820  	contract, err := bindIUniswapV2Callee(address, caller, nil, nil)
   821  	if err != nil {
   822  		return nil, err
   823  	}
   824  	return &IUniswapV2CalleeCaller{contract: contract}, nil
   825  }
   826  
   827  // NewIUniswapV2CalleeTransactor creates a new write-only instance of IUniswapV2Callee, bound to a specific deployed contract.
   828  func NewIUniswapV2CalleeTransactor(address common.Address, transactor bind.ContractTransactor) (*IUniswapV2CalleeTransactor, error) {
   829  	contract, err := bindIUniswapV2Callee(address, nil, transactor, nil)
   830  	if err != nil {
   831  		return nil, err
   832  	}
   833  	return &IUniswapV2CalleeTransactor{contract: contract}, nil
   834  }
   835  
   836  // NewIUniswapV2CalleeFilterer creates a new log filterer instance of IUniswapV2Callee, bound to a specific deployed contract.
   837  func NewIUniswapV2CalleeFilterer(address common.Address, filterer bind.ContractFilterer) (*IUniswapV2CalleeFilterer, error) {
   838  	contract, err := bindIUniswapV2Callee(address, nil, nil, filterer)
   839  	if err != nil {
   840  		return nil, err
   841  	}
   842  	return &IUniswapV2CalleeFilterer{contract: contract}, nil
   843  }
   844  
   845  // bindIUniswapV2Callee binds a generic wrapper to an already deployed contract.
   846  func bindIUniswapV2Callee(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   847  	parsed, err := abi.JSON(strings.NewReader(IUniswapV2CalleeABI))
   848  	if err != nil {
   849  		return nil, err
   850  	}
   851  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   852  }
   853  
   854  // Call invokes the (constant) contract method with params as input values and
   855  // sets the output to result. The result type might be a single field for simple
   856  // returns, a slice of interfaces for anonymous returns and a struct for named
   857  // returns.
   858  func (_IUniswapV2Callee *IUniswapV2CalleeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   859  	return _IUniswapV2Callee.Contract.IUniswapV2CalleeCaller.contract.Call(opts, result, method, params...)
   860  }
   861  
   862  // Transfer initiates a plain transaction to move funds to the contract, calling
   863  // its default method if one is available.
   864  func (_IUniswapV2Callee *IUniswapV2CalleeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   865  	return _IUniswapV2Callee.Contract.IUniswapV2CalleeTransactor.contract.Transfer(opts)
   866  }
   867  
   868  // Transact invokes the (paid) contract method with params as input values.
   869  func (_IUniswapV2Callee *IUniswapV2CalleeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   870  	return _IUniswapV2Callee.Contract.IUniswapV2CalleeTransactor.contract.Transact(opts, method, params...)
   871  }
   872  
   873  // Call invokes the (constant) contract method with params as input values and
   874  // sets the output to result. The result type might be a single field for simple
   875  // returns, a slice of interfaces for anonymous returns and a struct for named
   876  // returns.
   877  func (_IUniswapV2Callee *IUniswapV2CalleeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   878  	return _IUniswapV2Callee.Contract.contract.Call(opts, result, method, params...)
   879  }
   880  
   881  // Transfer initiates a plain transaction to move funds to the contract, calling
   882  // its default method if one is available.
   883  func (_IUniswapV2Callee *IUniswapV2CalleeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   884  	return _IUniswapV2Callee.Contract.contract.Transfer(opts)
   885  }
   886  
   887  // Transact invokes the (paid) contract method with params as input values.
   888  func (_IUniswapV2Callee *IUniswapV2CalleeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   889  	return _IUniswapV2Callee.Contract.contract.Transact(opts, method, params...)
   890  }
   891  
   892  // UniswapV2Call is a paid mutator transaction binding the contract method 0x10d1e85c.
   893  //
   894  // Solidity: function uniswapV2Call(address sender, uint256 amount0, uint256 amount1, bytes data) returns()
   895  func (_IUniswapV2Callee *IUniswapV2CalleeTransactor) UniswapV2Call(opts *bind.TransactOpts, sender common.Address, amount0 *big.Int, amount1 *big.Int, data []byte) (*types.Transaction, error) {
   896  	return _IUniswapV2Callee.contract.Transact(opts, "uniswapV2Call", sender, amount0, amount1, data)
   897  }
   898  
   899  // UniswapV2Call is a paid mutator transaction binding the contract method 0x10d1e85c.
   900  //
   901  // Solidity: function uniswapV2Call(address sender, uint256 amount0, uint256 amount1, bytes data) returns()
   902  func (_IUniswapV2Callee *IUniswapV2CalleeSession) UniswapV2Call(sender common.Address, amount0 *big.Int, amount1 *big.Int, data []byte) (*types.Transaction, error) {
   903  	return _IUniswapV2Callee.Contract.UniswapV2Call(&_IUniswapV2Callee.TransactOpts, sender, amount0, amount1, data)
   904  }
   905  
   906  // UniswapV2Call is a paid mutator transaction binding the contract method 0x10d1e85c.
   907  //
   908  // Solidity: function uniswapV2Call(address sender, uint256 amount0, uint256 amount1, bytes data) returns()
   909  func (_IUniswapV2Callee *IUniswapV2CalleeTransactorSession) UniswapV2Call(sender common.Address, amount0 *big.Int, amount1 *big.Int, data []byte) (*types.Transaction, error) {
   910  	return _IUniswapV2Callee.Contract.UniswapV2Call(&_IUniswapV2Callee.TransactOpts, sender, amount0, amount1, data)
   911  }
   912  
   913  // IUniswapV2ERC20ABI is the input ABI used to generate the binding from.
   914  const IUniswapV2ERC20ABI = "[{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
   915  
   916  // IUniswapV2ERC20FuncSigs maps the 4-byte function signature to its string representation.
   917  var IUniswapV2ERC20FuncSigs = map[string]string{
   918  	"3644e515": "DOMAIN_SEPARATOR()",
   919  	"30adf81f": "PERMIT_TYPEHASH()",
   920  	"dd62ed3e": "allowance(address,address)",
   921  	"095ea7b3": "approve(address,uint256)",
   922  	"70a08231": "balanceOf(address)",
   923  	"313ce567": "decimals()",
   924  	"06fdde03": "name()",
   925  	"7ecebe00": "nonces(address)",
   926  	"d505accf": "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)",
   927  	"95d89b41": "symbol()",
   928  	"18160ddd": "totalSupply()",
   929  	"a9059cbb": "transfer(address,uint256)",
   930  	"23b872dd": "transferFrom(address,address,uint256)",
   931  }
   932  
   933  // IUniswapV2ERC20 is an auto generated Go binding around an Ethereum contract.
   934  type IUniswapV2ERC20 struct {
   935  	IUniswapV2ERC20Caller     // Read-only binding to the contract
   936  	IUniswapV2ERC20Transactor // Write-only binding to the contract
   937  	IUniswapV2ERC20Filterer   // Log filterer for contract events
   938  }
   939  
   940  // IUniswapV2ERC20Caller is an auto generated read-only Go binding around an Ethereum contract.
   941  type IUniswapV2ERC20Caller struct {
   942  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   943  }
   944  
   945  // IUniswapV2ERC20Transactor is an auto generated write-only Go binding around an Ethereum contract.
   946  type IUniswapV2ERC20Transactor struct {
   947  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   948  }
   949  
   950  // IUniswapV2ERC20Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
   951  type IUniswapV2ERC20Filterer struct {
   952  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   953  }
   954  
   955  // IUniswapV2ERC20Session is an auto generated Go binding around an Ethereum contract,
   956  // with pre-set call and transact options.
   957  type IUniswapV2ERC20Session struct {
   958  	Contract     *IUniswapV2ERC20  // Generic contract binding to set the session for
   959  	CallOpts     bind.CallOpts     // Call options to use throughout this session
   960  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   961  }
   962  
   963  // IUniswapV2ERC20CallerSession is an auto generated read-only Go binding around an Ethereum contract,
   964  // with pre-set call options.
   965  type IUniswapV2ERC20CallerSession struct {
   966  	Contract *IUniswapV2ERC20Caller // Generic contract caller binding to set the session for
   967  	CallOpts bind.CallOpts          // Call options to use throughout this session
   968  }
   969  
   970  // IUniswapV2ERC20TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   971  // with pre-set transact options.
   972  type IUniswapV2ERC20TransactorSession struct {
   973  	Contract     *IUniswapV2ERC20Transactor // Generic contract transactor binding to set the session for
   974  	TransactOpts bind.TransactOpts          // Transaction auth options to use throughout this session
   975  }
   976  
   977  // IUniswapV2ERC20Raw is an auto generated low-level Go binding around an Ethereum contract.
   978  type IUniswapV2ERC20Raw struct {
   979  	Contract *IUniswapV2ERC20 // Generic contract binding to access the raw methods on
   980  }
   981  
   982  // IUniswapV2ERC20CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   983  type IUniswapV2ERC20CallerRaw struct {
   984  	Contract *IUniswapV2ERC20Caller // Generic read-only contract binding to access the raw methods on
   985  }
   986  
   987  // IUniswapV2ERC20TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   988  type IUniswapV2ERC20TransactorRaw struct {
   989  	Contract *IUniswapV2ERC20Transactor // Generic write-only contract binding to access the raw methods on
   990  }
   991  
   992  // NewIUniswapV2ERC20 creates a new instance of IUniswapV2ERC20, bound to a specific deployed contract.
   993  func NewIUniswapV2ERC20(address common.Address, backend bind.ContractBackend) (*IUniswapV2ERC20, error) {
   994  	contract, err := bindIUniswapV2ERC20(address, backend, backend, backend)
   995  	if err != nil {
   996  		return nil, err
   997  	}
   998  	return &IUniswapV2ERC20{IUniswapV2ERC20Caller: IUniswapV2ERC20Caller{contract: contract}, IUniswapV2ERC20Transactor: IUniswapV2ERC20Transactor{contract: contract}, IUniswapV2ERC20Filterer: IUniswapV2ERC20Filterer{contract: contract}}, nil
   999  }
  1000  
  1001  // NewIUniswapV2ERC20Caller creates a new read-only instance of IUniswapV2ERC20, bound to a specific deployed contract.
  1002  func NewIUniswapV2ERC20Caller(address common.Address, caller bind.ContractCaller) (*IUniswapV2ERC20Caller, error) {
  1003  	contract, err := bindIUniswapV2ERC20(address, caller, nil, nil)
  1004  	if err != nil {
  1005  		return nil, err
  1006  	}
  1007  	return &IUniswapV2ERC20Caller{contract: contract}, nil
  1008  }
  1009  
  1010  // NewIUniswapV2ERC20Transactor creates a new write-only instance of IUniswapV2ERC20, bound to a specific deployed contract.
  1011  func NewIUniswapV2ERC20Transactor(address common.Address, transactor bind.ContractTransactor) (*IUniswapV2ERC20Transactor, error) {
  1012  	contract, err := bindIUniswapV2ERC20(address, nil, transactor, nil)
  1013  	if err != nil {
  1014  		return nil, err
  1015  	}
  1016  	return &IUniswapV2ERC20Transactor{contract: contract}, nil
  1017  }
  1018  
  1019  // NewIUniswapV2ERC20Filterer creates a new log filterer instance of IUniswapV2ERC20, bound to a specific deployed contract.
  1020  func NewIUniswapV2ERC20Filterer(address common.Address, filterer bind.ContractFilterer) (*IUniswapV2ERC20Filterer, error) {
  1021  	contract, err := bindIUniswapV2ERC20(address, nil, nil, filterer)
  1022  	if err != nil {
  1023  		return nil, err
  1024  	}
  1025  	return &IUniswapV2ERC20Filterer{contract: contract}, nil
  1026  }
  1027  
  1028  // bindIUniswapV2ERC20 binds a generic wrapper to an already deployed contract.
  1029  func bindIUniswapV2ERC20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  1030  	parsed, err := abi.JSON(strings.NewReader(IUniswapV2ERC20ABI))
  1031  	if err != nil {
  1032  		return nil, err
  1033  	}
  1034  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  1035  }
  1036  
  1037  // Call invokes the (constant) contract method with params as input values and
  1038  // sets the output to result. The result type might be a single field for simple
  1039  // returns, a slice of interfaces for anonymous returns and a struct for named
  1040  // returns.
  1041  func (_IUniswapV2ERC20 *IUniswapV2ERC20Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  1042  	return _IUniswapV2ERC20.Contract.IUniswapV2ERC20Caller.contract.Call(opts, result, method, params...)
  1043  }
  1044  
  1045  // Transfer initiates a plain transaction to move funds to the contract, calling
  1046  // its default method if one is available.
  1047  func (_IUniswapV2ERC20 *IUniswapV2ERC20Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  1048  	return _IUniswapV2ERC20.Contract.IUniswapV2ERC20Transactor.contract.Transfer(opts)
  1049  }
  1050  
  1051  // Transact invokes the (paid) contract method with params as input values.
  1052  func (_IUniswapV2ERC20 *IUniswapV2ERC20Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  1053  	return _IUniswapV2ERC20.Contract.IUniswapV2ERC20Transactor.contract.Transact(opts, method, params...)
  1054  }
  1055  
  1056  // Call invokes the (constant) contract method with params as input values and
  1057  // sets the output to result. The result type might be a single field for simple
  1058  // returns, a slice of interfaces for anonymous returns and a struct for named
  1059  // returns.
  1060  func (_IUniswapV2ERC20 *IUniswapV2ERC20CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  1061  	return _IUniswapV2ERC20.Contract.contract.Call(opts, result, method, params...)
  1062  }
  1063  
  1064  // Transfer initiates a plain transaction to move funds to the contract, calling
  1065  // its default method if one is available.
  1066  func (_IUniswapV2ERC20 *IUniswapV2ERC20TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  1067  	return _IUniswapV2ERC20.Contract.contract.Transfer(opts)
  1068  }
  1069  
  1070  // Transact invokes the (paid) contract method with params as input values.
  1071  func (_IUniswapV2ERC20 *IUniswapV2ERC20TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  1072  	return _IUniswapV2ERC20.Contract.contract.Transact(opts, method, params...)
  1073  }
  1074  
  1075  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  1076  //
  1077  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  1078  func (_IUniswapV2ERC20 *IUniswapV2ERC20Caller) DOMAINSEPARATOR(opts *bind.CallOpts) ([32]byte, error) {
  1079  	var out []interface{}
  1080  	err := _IUniswapV2ERC20.contract.Call(opts, &out, "DOMAIN_SEPARATOR")
  1081  
  1082  	if err != nil {
  1083  		return *new([32]byte), err
  1084  	}
  1085  
  1086  	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
  1087  
  1088  	return out0, err
  1089  
  1090  }
  1091  
  1092  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  1093  //
  1094  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  1095  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) DOMAINSEPARATOR() ([32]byte, error) {
  1096  	return _IUniswapV2ERC20.Contract.DOMAINSEPARATOR(&_IUniswapV2ERC20.CallOpts)
  1097  }
  1098  
  1099  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  1100  //
  1101  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  1102  func (_IUniswapV2ERC20 *IUniswapV2ERC20CallerSession) DOMAINSEPARATOR() ([32]byte, error) {
  1103  	return _IUniswapV2ERC20.Contract.DOMAINSEPARATOR(&_IUniswapV2ERC20.CallOpts)
  1104  }
  1105  
  1106  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  1107  //
  1108  // Solidity: function PERMIT_TYPEHASH() pure returns(bytes32)
  1109  func (_IUniswapV2ERC20 *IUniswapV2ERC20Caller) PERMITTYPEHASH(opts *bind.CallOpts) ([32]byte, error) {
  1110  	var out []interface{}
  1111  	err := _IUniswapV2ERC20.contract.Call(opts, &out, "PERMIT_TYPEHASH")
  1112  
  1113  	if err != nil {
  1114  		return *new([32]byte), err
  1115  	}
  1116  
  1117  	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
  1118  
  1119  	return out0, err
  1120  
  1121  }
  1122  
  1123  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  1124  //
  1125  // Solidity: function PERMIT_TYPEHASH() pure returns(bytes32)
  1126  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) PERMITTYPEHASH() ([32]byte, error) {
  1127  	return _IUniswapV2ERC20.Contract.PERMITTYPEHASH(&_IUniswapV2ERC20.CallOpts)
  1128  }
  1129  
  1130  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  1131  //
  1132  // Solidity: function PERMIT_TYPEHASH() pure returns(bytes32)
  1133  func (_IUniswapV2ERC20 *IUniswapV2ERC20CallerSession) PERMITTYPEHASH() ([32]byte, error) {
  1134  	return _IUniswapV2ERC20.Contract.PERMITTYPEHASH(&_IUniswapV2ERC20.CallOpts)
  1135  }
  1136  
  1137  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  1138  //
  1139  // Solidity: function allowance(address owner, address spender) view returns(uint256)
  1140  func (_IUniswapV2ERC20 *IUniswapV2ERC20Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
  1141  	var out []interface{}
  1142  	err := _IUniswapV2ERC20.contract.Call(opts, &out, "allowance", owner, spender)
  1143  
  1144  	if err != nil {
  1145  		return *new(*big.Int), err
  1146  	}
  1147  
  1148  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1149  
  1150  	return out0, err
  1151  
  1152  }
  1153  
  1154  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  1155  //
  1156  // Solidity: function allowance(address owner, address spender) view returns(uint256)
  1157  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
  1158  	return _IUniswapV2ERC20.Contract.Allowance(&_IUniswapV2ERC20.CallOpts, owner, spender)
  1159  }
  1160  
  1161  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  1162  //
  1163  // Solidity: function allowance(address owner, address spender) view returns(uint256)
  1164  func (_IUniswapV2ERC20 *IUniswapV2ERC20CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
  1165  	return _IUniswapV2ERC20.Contract.Allowance(&_IUniswapV2ERC20.CallOpts, owner, spender)
  1166  }
  1167  
  1168  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1169  //
  1170  // Solidity: function balanceOf(address owner) view returns(uint256)
  1171  func (_IUniswapV2ERC20 *IUniswapV2ERC20Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  1172  	var out []interface{}
  1173  	err := _IUniswapV2ERC20.contract.Call(opts, &out, "balanceOf", owner)
  1174  
  1175  	if err != nil {
  1176  		return *new(*big.Int), err
  1177  	}
  1178  
  1179  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1180  
  1181  	return out0, err
  1182  
  1183  }
  1184  
  1185  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1186  //
  1187  // Solidity: function balanceOf(address owner) view returns(uint256)
  1188  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) BalanceOf(owner common.Address) (*big.Int, error) {
  1189  	return _IUniswapV2ERC20.Contract.BalanceOf(&_IUniswapV2ERC20.CallOpts, owner)
  1190  }
  1191  
  1192  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1193  //
  1194  // Solidity: function balanceOf(address owner) view returns(uint256)
  1195  func (_IUniswapV2ERC20 *IUniswapV2ERC20CallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  1196  	return _IUniswapV2ERC20.Contract.BalanceOf(&_IUniswapV2ERC20.CallOpts, owner)
  1197  }
  1198  
  1199  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  1200  //
  1201  // Solidity: function decimals() pure returns(uint8)
  1202  func (_IUniswapV2ERC20 *IUniswapV2ERC20Caller) Decimals(opts *bind.CallOpts) (uint8, error) {
  1203  	var out []interface{}
  1204  	err := _IUniswapV2ERC20.contract.Call(opts, &out, "decimals")
  1205  
  1206  	if err != nil {
  1207  		return *new(uint8), err
  1208  	}
  1209  
  1210  	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
  1211  
  1212  	return out0, err
  1213  
  1214  }
  1215  
  1216  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  1217  //
  1218  // Solidity: function decimals() pure returns(uint8)
  1219  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) Decimals() (uint8, error) {
  1220  	return _IUniswapV2ERC20.Contract.Decimals(&_IUniswapV2ERC20.CallOpts)
  1221  }
  1222  
  1223  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  1224  //
  1225  // Solidity: function decimals() pure returns(uint8)
  1226  func (_IUniswapV2ERC20 *IUniswapV2ERC20CallerSession) Decimals() (uint8, error) {
  1227  	return _IUniswapV2ERC20.Contract.Decimals(&_IUniswapV2ERC20.CallOpts)
  1228  }
  1229  
  1230  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  1231  //
  1232  // Solidity: function name() pure returns(string)
  1233  func (_IUniswapV2ERC20 *IUniswapV2ERC20Caller) Name(opts *bind.CallOpts) (string, error) {
  1234  	var out []interface{}
  1235  	err := _IUniswapV2ERC20.contract.Call(opts, &out, "name")
  1236  
  1237  	if err != nil {
  1238  		return *new(string), err
  1239  	}
  1240  
  1241  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  1242  
  1243  	return out0, err
  1244  
  1245  }
  1246  
  1247  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  1248  //
  1249  // Solidity: function name() pure returns(string)
  1250  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) Name() (string, error) {
  1251  	return _IUniswapV2ERC20.Contract.Name(&_IUniswapV2ERC20.CallOpts)
  1252  }
  1253  
  1254  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  1255  //
  1256  // Solidity: function name() pure returns(string)
  1257  func (_IUniswapV2ERC20 *IUniswapV2ERC20CallerSession) Name() (string, error) {
  1258  	return _IUniswapV2ERC20.Contract.Name(&_IUniswapV2ERC20.CallOpts)
  1259  }
  1260  
  1261  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  1262  //
  1263  // Solidity: function nonces(address owner) view returns(uint256)
  1264  func (_IUniswapV2ERC20 *IUniswapV2ERC20Caller) Nonces(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  1265  	var out []interface{}
  1266  	err := _IUniswapV2ERC20.contract.Call(opts, &out, "nonces", owner)
  1267  
  1268  	if err != nil {
  1269  		return *new(*big.Int), err
  1270  	}
  1271  
  1272  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1273  
  1274  	return out0, err
  1275  
  1276  }
  1277  
  1278  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  1279  //
  1280  // Solidity: function nonces(address owner) view returns(uint256)
  1281  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) Nonces(owner common.Address) (*big.Int, error) {
  1282  	return _IUniswapV2ERC20.Contract.Nonces(&_IUniswapV2ERC20.CallOpts, owner)
  1283  }
  1284  
  1285  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  1286  //
  1287  // Solidity: function nonces(address owner) view returns(uint256)
  1288  func (_IUniswapV2ERC20 *IUniswapV2ERC20CallerSession) Nonces(owner common.Address) (*big.Int, error) {
  1289  	return _IUniswapV2ERC20.Contract.Nonces(&_IUniswapV2ERC20.CallOpts, owner)
  1290  }
  1291  
  1292  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  1293  //
  1294  // Solidity: function symbol() pure returns(string)
  1295  func (_IUniswapV2ERC20 *IUniswapV2ERC20Caller) Symbol(opts *bind.CallOpts) (string, error) {
  1296  	var out []interface{}
  1297  	err := _IUniswapV2ERC20.contract.Call(opts, &out, "symbol")
  1298  
  1299  	if err != nil {
  1300  		return *new(string), err
  1301  	}
  1302  
  1303  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  1304  
  1305  	return out0, err
  1306  
  1307  }
  1308  
  1309  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  1310  //
  1311  // Solidity: function symbol() pure returns(string)
  1312  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) Symbol() (string, error) {
  1313  	return _IUniswapV2ERC20.Contract.Symbol(&_IUniswapV2ERC20.CallOpts)
  1314  }
  1315  
  1316  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  1317  //
  1318  // Solidity: function symbol() pure returns(string)
  1319  func (_IUniswapV2ERC20 *IUniswapV2ERC20CallerSession) Symbol() (string, error) {
  1320  	return _IUniswapV2ERC20.Contract.Symbol(&_IUniswapV2ERC20.CallOpts)
  1321  }
  1322  
  1323  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  1324  //
  1325  // Solidity: function totalSupply() view returns(uint256)
  1326  func (_IUniswapV2ERC20 *IUniswapV2ERC20Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  1327  	var out []interface{}
  1328  	err := _IUniswapV2ERC20.contract.Call(opts, &out, "totalSupply")
  1329  
  1330  	if err != nil {
  1331  		return *new(*big.Int), err
  1332  	}
  1333  
  1334  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1335  
  1336  	return out0, err
  1337  
  1338  }
  1339  
  1340  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  1341  //
  1342  // Solidity: function totalSupply() view returns(uint256)
  1343  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) TotalSupply() (*big.Int, error) {
  1344  	return _IUniswapV2ERC20.Contract.TotalSupply(&_IUniswapV2ERC20.CallOpts)
  1345  }
  1346  
  1347  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  1348  //
  1349  // Solidity: function totalSupply() view returns(uint256)
  1350  func (_IUniswapV2ERC20 *IUniswapV2ERC20CallerSession) TotalSupply() (*big.Int, error) {
  1351  	return _IUniswapV2ERC20.Contract.TotalSupply(&_IUniswapV2ERC20.CallOpts)
  1352  }
  1353  
  1354  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1355  //
  1356  // Solidity: function approve(address spender, uint256 value) returns(bool)
  1357  func (_IUniswapV2ERC20 *IUniswapV2ERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) {
  1358  	return _IUniswapV2ERC20.contract.Transact(opts, "approve", spender, value)
  1359  }
  1360  
  1361  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1362  //
  1363  // Solidity: function approve(address spender, uint256 value) returns(bool)
  1364  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
  1365  	return _IUniswapV2ERC20.Contract.Approve(&_IUniswapV2ERC20.TransactOpts, spender, value)
  1366  }
  1367  
  1368  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1369  //
  1370  // Solidity: function approve(address spender, uint256 value) returns(bool)
  1371  func (_IUniswapV2ERC20 *IUniswapV2ERC20TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
  1372  	return _IUniswapV2ERC20.Contract.Approve(&_IUniswapV2ERC20.TransactOpts, spender, value)
  1373  }
  1374  
  1375  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  1376  //
  1377  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  1378  func (_IUniswapV2ERC20 *IUniswapV2ERC20Transactor) Permit(opts *bind.TransactOpts, owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  1379  	return _IUniswapV2ERC20.contract.Transact(opts, "permit", owner, spender, value, deadline, v, r, s)
  1380  }
  1381  
  1382  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  1383  //
  1384  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  1385  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  1386  	return _IUniswapV2ERC20.Contract.Permit(&_IUniswapV2ERC20.TransactOpts, owner, spender, value, deadline, v, r, s)
  1387  }
  1388  
  1389  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  1390  //
  1391  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  1392  func (_IUniswapV2ERC20 *IUniswapV2ERC20TransactorSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  1393  	return _IUniswapV2ERC20.Contract.Permit(&_IUniswapV2ERC20.TransactOpts, owner, spender, value, deadline, v, r, s)
  1394  }
  1395  
  1396  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  1397  //
  1398  // Solidity: function transfer(address to, uint256 value) returns(bool)
  1399  func (_IUniswapV2ERC20 *IUniswapV2ERC20Transactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) {
  1400  	return _IUniswapV2ERC20.contract.Transact(opts, "transfer", to, value)
  1401  }
  1402  
  1403  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  1404  //
  1405  // Solidity: function transfer(address to, uint256 value) returns(bool)
  1406  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
  1407  	return _IUniswapV2ERC20.Contract.Transfer(&_IUniswapV2ERC20.TransactOpts, to, value)
  1408  }
  1409  
  1410  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  1411  //
  1412  // Solidity: function transfer(address to, uint256 value) returns(bool)
  1413  func (_IUniswapV2ERC20 *IUniswapV2ERC20TransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
  1414  	return _IUniswapV2ERC20.Contract.Transfer(&_IUniswapV2ERC20.TransactOpts, to, value)
  1415  }
  1416  
  1417  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1418  //
  1419  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  1420  func (_IUniswapV2ERC20 *IUniswapV2ERC20Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  1421  	return _IUniswapV2ERC20.contract.Transact(opts, "transferFrom", from, to, value)
  1422  }
  1423  
  1424  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1425  //
  1426  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  1427  func (_IUniswapV2ERC20 *IUniswapV2ERC20Session) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  1428  	return _IUniswapV2ERC20.Contract.TransferFrom(&_IUniswapV2ERC20.TransactOpts, from, to, value)
  1429  }
  1430  
  1431  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1432  //
  1433  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  1434  func (_IUniswapV2ERC20 *IUniswapV2ERC20TransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  1435  	return _IUniswapV2ERC20.Contract.TransferFrom(&_IUniswapV2ERC20.TransactOpts, from, to, value)
  1436  }
  1437  
  1438  // IUniswapV2ERC20ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IUniswapV2ERC20 contract.
  1439  type IUniswapV2ERC20ApprovalIterator struct {
  1440  	Event *IUniswapV2ERC20Approval // Event containing the contract specifics and raw log
  1441  
  1442  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1443  	event    string              // Event name to use for unpacking event data
  1444  
  1445  	logs chan types.Log        // Log channel receiving the found contract events
  1446  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1447  	done bool                  // Whether the subscription completed delivering logs
  1448  	fail error                 // Occurred error to stop iteration
  1449  }
  1450  
  1451  // Next advances the iterator to the subsequent event, returning whether there
  1452  // are any more events found. In case of a retrieval or parsing error, false is
  1453  // returned and Error() can be queried for the exact failure.
  1454  func (it *IUniswapV2ERC20ApprovalIterator) Next() bool {
  1455  	// If the iterator failed, stop iterating
  1456  	if it.fail != nil {
  1457  		return false
  1458  	}
  1459  	// If the iterator completed, deliver directly whatever's available
  1460  	if it.done {
  1461  		select {
  1462  		case log := <-it.logs:
  1463  			it.Event = new(IUniswapV2ERC20Approval)
  1464  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1465  				it.fail = err
  1466  				return false
  1467  			}
  1468  			it.Event.Raw = log
  1469  			return true
  1470  
  1471  		default:
  1472  			return false
  1473  		}
  1474  	}
  1475  	// Iterator still in progress, wait for either a data or an error event
  1476  	select {
  1477  	case log := <-it.logs:
  1478  		it.Event = new(IUniswapV2ERC20Approval)
  1479  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1480  			it.fail = err
  1481  			return false
  1482  		}
  1483  		it.Event.Raw = log
  1484  		return true
  1485  
  1486  	case err := <-it.sub.Err():
  1487  		it.done = true
  1488  		it.fail = err
  1489  		return it.Next()
  1490  	}
  1491  }
  1492  
  1493  // Error returns any retrieval or parsing error occurred during filtering.
  1494  func (it *IUniswapV2ERC20ApprovalIterator) Error() error {
  1495  	return it.fail
  1496  }
  1497  
  1498  // Close terminates the iteration process, releasing any pending underlying
  1499  // resources.
  1500  func (it *IUniswapV2ERC20ApprovalIterator) Close() error {
  1501  	it.sub.Unsubscribe()
  1502  	return nil
  1503  }
  1504  
  1505  // IUniswapV2ERC20Approval represents a Approval event raised by the IUniswapV2ERC20 contract.
  1506  type IUniswapV2ERC20Approval struct {
  1507  	Owner   common.Address
  1508  	Spender common.Address
  1509  	Value   *big.Int
  1510  	Raw     types.Log // Blockchain specific contextual infos
  1511  }
  1512  
  1513  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1514  //
  1515  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  1516  func (_IUniswapV2ERC20 *IUniswapV2ERC20Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*IUniswapV2ERC20ApprovalIterator, error) {
  1517  
  1518  	var ownerRule []interface{}
  1519  	for _, ownerItem := range owner {
  1520  		ownerRule = append(ownerRule, ownerItem)
  1521  	}
  1522  	var spenderRule []interface{}
  1523  	for _, spenderItem := range spender {
  1524  		spenderRule = append(spenderRule, spenderItem)
  1525  	}
  1526  
  1527  	logs, sub, err := _IUniswapV2ERC20.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
  1528  	if err != nil {
  1529  		return nil, err
  1530  	}
  1531  	return &IUniswapV2ERC20ApprovalIterator{contract: _IUniswapV2ERC20.contract, event: "Approval", logs: logs, sub: sub}, nil
  1532  }
  1533  
  1534  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1535  //
  1536  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  1537  func (_IUniswapV2ERC20 *IUniswapV2ERC20Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IUniswapV2ERC20Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
  1538  
  1539  	var ownerRule []interface{}
  1540  	for _, ownerItem := range owner {
  1541  		ownerRule = append(ownerRule, ownerItem)
  1542  	}
  1543  	var spenderRule []interface{}
  1544  	for _, spenderItem := range spender {
  1545  		spenderRule = append(spenderRule, spenderItem)
  1546  	}
  1547  
  1548  	logs, sub, err := _IUniswapV2ERC20.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
  1549  	if err != nil {
  1550  		return nil, err
  1551  	}
  1552  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1553  		defer sub.Unsubscribe()
  1554  		for {
  1555  			select {
  1556  			case log := <-logs:
  1557  				// New log arrived, parse the event and forward to the user
  1558  				event := new(IUniswapV2ERC20Approval)
  1559  				if err := _IUniswapV2ERC20.contract.UnpackLog(event, "Approval", log); err != nil {
  1560  					return err
  1561  				}
  1562  				event.Raw = log
  1563  
  1564  				select {
  1565  				case sink <- event:
  1566  				case err := <-sub.Err():
  1567  					return err
  1568  				case <-quit:
  1569  					return nil
  1570  				}
  1571  			case err := <-sub.Err():
  1572  				return err
  1573  			case <-quit:
  1574  				return nil
  1575  			}
  1576  		}
  1577  	}), nil
  1578  }
  1579  
  1580  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1581  //
  1582  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  1583  func (_IUniswapV2ERC20 *IUniswapV2ERC20Filterer) ParseApproval(log types.Log) (*IUniswapV2ERC20Approval, error) {
  1584  	event := new(IUniswapV2ERC20Approval)
  1585  	if err := _IUniswapV2ERC20.contract.UnpackLog(event, "Approval", log); err != nil {
  1586  		return nil, err
  1587  	}
  1588  	return event, nil
  1589  }
  1590  
  1591  // IUniswapV2ERC20TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IUniswapV2ERC20 contract.
  1592  type IUniswapV2ERC20TransferIterator struct {
  1593  	Event *IUniswapV2ERC20Transfer // Event containing the contract specifics and raw log
  1594  
  1595  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1596  	event    string              // Event name to use for unpacking event data
  1597  
  1598  	logs chan types.Log        // Log channel receiving the found contract events
  1599  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1600  	done bool                  // Whether the subscription completed delivering logs
  1601  	fail error                 // Occurred error to stop iteration
  1602  }
  1603  
  1604  // Next advances the iterator to the subsequent event, returning whether there
  1605  // are any more events found. In case of a retrieval or parsing error, false is
  1606  // returned and Error() can be queried for the exact failure.
  1607  func (it *IUniswapV2ERC20TransferIterator) Next() bool {
  1608  	// If the iterator failed, stop iterating
  1609  	if it.fail != nil {
  1610  		return false
  1611  	}
  1612  	// If the iterator completed, deliver directly whatever's available
  1613  	if it.done {
  1614  		select {
  1615  		case log := <-it.logs:
  1616  			it.Event = new(IUniswapV2ERC20Transfer)
  1617  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1618  				it.fail = err
  1619  				return false
  1620  			}
  1621  			it.Event.Raw = log
  1622  			return true
  1623  
  1624  		default:
  1625  			return false
  1626  		}
  1627  	}
  1628  	// Iterator still in progress, wait for either a data or an error event
  1629  	select {
  1630  	case log := <-it.logs:
  1631  		it.Event = new(IUniswapV2ERC20Transfer)
  1632  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1633  			it.fail = err
  1634  			return false
  1635  		}
  1636  		it.Event.Raw = log
  1637  		return true
  1638  
  1639  	case err := <-it.sub.Err():
  1640  		it.done = true
  1641  		it.fail = err
  1642  		return it.Next()
  1643  	}
  1644  }
  1645  
  1646  // Error returns any retrieval or parsing error occurred during filtering.
  1647  func (it *IUniswapV2ERC20TransferIterator) Error() error {
  1648  	return it.fail
  1649  }
  1650  
  1651  // Close terminates the iteration process, releasing any pending underlying
  1652  // resources.
  1653  func (it *IUniswapV2ERC20TransferIterator) Close() error {
  1654  	it.sub.Unsubscribe()
  1655  	return nil
  1656  }
  1657  
  1658  // IUniswapV2ERC20Transfer represents a Transfer event raised by the IUniswapV2ERC20 contract.
  1659  type IUniswapV2ERC20Transfer struct {
  1660  	From  common.Address
  1661  	To    common.Address
  1662  	Value *big.Int
  1663  	Raw   types.Log // Blockchain specific contextual infos
  1664  }
  1665  
  1666  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1667  //
  1668  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  1669  func (_IUniswapV2ERC20 *IUniswapV2ERC20Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*IUniswapV2ERC20TransferIterator, error) {
  1670  
  1671  	var fromRule []interface{}
  1672  	for _, fromItem := range from {
  1673  		fromRule = append(fromRule, fromItem)
  1674  	}
  1675  	var toRule []interface{}
  1676  	for _, toItem := range to {
  1677  		toRule = append(toRule, toItem)
  1678  	}
  1679  
  1680  	logs, sub, err := _IUniswapV2ERC20.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
  1681  	if err != nil {
  1682  		return nil, err
  1683  	}
  1684  	return &IUniswapV2ERC20TransferIterator{contract: _IUniswapV2ERC20.contract, event: "Transfer", logs: logs, sub: sub}, nil
  1685  }
  1686  
  1687  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1688  //
  1689  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  1690  func (_IUniswapV2ERC20 *IUniswapV2ERC20Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IUniswapV2ERC20Transfer, from []common.Address, to []common.Address) (event.Subscription, error) {
  1691  
  1692  	var fromRule []interface{}
  1693  	for _, fromItem := range from {
  1694  		fromRule = append(fromRule, fromItem)
  1695  	}
  1696  	var toRule []interface{}
  1697  	for _, toItem := range to {
  1698  		toRule = append(toRule, toItem)
  1699  	}
  1700  
  1701  	logs, sub, err := _IUniswapV2ERC20.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
  1702  	if err != nil {
  1703  		return nil, err
  1704  	}
  1705  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1706  		defer sub.Unsubscribe()
  1707  		for {
  1708  			select {
  1709  			case log := <-logs:
  1710  				// New log arrived, parse the event and forward to the user
  1711  				event := new(IUniswapV2ERC20Transfer)
  1712  				if err := _IUniswapV2ERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
  1713  					return err
  1714  				}
  1715  				event.Raw = log
  1716  
  1717  				select {
  1718  				case sink <- event:
  1719  				case err := <-sub.Err():
  1720  					return err
  1721  				case <-quit:
  1722  					return nil
  1723  				}
  1724  			case err := <-sub.Err():
  1725  				return err
  1726  			case <-quit:
  1727  				return nil
  1728  			}
  1729  		}
  1730  	}), nil
  1731  }
  1732  
  1733  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1734  //
  1735  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  1736  func (_IUniswapV2ERC20 *IUniswapV2ERC20Filterer) ParseTransfer(log types.Log) (*IUniswapV2ERC20Transfer, error) {
  1737  	event := new(IUniswapV2ERC20Transfer)
  1738  	if err := _IUniswapV2ERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
  1739  		return nil, err
  1740  	}
  1741  	return event, nil
  1742  }
  1743  
  1744  // IUniswapV2FactoryABI is the input ABI used to generate the binding from.
  1745  const IUniswapV2FactoryABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"PairCreated\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allPairs\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"allPairsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"}],\"name\":\"createPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeToSetter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"}],\"name\":\"getPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"setFeeTo\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"setFeeToSetter\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  1746  
  1747  // IUniswapV2FactoryFuncSigs maps the 4-byte function signature to its string representation.
  1748  var IUniswapV2FactoryFuncSigs = map[string]string{
  1749  	"1e3dd18b": "allPairs(uint256)",
  1750  	"574f2ba3": "allPairsLength()",
  1751  	"c9c65396": "createPair(address,address)",
  1752  	"017e7e58": "feeTo()",
  1753  	"094b7415": "feeToSetter()",
  1754  	"e6a43905": "getPair(address,address)",
  1755  	"f46901ed": "setFeeTo(address)",
  1756  	"a2e74af6": "setFeeToSetter(address)",
  1757  }
  1758  
  1759  // IUniswapV2Factory is an auto generated Go binding around an Ethereum contract.
  1760  type IUniswapV2Factory struct {
  1761  	IUniswapV2FactoryCaller     // Read-only binding to the contract
  1762  	IUniswapV2FactoryTransactor // Write-only binding to the contract
  1763  	IUniswapV2FactoryFilterer   // Log filterer for contract events
  1764  }
  1765  
  1766  // IUniswapV2FactoryCaller is an auto generated read-only Go binding around an Ethereum contract.
  1767  type IUniswapV2FactoryCaller struct {
  1768  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1769  }
  1770  
  1771  // IUniswapV2FactoryTransactor is an auto generated write-only Go binding around an Ethereum contract.
  1772  type IUniswapV2FactoryTransactor struct {
  1773  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1774  }
  1775  
  1776  // IUniswapV2FactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  1777  type IUniswapV2FactoryFilterer struct {
  1778  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1779  }
  1780  
  1781  // IUniswapV2FactorySession is an auto generated Go binding around an Ethereum contract,
  1782  // with pre-set call and transact options.
  1783  type IUniswapV2FactorySession struct {
  1784  	Contract     *IUniswapV2Factory // Generic contract binding to set the session for
  1785  	CallOpts     bind.CallOpts      // Call options to use throughout this session
  1786  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
  1787  }
  1788  
  1789  // IUniswapV2FactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  1790  // with pre-set call options.
  1791  type IUniswapV2FactoryCallerSession struct {
  1792  	Contract *IUniswapV2FactoryCaller // Generic contract caller binding to set the session for
  1793  	CallOpts bind.CallOpts            // Call options to use throughout this session
  1794  }
  1795  
  1796  // IUniswapV2FactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  1797  // with pre-set transact options.
  1798  type IUniswapV2FactoryTransactorSession struct {
  1799  	Contract     *IUniswapV2FactoryTransactor // Generic contract transactor binding to set the session for
  1800  	TransactOpts bind.TransactOpts            // Transaction auth options to use throughout this session
  1801  }
  1802  
  1803  // IUniswapV2FactoryRaw is an auto generated low-level Go binding around an Ethereum contract.
  1804  type IUniswapV2FactoryRaw struct {
  1805  	Contract *IUniswapV2Factory // Generic contract binding to access the raw methods on
  1806  }
  1807  
  1808  // IUniswapV2FactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  1809  type IUniswapV2FactoryCallerRaw struct {
  1810  	Contract *IUniswapV2FactoryCaller // Generic read-only contract binding to access the raw methods on
  1811  }
  1812  
  1813  // IUniswapV2FactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  1814  type IUniswapV2FactoryTransactorRaw struct {
  1815  	Contract *IUniswapV2FactoryTransactor // Generic write-only contract binding to access the raw methods on
  1816  }
  1817  
  1818  // NewIUniswapV2Factory creates a new instance of IUniswapV2Factory, bound to a specific deployed contract.
  1819  func NewIUniswapV2Factory(address common.Address, backend bind.ContractBackend) (*IUniswapV2Factory, error) {
  1820  	contract, err := bindIUniswapV2Factory(address, backend, backend, backend)
  1821  	if err != nil {
  1822  		return nil, err
  1823  	}
  1824  	return &IUniswapV2Factory{IUniswapV2FactoryCaller: IUniswapV2FactoryCaller{contract: contract}, IUniswapV2FactoryTransactor: IUniswapV2FactoryTransactor{contract: contract}, IUniswapV2FactoryFilterer: IUniswapV2FactoryFilterer{contract: contract}}, nil
  1825  }
  1826  
  1827  // NewIUniswapV2FactoryCaller creates a new read-only instance of IUniswapV2Factory, bound to a specific deployed contract.
  1828  func NewIUniswapV2FactoryCaller(address common.Address, caller bind.ContractCaller) (*IUniswapV2FactoryCaller, error) {
  1829  	contract, err := bindIUniswapV2Factory(address, caller, nil, nil)
  1830  	if err != nil {
  1831  		return nil, err
  1832  	}
  1833  	return &IUniswapV2FactoryCaller{contract: contract}, nil
  1834  }
  1835  
  1836  // NewIUniswapV2FactoryTransactor creates a new write-only instance of IUniswapV2Factory, bound to a specific deployed contract.
  1837  func NewIUniswapV2FactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*IUniswapV2FactoryTransactor, error) {
  1838  	contract, err := bindIUniswapV2Factory(address, nil, transactor, nil)
  1839  	if err != nil {
  1840  		return nil, err
  1841  	}
  1842  	return &IUniswapV2FactoryTransactor{contract: contract}, nil
  1843  }
  1844  
  1845  // NewIUniswapV2FactoryFilterer creates a new log filterer instance of IUniswapV2Factory, bound to a specific deployed contract.
  1846  func NewIUniswapV2FactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*IUniswapV2FactoryFilterer, error) {
  1847  	contract, err := bindIUniswapV2Factory(address, nil, nil, filterer)
  1848  	if err != nil {
  1849  		return nil, err
  1850  	}
  1851  	return &IUniswapV2FactoryFilterer{contract: contract}, nil
  1852  }
  1853  
  1854  // bindIUniswapV2Factory binds a generic wrapper to an already deployed contract.
  1855  func bindIUniswapV2Factory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  1856  	parsed, err := abi.JSON(strings.NewReader(IUniswapV2FactoryABI))
  1857  	if err != nil {
  1858  		return nil, err
  1859  	}
  1860  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  1861  }
  1862  
  1863  // Call invokes the (constant) contract method with params as input values and
  1864  // sets the output to result. The result type might be a single field for simple
  1865  // returns, a slice of interfaces for anonymous returns and a struct for named
  1866  // returns.
  1867  func (_IUniswapV2Factory *IUniswapV2FactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  1868  	return _IUniswapV2Factory.Contract.IUniswapV2FactoryCaller.contract.Call(opts, result, method, params...)
  1869  }
  1870  
  1871  // Transfer initiates a plain transaction to move funds to the contract, calling
  1872  // its default method if one is available.
  1873  func (_IUniswapV2Factory *IUniswapV2FactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  1874  	return _IUniswapV2Factory.Contract.IUniswapV2FactoryTransactor.contract.Transfer(opts)
  1875  }
  1876  
  1877  // Transact invokes the (paid) contract method with params as input values.
  1878  func (_IUniswapV2Factory *IUniswapV2FactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  1879  	return _IUniswapV2Factory.Contract.IUniswapV2FactoryTransactor.contract.Transact(opts, method, params...)
  1880  }
  1881  
  1882  // Call invokes the (constant) contract method with params as input values and
  1883  // sets the output to result. The result type might be a single field for simple
  1884  // returns, a slice of interfaces for anonymous returns and a struct for named
  1885  // returns.
  1886  func (_IUniswapV2Factory *IUniswapV2FactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  1887  	return _IUniswapV2Factory.Contract.contract.Call(opts, result, method, params...)
  1888  }
  1889  
  1890  // Transfer initiates a plain transaction to move funds to the contract, calling
  1891  // its default method if one is available.
  1892  func (_IUniswapV2Factory *IUniswapV2FactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  1893  	return _IUniswapV2Factory.Contract.contract.Transfer(opts)
  1894  }
  1895  
  1896  // Transact invokes the (paid) contract method with params as input values.
  1897  func (_IUniswapV2Factory *IUniswapV2FactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  1898  	return _IUniswapV2Factory.Contract.contract.Transact(opts, method, params...)
  1899  }
  1900  
  1901  // AllPairs is a free data retrieval call binding the contract method 0x1e3dd18b.
  1902  //
  1903  // Solidity: function allPairs(uint256 ) view returns(address pair)
  1904  func (_IUniswapV2Factory *IUniswapV2FactoryCaller) AllPairs(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) {
  1905  	var out []interface{}
  1906  	err := _IUniswapV2Factory.contract.Call(opts, &out, "allPairs", arg0)
  1907  
  1908  	if err != nil {
  1909  		return *new(common.Address), err
  1910  	}
  1911  
  1912  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  1913  
  1914  	return out0, err
  1915  
  1916  }
  1917  
  1918  // AllPairs is a free data retrieval call binding the contract method 0x1e3dd18b.
  1919  //
  1920  // Solidity: function allPairs(uint256 ) view returns(address pair)
  1921  func (_IUniswapV2Factory *IUniswapV2FactorySession) AllPairs(arg0 *big.Int) (common.Address, error) {
  1922  	return _IUniswapV2Factory.Contract.AllPairs(&_IUniswapV2Factory.CallOpts, arg0)
  1923  }
  1924  
  1925  // AllPairs is a free data retrieval call binding the contract method 0x1e3dd18b.
  1926  //
  1927  // Solidity: function allPairs(uint256 ) view returns(address pair)
  1928  func (_IUniswapV2Factory *IUniswapV2FactoryCallerSession) AllPairs(arg0 *big.Int) (common.Address, error) {
  1929  	return _IUniswapV2Factory.Contract.AllPairs(&_IUniswapV2Factory.CallOpts, arg0)
  1930  }
  1931  
  1932  // AllPairsLength is a free data retrieval call binding the contract method 0x574f2ba3.
  1933  //
  1934  // Solidity: function allPairsLength() view returns(uint256)
  1935  func (_IUniswapV2Factory *IUniswapV2FactoryCaller) AllPairsLength(opts *bind.CallOpts) (*big.Int, error) {
  1936  	var out []interface{}
  1937  	err := _IUniswapV2Factory.contract.Call(opts, &out, "allPairsLength")
  1938  
  1939  	if err != nil {
  1940  		return *new(*big.Int), err
  1941  	}
  1942  
  1943  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1944  
  1945  	return out0, err
  1946  
  1947  }
  1948  
  1949  // AllPairsLength is a free data retrieval call binding the contract method 0x574f2ba3.
  1950  //
  1951  // Solidity: function allPairsLength() view returns(uint256)
  1952  func (_IUniswapV2Factory *IUniswapV2FactorySession) AllPairsLength() (*big.Int, error) {
  1953  	return _IUniswapV2Factory.Contract.AllPairsLength(&_IUniswapV2Factory.CallOpts)
  1954  }
  1955  
  1956  // AllPairsLength is a free data retrieval call binding the contract method 0x574f2ba3.
  1957  //
  1958  // Solidity: function allPairsLength() view returns(uint256)
  1959  func (_IUniswapV2Factory *IUniswapV2FactoryCallerSession) AllPairsLength() (*big.Int, error) {
  1960  	return _IUniswapV2Factory.Contract.AllPairsLength(&_IUniswapV2Factory.CallOpts)
  1961  }
  1962  
  1963  // FeeTo is a free data retrieval call binding the contract method 0x017e7e58.
  1964  //
  1965  // Solidity: function feeTo() view returns(address)
  1966  func (_IUniswapV2Factory *IUniswapV2FactoryCaller) FeeTo(opts *bind.CallOpts) (common.Address, error) {
  1967  	var out []interface{}
  1968  	err := _IUniswapV2Factory.contract.Call(opts, &out, "feeTo")
  1969  
  1970  	if err != nil {
  1971  		return *new(common.Address), err
  1972  	}
  1973  
  1974  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  1975  
  1976  	return out0, err
  1977  
  1978  }
  1979  
  1980  // FeeTo is a free data retrieval call binding the contract method 0x017e7e58.
  1981  //
  1982  // Solidity: function feeTo() view returns(address)
  1983  func (_IUniswapV2Factory *IUniswapV2FactorySession) FeeTo() (common.Address, error) {
  1984  	return _IUniswapV2Factory.Contract.FeeTo(&_IUniswapV2Factory.CallOpts)
  1985  }
  1986  
  1987  // FeeTo is a free data retrieval call binding the contract method 0x017e7e58.
  1988  //
  1989  // Solidity: function feeTo() view returns(address)
  1990  func (_IUniswapV2Factory *IUniswapV2FactoryCallerSession) FeeTo() (common.Address, error) {
  1991  	return _IUniswapV2Factory.Contract.FeeTo(&_IUniswapV2Factory.CallOpts)
  1992  }
  1993  
  1994  // FeeToSetter is a free data retrieval call binding the contract method 0x094b7415.
  1995  //
  1996  // Solidity: function feeToSetter() view returns(address)
  1997  func (_IUniswapV2Factory *IUniswapV2FactoryCaller) FeeToSetter(opts *bind.CallOpts) (common.Address, error) {
  1998  	var out []interface{}
  1999  	err := _IUniswapV2Factory.contract.Call(opts, &out, "feeToSetter")
  2000  
  2001  	if err != nil {
  2002  		return *new(common.Address), err
  2003  	}
  2004  
  2005  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  2006  
  2007  	return out0, err
  2008  
  2009  }
  2010  
  2011  // FeeToSetter is a free data retrieval call binding the contract method 0x094b7415.
  2012  //
  2013  // Solidity: function feeToSetter() view returns(address)
  2014  func (_IUniswapV2Factory *IUniswapV2FactorySession) FeeToSetter() (common.Address, error) {
  2015  	return _IUniswapV2Factory.Contract.FeeToSetter(&_IUniswapV2Factory.CallOpts)
  2016  }
  2017  
  2018  // FeeToSetter is a free data retrieval call binding the contract method 0x094b7415.
  2019  //
  2020  // Solidity: function feeToSetter() view returns(address)
  2021  func (_IUniswapV2Factory *IUniswapV2FactoryCallerSession) FeeToSetter() (common.Address, error) {
  2022  	return _IUniswapV2Factory.Contract.FeeToSetter(&_IUniswapV2Factory.CallOpts)
  2023  }
  2024  
  2025  // GetPair is a free data retrieval call binding the contract method 0xe6a43905.
  2026  //
  2027  // Solidity: function getPair(address tokenA, address tokenB) view returns(address pair)
  2028  func (_IUniswapV2Factory *IUniswapV2FactoryCaller) GetPair(opts *bind.CallOpts, tokenA common.Address, tokenB common.Address) (common.Address, error) {
  2029  	var out []interface{}
  2030  	err := _IUniswapV2Factory.contract.Call(opts, &out, "getPair", tokenA, tokenB)
  2031  
  2032  	if err != nil {
  2033  		return *new(common.Address), err
  2034  	}
  2035  
  2036  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  2037  
  2038  	return out0, err
  2039  
  2040  }
  2041  
  2042  // GetPair is a free data retrieval call binding the contract method 0xe6a43905.
  2043  //
  2044  // Solidity: function getPair(address tokenA, address tokenB) view returns(address pair)
  2045  func (_IUniswapV2Factory *IUniswapV2FactorySession) GetPair(tokenA common.Address, tokenB common.Address) (common.Address, error) {
  2046  	return _IUniswapV2Factory.Contract.GetPair(&_IUniswapV2Factory.CallOpts, tokenA, tokenB)
  2047  }
  2048  
  2049  // GetPair is a free data retrieval call binding the contract method 0xe6a43905.
  2050  //
  2051  // Solidity: function getPair(address tokenA, address tokenB) view returns(address pair)
  2052  func (_IUniswapV2Factory *IUniswapV2FactoryCallerSession) GetPair(tokenA common.Address, tokenB common.Address) (common.Address, error) {
  2053  	return _IUniswapV2Factory.Contract.GetPair(&_IUniswapV2Factory.CallOpts, tokenA, tokenB)
  2054  }
  2055  
  2056  // CreatePair is a paid mutator transaction binding the contract method 0xc9c65396.
  2057  //
  2058  // Solidity: function createPair(address tokenA, address tokenB) returns(address pair)
  2059  func (_IUniswapV2Factory *IUniswapV2FactoryTransactor) CreatePair(opts *bind.TransactOpts, tokenA common.Address, tokenB common.Address) (*types.Transaction, error) {
  2060  	return _IUniswapV2Factory.contract.Transact(opts, "createPair", tokenA, tokenB)
  2061  }
  2062  
  2063  // CreatePair is a paid mutator transaction binding the contract method 0xc9c65396.
  2064  //
  2065  // Solidity: function createPair(address tokenA, address tokenB) returns(address pair)
  2066  func (_IUniswapV2Factory *IUniswapV2FactorySession) CreatePair(tokenA common.Address, tokenB common.Address) (*types.Transaction, error) {
  2067  	return _IUniswapV2Factory.Contract.CreatePair(&_IUniswapV2Factory.TransactOpts, tokenA, tokenB)
  2068  }
  2069  
  2070  // CreatePair is a paid mutator transaction binding the contract method 0xc9c65396.
  2071  //
  2072  // Solidity: function createPair(address tokenA, address tokenB) returns(address pair)
  2073  func (_IUniswapV2Factory *IUniswapV2FactoryTransactorSession) CreatePair(tokenA common.Address, tokenB common.Address) (*types.Transaction, error) {
  2074  	return _IUniswapV2Factory.Contract.CreatePair(&_IUniswapV2Factory.TransactOpts, tokenA, tokenB)
  2075  }
  2076  
  2077  // SetFeeTo is a paid mutator transaction binding the contract method 0xf46901ed.
  2078  //
  2079  // Solidity: function setFeeTo(address ) returns()
  2080  func (_IUniswapV2Factory *IUniswapV2FactoryTransactor) SetFeeTo(opts *bind.TransactOpts, arg0 common.Address) (*types.Transaction, error) {
  2081  	return _IUniswapV2Factory.contract.Transact(opts, "setFeeTo", arg0)
  2082  }
  2083  
  2084  // SetFeeTo is a paid mutator transaction binding the contract method 0xf46901ed.
  2085  //
  2086  // Solidity: function setFeeTo(address ) returns()
  2087  func (_IUniswapV2Factory *IUniswapV2FactorySession) SetFeeTo(arg0 common.Address) (*types.Transaction, error) {
  2088  	return _IUniswapV2Factory.Contract.SetFeeTo(&_IUniswapV2Factory.TransactOpts, arg0)
  2089  }
  2090  
  2091  // SetFeeTo is a paid mutator transaction binding the contract method 0xf46901ed.
  2092  //
  2093  // Solidity: function setFeeTo(address ) returns()
  2094  func (_IUniswapV2Factory *IUniswapV2FactoryTransactorSession) SetFeeTo(arg0 common.Address) (*types.Transaction, error) {
  2095  	return _IUniswapV2Factory.Contract.SetFeeTo(&_IUniswapV2Factory.TransactOpts, arg0)
  2096  }
  2097  
  2098  // SetFeeToSetter is a paid mutator transaction binding the contract method 0xa2e74af6.
  2099  //
  2100  // Solidity: function setFeeToSetter(address ) returns()
  2101  func (_IUniswapV2Factory *IUniswapV2FactoryTransactor) SetFeeToSetter(opts *bind.TransactOpts, arg0 common.Address) (*types.Transaction, error) {
  2102  	return _IUniswapV2Factory.contract.Transact(opts, "setFeeToSetter", arg0)
  2103  }
  2104  
  2105  // SetFeeToSetter is a paid mutator transaction binding the contract method 0xa2e74af6.
  2106  //
  2107  // Solidity: function setFeeToSetter(address ) returns()
  2108  func (_IUniswapV2Factory *IUniswapV2FactorySession) SetFeeToSetter(arg0 common.Address) (*types.Transaction, error) {
  2109  	return _IUniswapV2Factory.Contract.SetFeeToSetter(&_IUniswapV2Factory.TransactOpts, arg0)
  2110  }
  2111  
  2112  // SetFeeToSetter is a paid mutator transaction binding the contract method 0xa2e74af6.
  2113  //
  2114  // Solidity: function setFeeToSetter(address ) returns()
  2115  func (_IUniswapV2Factory *IUniswapV2FactoryTransactorSession) SetFeeToSetter(arg0 common.Address) (*types.Transaction, error) {
  2116  	return _IUniswapV2Factory.Contract.SetFeeToSetter(&_IUniswapV2Factory.TransactOpts, arg0)
  2117  }
  2118  
  2119  // IUniswapV2FactoryPairCreatedIterator is returned from FilterPairCreated and is used to iterate over the raw logs and unpacked data for PairCreated events raised by the IUniswapV2Factory contract.
  2120  type IUniswapV2FactoryPairCreatedIterator struct {
  2121  	Event *IUniswapV2FactoryPairCreated // Event containing the contract specifics and raw log
  2122  
  2123  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2124  	event    string              // Event name to use for unpacking event data
  2125  
  2126  	logs chan types.Log        // Log channel receiving the found contract events
  2127  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2128  	done bool                  // Whether the subscription completed delivering logs
  2129  	fail error                 // Occurred error to stop iteration
  2130  }
  2131  
  2132  // Next advances the iterator to the subsequent event, returning whether there
  2133  // are any more events found. In case of a retrieval or parsing error, false is
  2134  // returned and Error() can be queried for the exact failure.
  2135  func (it *IUniswapV2FactoryPairCreatedIterator) Next() bool {
  2136  	// If the iterator failed, stop iterating
  2137  	if it.fail != nil {
  2138  		return false
  2139  	}
  2140  	// If the iterator completed, deliver directly whatever's available
  2141  	if it.done {
  2142  		select {
  2143  		case log := <-it.logs:
  2144  			it.Event = new(IUniswapV2FactoryPairCreated)
  2145  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2146  				it.fail = err
  2147  				return false
  2148  			}
  2149  			it.Event.Raw = log
  2150  			return true
  2151  
  2152  		default:
  2153  			return false
  2154  		}
  2155  	}
  2156  	// Iterator still in progress, wait for either a data or an error event
  2157  	select {
  2158  	case log := <-it.logs:
  2159  		it.Event = new(IUniswapV2FactoryPairCreated)
  2160  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2161  			it.fail = err
  2162  			return false
  2163  		}
  2164  		it.Event.Raw = log
  2165  		return true
  2166  
  2167  	case err := <-it.sub.Err():
  2168  		it.done = true
  2169  		it.fail = err
  2170  		return it.Next()
  2171  	}
  2172  }
  2173  
  2174  // Error returns any retrieval or parsing error occurred during filtering.
  2175  func (it *IUniswapV2FactoryPairCreatedIterator) Error() error {
  2176  	return it.fail
  2177  }
  2178  
  2179  // Close terminates the iteration process, releasing any pending underlying
  2180  // resources.
  2181  func (it *IUniswapV2FactoryPairCreatedIterator) Close() error {
  2182  	it.sub.Unsubscribe()
  2183  	return nil
  2184  }
  2185  
  2186  // IUniswapV2FactoryPairCreated represents a PairCreated event raised by the IUniswapV2Factory contract.
  2187  type IUniswapV2FactoryPairCreated struct {
  2188  	Token0 common.Address
  2189  	Token1 common.Address
  2190  	Pair   common.Address
  2191  	Arg3   *big.Int
  2192  	Raw    types.Log // Blockchain specific contextual infos
  2193  }
  2194  
  2195  // FilterPairCreated is a free log retrieval operation binding the contract event 0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9.
  2196  //
  2197  // Solidity: event PairCreated(address indexed token0, address indexed token1, address pair, uint256 arg3)
  2198  func (_IUniswapV2Factory *IUniswapV2FactoryFilterer) FilterPairCreated(opts *bind.FilterOpts, token0 []common.Address, token1 []common.Address) (*IUniswapV2FactoryPairCreatedIterator, error) {
  2199  
  2200  	var token0Rule []interface{}
  2201  	for _, token0Item := range token0 {
  2202  		token0Rule = append(token0Rule, token0Item)
  2203  	}
  2204  	var token1Rule []interface{}
  2205  	for _, token1Item := range token1 {
  2206  		token1Rule = append(token1Rule, token1Item)
  2207  	}
  2208  
  2209  	logs, sub, err := _IUniswapV2Factory.contract.FilterLogs(opts, "PairCreated", token0Rule, token1Rule)
  2210  	if err != nil {
  2211  		return nil, err
  2212  	}
  2213  	return &IUniswapV2FactoryPairCreatedIterator{contract: _IUniswapV2Factory.contract, event: "PairCreated", logs: logs, sub: sub}, nil
  2214  }
  2215  
  2216  // WatchPairCreated is a free log subscription operation binding the contract event 0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9.
  2217  //
  2218  // Solidity: event PairCreated(address indexed token0, address indexed token1, address pair, uint256 arg3)
  2219  func (_IUniswapV2Factory *IUniswapV2FactoryFilterer) WatchPairCreated(opts *bind.WatchOpts, sink chan<- *IUniswapV2FactoryPairCreated, token0 []common.Address, token1 []common.Address) (event.Subscription, error) {
  2220  
  2221  	var token0Rule []interface{}
  2222  	for _, token0Item := range token0 {
  2223  		token0Rule = append(token0Rule, token0Item)
  2224  	}
  2225  	var token1Rule []interface{}
  2226  	for _, token1Item := range token1 {
  2227  		token1Rule = append(token1Rule, token1Item)
  2228  	}
  2229  
  2230  	logs, sub, err := _IUniswapV2Factory.contract.WatchLogs(opts, "PairCreated", token0Rule, token1Rule)
  2231  	if err != nil {
  2232  		return nil, err
  2233  	}
  2234  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2235  		defer sub.Unsubscribe()
  2236  		for {
  2237  			select {
  2238  			case log := <-logs:
  2239  				// New log arrived, parse the event and forward to the user
  2240  				event := new(IUniswapV2FactoryPairCreated)
  2241  				if err := _IUniswapV2Factory.contract.UnpackLog(event, "PairCreated", log); err != nil {
  2242  					return err
  2243  				}
  2244  				event.Raw = log
  2245  
  2246  				select {
  2247  				case sink <- event:
  2248  				case err := <-sub.Err():
  2249  					return err
  2250  				case <-quit:
  2251  					return nil
  2252  				}
  2253  			case err := <-sub.Err():
  2254  				return err
  2255  			case <-quit:
  2256  				return nil
  2257  			}
  2258  		}
  2259  	}), nil
  2260  }
  2261  
  2262  // ParsePairCreated is a log parse operation binding the contract event 0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9.
  2263  //
  2264  // Solidity: event PairCreated(address indexed token0, address indexed token1, address pair, uint256 arg3)
  2265  func (_IUniswapV2Factory *IUniswapV2FactoryFilterer) ParsePairCreated(log types.Log) (*IUniswapV2FactoryPairCreated, error) {
  2266  	event := new(IUniswapV2FactoryPairCreated)
  2267  	if err := _IUniswapV2Factory.contract.UnpackLog(event, "PairCreated", log); err != nil {
  2268  		return nil, err
  2269  	}
  2270  	return event, nil
  2271  }
  2272  
  2273  // IUniswapV2PairABI is the input ABI used to generate the binding from.
  2274  const IUniswapV2PairABI = "[{\"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\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"}],\"name\":\"Sync\",\"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\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MINIMUM_LIQUIDITY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"blockTimestampLast\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"kLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"price0CumulativeLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"price1CumulativeLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"skim\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"sync\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  2275  
  2276  // IUniswapV2PairFuncSigs maps the 4-byte function signature to its string representation.
  2277  var IUniswapV2PairFuncSigs = map[string]string{
  2278  	"3644e515": "DOMAIN_SEPARATOR()",
  2279  	"ba9a7a56": "MINIMUM_LIQUIDITY()",
  2280  	"30adf81f": "PERMIT_TYPEHASH()",
  2281  	"dd62ed3e": "allowance(address,address)",
  2282  	"095ea7b3": "approve(address,uint256)",
  2283  	"70a08231": "balanceOf(address)",
  2284  	"89afcb44": "burn(address)",
  2285  	"313ce567": "decimals()",
  2286  	"c45a0155": "factory()",
  2287  	"0902f1ac": "getReserves()",
  2288  	"485cc955": "initialize(address,address)",
  2289  	"7464fc3d": "kLast()",
  2290  	"6a627842": "mint(address)",
  2291  	"06fdde03": "name()",
  2292  	"7ecebe00": "nonces(address)",
  2293  	"d505accf": "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)",
  2294  	"5909c0d5": "price0CumulativeLast()",
  2295  	"5a3d5493": "price1CumulativeLast()",
  2296  	"bc25cf77": "skim(address)",
  2297  	"022c0d9f": "swap(uint256,uint256,address,bytes)",
  2298  	"95d89b41": "symbol()",
  2299  	"fff6cae9": "sync()",
  2300  	"0dfe1681": "token0()",
  2301  	"d21220a7": "token1()",
  2302  	"18160ddd": "totalSupply()",
  2303  	"a9059cbb": "transfer(address,uint256)",
  2304  	"23b872dd": "transferFrom(address,address,uint256)",
  2305  }
  2306  
  2307  // IUniswapV2Pair is an auto generated Go binding around an Ethereum contract.
  2308  type IUniswapV2Pair struct {
  2309  	IUniswapV2PairCaller     // Read-only binding to the contract
  2310  	IUniswapV2PairTransactor // Write-only binding to the contract
  2311  	IUniswapV2PairFilterer   // Log filterer for contract events
  2312  }
  2313  
  2314  // IUniswapV2PairCaller is an auto generated read-only Go binding around an Ethereum contract.
  2315  type IUniswapV2PairCaller struct {
  2316  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2317  }
  2318  
  2319  // IUniswapV2PairTransactor is an auto generated write-only Go binding around an Ethereum contract.
  2320  type IUniswapV2PairTransactor struct {
  2321  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2322  }
  2323  
  2324  // IUniswapV2PairFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  2325  type IUniswapV2PairFilterer struct {
  2326  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2327  }
  2328  
  2329  // IUniswapV2PairSession is an auto generated Go binding around an Ethereum contract,
  2330  // with pre-set call and transact options.
  2331  type IUniswapV2PairSession struct {
  2332  	Contract     *IUniswapV2Pair   // Generic contract binding to set the session for
  2333  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  2334  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  2335  }
  2336  
  2337  // IUniswapV2PairCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  2338  // with pre-set call options.
  2339  type IUniswapV2PairCallerSession struct {
  2340  	Contract *IUniswapV2PairCaller // Generic contract caller binding to set the session for
  2341  	CallOpts bind.CallOpts         // Call options to use throughout this session
  2342  }
  2343  
  2344  // IUniswapV2PairTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  2345  // with pre-set transact options.
  2346  type IUniswapV2PairTransactorSession struct {
  2347  	Contract     *IUniswapV2PairTransactor // Generic contract transactor binding to set the session for
  2348  	TransactOpts bind.TransactOpts         // Transaction auth options to use throughout this session
  2349  }
  2350  
  2351  // IUniswapV2PairRaw is an auto generated low-level Go binding around an Ethereum contract.
  2352  type IUniswapV2PairRaw struct {
  2353  	Contract *IUniswapV2Pair // Generic contract binding to access the raw methods on
  2354  }
  2355  
  2356  // IUniswapV2PairCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  2357  type IUniswapV2PairCallerRaw struct {
  2358  	Contract *IUniswapV2PairCaller // Generic read-only contract binding to access the raw methods on
  2359  }
  2360  
  2361  // IUniswapV2PairTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  2362  type IUniswapV2PairTransactorRaw struct {
  2363  	Contract *IUniswapV2PairTransactor // Generic write-only contract binding to access the raw methods on
  2364  }
  2365  
  2366  // NewIUniswapV2Pair creates a new instance of IUniswapV2Pair, bound to a specific deployed contract.
  2367  func NewIUniswapV2Pair(address common.Address, backend bind.ContractBackend) (*IUniswapV2Pair, error) {
  2368  	contract, err := bindIUniswapV2Pair(address, backend, backend, backend)
  2369  	if err != nil {
  2370  		return nil, err
  2371  	}
  2372  	return &IUniswapV2Pair{IUniswapV2PairCaller: IUniswapV2PairCaller{contract: contract}, IUniswapV2PairTransactor: IUniswapV2PairTransactor{contract: contract}, IUniswapV2PairFilterer: IUniswapV2PairFilterer{contract: contract}}, nil
  2373  }
  2374  
  2375  // NewIUniswapV2PairCaller creates a new read-only instance of IUniswapV2Pair, bound to a specific deployed contract.
  2376  func NewIUniswapV2PairCaller(address common.Address, caller bind.ContractCaller) (*IUniswapV2PairCaller, error) {
  2377  	contract, err := bindIUniswapV2Pair(address, caller, nil, nil)
  2378  	if err != nil {
  2379  		return nil, err
  2380  	}
  2381  	return &IUniswapV2PairCaller{contract: contract}, nil
  2382  }
  2383  
  2384  // NewIUniswapV2PairTransactor creates a new write-only instance of IUniswapV2Pair, bound to a specific deployed contract.
  2385  func NewIUniswapV2PairTransactor(address common.Address, transactor bind.ContractTransactor) (*IUniswapV2PairTransactor, error) {
  2386  	contract, err := bindIUniswapV2Pair(address, nil, transactor, nil)
  2387  	if err != nil {
  2388  		return nil, err
  2389  	}
  2390  	return &IUniswapV2PairTransactor{contract: contract}, nil
  2391  }
  2392  
  2393  // NewIUniswapV2PairFilterer creates a new log filterer instance of IUniswapV2Pair, bound to a specific deployed contract.
  2394  func NewIUniswapV2PairFilterer(address common.Address, filterer bind.ContractFilterer) (*IUniswapV2PairFilterer, error) {
  2395  	contract, err := bindIUniswapV2Pair(address, nil, nil, filterer)
  2396  	if err != nil {
  2397  		return nil, err
  2398  	}
  2399  	return &IUniswapV2PairFilterer{contract: contract}, nil
  2400  }
  2401  
  2402  // bindIUniswapV2Pair binds a generic wrapper to an already deployed contract.
  2403  func bindIUniswapV2Pair(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  2404  	parsed, err := abi.JSON(strings.NewReader(IUniswapV2PairABI))
  2405  	if err != nil {
  2406  		return nil, err
  2407  	}
  2408  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  2409  }
  2410  
  2411  // Call invokes the (constant) contract method with params as input values and
  2412  // sets the output to result. The result type might be a single field for simple
  2413  // returns, a slice of interfaces for anonymous returns and a struct for named
  2414  // returns.
  2415  func (_IUniswapV2Pair *IUniswapV2PairRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  2416  	return _IUniswapV2Pair.Contract.IUniswapV2PairCaller.contract.Call(opts, result, method, params...)
  2417  }
  2418  
  2419  // Transfer initiates a plain transaction to move funds to the contract, calling
  2420  // its default method if one is available.
  2421  func (_IUniswapV2Pair *IUniswapV2PairRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  2422  	return _IUniswapV2Pair.Contract.IUniswapV2PairTransactor.contract.Transfer(opts)
  2423  }
  2424  
  2425  // Transact invokes the (paid) contract method with params as input values.
  2426  func (_IUniswapV2Pair *IUniswapV2PairRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  2427  	return _IUniswapV2Pair.Contract.IUniswapV2PairTransactor.contract.Transact(opts, method, params...)
  2428  }
  2429  
  2430  // Call invokes the (constant) contract method with params as input values and
  2431  // sets the output to result. The result type might be a single field for simple
  2432  // returns, a slice of interfaces for anonymous returns and a struct for named
  2433  // returns.
  2434  func (_IUniswapV2Pair *IUniswapV2PairCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  2435  	return _IUniswapV2Pair.Contract.contract.Call(opts, result, method, params...)
  2436  }
  2437  
  2438  // Transfer initiates a plain transaction to move funds to the contract, calling
  2439  // its default method if one is available.
  2440  func (_IUniswapV2Pair *IUniswapV2PairTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  2441  	return _IUniswapV2Pair.Contract.contract.Transfer(opts)
  2442  }
  2443  
  2444  // Transact invokes the (paid) contract method with params as input values.
  2445  func (_IUniswapV2Pair *IUniswapV2PairTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  2446  	return _IUniswapV2Pair.Contract.contract.Transact(opts, method, params...)
  2447  }
  2448  
  2449  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  2450  //
  2451  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  2452  func (_IUniswapV2Pair *IUniswapV2PairCaller) DOMAINSEPARATOR(opts *bind.CallOpts) ([32]byte, error) {
  2453  	var out []interface{}
  2454  	err := _IUniswapV2Pair.contract.Call(opts, &out, "DOMAIN_SEPARATOR")
  2455  
  2456  	if err != nil {
  2457  		return *new([32]byte), err
  2458  	}
  2459  
  2460  	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
  2461  
  2462  	return out0, err
  2463  
  2464  }
  2465  
  2466  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  2467  //
  2468  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  2469  func (_IUniswapV2Pair *IUniswapV2PairSession) DOMAINSEPARATOR() ([32]byte, error) {
  2470  	return _IUniswapV2Pair.Contract.DOMAINSEPARATOR(&_IUniswapV2Pair.CallOpts)
  2471  }
  2472  
  2473  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  2474  //
  2475  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  2476  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) DOMAINSEPARATOR() ([32]byte, error) {
  2477  	return _IUniswapV2Pair.Contract.DOMAINSEPARATOR(&_IUniswapV2Pair.CallOpts)
  2478  }
  2479  
  2480  // MINIMUMLIQUIDITY is a free data retrieval call binding the contract method 0xba9a7a56.
  2481  //
  2482  // Solidity: function MINIMUM_LIQUIDITY() pure returns(uint256)
  2483  func (_IUniswapV2Pair *IUniswapV2PairCaller) MINIMUMLIQUIDITY(opts *bind.CallOpts) (*big.Int, error) {
  2484  	var out []interface{}
  2485  	err := _IUniswapV2Pair.contract.Call(opts, &out, "MINIMUM_LIQUIDITY")
  2486  
  2487  	if err != nil {
  2488  		return *new(*big.Int), err
  2489  	}
  2490  
  2491  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2492  
  2493  	return out0, err
  2494  
  2495  }
  2496  
  2497  // MINIMUMLIQUIDITY is a free data retrieval call binding the contract method 0xba9a7a56.
  2498  //
  2499  // Solidity: function MINIMUM_LIQUIDITY() pure returns(uint256)
  2500  func (_IUniswapV2Pair *IUniswapV2PairSession) MINIMUMLIQUIDITY() (*big.Int, error) {
  2501  	return _IUniswapV2Pair.Contract.MINIMUMLIQUIDITY(&_IUniswapV2Pair.CallOpts)
  2502  }
  2503  
  2504  // MINIMUMLIQUIDITY is a free data retrieval call binding the contract method 0xba9a7a56.
  2505  //
  2506  // Solidity: function MINIMUM_LIQUIDITY() pure returns(uint256)
  2507  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) MINIMUMLIQUIDITY() (*big.Int, error) {
  2508  	return _IUniswapV2Pair.Contract.MINIMUMLIQUIDITY(&_IUniswapV2Pair.CallOpts)
  2509  }
  2510  
  2511  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  2512  //
  2513  // Solidity: function PERMIT_TYPEHASH() pure returns(bytes32)
  2514  func (_IUniswapV2Pair *IUniswapV2PairCaller) PERMITTYPEHASH(opts *bind.CallOpts) ([32]byte, error) {
  2515  	var out []interface{}
  2516  	err := _IUniswapV2Pair.contract.Call(opts, &out, "PERMIT_TYPEHASH")
  2517  
  2518  	if err != nil {
  2519  		return *new([32]byte), err
  2520  	}
  2521  
  2522  	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
  2523  
  2524  	return out0, err
  2525  
  2526  }
  2527  
  2528  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  2529  //
  2530  // Solidity: function PERMIT_TYPEHASH() pure returns(bytes32)
  2531  func (_IUniswapV2Pair *IUniswapV2PairSession) PERMITTYPEHASH() ([32]byte, error) {
  2532  	return _IUniswapV2Pair.Contract.PERMITTYPEHASH(&_IUniswapV2Pair.CallOpts)
  2533  }
  2534  
  2535  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  2536  //
  2537  // Solidity: function PERMIT_TYPEHASH() pure returns(bytes32)
  2538  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) PERMITTYPEHASH() ([32]byte, error) {
  2539  	return _IUniswapV2Pair.Contract.PERMITTYPEHASH(&_IUniswapV2Pair.CallOpts)
  2540  }
  2541  
  2542  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  2543  //
  2544  // Solidity: function allowance(address owner, address spender) view returns(uint256)
  2545  func (_IUniswapV2Pair *IUniswapV2PairCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
  2546  	var out []interface{}
  2547  	err := _IUniswapV2Pair.contract.Call(opts, &out, "allowance", owner, spender)
  2548  
  2549  	if err != nil {
  2550  		return *new(*big.Int), err
  2551  	}
  2552  
  2553  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2554  
  2555  	return out0, err
  2556  
  2557  }
  2558  
  2559  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  2560  //
  2561  // Solidity: function allowance(address owner, address spender) view returns(uint256)
  2562  func (_IUniswapV2Pair *IUniswapV2PairSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
  2563  	return _IUniswapV2Pair.Contract.Allowance(&_IUniswapV2Pair.CallOpts, owner, spender)
  2564  }
  2565  
  2566  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  2567  //
  2568  // Solidity: function allowance(address owner, address spender) view returns(uint256)
  2569  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
  2570  	return _IUniswapV2Pair.Contract.Allowance(&_IUniswapV2Pair.CallOpts, owner, spender)
  2571  }
  2572  
  2573  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  2574  //
  2575  // Solidity: function balanceOf(address owner) view returns(uint256)
  2576  func (_IUniswapV2Pair *IUniswapV2PairCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  2577  	var out []interface{}
  2578  	err := _IUniswapV2Pair.contract.Call(opts, &out, "balanceOf", owner)
  2579  
  2580  	if err != nil {
  2581  		return *new(*big.Int), err
  2582  	}
  2583  
  2584  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2585  
  2586  	return out0, err
  2587  
  2588  }
  2589  
  2590  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  2591  //
  2592  // Solidity: function balanceOf(address owner) view returns(uint256)
  2593  func (_IUniswapV2Pair *IUniswapV2PairSession) BalanceOf(owner common.Address) (*big.Int, error) {
  2594  	return _IUniswapV2Pair.Contract.BalanceOf(&_IUniswapV2Pair.CallOpts, owner)
  2595  }
  2596  
  2597  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  2598  //
  2599  // Solidity: function balanceOf(address owner) view returns(uint256)
  2600  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  2601  	return _IUniswapV2Pair.Contract.BalanceOf(&_IUniswapV2Pair.CallOpts, owner)
  2602  }
  2603  
  2604  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  2605  //
  2606  // Solidity: function decimals() pure returns(uint8)
  2607  func (_IUniswapV2Pair *IUniswapV2PairCaller) Decimals(opts *bind.CallOpts) (uint8, error) {
  2608  	var out []interface{}
  2609  	err := _IUniswapV2Pair.contract.Call(opts, &out, "decimals")
  2610  
  2611  	if err != nil {
  2612  		return *new(uint8), err
  2613  	}
  2614  
  2615  	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
  2616  
  2617  	return out0, err
  2618  
  2619  }
  2620  
  2621  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  2622  //
  2623  // Solidity: function decimals() pure returns(uint8)
  2624  func (_IUniswapV2Pair *IUniswapV2PairSession) Decimals() (uint8, error) {
  2625  	return _IUniswapV2Pair.Contract.Decimals(&_IUniswapV2Pair.CallOpts)
  2626  }
  2627  
  2628  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  2629  //
  2630  // Solidity: function decimals() pure returns(uint8)
  2631  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) Decimals() (uint8, error) {
  2632  	return _IUniswapV2Pair.Contract.Decimals(&_IUniswapV2Pair.CallOpts)
  2633  }
  2634  
  2635  // Factory is a free data retrieval call binding the contract method 0xc45a0155.
  2636  //
  2637  // Solidity: function factory() view returns(address)
  2638  func (_IUniswapV2Pair *IUniswapV2PairCaller) Factory(opts *bind.CallOpts) (common.Address, error) {
  2639  	var out []interface{}
  2640  	err := _IUniswapV2Pair.contract.Call(opts, &out, "factory")
  2641  
  2642  	if err != nil {
  2643  		return *new(common.Address), err
  2644  	}
  2645  
  2646  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  2647  
  2648  	return out0, err
  2649  
  2650  }
  2651  
  2652  // Factory is a free data retrieval call binding the contract method 0xc45a0155.
  2653  //
  2654  // Solidity: function factory() view returns(address)
  2655  func (_IUniswapV2Pair *IUniswapV2PairSession) Factory() (common.Address, error) {
  2656  	return _IUniswapV2Pair.Contract.Factory(&_IUniswapV2Pair.CallOpts)
  2657  }
  2658  
  2659  // Factory is a free data retrieval call binding the contract method 0xc45a0155.
  2660  //
  2661  // Solidity: function factory() view returns(address)
  2662  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) Factory() (common.Address, error) {
  2663  	return _IUniswapV2Pair.Contract.Factory(&_IUniswapV2Pair.CallOpts)
  2664  }
  2665  
  2666  // GetReserves is a free data retrieval call binding the contract method 0x0902f1ac.
  2667  //
  2668  // Solidity: function getReserves() view returns(uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast)
  2669  func (_IUniswapV2Pair *IUniswapV2PairCaller) GetReserves(opts *bind.CallOpts) (struct {
  2670  	Reserve0           *big.Int
  2671  	Reserve1           *big.Int
  2672  	BlockTimestampLast uint32
  2673  }, error) {
  2674  	var out []interface{}
  2675  	err := _IUniswapV2Pair.contract.Call(opts, &out, "getReserves")
  2676  
  2677  	outstruct := new(struct {
  2678  		Reserve0           *big.Int
  2679  		Reserve1           *big.Int
  2680  		BlockTimestampLast uint32
  2681  	})
  2682  
  2683  	outstruct.Reserve0 = out[0].(*big.Int)
  2684  	outstruct.Reserve1 = out[1].(*big.Int)
  2685  	outstruct.BlockTimestampLast = out[2].(uint32)
  2686  
  2687  	return *outstruct, err
  2688  
  2689  }
  2690  
  2691  // GetReserves is a free data retrieval call binding the contract method 0x0902f1ac.
  2692  //
  2693  // Solidity: function getReserves() view returns(uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast)
  2694  func (_IUniswapV2Pair *IUniswapV2PairSession) GetReserves() (struct {
  2695  	Reserve0           *big.Int
  2696  	Reserve1           *big.Int
  2697  	BlockTimestampLast uint32
  2698  }, error) {
  2699  	return _IUniswapV2Pair.Contract.GetReserves(&_IUniswapV2Pair.CallOpts)
  2700  }
  2701  
  2702  // GetReserves is a free data retrieval call binding the contract method 0x0902f1ac.
  2703  //
  2704  // Solidity: function getReserves() view returns(uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast)
  2705  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) GetReserves() (struct {
  2706  	Reserve0           *big.Int
  2707  	Reserve1           *big.Int
  2708  	BlockTimestampLast uint32
  2709  }, error) {
  2710  	return _IUniswapV2Pair.Contract.GetReserves(&_IUniswapV2Pair.CallOpts)
  2711  }
  2712  
  2713  // KLast is a free data retrieval call binding the contract method 0x7464fc3d.
  2714  //
  2715  // Solidity: function kLast() view returns(uint256)
  2716  func (_IUniswapV2Pair *IUniswapV2PairCaller) KLast(opts *bind.CallOpts) (*big.Int, error) {
  2717  	var out []interface{}
  2718  	err := _IUniswapV2Pair.contract.Call(opts, &out, "kLast")
  2719  
  2720  	if err != nil {
  2721  		return *new(*big.Int), err
  2722  	}
  2723  
  2724  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2725  
  2726  	return out0, err
  2727  
  2728  }
  2729  
  2730  // KLast is a free data retrieval call binding the contract method 0x7464fc3d.
  2731  //
  2732  // Solidity: function kLast() view returns(uint256)
  2733  func (_IUniswapV2Pair *IUniswapV2PairSession) KLast() (*big.Int, error) {
  2734  	return _IUniswapV2Pair.Contract.KLast(&_IUniswapV2Pair.CallOpts)
  2735  }
  2736  
  2737  // KLast is a free data retrieval call binding the contract method 0x7464fc3d.
  2738  //
  2739  // Solidity: function kLast() view returns(uint256)
  2740  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) KLast() (*big.Int, error) {
  2741  	return _IUniswapV2Pair.Contract.KLast(&_IUniswapV2Pair.CallOpts)
  2742  }
  2743  
  2744  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  2745  //
  2746  // Solidity: function name() pure returns(string)
  2747  func (_IUniswapV2Pair *IUniswapV2PairCaller) Name(opts *bind.CallOpts) (string, error) {
  2748  	var out []interface{}
  2749  	err := _IUniswapV2Pair.contract.Call(opts, &out, "name")
  2750  
  2751  	if err != nil {
  2752  		return *new(string), err
  2753  	}
  2754  
  2755  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  2756  
  2757  	return out0, err
  2758  
  2759  }
  2760  
  2761  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  2762  //
  2763  // Solidity: function name() pure returns(string)
  2764  func (_IUniswapV2Pair *IUniswapV2PairSession) Name() (string, error) {
  2765  	return _IUniswapV2Pair.Contract.Name(&_IUniswapV2Pair.CallOpts)
  2766  }
  2767  
  2768  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  2769  //
  2770  // Solidity: function name() pure returns(string)
  2771  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) Name() (string, error) {
  2772  	return _IUniswapV2Pair.Contract.Name(&_IUniswapV2Pair.CallOpts)
  2773  }
  2774  
  2775  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  2776  //
  2777  // Solidity: function nonces(address owner) view returns(uint256)
  2778  func (_IUniswapV2Pair *IUniswapV2PairCaller) Nonces(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  2779  	var out []interface{}
  2780  	err := _IUniswapV2Pair.contract.Call(opts, &out, "nonces", owner)
  2781  
  2782  	if err != nil {
  2783  		return *new(*big.Int), err
  2784  	}
  2785  
  2786  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2787  
  2788  	return out0, err
  2789  
  2790  }
  2791  
  2792  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  2793  //
  2794  // Solidity: function nonces(address owner) view returns(uint256)
  2795  func (_IUniswapV2Pair *IUniswapV2PairSession) Nonces(owner common.Address) (*big.Int, error) {
  2796  	return _IUniswapV2Pair.Contract.Nonces(&_IUniswapV2Pair.CallOpts, owner)
  2797  }
  2798  
  2799  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  2800  //
  2801  // Solidity: function nonces(address owner) view returns(uint256)
  2802  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) Nonces(owner common.Address) (*big.Int, error) {
  2803  	return _IUniswapV2Pair.Contract.Nonces(&_IUniswapV2Pair.CallOpts, owner)
  2804  }
  2805  
  2806  // Price0CumulativeLast is a free data retrieval call binding the contract method 0x5909c0d5.
  2807  //
  2808  // Solidity: function price0CumulativeLast() view returns(uint256)
  2809  func (_IUniswapV2Pair *IUniswapV2PairCaller) Price0CumulativeLast(opts *bind.CallOpts) (*big.Int, error) {
  2810  	var out []interface{}
  2811  	err := _IUniswapV2Pair.contract.Call(opts, &out, "price0CumulativeLast")
  2812  
  2813  	if err != nil {
  2814  		return *new(*big.Int), err
  2815  	}
  2816  
  2817  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2818  
  2819  	return out0, err
  2820  
  2821  }
  2822  
  2823  // Price0CumulativeLast is a free data retrieval call binding the contract method 0x5909c0d5.
  2824  //
  2825  // Solidity: function price0CumulativeLast() view returns(uint256)
  2826  func (_IUniswapV2Pair *IUniswapV2PairSession) Price0CumulativeLast() (*big.Int, error) {
  2827  	return _IUniswapV2Pair.Contract.Price0CumulativeLast(&_IUniswapV2Pair.CallOpts)
  2828  }
  2829  
  2830  // Price0CumulativeLast is a free data retrieval call binding the contract method 0x5909c0d5.
  2831  //
  2832  // Solidity: function price0CumulativeLast() view returns(uint256)
  2833  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) Price0CumulativeLast() (*big.Int, error) {
  2834  	return _IUniswapV2Pair.Contract.Price0CumulativeLast(&_IUniswapV2Pair.CallOpts)
  2835  }
  2836  
  2837  // Price1CumulativeLast is a free data retrieval call binding the contract method 0x5a3d5493.
  2838  //
  2839  // Solidity: function price1CumulativeLast() view returns(uint256)
  2840  func (_IUniswapV2Pair *IUniswapV2PairCaller) Price1CumulativeLast(opts *bind.CallOpts) (*big.Int, error) {
  2841  	var out []interface{}
  2842  	err := _IUniswapV2Pair.contract.Call(opts, &out, "price1CumulativeLast")
  2843  
  2844  	if err != nil {
  2845  		return *new(*big.Int), err
  2846  	}
  2847  
  2848  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2849  
  2850  	return out0, err
  2851  
  2852  }
  2853  
  2854  // Price1CumulativeLast is a free data retrieval call binding the contract method 0x5a3d5493.
  2855  //
  2856  // Solidity: function price1CumulativeLast() view returns(uint256)
  2857  func (_IUniswapV2Pair *IUniswapV2PairSession) Price1CumulativeLast() (*big.Int, error) {
  2858  	return _IUniswapV2Pair.Contract.Price1CumulativeLast(&_IUniswapV2Pair.CallOpts)
  2859  }
  2860  
  2861  // Price1CumulativeLast is a free data retrieval call binding the contract method 0x5a3d5493.
  2862  //
  2863  // Solidity: function price1CumulativeLast() view returns(uint256)
  2864  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) Price1CumulativeLast() (*big.Int, error) {
  2865  	return _IUniswapV2Pair.Contract.Price1CumulativeLast(&_IUniswapV2Pair.CallOpts)
  2866  }
  2867  
  2868  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  2869  //
  2870  // Solidity: function symbol() pure returns(string)
  2871  func (_IUniswapV2Pair *IUniswapV2PairCaller) Symbol(opts *bind.CallOpts) (string, error) {
  2872  	var out []interface{}
  2873  	err := _IUniswapV2Pair.contract.Call(opts, &out, "symbol")
  2874  
  2875  	if err != nil {
  2876  		return *new(string), err
  2877  	}
  2878  
  2879  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  2880  
  2881  	return out0, err
  2882  
  2883  }
  2884  
  2885  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  2886  //
  2887  // Solidity: function symbol() pure returns(string)
  2888  func (_IUniswapV2Pair *IUniswapV2PairSession) Symbol() (string, error) {
  2889  	return _IUniswapV2Pair.Contract.Symbol(&_IUniswapV2Pair.CallOpts)
  2890  }
  2891  
  2892  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  2893  //
  2894  // Solidity: function symbol() pure returns(string)
  2895  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) Symbol() (string, error) {
  2896  	return _IUniswapV2Pair.Contract.Symbol(&_IUniswapV2Pair.CallOpts)
  2897  }
  2898  
  2899  // Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
  2900  //
  2901  // Solidity: function token0() view returns(address)
  2902  func (_IUniswapV2Pair *IUniswapV2PairCaller) Token0(opts *bind.CallOpts) (common.Address, error) {
  2903  	var out []interface{}
  2904  	err := _IUniswapV2Pair.contract.Call(opts, &out, "token0")
  2905  
  2906  	if err != nil {
  2907  		return *new(common.Address), err
  2908  	}
  2909  
  2910  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  2911  
  2912  	return out0, err
  2913  
  2914  }
  2915  
  2916  // Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
  2917  //
  2918  // Solidity: function token0() view returns(address)
  2919  func (_IUniswapV2Pair *IUniswapV2PairSession) Token0() (common.Address, error) {
  2920  	return _IUniswapV2Pair.Contract.Token0(&_IUniswapV2Pair.CallOpts)
  2921  }
  2922  
  2923  // Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
  2924  //
  2925  // Solidity: function token0() view returns(address)
  2926  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) Token0() (common.Address, error) {
  2927  	return _IUniswapV2Pair.Contract.Token0(&_IUniswapV2Pair.CallOpts)
  2928  }
  2929  
  2930  // Token1 is a free data retrieval call binding the contract method 0xd21220a7.
  2931  //
  2932  // Solidity: function token1() view returns(address)
  2933  func (_IUniswapV2Pair *IUniswapV2PairCaller) Token1(opts *bind.CallOpts) (common.Address, error) {
  2934  	var out []interface{}
  2935  	err := _IUniswapV2Pair.contract.Call(opts, &out, "token1")
  2936  
  2937  	if err != nil {
  2938  		return *new(common.Address), err
  2939  	}
  2940  
  2941  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  2942  
  2943  	return out0, err
  2944  
  2945  }
  2946  
  2947  // Token1 is a free data retrieval call binding the contract method 0xd21220a7.
  2948  //
  2949  // Solidity: function token1() view returns(address)
  2950  func (_IUniswapV2Pair *IUniswapV2PairSession) Token1() (common.Address, error) {
  2951  	return _IUniswapV2Pair.Contract.Token1(&_IUniswapV2Pair.CallOpts)
  2952  }
  2953  
  2954  // Token1 is a free data retrieval call binding the contract method 0xd21220a7.
  2955  //
  2956  // Solidity: function token1() view returns(address)
  2957  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) Token1() (common.Address, error) {
  2958  	return _IUniswapV2Pair.Contract.Token1(&_IUniswapV2Pair.CallOpts)
  2959  }
  2960  
  2961  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  2962  //
  2963  // Solidity: function totalSupply() view returns(uint256)
  2964  func (_IUniswapV2Pair *IUniswapV2PairCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  2965  	var out []interface{}
  2966  	err := _IUniswapV2Pair.contract.Call(opts, &out, "totalSupply")
  2967  
  2968  	if err != nil {
  2969  		return *new(*big.Int), err
  2970  	}
  2971  
  2972  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2973  
  2974  	return out0, err
  2975  
  2976  }
  2977  
  2978  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  2979  //
  2980  // Solidity: function totalSupply() view returns(uint256)
  2981  func (_IUniswapV2Pair *IUniswapV2PairSession) TotalSupply() (*big.Int, error) {
  2982  	return _IUniswapV2Pair.Contract.TotalSupply(&_IUniswapV2Pair.CallOpts)
  2983  }
  2984  
  2985  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  2986  //
  2987  // Solidity: function totalSupply() view returns(uint256)
  2988  func (_IUniswapV2Pair *IUniswapV2PairCallerSession) TotalSupply() (*big.Int, error) {
  2989  	return _IUniswapV2Pair.Contract.TotalSupply(&_IUniswapV2Pair.CallOpts)
  2990  }
  2991  
  2992  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  2993  //
  2994  // Solidity: function approve(address spender, uint256 value) returns(bool)
  2995  func (_IUniswapV2Pair *IUniswapV2PairTransactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) {
  2996  	return _IUniswapV2Pair.contract.Transact(opts, "approve", spender, value)
  2997  }
  2998  
  2999  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  3000  //
  3001  // Solidity: function approve(address spender, uint256 value) returns(bool)
  3002  func (_IUniswapV2Pair *IUniswapV2PairSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
  3003  	return _IUniswapV2Pair.Contract.Approve(&_IUniswapV2Pair.TransactOpts, spender, value)
  3004  }
  3005  
  3006  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  3007  //
  3008  // Solidity: function approve(address spender, uint256 value) returns(bool)
  3009  func (_IUniswapV2Pair *IUniswapV2PairTransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
  3010  	return _IUniswapV2Pair.Contract.Approve(&_IUniswapV2Pair.TransactOpts, spender, value)
  3011  }
  3012  
  3013  // Burn is a paid mutator transaction binding the contract method 0x89afcb44.
  3014  //
  3015  // Solidity: function burn(address to) returns(uint256 amount0, uint256 amount1)
  3016  func (_IUniswapV2Pair *IUniswapV2PairTransactor) Burn(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
  3017  	return _IUniswapV2Pair.contract.Transact(opts, "burn", to)
  3018  }
  3019  
  3020  // Burn is a paid mutator transaction binding the contract method 0x89afcb44.
  3021  //
  3022  // Solidity: function burn(address to) returns(uint256 amount0, uint256 amount1)
  3023  func (_IUniswapV2Pair *IUniswapV2PairSession) Burn(to common.Address) (*types.Transaction, error) {
  3024  	return _IUniswapV2Pair.Contract.Burn(&_IUniswapV2Pair.TransactOpts, to)
  3025  }
  3026  
  3027  // Burn is a paid mutator transaction binding the contract method 0x89afcb44.
  3028  //
  3029  // Solidity: function burn(address to) returns(uint256 amount0, uint256 amount1)
  3030  func (_IUniswapV2Pair *IUniswapV2PairTransactorSession) Burn(to common.Address) (*types.Transaction, error) {
  3031  	return _IUniswapV2Pair.Contract.Burn(&_IUniswapV2Pair.TransactOpts, to)
  3032  }
  3033  
  3034  // Initialize is a paid mutator transaction binding the contract method 0x485cc955.
  3035  //
  3036  // Solidity: function initialize(address , address ) returns()
  3037  func (_IUniswapV2Pair *IUniswapV2PairTransactor) Initialize(opts *bind.TransactOpts, arg0 common.Address, arg1 common.Address) (*types.Transaction, error) {
  3038  	return _IUniswapV2Pair.contract.Transact(opts, "initialize", arg0, arg1)
  3039  }
  3040  
  3041  // Initialize is a paid mutator transaction binding the contract method 0x485cc955.
  3042  //
  3043  // Solidity: function initialize(address , address ) returns()
  3044  func (_IUniswapV2Pair *IUniswapV2PairSession) Initialize(arg0 common.Address, arg1 common.Address) (*types.Transaction, error) {
  3045  	return _IUniswapV2Pair.Contract.Initialize(&_IUniswapV2Pair.TransactOpts, arg0, arg1)
  3046  }
  3047  
  3048  // Initialize is a paid mutator transaction binding the contract method 0x485cc955.
  3049  //
  3050  // Solidity: function initialize(address , address ) returns()
  3051  func (_IUniswapV2Pair *IUniswapV2PairTransactorSession) Initialize(arg0 common.Address, arg1 common.Address) (*types.Transaction, error) {
  3052  	return _IUniswapV2Pair.Contract.Initialize(&_IUniswapV2Pair.TransactOpts, arg0, arg1)
  3053  }
  3054  
  3055  // Mint is a paid mutator transaction binding the contract method 0x6a627842.
  3056  //
  3057  // Solidity: function mint(address to) returns(uint256 liquidity)
  3058  func (_IUniswapV2Pair *IUniswapV2PairTransactor) Mint(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
  3059  	return _IUniswapV2Pair.contract.Transact(opts, "mint", to)
  3060  }
  3061  
  3062  // Mint is a paid mutator transaction binding the contract method 0x6a627842.
  3063  //
  3064  // Solidity: function mint(address to) returns(uint256 liquidity)
  3065  func (_IUniswapV2Pair *IUniswapV2PairSession) Mint(to common.Address) (*types.Transaction, error) {
  3066  	return _IUniswapV2Pair.Contract.Mint(&_IUniswapV2Pair.TransactOpts, to)
  3067  }
  3068  
  3069  // Mint is a paid mutator transaction binding the contract method 0x6a627842.
  3070  //
  3071  // Solidity: function mint(address to) returns(uint256 liquidity)
  3072  func (_IUniswapV2Pair *IUniswapV2PairTransactorSession) Mint(to common.Address) (*types.Transaction, error) {
  3073  	return _IUniswapV2Pair.Contract.Mint(&_IUniswapV2Pair.TransactOpts, to)
  3074  }
  3075  
  3076  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  3077  //
  3078  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  3079  func (_IUniswapV2Pair *IUniswapV2PairTransactor) Permit(opts *bind.TransactOpts, owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  3080  	return _IUniswapV2Pair.contract.Transact(opts, "permit", owner, spender, value, deadline, v, r, s)
  3081  }
  3082  
  3083  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  3084  //
  3085  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  3086  func (_IUniswapV2Pair *IUniswapV2PairSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  3087  	return _IUniswapV2Pair.Contract.Permit(&_IUniswapV2Pair.TransactOpts, owner, spender, value, deadline, v, r, s)
  3088  }
  3089  
  3090  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  3091  //
  3092  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  3093  func (_IUniswapV2Pair *IUniswapV2PairTransactorSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  3094  	return _IUniswapV2Pair.Contract.Permit(&_IUniswapV2Pair.TransactOpts, owner, spender, value, deadline, v, r, s)
  3095  }
  3096  
  3097  // Skim is a paid mutator transaction binding the contract method 0xbc25cf77.
  3098  //
  3099  // Solidity: function skim(address to) returns()
  3100  func (_IUniswapV2Pair *IUniswapV2PairTransactor) Skim(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
  3101  	return _IUniswapV2Pair.contract.Transact(opts, "skim", to)
  3102  }
  3103  
  3104  // Skim is a paid mutator transaction binding the contract method 0xbc25cf77.
  3105  //
  3106  // Solidity: function skim(address to) returns()
  3107  func (_IUniswapV2Pair *IUniswapV2PairSession) Skim(to common.Address) (*types.Transaction, error) {
  3108  	return _IUniswapV2Pair.Contract.Skim(&_IUniswapV2Pair.TransactOpts, to)
  3109  }
  3110  
  3111  // Skim is a paid mutator transaction binding the contract method 0xbc25cf77.
  3112  //
  3113  // Solidity: function skim(address to) returns()
  3114  func (_IUniswapV2Pair *IUniswapV2PairTransactorSession) Skim(to common.Address) (*types.Transaction, error) {
  3115  	return _IUniswapV2Pair.Contract.Skim(&_IUniswapV2Pair.TransactOpts, to)
  3116  }
  3117  
  3118  // Swap is a paid mutator transaction binding the contract method 0x022c0d9f.
  3119  //
  3120  // Solidity: function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data) returns()
  3121  func (_IUniswapV2Pair *IUniswapV2PairTransactor) Swap(opts *bind.TransactOpts, amount0Out *big.Int, amount1Out *big.Int, to common.Address, data []byte) (*types.Transaction, error) {
  3122  	return _IUniswapV2Pair.contract.Transact(opts, "swap", amount0Out, amount1Out, to, data)
  3123  }
  3124  
  3125  // Swap is a paid mutator transaction binding the contract method 0x022c0d9f.
  3126  //
  3127  // Solidity: function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data) returns()
  3128  func (_IUniswapV2Pair *IUniswapV2PairSession) Swap(amount0Out *big.Int, amount1Out *big.Int, to common.Address, data []byte) (*types.Transaction, error) {
  3129  	return _IUniswapV2Pair.Contract.Swap(&_IUniswapV2Pair.TransactOpts, amount0Out, amount1Out, to, data)
  3130  }
  3131  
  3132  // Swap is a paid mutator transaction binding the contract method 0x022c0d9f.
  3133  //
  3134  // Solidity: function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data) returns()
  3135  func (_IUniswapV2Pair *IUniswapV2PairTransactorSession) Swap(amount0Out *big.Int, amount1Out *big.Int, to common.Address, data []byte) (*types.Transaction, error) {
  3136  	return _IUniswapV2Pair.Contract.Swap(&_IUniswapV2Pair.TransactOpts, amount0Out, amount1Out, to, data)
  3137  }
  3138  
  3139  // Sync is a paid mutator transaction binding the contract method 0xfff6cae9.
  3140  //
  3141  // Solidity: function sync() returns()
  3142  func (_IUniswapV2Pair *IUniswapV2PairTransactor) Sync(opts *bind.TransactOpts) (*types.Transaction, error) {
  3143  	return _IUniswapV2Pair.contract.Transact(opts, "sync")
  3144  }
  3145  
  3146  // Sync is a paid mutator transaction binding the contract method 0xfff6cae9.
  3147  //
  3148  // Solidity: function sync() returns()
  3149  func (_IUniswapV2Pair *IUniswapV2PairSession) Sync() (*types.Transaction, error) {
  3150  	return _IUniswapV2Pair.Contract.Sync(&_IUniswapV2Pair.TransactOpts)
  3151  }
  3152  
  3153  // Sync is a paid mutator transaction binding the contract method 0xfff6cae9.
  3154  //
  3155  // Solidity: function sync() returns()
  3156  func (_IUniswapV2Pair *IUniswapV2PairTransactorSession) Sync() (*types.Transaction, error) {
  3157  	return _IUniswapV2Pair.Contract.Sync(&_IUniswapV2Pair.TransactOpts)
  3158  }
  3159  
  3160  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  3161  //
  3162  // Solidity: function transfer(address to, uint256 value) returns(bool)
  3163  func (_IUniswapV2Pair *IUniswapV2PairTransactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) {
  3164  	return _IUniswapV2Pair.contract.Transact(opts, "transfer", to, value)
  3165  }
  3166  
  3167  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  3168  //
  3169  // Solidity: function transfer(address to, uint256 value) returns(bool)
  3170  func (_IUniswapV2Pair *IUniswapV2PairSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
  3171  	return _IUniswapV2Pair.Contract.Transfer(&_IUniswapV2Pair.TransactOpts, to, value)
  3172  }
  3173  
  3174  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  3175  //
  3176  // Solidity: function transfer(address to, uint256 value) returns(bool)
  3177  func (_IUniswapV2Pair *IUniswapV2PairTransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
  3178  	return _IUniswapV2Pair.Contract.Transfer(&_IUniswapV2Pair.TransactOpts, to, value)
  3179  }
  3180  
  3181  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  3182  //
  3183  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  3184  func (_IUniswapV2Pair *IUniswapV2PairTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  3185  	return _IUniswapV2Pair.contract.Transact(opts, "transferFrom", from, to, value)
  3186  }
  3187  
  3188  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  3189  //
  3190  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  3191  func (_IUniswapV2Pair *IUniswapV2PairSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  3192  	return _IUniswapV2Pair.Contract.TransferFrom(&_IUniswapV2Pair.TransactOpts, from, to, value)
  3193  }
  3194  
  3195  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  3196  //
  3197  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  3198  func (_IUniswapV2Pair *IUniswapV2PairTransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  3199  	return _IUniswapV2Pair.Contract.TransferFrom(&_IUniswapV2Pair.TransactOpts, from, to, value)
  3200  }
  3201  
  3202  // IUniswapV2PairApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IUniswapV2Pair contract.
  3203  type IUniswapV2PairApprovalIterator struct {
  3204  	Event *IUniswapV2PairApproval // Event containing the contract specifics and raw log
  3205  
  3206  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3207  	event    string              // Event name to use for unpacking event data
  3208  
  3209  	logs chan types.Log        // Log channel receiving the found contract events
  3210  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3211  	done bool                  // Whether the subscription completed delivering logs
  3212  	fail error                 // Occurred error to stop iteration
  3213  }
  3214  
  3215  // Next advances the iterator to the subsequent event, returning whether there
  3216  // are any more events found. In case of a retrieval or parsing error, false is
  3217  // returned and Error() can be queried for the exact failure.
  3218  func (it *IUniswapV2PairApprovalIterator) Next() bool {
  3219  	// If the iterator failed, stop iterating
  3220  	if it.fail != nil {
  3221  		return false
  3222  	}
  3223  	// If the iterator completed, deliver directly whatever's available
  3224  	if it.done {
  3225  		select {
  3226  		case log := <-it.logs:
  3227  			it.Event = new(IUniswapV2PairApproval)
  3228  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3229  				it.fail = err
  3230  				return false
  3231  			}
  3232  			it.Event.Raw = log
  3233  			return true
  3234  
  3235  		default:
  3236  			return false
  3237  		}
  3238  	}
  3239  	// Iterator still in progress, wait for either a data or an error event
  3240  	select {
  3241  	case log := <-it.logs:
  3242  		it.Event = new(IUniswapV2PairApproval)
  3243  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3244  			it.fail = err
  3245  			return false
  3246  		}
  3247  		it.Event.Raw = log
  3248  		return true
  3249  
  3250  	case err := <-it.sub.Err():
  3251  		it.done = true
  3252  		it.fail = err
  3253  		return it.Next()
  3254  	}
  3255  }
  3256  
  3257  // Error returns any retrieval or parsing error occurred during filtering.
  3258  func (it *IUniswapV2PairApprovalIterator) Error() error {
  3259  	return it.fail
  3260  }
  3261  
  3262  // Close terminates the iteration process, releasing any pending underlying
  3263  // resources.
  3264  func (it *IUniswapV2PairApprovalIterator) Close() error {
  3265  	it.sub.Unsubscribe()
  3266  	return nil
  3267  }
  3268  
  3269  // IUniswapV2PairApproval represents a Approval event raised by the IUniswapV2Pair contract.
  3270  type IUniswapV2PairApproval struct {
  3271  	Owner   common.Address
  3272  	Spender common.Address
  3273  	Value   *big.Int
  3274  	Raw     types.Log // Blockchain specific contextual infos
  3275  }
  3276  
  3277  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  3278  //
  3279  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  3280  func (_IUniswapV2Pair *IUniswapV2PairFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*IUniswapV2PairApprovalIterator, error) {
  3281  
  3282  	var ownerRule []interface{}
  3283  	for _, ownerItem := range owner {
  3284  		ownerRule = append(ownerRule, ownerItem)
  3285  	}
  3286  	var spenderRule []interface{}
  3287  	for _, spenderItem := range spender {
  3288  		spenderRule = append(spenderRule, spenderItem)
  3289  	}
  3290  
  3291  	logs, sub, err := _IUniswapV2Pair.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
  3292  	if err != nil {
  3293  		return nil, err
  3294  	}
  3295  	return &IUniswapV2PairApprovalIterator{contract: _IUniswapV2Pair.contract, event: "Approval", logs: logs, sub: sub}, nil
  3296  }
  3297  
  3298  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  3299  //
  3300  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  3301  func (_IUniswapV2Pair *IUniswapV2PairFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IUniswapV2PairApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
  3302  
  3303  	var ownerRule []interface{}
  3304  	for _, ownerItem := range owner {
  3305  		ownerRule = append(ownerRule, ownerItem)
  3306  	}
  3307  	var spenderRule []interface{}
  3308  	for _, spenderItem := range spender {
  3309  		spenderRule = append(spenderRule, spenderItem)
  3310  	}
  3311  
  3312  	logs, sub, err := _IUniswapV2Pair.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
  3313  	if err != nil {
  3314  		return nil, err
  3315  	}
  3316  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3317  		defer sub.Unsubscribe()
  3318  		for {
  3319  			select {
  3320  			case log := <-logs:
  3321  				// New log arrived, parse the event and forward to the user
  3322  				event := new(IUniswapV2PairApproval)
  3323  				if err := _IUniswapV2Pair.contract.UnpackLog(event, "Approval", log); err != nil {
  3324  					return err
  3325  				}
  3326  				event.Raw = log
  3327  
  3328  				select {
  3329  				case sink <- event:
  3330  				case err := <-sub.Err():
  3331  					return err
  3332  				case <-quit:
  3333  					return nil
  3334  				}
  3335  			case err := <-sub.Err():
  3336  				return err
  3337  			case <-quit:
  3338  				return nil
  3339  			}
  3340  		}
  3341  	}), nil
  3342  }
  3343  
  3344  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  3345  //
  3346  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  3347  func (_IUniswapV2Pair *IUniswapV2PairFilterer) ParseApproval(log types.Log) (*IUniswapV2PairApproval, error) {
  3348  	event := new(IUniswapV2PairApproval)
  3349  	if err := _IUniswapV2Pair.contract.UnpackLog(event, "Approval", log); err != nil {
  3350  		return nil, err
  3351  	}
  3352  	return event, nil
  3353  }
  3354  
  3355  // IUniswapV2PairBurnIterator is returned from FilterBurn and is used to iterate over the raw logs and unpacked data for Burn events raised by the IUniswapV2Pair contract.
  3356  type IUniswapV2PairBurnIterator struct {
  3357  	Event *IUniswapV2PairBurn // Event containing the contract specifics and raw log
  3358  
  3359  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3360  	event    string              // Event name to use for unpacking event data
  3361  
  3362  	logs chan types.Log        // Log channel receiving the found contract events
  3363  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3364  	done bool                  // Whether the subscription completed delivering logs
  3365  	fail error                 // Occurred error to stop iteration
  3366  }
  3367  
  3368  // Next advances the iterator to the subsequent event, returning whether there
  3369  // are any more events found. In case of a retrieval or parsing error, false is
  3370  // returned and Error() can be queried for the exact failure.
  3371  func (it *IUniswapV2PairBurnIterator) Next() bool {
  3372  	// If the iterator failed, stop iterating
  3373  	if it.fail != nil {
  3374  		return false
  3375  	}
  3376  	// If the iterator completed, deliver directly whatever's available
  3377  	if it.done {
  3378  		select {
  3379  		case log := <-it.logs:
  3380  			it.Event = new(IUniswapV2PairBurn)
  3381  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3382  				it.fail = err
  3383  				return false
  3384  			}
  3385  			it.Event.Raw = log
  3386  			return true
  3387  
  3388  		default:
  3389  			return false
  3390  		}
  3391  	}
  3392  	// Iterator still in progress, wait for either a data or an error event
  3393  	select {
  3394  	case log := <-it.logs:
  3395  		it.Event = new(IUniswapV2PairBurn)
  3396  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3397  			it.fail = err
  3398  			return false
  3399  		}
  3400  		it.Event.Raw = log
  3401  		return true
  3402  
  3403  	case err := <-it.sub.Err():
  3404  		it.done = true
  3405  		it.fail = err
  3406  		return it.Next()
  3407  	}
  3408  }
  3409  
  3410  // Error returns any retrieval or parsing error occurred during filtering.
  3411  func (it *IUniswapV2PairBurnIterator) Error() error {
  3412  	return it.fail
  3413  }
  3414  
  3415  // Close terminates the iteration process, releasing any pending underlying
  3416  // resources.
  3417  func (it *IUniswapV2PairBurnIterator) Close() error {
  3418  	it.sub.Unsubscribe()
  3419  	return nil
  3420  }
  3421  
  3422  // IUniswapV2PairBurn represents a Burn event raised by the IUniswapV2Pair contract.
  3423  type IUniswapV2PairBurn struct {
  3424  	Sender  common.Address
  3425  	Amount0 *big.Int
  3426  	Amount1 *big.Int
  3427  	To      common.Address
  3428  	Raw     types.Log // Blockchain specific contextual infos
  3429  }
  3430  
  3431  // FilterBurn is a free log retrieval operation binding the contract event 0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496.
  3432  //
  3433  // Solidity: event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to)
  3434  func (_IUniswapV2Pair *IUniswapV2PairFilterer) FilterBurn(opts *bind.FilterOpts, sender []common.Address, to []common.Address) (*IUniswapV2PairBurnIterator, error) {
  3435  
  3436  	var senderRule []interface{}
  3437  	for _, senderItem := range sender {
  3438  		senderRule = append(senderRule, senderItem)
  3439  	}
  3440  
  3441  	var toRule []interface{}
  3442  	for _, toItem := range to {
  3443  		toRule = append(toRule, toItem)
  3444  	}
  3445  
  3446  	logs, sub, err := _IUniswapV2Pair.contract.FilterLogs(opts, "Burn", senderRule, toRule)
  3447  	if err != nil {
  3448  		return nil, err
  3449  	}
  3450  	return &IUniswapV2PairBurnIterator{contract: _IUniswapV2Pair.contract, event: "Burn", logs: logs, sub: sub}, nil
  3451  }
  3452  
  3453  // WatchBurn is a free log subscription operation binding the contract event 0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496.
  3454  //
  3455  // Solidity: event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to)
  3456  func (_IUniswapV2Pair *IUniswapV2PairFilterer) WatchBurn(opts *bind.WatchOpts, sink chan<- *IUniswapV2PairBurn, sender []common.Address, to []common.Address) (event.Subscription, error) {
  3457  
  3458  	var senderRule []interface{}
  3459  	for _, senderItem := range sender {
  3460  		senderRule = append(senderRule, senderItem)
  3461  	}
  3462  
  3463  	var toRule []interface{}
  3464  	for _, toItem := range to {
  3465  		toRule = append(toRule, toItem)
  3466  	}
  3467  
  3468  	logs, sub, err := _IUniswapV2Pair.contract.WatchLogs(opts, "Burn", senderRule, toRule)
  3469  	if err != nil {
  3470  		return nil, err
  3471  	}
  3472  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3473  		defer sub.Unsubscribe()
  3474  		for {
  3475  			select {
  3476  			case log := <-logs:
  3477  				// New log arrived, parse the event and forward to the user
  3478  				event := new(IUniswapV2PairBurn)
  3479  				if err := _IUniswapV2Pair.contract.UnpackLog(event, "Burn", log); err != nil {
  3480  					return err
  3481  				}
  3482  				event.Raw = log
  3483  
  3484  				select {
  3485  				case sink <- event:
  3486  				case err := <-sub.Err():
  3487  					return err
  3488  				case <-quit:
  3489  					return nil
  3490  				}
  3491  			case err := <-sub.Err():
  3492  				return err
  3493  			case <-quit:
  3494  				return nil
  3495  			}
  3496  		}
  3497  	}), nil
  3498  }
  3499  
  3500  // ParseBurn is a log parse operation binding the contract event 0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496.
  3501  //
  3502  // Solidity: event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to)
  3503  func (_IUniswapV2Pair *IUniswapV2PairFilterer) ParseBurn(log types.Log) (*IUniswapV2PairBurn, error) {
  3504  	event := new(IUniswapV2PairBurn)
  3505  	if err := _IUniswapV2Pair.contract.UnpackLog(event, "Burn", log); err != nil {
  3506  		return nil, err
  3507  	}
  3508  	return event, nil
  3509  }
  3510  
  3511  // IUniswapV2PairMintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the IUniswapV2Pair contract.
  3512  type IUniswapV2PairMintIterator struct {
  3513  	Event *IUniswapV2PairMint // Event containing the contract specifics and raw log
  3514  
  3515  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3516  	event    string              // Event name to use for unpacking event data
  3517  
  3518  	logs chan types.Log        // Log channel receiving the found contract events
  3519  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3520  	done bool                  // Whether the subscription completed delivering logs
  3521  	fail error                 // Occurred error to stop iteration
  3522  }
  3523  
  3524  // Next advances the iterator to the subsequent event, returning whether there
  3525  // are any more events found. In case of a retrieval or parsing error, false is
  3526  // returned and Error() can be queried for the exact failure.
  3527  func (it *IUniswapV2PairMintIterator) Next() bool {
  3528  	// If the iterator failed, stop iterating
  3529  	if it.fail != nil {
  3530  		return false
  3531  	}
  3532  	// If the iterator completed, deliver directly whatever's available
  3533  	if it.done {
  3534  		select {
  3535  		case log := <-it.logs:
  3536  			it.Event = new(IUniswapV2PairMint)
  3537  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3538  				it.fail = err
  3539  				return false
  3540  			}
  3541  			it.Event.Raw = log
  3542  			return true
  3543  
  3544  		default:
  3545  			return false
  3546  		}
  3547  	}
  3548  	// Iterator still in progress, wait for either a data or an error event
  3549  	select {
  3550  	case log := <-it.logs:
  3551  		it.Event = new(IUniswapV2PairMint)
  3552  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3553  			it.fail = err
  3554  			return false
  3555  		}
  3556  		it.Event.Raw = log
  3557  		return true
  3558  
  3559  	case err := <-it.sub.Err():
  3560  		it.done = true
  3561  		it.fail = err
  3562  		return it.Next()
  3563  	}
  3564  }
  3565  
  3566  // Error returns any retrieval or parsing error occurred during filtering.
  3567  func (it *IUniswapV2PairMintIterator) Error() error {
  3568  	return it.fail
  3569  }
  3570  
  3571  // Close terminates the iteration process, releasing any pending underlying
  3572  // resources.
  3573  func (it *IUniswapV2PairMintIterator) Close() error {
  3574  	it.sub.Unsubscribe()
  3575  	return nil
  3576  }
  3577  
  3578  // IUniswapV2PairMint represents a Mint event raised by the IUniswapV2Pair contract.
  3579  type IUniswapV2PairMint struct {
  3580  	Sender  common.Address
  3581  	Amount0 *big.Int
  3582  	Amount1 *big.Int
  3583  	Raw     types.Log // Blockchain specific contextual infos
  3584  }
  3585  
  3586  // FilterMint is a free log retrieval operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  3587  //
  3588  // Solidity: event Mint(address indexed sender, uint256 amount0, uint256 amount1)
  3589  func (_IUniswapV2Pair *IUniswapV2PairFilterer) FilterMint(opts *bind.FilterOpts, sender []common.Address) (*IUniswapV2PairMintIterator, error) {
  3590  
  3591  	var senderRule []interface{}
  3592  	for _, senderItem := range sender {
  3593  		senderRule = append(senderRule, senderItem)
  3594  	}
  3595  
  3596  	logs, sub, err := _IUniswapV2Pair.contract.FilterLogs(opts, "Mint", senderRule)
  3597  	if err != nil {
  3598  		return nil, err
  3599  	}
  3600  	return &IUniswapV2PairMintIterator{contract: _IUniswapV2Pair.contract, event: "Mint", logs: logs, sub: sub}, nil
  3601  }
  3602  
  3603  // WatchMint is a free log subscription operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  3604  //
  3605  // Solidity: event Mint(address indexed sender, uint256 amount0, uint256 amount1)
  3606  func (_IUniswapV2Pair *IUniswapV2PairFilterer) WatchMint(opts *bind.WatchOpts, sink chan<- *IUniswapV2PairMint, sender []common.Address) (event.Subscription, error) {
  3607  
  3608  	var senderRule []interface{}
  3609  	for _, senderItem := range sender {
  3610  		senderRule = append(senderRule, senderItem)
  3611  	}
  3612  
  3613  	logs, sub, err := _IUniswapV2Pair.contract.WatchLogs(opts, "Mint", senderRule)
  3614  	if err != nil {
  3615  		return nil, err
  3616  	}
  3617  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3618  		defer sub.Unsubscribe()
  3619  		for {
  3620  			select {
  3621  			case log := <-logs:
  3622  				// New log arrived, parse the event and forward to the user
  3623  				event := new(IUniswapV2PairMint)
  3624  				if err := _IUniswapV2Pair.contract.UnpackLog(event, "Mint", log); err != nil {
  3625  					return err
  3626  				}
  3627  				event.Raw = log
  3628  
  3629  				select {
  3630  				case sink <- event:
  3631  				case err := <-sub.Err():
  3632  					return err
  3633  				case <-quit:
  3634  					return nil
  3635  				}
  3636  			case err := <-sub.Err():
  3637  				return err
  3638  			case <-quit:
  3639  				return nil
  3640  			}
  3641  		}
  3642  	}), nil
  3643  }
  3644  
  3645  // ParseMint is a log parse operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  3646  //
  3647  // Solidity: event Mint(address indexed sender, uint256 amount0, uint256 amount1)
  3648  func (_IUniswapV2Pair *IUniswapV2PairFilterer) ParseMint(log types.Log) (*IUniswapV2PairMint, error) {
  3649  	event := new(IUniswapV2PairMint)
  3650  	if err := _IUniswapV2Pair.contract.UnpackLog(event, "Mint", log); err != nil {
  3651  		return nil, err
  3652  	}
  3653  	return event, nil
  3654  }
  3655  
  3656  // IUniswapV2PairSwapIterator is returned from FilterSwap and is used to iterate over the raw logs and unpacked data for Swap events raised by the IUniswapV2Pair contract.
  3657  type IUniswapV2PairSwapIterator struct {
  3658  	Event *IUniswapV2PairSwap // Event containing the contract specifics and raw log
  3659  
  3660  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3661  	event    string              // Event name to use for unpacking event data
  3662  
  3663  	logs chan types.Log        // Log channel receiving the found contract events
  3664  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3665  	done bool                  // Whether the subscription completed delivering logs
  3666  	fail error                 // Occurred error to stop iteration
  3667  }
  3668  
  3669  // Next advances the iterator to the subsequent event, returning whether there
  3670  // are any more events found. In case of a retrieval or parsing error, false is
  3671  // returned and Error() can be queried for the exact failure.
  3672  func (it *IUniswapV2PairSwapIterator) Next() bool {
  3673  	// If the iterator failed, stop iterating
  3674  	if it.fail != nil {
  3675  		return false
  3676  	}
  3677  	// If the iterator completed, deliver directly whatever's available
  3678  	if it.done {
  3679  		select {
  3680  		case log := <-it.logs:
  3681  			it.Event = new(IUniswapV2PairSwap)
  3682  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3683  				it.fail = err
  3684  				return false
  3685  			}
  3686  			it.Event.Raw = log
  3687  			return true
  3688  
  3689  		default:
  3690  			return false
  3691  		}
  3692  	}
  3693  	// Iterator still in progress, wait for either a data or an error event
  3694  	select {
  3695  	case log := <-it.logs:
  3696  		it.Event = new(IUniswapV2PairSwap)
  3697  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3698  			it.fail = err
  3699  			return false
  3700  		}
  3701  		it.Event.Raw = log
  3702  		return true
  3703  
  3704  	case err := <-it.sub.Err():
  3705  		it.done = true
  3706  		it.fail = err
  3707  		return it.Next()
  3708  	}
  3709  }
  3710  
  3711  // Error returns any retrieval or parsing error occurred during filtering.
  3712  func (it *IUniswapV2PairSwapIterator) Error() error {
  3713  	return it.fail
  3714  }
  3715  
  3716  // Close terminates the iteration process, releasing any pending underlying
  3717  // resources.
  3718  func (it *IUniswapV2PairSwapIterator) Close() error {
  3719  	it.sub.Unsubscribe()
  3720  	return nil
  3721  }
  3722  
  3723  // IUniswapV2PairSwap represents a Swap event raised by the IUniswapV2Pair contract.
  3724  type IUniswapV2PairSwap struct {
  3725  	Sender     common.Address
  3726  	Amount0In  *big.Int
  3727  	Amount1In  *big.Int
  3728  	Amount0Out *big.Int
  3729  	Amount1Out *big.Int
  3730  	To         common.Address
  3731  	Raw        types.Log // Blockchain specific contextual infos
  3732  }
  3733  
  3734  // FilterSwap is a free log retrieval operation binding the contract event 0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822.
  3735  //
  3736  // Solidity: event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to)
  3737  func (_IUniswapV2Pair *IUniswapV2PairFilterer) FilterSwap(opts *bind.FilterOpts, sender []common.Address, to []common.Address) (*IUniswapV2PairSwapIterator, error) {
  3738  
  3739  	var senderRule []interface{}
  3740  	for _, senderItem := range sender {
  3741  		senderRule = append(senderRule, senderItem)
  3742  	}
  3743  
  3744  	var toRule []interface{}
  3745  	for _, toItem := range to {
  3746  		toRule = append(toRule, toItem)
  3747  	}
  3748  
  3749  	logs, sub, err := _IUniswapV2Pair.contract.FilterLogs(opts, "Swap", senderRule, toRule)
  3750  	if err != nil {
  3751  		return nil, err
  3752  	}
  3753  	return &IUniswapV2PairSwapIterator{contract: _IUniswapV2Pair.contract, event: "Swap", logs: logs, sub: sub}, nil
  3754  }
  3755  
  3756  // WatchSwap is a free log subscription operation binding the contract event 0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822.
  3757  //
  3758  // Solidity: event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to)
  3759  func (_IUniswapV2Pair *IUniswapV2PairFilterer) WatchSwap(opts *bind.WatchOpts, sink chan<- *IUniswapV2PairSwap, sender []common.Address, to []common.Address) (event.Subscription, error) {
  3760  
  3761  	var senderRule []interface{}
  3762  	for _, senderItem := range sender {
  3763  		senderRule = append(senderRule, senderItem)
  3764  	}
  3765  
  3766  	var toRule []interface{}
  3767  	for _, toItem := range to {
  3768  		toRule = append(toRule, toItem)
  3769  	}
  3770  
  3771  	logs, sub, err := _IUniswapV2Pair.contract.WatchLogs(opts, "Swap", senderRule, toRule)
  3772  	if err != nil {
  3773  		return nil, err
  3774  	}
  3775  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3776  		defer sub.Unsubscribe()
  3777  		for {
  3778  			select {
  3779  			case log := <-logs:
  3780  				// New log arrived, parse the event and forward to the user
  3781  				event := new(IUniswapV2PairSwap)
  3782  				if err := _IUniswapV2Pair.contract.UnpackLog(event, "Swap", log); err != nil {
  3783  					return err
  3784  				}
  3785  				event.Raw = log
  3786  
  3787  				select {
  3788  				case sink <- event:
  3789  				case err := <-sub.Err():
  3790  					return err
  3791  				case <-quit:
  3792  					return nil
  3793  				}
  3794  			case err := <-sub.Err():
  3795  				return err
  3796  			case <-quit:
  3797  				return nil
  3798  			}
  3799  		}
  3800  	}), nil
  3801  }
  3802  
  3803  // ParseSwap is a log parse operation binding the contract event 0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822.
  3804  //
  3805  // Solidity: event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to)
  3806  func (_IUniswapV2Pair *IUniswapV2PairFilterer) ParseSwap(log types.Log) (*IUniswapV2PairSwap, error) {
  3807  	event := new(IUniswapV2PairSwap)
  3808  	if err := _IUniswapV2Pair.contract.UnpackLog(event, "Swap", log); err != nil {
  3809  		return nil, err
  3810  	}
  3811  	return event, nil
  3812  }
  3813  
  3814  // IUniswapV2PairSyncIterator is returned from FilterSync and is used to iterate over the raw logs and unpacked data for Sync events raised by the IUniswapV2Pair contract.
  3815  type IUniswapV2PairSyncIterator struct {
  3816  	Event *IUniswapV2PairSync // Event containing the contract specifics and raw log
  3817  
  3818  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3819  	event    string              // Event name to use for unpacking event data
  3820  
  3821  	logs chan types.Log        // Log channel receiving the found contract events
  3822  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3823  	done bool                  // Whether the subscription completed delivering logs
  3824  	fail error                 // Occurred error to stop iteration
  3825  }
  3826  
  3827  // Next advances the iterator to the subsequent event, returning whether there
  3828  // are any more events found. In case of a retrieval or parsing error, false is
  3829  // returned and Error() can be queried for the exact failure.
  3830  func (it *IUniswapV2PairSyncIterator) Next() bool {
  3831  	// If the iterator failed, stop iterating
  3832  	if it.fail != nil {
  3833  		return false
  3834  	}
  3835  	// If the iterator completed, deliver directly whatever's available
  3836  	if it.done {
  3837  		select {
  3838  		case log := <-it.logs:
  3839  			it.Event = new(IUniswapV2PairSync)
  3840  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3841  				it.fail = err
  3842  				return false
  3843  			}
  3844  			it.Event.Raw = log
  3845  			return true
  3846  
  3847  		default:
  3848  			return false
  3849  		}
  3850  	}
  3851  	// Iterator still in progress, wait for either a data or an error event
  3852  	select {
  3853  	case log := <-it.logs:
  3854  		it.Event = new(IUniswapV2PairSync)
  3855  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3856  			it.fail = err
  3857  			return false
  3858  		}
  3859  		it.Event.Raw = log
  3860  		return true
  3861  
  3862  	case err := <-it.sub.Err():
  3863  		it.done = true
  3864  		it.fail = err
  3865  		return it.Next()
  3866  	}
  3867  }
  3868  
  3869  // Error returns any retrieval or parsing error occurred during filtering.
  3870  func (it *IUniswapV2PairSyncIterator) Error() error {
  3871  	return it.fail
  3872  }
  3873  
  3874  // Close terminates the iteration process, releasing any pending underlying
  3875  // resources.
  3876  func (it *IUniswapV2PairSyncIterator) Close() error {
  3877  	it.sub.Unsubscribe()
  3878  	return nil
  3879  }
  3880  
  3881  // IUniswapV2PairSync represents a Sync event raised by the IUniswapV2Pair contract.
  3882  type IUniswapV2PairSync struct {
  3883  	Reserve0 *big.Int
  3884  	Reserve1 *big.Int
  3885  	Raw      types.Log // Blockchain specific contextual infos
  3886  }
  3887  
  3888  // FilterSync is a free log retrieval operation binding the contract event 0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1.
  3889  //
  3890  // Solidity: event Sync(uint112 reserve0, uint112 reserve1)
  3891  func (_IUniswapV2Pair *IUniswapV2PairFilterer) FilterSync(opts *bind.FilterOpts) (*IUniswapV2PairSyncIterator, error) {
  3892  
  3893  	logs, sub, err := _IUniswapV2Pair.contract.FilterLogs(opts, "Sync")
  3894  	if err != nil {
  3895  		return nil, err
  3896  	}
  3897  	return &IUniswapV2PairSyncIterator{contract: _IUniswapV2Pair.contract, event: "Sync", logs: logs, sub: sub}, nil
  3898  }
  3899  
  3900  // WatchSync is a free log subscription operation binding the contract event 0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1.
  3901  //
  3902  // Solidity: event Sync(uint112 reserve0, uint112 reserve1)
  3903  func (_IUniswapV2Pair *IUniswapV2PairFilterer) WatchSync(opts *bind.WatchOpts, sink chan<- *IUniswapV2PairSync) (event.Subscription, error) {
  3904  
  3905  	logs, sub, err := _IUniswapV2Pair.contract.WatchLogs(opts, "Sync")
  3906  	if err != nil {
  3907  		return nil, err
  3908  	}
  3909  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3910  		defer sub.Unsubscribe()
  3911  		for {
  3912  			select {
  3913  			case log := <-logs:
  3914  				// New log arrived, parse the event and forward to the user
  3915  				event := new(IUniswapV2PairSync)
  3916  				if err := _IUniswapV2Pair.contract.UnpackLog(event, "Sync", log); err != nil {
  3917  					return err
  3918  				}
  3919  				event.Raw = log
  3920  
  3921  				select {
  3922  				case sink <- event:
  3923  				case err := <-sub.Err():
  3924  					return err
  3925  				case <-quit:
  3926  					return nil
  3927  				}
  3928  			case err := <-sub.Err():
  3929  				return err
  3930  			case <-quit:
  3931  				return nil
  3932  			}
  3933  		}
  3934  	}), nil
  3935  }
  3936  
  3937  // ParseSync is a log parse operation binding the contract event 0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1.
  3938  //
  3939  // Solidity: event Sync(uint112 reserve0, uint112 reserve1)
  3940  func (_IUniswapV2Pair *IUniswapV2PairFilterer) ParseSync(log types.Log) (*IUniswapV2PairSync, error) {
  3941  	event := new(IUniswapV2PairSync)
  3942  	if err := _IUniswapV2Pair.contract.UnpackLog(event, "Sync", log); err != nil {
  3943  		return nil, err
  3944  	}
  3945  	return event, nil
  3946  }
  3947  
  3948  // IUniswapV2PairTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IUniswapV2Pair contract.
  3949  type IUniswapV2PairTransferIterator struct {
  3950  	Event *IUniswapV2PairTransfer // Event containing the contract specifics and raw log
  3951  
  3952  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3953  	event    string              // Event name to use for unpacking event data
  3954  
  3955  	logs chan types.Log        // Log channel receiving the found contract events
  3956  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3957  	done bool                  // Whether the subscription completed delivering logs
  3958  	fail error                 // Occurred error to stop iteration
  3959  }
  3960  
  3961  // Next advances the iterator to the subsequent event, returning whether there
  3962  // are any more events found. In case of a retrieval or parsing error, false is
  3963  // returned and Error() can be queried for the exact failure.
  3964  func (it *IUniswapV2PairTransferIterator) Next() bool {
  3965  	// If the iterator failed, stop iterating
  3966  	if it.fail != nil {
  3967  		return false
  3968  	}
  3969  	// If the iterator completed, deliver directly whatever's available
  3970  	if it.done {
  3971  		select {
  3972  		case log := <-it.logs:
  3973  			it.Event = new(IUniswapV2PairTransfer)
  3974  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3975  				it.fail = err
  3976  				return false
  3977  			}
  3978  			it.Event.Raw = log
  3979  			return true
  3980  
  3981  		default:
  3982  			return false
  3983  		}
  3984  	}
  3985  	// Iterator still in progress, wait for either a data or an error event
  3986  	select {
  3987  	case log := <-it.logs:
  3988  		it.Event = new(IUniswapV2PairTransfer)
  3989  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3990  			it.fail = err
  3991  			return false
  3992  		}
  3993  		it.Event.Raw = log
  3994  		return true
  3995  
  3996  	case err := <-it.sub.Err():
  3997  		it.done = true
  3998  		it.fail = err
  3999  		return it.Next()
  4000  	}
  4001  }
  4002  
  4003  // Error returns any retrieval or parsing error occurred during filtering.
  4004  func (it *IUniswapV2PairTransferIterator) Error() error {
  4005  	return it.fail
  4006  }
  4007  
  4008  // Close terminates the iteration process, releasing any pending underlying
  4009  // resources.
  4010  func (it *IUniswapV2PairTransferIterator) Close() error {
  4011  	it.sub.Unsubscribe()
  4012  	return nil
  4013  }
  4014  
  4015  // IUniswapV2PairTransfer represents a Transfer event raised by the IUniswapV2Pair contract.
  4016  type IUniswapV2PairTransfer struct {
  4017  	From  common.Address
  4018  	To    common.Address
  4019  	Value *big.Int
  4020  	Raw   types.Log // Blockchain specific contextual infos
  4021  }
  4022  
  4023  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  4024  //
  4025  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  4026  func (_IUniswapV2Pair *IUniswapV2PairFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*IUniswapV2PairTransferIterator, error) {
  4027  
  4028  	var fromRule []interface{}
  4029  	for _, fromItem := range from {
  4030  		fromRule = append(fromRule, fromItem)
  4031  	}
  4032  	var toRule []interface{}
  4033  	for _, toItem := range to {
  4034  		toRule = append(toRule, toItem)
  4035  	}
  4036  
  4037  	logs, sub, err := _IUniswapV2Pair.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
  4038  	if err != nil {
  4039  		return nil, err
  4040  	}
  4041  	return &IUniswapV2PairTransferIterator{contract: _IUniswapV2Pair.contract, event: "Transfer", logs: logs, sub: sub}, nil
  4042  }
  4043  
  4044  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  4045  //
  4046  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  4047  func (_IUniswapV2Pair *IUniswapV2PairFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IUniswapV2PairTransfer, from []common.Address, to []common.Address) (event.Subscription, error) {
  4048  
  4049  	var fromRule []interface{}
  4050  	for _, fromItem := range from {
  4051  		fromRule = append(fromRule, fromItem)
  4052  	}
  4053  	var toRule []interface{}
  4054  	for _, toItem := range to {
  4055  		toRule = append(toRule, toItem)
  4056  	}
  4057  
  4058  	logs, sub, err := _IUniswapV2Pair.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
  4059  	if err != nil {
  4060  		return nil, err
  4061  	}
  4062  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4063  		defer sub.Unsubscribe()
  4064  		for {
  4065  			select {
  4066  			case log := <-logs:
  4067  				// New log arrived, parse the event and forward to the user
  4068  				event := new(IUniswapV2PairTransfer)
  4069  				if err := _IUniswapV2Pair.contract.UnpackLog(event, "Transfer", log); err != nil {
  4070  					return err
  4071  				}
  4072  				event.Raw = log
  4073  
  4074  				select {
  4075  				case sink <- event:
  4076  				case err := <-sub.Err():
  4077  					return err
  4078  				case <-quit:
  4079  					return nil
  4080  				}
  4081  			case err := <-sub.Err():
  4082  				return err
  4083  			case <-quit:
  4084  				return nil
  4085  			}
  4086  		}
  4087  	}), nil
  4088  }
  4089  
  4090  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  4091  //
  4092  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  4093  func (_IUniswapV2Pair *IUniswapV2PairFilterer) ParseTransfer(log types.Log) (*IUniswapV2PairTransfer, error) {
  4094  	event := new(IUniswapV2PairTransfer)
  4095  	if err := _IUniswapV2Pair.contract.UnpackLog(event, "Transfer", log); err != nil {
  4096  		return nil, err
  4097  	}
  4098  	return event, nil
  4099  }
  4100  
  4101  // MathABI is the input ABI used to generate the binding from.
  4102  const MathABI = "[]"
  4103  
  4104  // MathBin is the compiled bytecode used for deploying new contracts.
  4105  var MathBin = "0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582081e9ccd423fcc993f0e81d159cb672b6a490c6b351a9573a5320d62398367f1564736f6c63430005100032"
  4106  
  4107  // DeployMath deploys a new Ethereum contract, binding an instance of Math to it.
  4108  func DeployMath(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Math, error) {
  4109  	parsed, err := abi.JSON(strings.NewReader(MathABI))
  4110  	if err != nil {
  4111  		return common.Address{}, nil, nil, err
  4112  	}
  4113  
  4114  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(MathBin), backend)
  4115  	if err != nil {
  4116  		return common.Address{}, nil, nil, err
  4117  	}
  4118  	return address, tx, &Math{MathCaller: MathCaller{contract: contract}, MathTransactor: MathTransactor{contract: contract}, MathFilterer: MathFilterer{contract: contract}}, nil
  4119  }
  4120  
  4121  // Math is an auto generated Go binding around an Ethereum contract.
  4122  type Math struct {
  4123  	MathCaller     // Read-only binding to the contract
  4124  	MathTransactor // Write-only binding to the contract
  4125  	MathFilterer   // Log filterer for contract events
  4126  }
  4127  
  4128  // MathCaller is an auto generated read-only Go binding around an Ethereum contract.
  4129  type MathCaller struct {
  4130  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4131  }
  4132  
  4133  // MathTransactor is an auto generated write-only Go binding around an Ethereum contract.
  4134  type MathTransactor struct {
  4135  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4136  }
  4137  
  4138  // MathFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  4139  type MathFilterer struct {
  4140  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4141  }
  4142  
  4143  // MathSession is an auto generated Go binding around an Ethereum contract,
  4144  // with pre-set call and transact options.
  4145  type MathSession struct {
  4146  	Contract     *Math             // Generic contract binding to set the session for
  4147  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  4148  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  4149  }
  4150  
  4151  // MathCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  4152  // with pre-set call options.
  4153  type MathCallerSession struct {
  4154  	Contract *MathCaller   // Generic contract caller binding to set the session for
  4155  	CallOpts bind.CallOpts // Call options to use throughout this session
  4156  }
  4157  
  4158  // MathTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  4159  // with pre-set transact options.
  4160  type MathTransactorSession struct {
  4161  	Contract     *MathTransactor   // Generic contract transactor binding to set the session for
  4162  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  4163  }
  4164  
  4165  // MathRaw is an auto generated low-level Go binding around an Ethereum contract.
  4166  type MathRaw struct {
  4167  	Contract *Math // Generic contract binding to access the raw methods on
  4168  }
  4169  
  4170  // MathCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  4171  type MathCallerRaw struct {
  4172  	Contract *MathCaller // Generic read-only contract binding to access the raw methods on
  4173  }
  4174  
  4175  // MathTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  4176  type MathTransactorRaw struct {
  4177  	Contract *MathTransactor // Generic write-only contract binding to access the raw methods on
  4178  }
  4179  
  4180  // NewMath creates a new instance of Math, bound to a specific deployed contract.
  4181  func NewMath(address common.Address, backend bind.ContractBackend) (*Math, error) {
  4182  	contract, err := bindMath(address, backend, backend, backend)
  4183  	if err != nil {
  4184  		return nil, err
  4185  	}
  4186  	return &Math{MathCaller: MathCaller{contract: contract}, MathTransactor: MathTransactor{contract: contract}, MathFilterer: MathFilterer{contract: contract}}, nil
  4187  }
  4188  
  4189  // NewMathCaller creates a new read-only instance of Math, bound to a specific deployed contract.
  4190  func NewMathCaller(address common.Address, caller bind.ContractCaller) (*MathCaller, error) {
  4191  	contract, err := bindMath(address, caller, nil, nil)
  4192  	if err != nil {
  4193  		return nil, err
  4194  	}
  4195  	return &MathCaller{contract: contract}, nil
  4196  }
  4197  
  4198  // NewMathTransactor creates a new write-only instance of Math, bound to a specific deployed contract.
  4199  func NewMathTransactor(address common.Address, transactor bind.ContractTransactor) (*MathTransactor, error) {
  4200  	contract, err := bindMath(address, nil, transactor, nil)
  4201  	if err != nil {
  4202  		return nil, err
  4203  	}
  4204  	return &MathTransactor{contract: contract}, nil
  4205  }
  4206  
  4207  // NewMathFilterer creates a new log filterer instance of Math, bound to a specific deployed contract.
  4208  func NewMathFilterer(address common.Address, filterer bind.ContractFilterer) (*MathFilterer, error) {
  4209  	contract, err := bindMath(address, nil, nil, filterer)
  4210  	if err != nil {
  4211  		return nil, err
  4212  	}
  4213  	return &MathFilterer{contract: contract}, nil
  4214  }
  4215  
  4216  // bindMath binds a generic wrapper to an already deployed contract.
  4217  func bindMath(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  4218  	parsed, err := abi.JSON(strings.NewReader(MathABI))
  4219  	if err != nil {
  4220  		return nil, err
  4221  	}
  4222  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  4223  }
  4224  
  4225  // Call invokes the (constant) contract method with params as input values and
  4226  // sets the output to result. The result type might be a single field for simple
  4227  // returns, a slice of interfaces for anonymous returns and a struct for named
  4228  // returns.
  4229  func (_Math *MathRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4230  	return _Math.Contract.MathCaller.contract.Call(opts, result, method, params...)
  4231  }
  4232  
  4233  // Transfer initiates a plain transaction to move funds to the contract, calling
  4234  // its default method if one is available.
  4235  func (_Math *MathRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4236  	return _Math.Contract.MathTransactor.contract.Transfer(opts)
  4237  }
  4238  
  4239  // Transact invokes the (paid) contract method with params as input values.
  4240  func (_Math *MathRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4241  	return _Math.Contract.MathTransactor.contract.Transact(opts, method, params...)
  4242  }
  4243  
  4244  // Call invokes the (constant) contract method with params as input values and
  4245  // sets the output to result. The result type might be a single field for simple
  4246  // returns, a slice of interfaces for anonymous returns and a struct for named
  4247  // returns.
  4248  func (_Math *MathCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4249  	return _Math.Contract.contract.Call(opts, result, method, params...)
  4250  }
  4251  
  4252  // Transfer initiates a plain transaction to move funds to the contract, calling
  4253  // its default method if one is available.
  4254  func (_Math *MathTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4255  	return _Math.Contract.contract.Transfer(opts)
  4256  }
  4257  
  4258  // Transact invokes the (paid) contract method with params as input values.
  4259  func (_Math *MathTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4260  	return _Math.Contract.contract.Transact(opts, method, params...)
  4261  }
  4262  
  4263  // SafeMathABI is the input ABI used to generate the binding from.
  4264  const SafeMathABI = "[]"
  4265  
  4266  // SafeMathBin is the compiled bytecode used for deploying new contracts.
  4267  var SafeMathBin = "0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158201b56d92138da4c727cf28d3f157c6cd2b756969e313f68004fe81129430604a164736f6c63430005100032"
  4268  
  4269  // DeploySafeMath deploys a new Ethereum contract, binding an instance of SafeMath to it.
  4270  func DeploySafeMath(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SafeMath, error) {
  4271  	parsed, err := abi.JSON(strings.NewReader(SafeMathABI))
  4272  	if err != nil {
  4273  		return common.Address{}, nil, nil, err
  4274  	}
  4275  
  4276  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(SafeMathBin), backend)
  4277  	if err != nil {
  4278  		return common.Address{}, nil, nil, err
  4279  	}
  4280  	return address, tx, &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil
  4281  }
  4282  
  4283  // SafeMath is an auto generated Go binding around an Ethereum contract.
  4284  type SafeMath struct {
  4285  	SafeMathCaller     // Read-only binding to the contract
  4286  	SafeMathTransactor // Write-only binding to the contract
  4287  	SafeMathFilterer   // Log filterer for contract events
  4288  }
  4289  
  4290  // SafeMathCaller is an auto generated read-only Go binding around an Ethereum contract.
  4291  type SafeMathCaller struct {
  4292  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4293  }
  4294  
  4295  // SafeMathTransactor is an auto generated write-only Go binding around an Ethereum contract.
  4296  type SafeMathTransactor struct {
  4297  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4298  }
  4299  
  4300  // SafeMathFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  4301  type SafeMathFilterer struct {
  4302  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4303  }
  4304  
  4305  // SafeMathSession is an auto generated Go binding around an Ethereum contract,
  4306  // with pre-set call and transact options.
  4307  type SafeMathSession struct {
  4308  	Contract     *SafeMath         // Generic contract binding to set the session for
  4309  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  4310  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  4311  }
  4312  
  4313  // SafeMathCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  4314  // with pre-set call options.
  4315  type SafeMathCallerSession struct {
  4316  	Contract *SafeMathCaller // Generic contract caller binding to set the session for
  4317  	CallOpts bind.CallOpts   // Call options to use throughout this session
  4318  }
  4319  
  4320  // SafeMathTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  4321  // with pre-set transact options.
  4322  type SafeMathTransactorSession struct {
  4323  	Contract     *SafeMathTransactor // Generic contract transactor binding to set the session for
  4324  	TransactOpts bind.TransactOpts   // Transaction auth options to use throughout this session
  4325  }
  4326  
  4327  // SafeMathRaw is an auto generated low-level Go binding around an Ethereum contract.
  4328  type SafeMathRaw struct {
  4329  	Contract *SafeMath // Generic contract binding to access the raw methods on
  4330  }
  4331  
  4332  // SafeMathCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  4333  type SafeMathCallerRaw struct {
  4334  	Contract *SafeMathCaller // Generic read-only contract binding to access the raw methods on
  4335  }
  4336  
  4337  // SafeMathTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  4338  type SafeMathTransactorRaw struct {
  4339  	Contract *SafeMathTransactor // Generic write-only contract binding to access the raw methods on
  4340  }
  4341  
  4342  // NewSafeMath creates a new instance of SafeMath, bound to a specific deployed contract.
  4343  func NewSafeMath(address common.Address, backend bind.ContractBackend) (*SafeMath, error) {
  4344  	contract, err := bindSafeMath(address, backend, backend, backend)
  4345  	if err != nil {
  4346  		return nil, err
  4347  	}
  4348  	return &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil
  4349  }
  4350  
  4351  // NewSafeMathCaller creates a new read-only instance of SafeMath, bound to a specific deployed contract.
  4352  func NewSafeMathCaller(address common.Address, caller bind.ContractCaller) (*SafeMathCaller, error) {
  4353  	contract, err := bindSafeMath(address, caller, nil, nil)
  4354  	if err != nil {
  4355  		return nil, err
  4356  	}
  4357  	return &SafeMathCaller{contract: contract}, nil
  4358  }
  4359  
  4360  // NewSafeMathTransactor creates a new write-only instance of SafeMath, bound to a specific deployed contract.
  4361  func NewSafeMathTransactor(address common.Address, transactor bind.ContractTransactor) (*SafeMathTransactor, error) {
  4362  	contract, err := bindSafeMath(address, nil, transactor, nil)
  4363  	if err != nil {
  4364  		return nil, err
  4365  	}
  4366  	return &SafeMathTransactor{contract: contract}, nil
  4367  }
  4368  
  4369  // NewSafeMathFilterer creates a new log filterer instance of SafeMath, bound to a specific deployed contract.
  4370  func NewSafeMathFilterer(address common.Address, filterer bind.ContractFilterer) (*SafeMathFilterer, error) {
  4371  	contract, err := bindSafeMath(address, nil, nil, filterer)
  4372  	if err != nil {
  4373  		return nil, err
  4374  	}
  4375  	return &SafeMathFilterer{contract: contract}, nil
  4376  }
  4377  
  4378  // bindSafeMath binds a generic wrapper to an already deployed contract.
  4379  func bindSafeMath(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  4380  	parsed, err := abi.JSON(strings.NewReader(SafeMathABI))
  4381  	if err != nil {
  4382  		return nil, err
  4383  	}
  4384  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  4385  }
  4386  
  4387  // Call invokes the (constant) contract method with params as input values and
  4388  // sets the output to result. The result type might be a single field for simple
  4389  // returns, a slice of interfaces for anonymous returns and a struct for named
  4390  // returns.
  4391  func (_SafeMath *SafeMathRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4392  	return _SafeMath.Contract.SafeMathCaller.contract.Call(opts, result, method, params...)
  4393  }
  4394  
  4395  // Transfer initiates a plain transaction to move funds to the contract, calling
  4396  // its default method if one is available.
  4397  func (_SafeMath *SafeMathRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4398  	return _SafeMath.Contract.SafeMathTransactor.contract.Transfer(opts)
  4399  }
  4400  
  4401  // Transact invokes the (paid) contract method with params as input values.
  4402  func (_SafeMath *SafeMathRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4403  	return _SafeMath.Contract.SafeMathTransactor.contract.Transact(opts, method, params...)
  4404  }
  4405  
  4406  // Call invokes the (constant) contract method with params as input values and
  4407  // sets the output to result. The result type might be a single field for simple
  4408  // returns, a slice of interfaces for anonymous returns and a struct for named
  4409  // returns.
  4410  func (_SafeMath *SafeMathCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4411  	return _SafeMath.Contract.contract.Call(opts, result, method, params...)
  4412  }
  4413  
  4414  // Transfer initiates a plain transaction to move funds to the contract, calling
  4415  // its default method if one is available.
  4416  func (_SafeMath *SafeMathTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4417  	return _SafeMath.Contract.contract.Transfer(opts)
  4418  }
  4419  
  4420  // Transact invokes the (paid) contract method with params as input values.
  4421  func (_SafeMath *SafeMathTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4422  	return _SafeMath.Contract.contract.Transact(opts, method, params...)
  4423  }
  4424  
  4425  // UQ112x112ABI is the input ABI used to generate the binding from.
  4426  const UQ112x112ABI = "[]"
  4427  
  4428  // UQ112x112Bin is the compiled bytecode used for deploying new contracts.
  4429  var UQ112x112Bin = "0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582092286a07eb4dc3dcc7db92fac7f6fd2accd5742e96546960fd1cfacbf1561f2864736f6c63430005100032"
  4430  
  4431  // DeployUQ112x112 deploys a new Ethereum contract, binding an instance of UQ112x112 to it.
  4432  func DeployUQ112x112(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *UQ112x112, error) {
  4433  	parsed, err := abi.JSON(strings.NewReader(UQ112x112ABI))
  4434  	if err != nil {
  4435  		return common.Address{}, nil, nil, err
  4436  	}
  4437  
  4438  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(UQ112x112Bin), backend)
  4439  	if err != nil {
  4440  		return common.Address{}, nil, nil, err
  4441  	}
  4442  	return address, tx, &UQ112x112{UQ112x112Caller: UQ112x112Caller{contract: contract}, UQ112x112Transactor: UQ112x112Transactor{contract: contract}, UQ112x112Filterer: UQ112x112Filterer{contract: contract}}, nil
  4443  }
  4444  
  4445  // UQ112x112 is an auto generated Go binding around an Ethereum contract.
  4446  type UQ112x112 struct {
  4447  	UQ112x112Caller     // Read-only binding to the contract
  4448  	UQ112x112Transactor // Write-only binding to the contract
  4449  	UQ112x112Filterer   // Log filterer for contract events
  4450  }
  4451  
  4452  // UQ112x112Caller is an auto generated read-only Go binding around an Ethereum contract.
  4453  type UQ112x112Caller struct {
  4454  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4455  }
  4456  
  4457  // UQ112x112Transactor is an auto generated write-only Go binding around an Ethereum contract.
  4458  type UQ112x112Transactor struct {
  4459  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4460  }
  4461  
  4462  // UQ112x112Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
  4463  type UQ112x112Filterer struct {
  4464  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4465  }
  4466  
  4467  // UQ112x112Session is an auto generated Go binding around an Ethereum contract,
  4468  // with pre-set call and transact options.
  4469  type UQ112x112Session struct {
  4470  	Contract     *UQ112x112        // Generic contract binding to set the session for
  4471  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  4472  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  4473  }
  4474  
  4475  // UQ112x112CallerSession is an auto generated read-only Go binding around an Ethereum contract,
  4476  // with pre-set call options.
  4477  type UQ112x112CallerSession struct {
  4478  	Contract *UQ112x112Caller // Generic contract caller binding to set the session for
  4479  	CallOpts bind.CallOpts    // Call options to use throughout this session
  4480  }
  4481  
  4482  // UQ112x112TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  4483  // with pre-set transact options.
  4484  type UQ112x112TransactorSession struct {
  4485  	Contract     *UQ112x112Transactor // Generic contract transactor binding to set the session for
  4486  	TransactOpts bind.TransactOpts    // Transaction auth options to use throughout this session
  4487  }
  4488  
  4489  // UQ112x112Raw is an auto generated low-level Go binding around an Ethereum contract.
  4490  type UQ112x112Raw struct {
  4491  	Contract *UQ112x112 // Generic contract binding to access the raw methods on
  4492  }
  4493  
  4494  // UQ112x112CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  4495  type UQ112x112CallerRaw struct {
  4496  	Contract *UQ112x112Caller // Generic read-only contract binding to access the raw methods on
  4497  }
  4498  
  4499  // UQ112x112TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  4500  type UQ112x112TransactorRaw struct {
  4501  	Contract *UQ112x112Transactor // Generic write-only contract binding to access the raw methods on
  4502  }
  4503  
  4504  // NewUQ112x112 creates a new instance of UQ112x112, bound to a specific deployed contract.
  4505  func NewUQ112x112(address common.Address, backend bind.ContractBackend) (*UQ112x112, error) {
  4506  	contract, err := bindUQ112x112(address, backend, backend, backend)
  4507  	if err != nil {
  4508  		return nil, err
  4509  	}
  4510  	return &UQ112x112{UQ112x112Caller: UQ112x112Caller{contract: contract}, UQ112x112Transactor: UQ112x112Transactor{contract: contract}, UQ112x112Filterer: UQ112x112Filterer{contract: contract}}, nil
  4511  }
  4512  
  4513  // NewUQ112x112Caller creates a new read-only instance of UQ112x112, bound to a specific deployed contract.
  4514  func NewUQ112x112Caller(address common.Address, caller bind.ContractCaller) (*UQ112x112Caller, error) {
  4515  	contract, err := bindUQ112x112(address, caller, nil, nil)
  4516  	if err != nil {
  4517  		return nil, err
  4518  	}
  4519  	return &UQ112x112Caller{contract: contract}, nil
  4520  }
  4521  
  4522  // NewUQ112x112Transactor creates a new write-only instance of UQ112x112, bound to a specific deployed contract.
  4523  func NewUQ112x112Transactor(address common.Address, transactor bind.ContractTransactor) (*UQ112x112Transactor, error) {
  4524  	contract, err := bindUQ112x112(address, nil, transactor, nil)
  4525  	if err != nil {
  4526  		return nil, err
  4527  	}
  4528  	return &UQ112x112Transactor{contract: contract}, nil
  4529  }
  4530  
  4531  // NewUQ112x112Filterer creates a new log filterer instance of UQ112x112, bound to a specific deployed contract.
  4532  func NewUQ112x112Filterer(address common.Address, filterer bind.ContractFilterer) (*UQ112x112Filterer, error) {
  4533  	contract, err := bindUQ112x112(address, nil, nil, filterer)
  4534  	if err != nil {
  4535  		return nil, err
  4536  	}
  4537  	return &UQ112x112Filterer{contract: contract}, nil
  4538  }
  4539  
  4540  // bindUQ112x112 binds a generic wrapper to an already deployed contract.
  4541  func bindUQ112x112(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  4542  	parsed, err := abi.JSON(strings.NewReader(UQ112x112ABI))
  4543  	if err != nil {
  4544  		return nil, err
  4545  	}
  4546  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  4547  }
  4548  
  4549  // Call invokes the (constant) contract method with params as input values and
  4550  // sets the output to result. The result type might be a single field for simple
  4551  // returns, a slice of interfaces for anonymous returns and a struct for named
  4552  // returns.
  4553  func (_UQ112x112 *UQ112x112Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4554  	return _UQ112x112.Contract.UQ112x112Caller.contract.Call(opts, result, method, params...)
  4555  }
  4556  
  4557  // Transfer initiates a plain transaction to move funds to the contract, calling
  4558  // its default method if one is available.
  4559  func (_UQ112x112 *UQ112x112Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4560  	return _UQ112x112.Contract.UQ112x112Transactor.contract.Transfer(opts)
  4561  }
  4562  
  4563  // Transact invokes the (paid) contract method with params as input values.
  4564  func (_UQ112x112 *UQ112x112Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4565  	return _UQ112x112.Contract.UQ112x112Transactor.contract.Transact(opts, method, params...)
  4566  }
  4567  
  4568  // Call invokes the (constant) contract method with params as input values and
  4569  // sets the output to result. The result type might be a single field for simple
  4570  // returns, a slice of interfaces for anonymous returns and a struct for named
  4571  // returns.
  4572  func (_UQ112x112 *UQ112x112CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4573  	return _UQ112x112.Contract.contract.Call(opts, result, method, params...)
  4574  }
  4575  
  4576  // Transfer initiates a plain transaction to move funds to the contract, calling
  4577  // its default method if one is available.
  4578  func (_UQ112x112 *UQ112x112TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4579  	return _UQ112x112.Contract.contract.Transfer(opts)
  4580  }
  4581  
  4582  // Transact invokes the (paid) contract method with params as input values.
  4583  func (_UQ112x112 *UQ112x112TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4584  	return _UQ112x112.Contract.contract.Transact(opts, method, params...)
  4585  }
  4586  
  4587  // UniswapV2ERC20ABI is the input ABI used to generate the binding from.
  4588  const UniswapV2ERC20ABI = "[{\"inputs\":[],\"payable\":false,\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  4589  
  4590  // UniswapV2ERC20FuncSigs maps the 4-byte function signature to its string representation.
  4591  var UniswapV2ERC20FuncSigs = map[string]string{
  4592  	"3644e515": "DOMAIN_SEPARATOR()",
  4593  	"30adf81f": "PERMIT_TYPEHASH()",
  4594  	"dd62ed3e": "allowance(address,address)",
  4595  	"095ea7b3": "approve(address,uint256)",
  4596  	"70a08231": "balanceOf(address)",
  4597  	"313ce567": "decimals()",
  4598  	"06fdde03": "name()",
  4599  	"7ecebe00": "nonces(address)",
  4600  	"d505accf": "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)",
  4601  	"95d89b41": "symbol()",
  4602  	"18160ddd": "totalSupply()",
  4603  	"a9059cbb": "transfer(address,uint256)",
  4604  	"23b872dd": "transferFrom(address,address,uint256)",
  4605  }
  4606  
  4607  // UniswapV2ERC20Bin is the compiled bytecode used for deploying new contracts.
  4608  var UniswapV2ERC20Bin = "0x608060405234801561001057600080fd5b50604051469080605261096c8239604080519182900360520182208282018252600a8352692ab734b9bbb0b8102b1960b11b6020938401528151808301835260018152603160f81b908401528151808401919091527fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c0909401905282519201919091206003555061087e806100ee6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610336565b604080519115158252519081900360200190f35b61019961034d565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b03813581169160208101359091169060400135610353565b6101996103ed565b6101f1610411565b6040805160ff9092168252519081900360200190f35b610199610416565b6101996004803603602081101561022557600080fd5b50356001600160a01b031661041c565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042e565b6100dc610440565b61017d6004803603604081101561027957600080fd5b506001600160a01b038135169060200135610462565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561046f565b005b610199600480360360408110156102f857600080fd5b506001600160a01b0381358116916020013516610671565b6040518060400160405280600a8152602001692ab734b9bbb0b8102b1960b11b81525081565b600061034333848461068e565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d8576001600160a01b03841660009081526002602090815260408083203384529091529020546103b3908363ffffffff6106f016565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103e3848484610740565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b604051806040016040528060068152602001652aa72496ab1960d11b81525081565b6000610343338484610740565b428410156104b9576040805162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105d4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061060a5750886001600160a01b0316816001600160a01b0316145b61065b576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b61066689898961068e565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610347576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610769908263ffffffff6106f016565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461079e908263ffffffff6107fa16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610347576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820a647d610a0f93ca152fea9a6ef958de39c95cf4e9e974a5a281889af9fae156564736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429"
  4609  
  4610  // DeployUniswapV2ERC20 deploys a new Ethereum contract, binding an instance of UniswapV2ERC20 to it.
  4611  func DeployUniswapV2ERC20(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *UniswapV2ERC20, error) {
  4612  	parsed, err := abi.JSON(strings.NewReader(UniswapV2ERC20ABI))
  4613  	if err != nil {
  4614  		return common.Address{}, nil, nil, err
  4615  	}
  4616  
  4617  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(UniswapV2ERC20Bin), backend)
  4618  	if err != nil {
  4619  		return common.Address{}, nil, nil, err
  4620  	}
  4621  	return address, tx, &UniswapV2ERC20{UniswapV2ERC20Caller: UniswapV2ERC20Caller{contract: contract}, UniswapV2ERC20Transactor: UniswapV2ERC20Transactor{contract: contract}, UniswapV2ERC20Filterer: UniswapV2ERC20Filterer{contract: contract}}, nil
  4622  }
  4623  
  4624  // UniswapV2ERC20 is an auto generated Go binding around an Ethereum contract.
  4625  type UniswapV2ERC20 struct {
  4626  	UniswapV2ERC20Caller     // Read-only binding to the contract
  4627  	UniswapV2ERC20Transactor // Write-only binding to the contract
  4628  	UniswapV2ERC20Filterer   // Log filterer for contract events
  4629  }
  4630  
  4631  // UniswapV2ERC20Caller is an auto generated read-only Go binding around an Ethereum contract.
  4632  type UniswapV2ERC20Caller struct {
  4633  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4634  }
  4635  
  4636  // UniswapV2ERC20Transactor is an auto generated write-only Go binding around an Ethereum contract.
  4637  type UniswapV2ERC20Transactor struct {
  4638  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4639  }
  4640  
  4641  // UniswapV2ERC20Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
  4642  type UniswapV2ERC20Filterer struct {
  4643  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4644  }
  4645  
  4646  // UniswapV2ERC20Session is an auto generated Go binding around an Ethereum contract,
  4647  // with pre-set call and transact options.
  4648  type UniswapV2ERC20Session struct {
  4649  	Contract     *UniswapV2ERC20   // Generic contract binding to set the session for
  4650  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  4651  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  4652  }
  4653  
  4654  // UniswapV2ERC20CallerSession is an auto generated read-only Go binding around an Ethereum contract,
  4655  // with pre-set call options.
  4656  type UniswapV2ERC20CallerSession struct {
  4657  	Contract *UniswapV2ERC20Caller // Generic contract caller binding to set the session for
  4658  	CallOpts bind.CallOpts         // Call options to use throughout this session
  4659  }
  4660  
  4661  // UniswapV2ERC20TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  4662  // with pre-set transact options.
  4663  type UniswapV2ERC20TransactorSession struct {
  4664  	Contract     *UniswapV2ERC20Transactor // Generic contract transactor binding to set the session for
  4665  	TransactOpts bind.TransactOpts         // Transaction auth options to use throughout this session
  4666  }
  4667  
  4668  // UniswapV2ERC20Raw is an auto generated low-level Go binding around an Ethereum contract.
  4669  type UniswapV2ERC20Raw struct {
  4670  	Contract *UniswapV2ERC20 // Generic contract binding to access the raw methods on
  4671  }
  4672  
  4673  // UniswapV2ERC20CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  4674  type UniswapV2ERC20CallerRaw struct {
  4675  	Contract *UniswapV2ERC20Caller // Generic read-only contract binding to access the raw methods on
  4676  }
  4677  
  4678  // UniswapV2ERC20TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  4679  type UniswapV2ERC20TransactorRaw struct {
  4680  	Contract *UniswapV2ERC20Transactor // Generic write-only contract binding to access the raw methods on
  4681  }
  4682  
  4683  // NewUniswapV2ERC20 creates a new instance of UniswapV2ERC20, bound to a specific deployed contract.
  4684  func NewUniswapV2ERC20(address common.Address, backend bind.ContractBackend) (*UniswapV2ERC20, error) {
  4685  	contract, err := bindUniswapV2ERC20(address, backend, backend, backend)
  4686  	if err != nil {
  4687  		return nil, err
  4688  	}
  4689  	return &UniswapV2ERC20{UniswapV2ERC20Caller: UniswapV2ERC20Caller{contract: contract}, UniswapV2ERC20Transactor: UniswapV2ERC20Transactor{contract: contract}, UniswapV2ERC20Filterer: UniswapV2ERC20Filterer{contract: contract}}, nil
  4690  }
  4691  
  4692  // NewUniswapV2ERC20Caller creates a new read-only instance of UniswapV2ERC20, bound to a specific deployed contract.
  4693  func NewUniswapV2ERC20Caller(address common.Address, caller bind.ContractCaller) (*UniswapV2ERC20Caller, error) {
  4694  	contract, err := bindUniswapV2ERC20(address, caller, nil, nil)
  4695  	if err != nil {
  4696  		return nil, err
  4697  	}
  4698  	return &UniswapV2ERC20Caller{contract: contract}, nil
  4699  }
  4700  
  4701  // NewUniswapV2ERC20Transactor creates a new write-only instance of UniswapV2ERC20, bound to a specific deployed contract.
  4702  func NewUniswapV2ERC20Transactor(address common.Address, transactor bind.ContractTransactor) (*UniswapV2ERC20Transactor, error) {
  4703  	contract, err := bindUniswapV2ERC20(address, nil, transactor, nil)
  4704  	if err != nil {
  4705  		return nil, err
  4706  	}
  4707  	return &UniswapV2ERC20Transactor{contract: contract}, nil
  4708  }
  4709  
  4710  // NewUniswapV2ERC20Filterer creates a new log filterer instance of UniswapV2ERC20, bound to a specific deployed contract.
  4711  func NewUniswapV2ERC20Filterer(address common.Address, filterer bind.ContractFilterer) (*UniswapV2ERC20Filterer, error) {
  4712  	contract, err := bindUniswapV2ERC20(address, nil, nil, filterer)
  4713  	if err != nil {
  4714  		return nil, err
  4715  	}
  4716  	return &UniswapV2ERC20Filterer{contract: contract}, nil
  4717  }
  4718  
  4719  // bindUniswapV2ERC20 binds a generic wrapper to an already deployed contract.
  4720  func bindUniswapV2ERC20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  4721  	parsed, err := abi.JSON(strings.NewReader(UniswapV2ERC20ABI))
  4722  	if err != nil {
  4723  		return nil, err
  4724  	}
  4725  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  4726  }
  4727  
  4728  // Call invokes the (constant) contract method with params as input values and
  4729  // sets the output to result. The result type might be a single field for simple
  4730  // returns, a slice of interfaces for anonymous returns and a struct for named
  4731  // returns.
  4732  func (_UniswapV2ERC20 *UniswapV2ERC20Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4733  	return _UniswapV2ERC20.Contract.UniswapV2ERC20Caller.contract.Call(opts, result, method, params...)
  4734  }
  4735  
  4736  // Transfer initiates a plain transaction to move funds to the contract, calling
  4737  // its default method if one is available.
  4738  func (_UniswapV2ERC20 *UniswapV2ERC20Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4739  	return _UniswapV2ERC20.Contract.UniswapV2ERC20Transactor.contract.Transfer(opts)
  4740  }
  4741  
  4742  // Transact invokes the (paid) contract method with params as input values.
  4743  func (_UniswapV2ERC20 *UniswapV2ERC20Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4744  	return _UniswapV2ERC20.Contract.UniswapV2ERC20Transactor.contract.Transact(opts, method, params...)
  4745  }
  4746  
  4747  // Call invokes the (constant) contract method with params as input values and
  4748  // sets the output to result. The result type might be a single field for simple
  4749  // returns, a slice of interfaces for anonymous returns and a struct for named
  4750  // returns.
  4751  func (_UniswapV2ERC20 *UniswapV2ERC20CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4752  	return _UniswapV2ERC20.Contract.contract.Call(opts, result, method, params...)
  4753  }
  4754  
  4755  // Transfer initiates a plain transaction to move funds to the contract, calling
  4756  // its default method if one is available.
  4757  func (_UniswapV2ERC20 *UniswapV2ERC20TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4758  	return _UniswapV2ERC20.Contract.contract.Transfer(opts)
  4759  }
  4760  
  4761  // Transact invokes the (paid) contract method with params as input values.
  4762  func (_UniswapV2ERC20 *UniswapV2ERC20TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4763  	return _UniswapV2ERC20.Contract.contract.Transact(opts, method, params...)
  4764  }
  4765  
  4766  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  4767  //
  4768  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  4769  func (_UniswapV2ERC20 *UniswapV2ERC20Caller) DOMAINSEPARATOR(opts *bind.CallOpts) ([32]byte, error) {
  4770  	var out []interface{}
  4771  	err := _UniswapV2ERC20.contract.Call(opts, &out, "DOMAIN_SEPARATOR")
  4772  
  4773  	if err != nil {
  4774  		return *new([32]byte), err
  4775  	}
  4776  
  4777  	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
  4778  
  4779  	return out0, err
  4780  
  4781  }
  4782  
  4783  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  4784  //
  4785  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  4786  func (_UniswapV2ERC20 *UniswapV2ERC20Session) DOMAINSEPARATOR() ([32]byte, error) {
  4787  	return _UniswapV2ERC20.Contract.DOMAINSEPARATOR(&_UniswapV2ERC20.CallOpts)
  4788  }
  4789  
  4790  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  4791  //
  4792  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  4793  func (_UniswapV2ERC20 *UniswapV2ERC20CallerSession) DOMAINSEPARATOR() ([32]byte, error) {
  4794  	return _UniswapV2ERC20.Contract.DOMAINSEPARATOR(&_UniswapV2ERC20.CallOpts)
  4795  }
  4796  
  4797  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  4798  //
  4799  // Solidity: function PERMIT_TYPEHASH() view returns(bytes32)
  4800  func (_UniswapV2ERC20 *UniswapV2ERC20Caller) PERMITTYPEHASH(opts *bind.CallOpts) ([32]byte, error) {
  4801  	var out []interface{}
  4802  	err := _UniswapV2ERC20.contract.Call(opts, &out, "PERMIT_TYPEHASH")
  4803  
  4804  	if err != nil {
  4805  		return *new([32]byte), err
  4806  	}
  4807  
  4808  	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
  4809  
  4810  	return out0, err
  4811  
  4812  }
  4813  
  4814  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  4815  //
  4816  // Solidity: function PERMIT_TYPEHASH() view returns(bytes32)
  4817  func (_UniswapV2ERC20 *UniswapV2ERC20Session) PERMITTYPEHASH() ([32]byte, error) {
  4818  	return _UniswapV2ERC20.Contract.PERMITTYPEHASH(&_UniswapV2ERC20.CallOpts)
  4819  }
  4820  
  4821  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  4822  //
  4823  // Solidity: function PERMIT_TYPEHASH() view returns(bytes32)
  4824  func (_UniswapV2ERC20 *UniswapV2ERC20CallerSession) PERMITTYPEHASH() ([32]byte, error) {
  4825  	return _UniswapV2ERC20.Contract.PERMITTYPEHASH(&_UniswapV2ERC20.CallOpts)
  4826  }
  4827  
  4828  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  4829  //
  4830  // Solidity: function allowance(address , address ) view returns(uint256)
  4831  func (_UniswapV2ERC20 *UniswapV2ERC20Caller) Allowance(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) {
  4832  	var out []interface{}
  4833  	err := _UniswapV2ERC20.contract.Call(opts, &out, "allowance", arg0, arg1)
  4834  
  4835  	if err != nil {
  4836  		return *new(*big.Int), err
  4837  	}
  4838  
  4839  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  4840  
  4841  	return out0, err
  4842  
  4843  }
  4844  
  4845  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  4846  //
  4847  // Solidity: function allowance(address , address ) view returns(uint256)
  4848  func (_UniswapV2ERC20 *UniswapV2ERC20Session) Allowance(arg0 common.Address, arg1 common.Address) (*big.Int, error) {
  4849  	return _UniswapV2ERC20.Contract.Allowance(&_UniswapV2ERC20.CallOpts, arg0, arg1)
  4850  }
  4851  
  4852  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  4853  //
  4854  // Solidity: function allowance(address , address ) view returns(uint256)
  4855  func (_UniswapV2ERC20 *UniswapV2ERC20CallerSession) Allowance(arg0 common.Address, arg1 common.Address) (*big.Int, error) {
  4856  	return _UniswapV2ERC20.Contract.Allowance(&_UniswapV2ERC20.CallOpts, arg0, arg1)
  4857  }
  4858  
  4859  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  4860  //
  4861  // Solidity: function balanceOf(address ) view returns(uint256)
  4862  func (_UniswapV2ERC20 *UniswapV2ERC20Caller) BalanceOf(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) {
  4863  	var out []interface{}
  4864  	err := _UniswapV2ERC20.contract.Call(opts, &out, "balanceOf", arg0)
  4865  
  4866  	if err != nil {
  4867  		return *new(*big.Int), err
  4868  	}
  4869  
  4870  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  4871  
  4872  	return out0, err
  4873  
  4874  }
  4875  
  4876  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  4877  //
  4878  // Solidity: function balanceOf(address ) view returns(uint256)
  4879  func (_UniswapV2ERC20 *UniswapV2ERC20Session) BalanceOf(arg0 common.Address) (*big.Int, error) {
  4880  	return _UniswapV2ERC20.Contract.BalanceOf(&_UniswapV2ERC20.CallOpts, arg0)
  4881  }
  4882  
  4883  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  4884  //
  4885  // Solidity: function balanceOf(address ) view returns(uint256)
  4886  func (_UniswapV2ERC20 *UniswapV2ERC20CallerSession) BalanceOf(arg0 common.Address) (*big.Int, error) {
  4887  	return _UniswapV2ERC20.Contract.BalanceOf(&_UniswapV2ERC20.CallOpts, arg0)
  4888  }
  4889  
  4890  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  4891  //
  4892  // Solidity: function decimals() view returns(uint8)
  4893  func (_UniswapV2ERC20 *UniswapV2ERC20Caller) Decimals(opts *bind.CallOpts) (uint8, error) {
  4894  	var out []interface{}
  4895  	err := _UniswapV2ERC20.contract.Call(opts, &out, "decimals")
  4896  
  4897  	if err != nil {
  4898  		return *new(uint8), err
  4899  	}
  4900  
  4901  	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
  4902  
  4903  	return out0, err
  4904  
  4905  }
  4906  
  4907  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  4908  //
  4909  // Solidity: function decimals() view returns(uint8)
  4910  func (_UniswapV2ERC20 *UniswapV2ERC20Session) Decimals() (uint8, error) {
  4911  	return _UniswapV2ERC20.Contract.Decimals(&_UniswapV2ERC20.CallOpts)
  4912  }
  4913  
  4914  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  4915  //
  4916  // Solidity: function decimals() view returns(uint8)
  4917  func (_UniswapV2ERC20 *UniswapV2ERC20CallerSession) Decimals() (uint8, error) {
  4918  	return _UniswapV2ERC20.Contract.Decimals(&_UniswapV2ERC20.CallOpts)
  4919  }
  4920  
  4921  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  4922  //
  4923  // Solidity: function name() view returns(string)
  4924  func (_UniswapV2ERC20 *UniswapV2ERC20Caller) Name(opts *bind.CallOpts) (string, error) {
  4925  	var out []interface{}
  4926  	err := _UniswapV2ERC20.contract.Call(opts, &out, "name")
  4927  
  4928  	if err != nil {
  4929  		return *new(string), err
  4930  	}
  4931  
  4932  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  4933  
  4934  	return out0, err
  4935  
  4936  }
  4937  
  4938  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  4939  //
  4940  // Solidity: function name() view returns(string)
  4941  func (_UniswapV2ERC20 *UniswapV2ERC20Session) Name() (string, error) {
  4942  	return _UniswapV2ERC20.Contract.Name(&_UniswapV2ERC20.CallOpts)
  4943  }
  4944  
  4945  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  4946  //
  4947  // Solidity: function name() view returns(string)
  4948  func (_UniswapV2ERC20 *UniswapV2ERC20CallerSession) Name() (string, error) {
  4949  	return _UniswapV2ERC20.Contract.Name(&_UniswapV2ERC20.CallOpts)
  4950  }
  4951  
  4952  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  4953  //
  4954  // Solidity: function nonces(address ) view returns(uint256)
  4955  func (_UniswapV2ERC20 *UniswapV2ERC20Caller) Nonces(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) {
  4956  	var out []interface{}
  4957  	err := _UniswapV2ERC20.contract.Call(opts, &out, "nonces", arg0)
  4958  
  4959  	if err != nil {
  4960  		return *new(*big.Int), err
  4961  	}
  4962  
  4963  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  4964  
  4965  	return out0, err
  4966  
  4967  }
  4968  
  4969  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  4970  //
  4971  // Solidity: function nonces(address ) view returns(uint256)
  4972  func (_UniswapV2ERC20 *UniswapV2ERC20Session) Nonces(arg0 common.Address) (*big.Int, error) {
  4973  	return _UniswapV2ERC20.Contract.Nonces(&_UniswapV2ERC20.CallOpts, arg0)
  4974  }
  4975  
  4976  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  4977  //
  4978  // Solidity: function nonces(address ) view returns(uint256)
  4979  func (_UniswapV2ERC20 *UniswapV2ERC20CallerSession) Nonces(arg0 common.Address) (*big.Int, error) {
  4980  	return _UniswapV2ERC20.Contract.Nonces(&_UniswapV2ERC20.CallOpts, arg0)
  4981  }
  4982  
  4983  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  4984  //
  4985  // Solidity: function symbol() view returns(string)
  4986  func (_UniswapV2ERC20 *UniswapV2ERC20Caller) Symbol(opts *bind.CallOpts) (string, error) {
  4987  	var out []interface{}
  4988  	err := _UniswapV2ERC20.contract.Call(opts, &out, "symbol")
  4989  
  4990  	if err != nil {
  4991  		return *new(string), err
  4992  	}
  4993  
  4994  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  4995  
  4996  	return out0, err
  4997  
  4998  }
  4999  
  5000  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  5001  //
  5002  // Solidity: function symbol() view returns(string)
  5003  func (_UniswapV2ERC20 *UniswapV2ERC20Session) Symbol() (string, error) {
  5004  	return _UniswapV2ERC20.Contract.Symbol(&_UniswapV2ERC20.CallOpts)
  5005  }
  5006  
  5007  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  5008  //
  5009  // Solidity: function symbol() view returns(string)
  5010  func (_UniswapV2ERC20 *UniswapV2ERC20CallerSession) Symbol() (string, error) {
  5011  	return _UniswapV2ERC20.Contract.Symbol(&_UniswapV2ERC20.CallOpts)
  5012  }
  5013  
  5014  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  5015  //
  5016  // Solidity: function totalSupply() view returns(uint256)
  5017  func (_UniswapV2ERC20 *UniswapV2ERC20Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  5018  	var out []interface{}
  5019  	err := _UniswapV2ERC20.contract.Call(opts, &out, "totalSupply")
  5020  
  5021  	if err != nil {
  5022  		return *new(*big.Int), err
  5023  	}
  5024  
  5025  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5026  
  5027  	return out0, err
  5028  
  5029  }
  5030  
  5031  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  5032  //
  5033  // Solidity: function totalSupply() view returns(uint256)
  5034  func (_UniswapV2ERC20 *UniswapV2ERC20Session) TotalSupply() (*big.Int, error) {
  5035  	return _UniswapV2ERC20.Contract.TotalSupply(&_UniswapV2ERC20.CallOpts)
  5036  }
  5037  
  5038  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  5039  //
  5040  // Solidity: function totalSupply() view returns(uint256)
  5041  func (_UniswapV2ERC20 *UniswapV2ERC20CallerSession) TotalSupply() (*big.Int, error) {
  5042  	return _UniswapV2ERC20.Contract.TotalSupply(&_UniswapV2ERC20.CallOpts)
  5043  }
  5044  
  5045  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  5046  //
  5047  // Solidity: function approve(address spender, uint256 value) returns(bool)
  5048  func (_UniswapV2ERC20 *UniswapV2ERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) {
  5049  	return _UniswapV2ERC20.contract.Transact(opts, "approve", spender, value)
  5050  }
  5051  
  5052  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  5053  //
  5054  // Solidity: function approve(address spender, uint256 value) returns(bool)
  5055  func (_UniswapV2ERC20 *UniswapV2ERC20Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
  5056  	return _UniswapV2ERC20.Contract.Approve(&_UniswapV2ERC20.TransactOpts, spender, value)
  5057  }
  5058  
  5059  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  5060  //
  5061  // Solidity: function approve(address spender, uint256 value) returns(bool)
  5062  func (_UniswapV2ERC20 *UniswapV2ERC20TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
  5063  	return _UniswapV2ERC20.Contract.Approve(&_UniswapV2ERC20.TransactOpts, spender, value)
  5064  }
  5065  
  5066  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  5067  //
  5068  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  5069  func (_UniswapV2ERC20 *UniswapV2ERC20Transactor) Permit(opts *bind.TransactOpts, owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  5070  	return _UniswapV2ERC20.contract.Transact(opts, "permit", owner, spender, value, deadline, v, r, s)
  5071  }
  5072  
  5073  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  5074  //
  5075  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  5076  func (_UniswapV2ERC20 *UniswapV2ERC20Session) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  5077  	return _UniswapV2ERC20.Contract.Permit(&_UniswapV2ERC20.TransactOpts, owner, spender, value, deadline, v, r, s)
  5078  }
  5079  
  5080  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  5081  //
  5082  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  5083  func (_UniswapV2ERC20 *UniswapV2ERC20TransactorSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  5084  	return _UniswapV2ERC20.Contract.Permit(&_UniswapV2ERC20.TransactOpts, owner, spender, value, deadline, v, r, s)
  5085  }
  5086  
  5087  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  5088  //
  5089  // Solidity: function transfer(address to, uint256 value) returns(bool)
  5090  func (_UniswapV2ERC20 *UniswapV2ERC20Transactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) {
  5091  	return _UniswapV2ERC20.contract.Transact(opts, "transfer", to, value)
  5092  }
  5093  
  5094  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  5095  //
  5096  // Solidity: function transfer(address to, uint256 value) returns(bool)
  5097  func (_UniswapV2ERC20 *UniswapV2ERC20Session) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
  5098  	return _UniswapV2ERC20.Contract.Transfer(&_UniswapV2ERC20.TransactOpts, to, value)
  5099  }
  5100  
  5101  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  5102  //
  5103  // Solidity: function transfer(address to, uint256 value) returns(bool)
  5104  func (_UniswapV2ERC20 *UniswapV2ERC20TransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
  5105  	return _UniswapV2ERC20.Contract.Transfer(&_UniswapV2ERC20.TransactOpts, to, value)
  5106  }
  5107  
  5108  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  5109  //
  5110  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  5111  func (_UniswapV2ERC20 *UniswapV2ERC20Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  5112  	return _UniswapV2ERC20.contract.Transact(opts, "transferFrom", from, to, value)
  5113  }
  5114  
  5115  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  5116  //
  5117  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  5118  func (_UniswapV2ERC20 *UniswapV2ERC20Session) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  5119  	return _UniswapV2ERC20.Contract.TransferFrom(&_UniswapV2ERC20.TransactOpts, from, to, value)
  5120  }
  5121  
  5122  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  5123  //
  5124  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  5125  func (_UniswapV2ERC20 *UniswapV2ERC20TransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  5126  	return _UniswapV2ERC20.Contract.TransferFrom(&_UniswapV2ERC20.TransactOpts, from, to, value)
  5127  }
  5128  
  5129  // UniswapV2ERC20ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the UniswapV2ERC20 contract.
  5130  type UniswapV2ERC20ApprovalIterator struct {
  5131  	Event *UniswapV2ERC20Approval // Event containing the contract specifics and raw log
  5132  
  5133  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  5134  	event    string              // Event name to use for unpacking event data
  5135  
  5136  	logs chan types.Log        // Log channel receiving the found contract events
  5137  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  5138  	done bool                  // Whether the subscription completed delivering logs
  5139  	fail error                 // Occurred error to stop iteration
  5140  }
  5141  
  5142  // Next advances the iterator to the subsequent event, returning whether there
  5143  // are any more events found. In case of a retrieval or parsing error, false is
  5144  // returned and Error() can be queried for the exact failure.
  5145  func (it *UniswapV2ERC20ApprovalIterator) Next() bool {
  5146  	// If the iterator failed, stop iterating
  5147  	if it.fail != nil {
  5148  		return false
  5149  	}
  5150  	// If the iterator completed, deliver directly whatever's available
  5151  	if it.done {
  5152  		select {
  5153  		case log := <-it.logs:
  5154  			it.Event = new(UniswapV2ERC20Approval)
  5155  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5156  				it.fail = err
  5157  				return false
  5158  			}
  5159  			it.Event.Raw = log
  5160  			return true
  5161  
  5162  		default:
  5163  			return false
  5164  		}
  5165  	}
  5166  	// Iterator still in progress, wait for either a data or an error event
  5167  	select {
  5168  	case log := <-it.logs:
  5169  		it.Event = new(UniswapV2ERC20Approval)
  5170  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5171  			it.fail = err
  5172  			return false
  5173  		}
  5174  		it.Event.Raw = log
  5175  		return true
  5176  
  5177  	case err := <-it.sub.Err():
  5178  		it.done = true
  5179  		it.fail = err
  5180  		return it.Next()
  5181  	}
  5182  }
  5183  
  5184  // Error returns any retrieval or parsing error occurred during filtering.
  5185  func (it *UniswapV2ERC20ApprovalIterator) Error() error {
  5186  	return it.fail
  5187  }
  5188  
  5189  // Close terminates the iteration process, releasing any pending underlying
  5190  // resources.
  5191  func (it *UniswapV2ERC20ApprovalIterator) Close() error {
  5192  	it.sub.Unsubscribe()
  5193  	return nil
  5194  }
  5195  
  5196  // UniswapV2ERC20Approval represents a Approval event raised by the UniswapV2ERC20 contract.
  5197  type UniswapV2ERC20Approval struct {
  5198  	Owner   common.Address
  5199  	Spender common.Address
  5200  	Value   *big.Int
  5201  	Raw     types.Log // Blockchain specific contextual infos
  5202  }
  5203  
  5204  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  5205  //
  5206  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  5207  func (_UniswapV2ERC20 *UniswapV2ERC20Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*UniswapV2ERC20ApprovalIterator, error) {
  5208  
  5209  	var ownerRule []interface{}
  5210  	for _, ownerItem := range owner {
  5211  		ownerRule = append(ownerRule, ownerItem)
  5212  	}
  5213  	var spenderRule []interface{}
  5214  	for _, spenderItem := range spender {
  5215  		spenderRule = append(spenderRule, spenderItem)
  5216  	}
  5217  
  5218  	logs, sub, err := _UniswapV2ERC20.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
  5219  	if err != nil {
  5220  		return nil, err
  5221  	}
  5222  	return &UniswapV2ERC20ApprovalIterator{contract: _UniswapV2ERC20.contract, event: "Approval", logs: logs, sub: sub}, nil
  5223  }
  5224  
  5225  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  5226  //
  5227  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  5228  func (_UniswapV2ERC20 *UniswapV2ERC20Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *UniswapV2ERC20Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
  5229  
  5230  	var ownerRule []interface{}
  5231  	for _, ownerItem := range owner {
  5232  		ownerRule = append(ownerRule, ownerItem)
  5233  	}
  5234  	var spenderRule []interface{}
  5235  	for _, spenderItem := range spender {
  5236  		spenderRule = append(spenderRule, spenderItem)
  5237  	}
  5238  
  5239  	logs, sub, err := _UniswapV2ERC20.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
  5240  	if err != nil {
  5241  		return nil, err
  5242  	}
  5243  	return event.NewSubscription(func(quit <-chan struct{}) error {
  5244  		defer sub.Unsubscribe()
  5245  		for {
  5246  			select {
  5247  			case log := <-logs:
  5248  				// New log arrived, parse the event and forward to the user
  5249  				event := new(UniswapV2ERC20Approval)
  5250  				if err := _UniswapV2ERC20.contract.UnpackLog(event, "Approval", log); err != nil {
  5251  					return err
  5252  				}
  5253  				event.Raw = log
  5254  
  5255  				select {
  5256  				case sink <- event:
  5257  				case err := <-sub.Err():
  5258  					return err
  5259  				case <-quit:
  5260  					return nil
  5261  				}
  5262  			case err := <-sub.Err():
  5263  				return err
  5264  			case <-quit:
  5265  				return nil
  5266  			}
  5267  		}
  5268  	}), nil
  5269  }
  5270  
  5271  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  5272  //
  5273  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  5274  func (_UniswapV2ERC20 *UniswapV2ERC20Filterer) ParseApproval(log types.Log) (*UniswapV2ERC20Approval, error) {
  5275  	event := new(UniswapV2ERC20Approval)
  5276  	if err := _UniswapV2ERC20.contract.UnpackLog(event, "Approval", log); err != nil {
  5277  		return nil, err
  5278  	}
  5279  	return event, nil
  5280  }
  5281  
  5282  // UniswapV2ERC20TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the UniswapV2ERC20 contract.
  5283  type UniswapV2ERC20TransferIterator struct {
  5284  	Event *UniswapV2ERC20Transfer // Event containing the contract specifics and raw log
  5285  
  5286  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  5287  	event    string              // Event name to use for unpacking event data
  5288  
  5289  	logs chan types.Log        // Log channel receiving the found contract events
  5290  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  5291  	done bool                  // Whether the subscription completed delivering logs
  5292  	fail error                 // Occurred error to stop iteration
  5293  }
  5294  
  5295  // Next advances the iterator to the subsequent event, returning whether there
  5296  // are any more events found. In case of a retrieval or parsing error, false is
  5297  // returned and Error() can be queried for the exact failure.
  5298  func (it *UniswapV2ERC20TransferIterator) Next() bool {
  5299  	// If the iterator failed, stop iterating
  5300  	if it.fail != nil {
  5301  		return false
  5302  	}
  5303  	// If the iterator completed, deliver directly whatever's available
  5304  	if it.done {
  5305  		select {
  5306  		case log := <-it.logs:
  5307  			it.Event = new(UniswapV2ERC20Transfer)
  5308  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5309  				it.fail = err
  5310  				return false
  5311  			}
  5312  			it.Event.Raw = log
  5313  			return true
  5314  
  5315  		default:
  5316  			return false
  5317  		}
  5318  	}
  5319  	// Iterator still in progress, wait for either a data or an error event
  5320  	select {
  5321  	case log := <-it.logs:
  5322  		it.Event = new(UniswapV2ERC20Transfer)
  5323  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5324  			it.fail = err
  5325  			return false
  5326  		}
  5327  		it.Event.Raw = log
  5328  		return true
  5329  
  5330  	case err := <-it.sub.Err():
  5331  		it.done = true
  5332  		it.fail = err
  5333  		return it.Next()
  5334  	}
  5335  }
  5336  
  5337  // Error returns any retrieval or parsing error occurred during filtering.
  5338  func (it *UniswapV2ERC20TransferIterator) Error() error {
  5339  	return it.fail
  5340  }
  5341  
  5342  // Close terminates the iteration process, releasing any pending underlying
  5343  // resources.
  5344  func (it *UniswapV2ERC20TransferIterator) Close() error {
  5345  	it.sub.Unsubscribe()
  5346  	return nil
  5347  }
  5348  
  5349  // UniswapV2ERC20Transfer represents a Transfer event raised by the UniswapV2ERC20 contract.
  5350  type UniswapV2ERC20Transfer struct {
  5351  	From  common.Address
  5352  	To    common.Address
  5353  	Value *big.Int
  5354  	Raw   types.Log // Blockchain specific contextual infos
  5355  }
  5356  
  5357  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  5358  //
  5359  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  5360  func (_UniswapV2ERC20 *UniswapV2ERC20Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*UniswapV2ERC20TransferIterator, error) {
  5361  
  5362  	var fromRule []interface{}
  5363  	for _, fromItem := range from {
  5364  		fromRule = append(fromRule, fromItem)
  5365  	}
  5366  	var toRule []interface{}
  5367  	for _, toItem := range to {
  5368  		toRule = append(toRule, toItem)
  5369  	}
  5370  
  5371  	logs, sub, err := _UniswapV2ERC20.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
  5372  	if err != nil {
  5373  		return nil, err
  5374  	}
  5375  	return &UniswapV2ERC20TransferIterator{contract: _UniswapV2ERC20.contract, event: "Transfer", logs: logs, sub: sub}, nil
  5376  }
  5377  
  5378  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  5379  //
  5380  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  5381  func (_UniswapV2ERC20 *UniswapV2ERC20Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *UniswapV2ERC20Transfer, from []common.Address, to []common.Address) (event.Subscription, error) {
  5382  
  5383  	var fromRule []interface{}
  5384  	for _, fromItem := range from {
  5385  		fromRule = append(fromRule, fromItem)
  5386  	}
  5387  	var toRule []interface{}
  5388  	for _, toItem := range to {
  5389  		toRule = append(toRule, toItem)
  5390  	}
  5391  
  5392  	logs, sub, err := _UniswapV2ERC20.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
  5393  	if err != nil {
  5394  		return nil, err
  5395  	}
  5396  	return event.NewSubscription(func(quit <-chan struct{}) error {
  5397  		defer sub.Unsubscribe()
  5398  		for {
  5399  			select {
  5400  			case log := <-logs:
  5401  				// New log arrived, parse the event and forward to the user
  5402  				event := new(UniswapV2ERC20Transfer)
  5403  				if err := _UniswapV2ERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
  5404  					return err
  5405  				}
  5406  				event.Raw = log
  5407  
  5408  				select {
  5409  				case sink <- event:
  5410  				case err := <-sub.Err():
  5411  					return err
  5412  				case <-quit:
  5413  					return nil
  5414  				}
  5415  			case err := <-sub.Err():
  5416  				return err
  5417  			case <-quit:
  5418  				return nil
  5419  			}
  5420  		}
  5421  	}), nil
  5422  }
  5423  
  5424  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  5425  //
  5426  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  5427  func (_UniswapV2ERC20 *UniswapV2ERC20Filterer) ParseTransfer(log types.Log) (*UniswapV2ERC20Transfer, error) {
  5428  	event := new(UniswapV2ERC20Transfer)
  5429  	if err := _UniswapV2ERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
  5430  		return nil, err
  5431  	}
  5432  	return event, nil
  5433  }
  5434  
  5435  // UniswapV2PairABI is the input ABI used to generate the binding from.
  5436  const UniswapV2PairABI = "[{\"inputs\":[],\"payable\":false,\"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\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"}],\"name\":\"Sync\",\"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\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MINIMUM_LIQUIDITY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"_reserve0\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"_reserve1\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"_blockTimestampLast\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"kLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"price0CumulativeLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"price1CumulativeLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"skim\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"sync\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  5437  
  5438  // UniswapV2PairFuncSigs maps the 4-byte function signature to its string representation.
  5439  var UniswapV2PairFuncSigs = map[string]string{
  5440  	"3644e515": "DOMAIN_SEPARATOR()",
  5441  	"ba9a7a56": "MINIMUM_LIQUIDITY()",
  5442  	"30adf81f": "PERMIT_TYPEHASH()",
  5443  	"dd62ed3e": "allowance(address,address)",
  5444  	"095ea7b3": "approve(address,uint256)",
  5445  	"70a08231": "balanceOf(address)",
  5446  	"89afcb44": "burn(address)",
  5447  	"313ce567": "decimals()",
  5448  	"c45a0155": "factory()",
  5449  	"0902f1ac": "getReserves()",
  5450  	"485cc955": "initialize(address,address)",
  5451  	"7464fc3d": "kLast()",
  5452  	"6a627842": "mint(address)",
  5453  	"06fdde03": "name()",
  5454  	"7ecebe00": "nonces(address)",
  5455  	"d505accf": "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)",
  5456  	"5909c0d5": "price0CumulativeLast()",
  5457  	"5a3d5493": "price1CumulativeLast()",
  5458  	"bc25cf77": "skim(address)",
  5459  	"022c0d9f": "swap(uint256,uint256,address,bytes)",
  5460  	"95d89b41": "symbol()",
  5461  	"fff6cae9": "sync()",
  5462  	"0dfe1681": "token0()",
  5463  	"d21220a7": "token1()",
  5464  	"18160ddd": "totalSupply()",
  5465  	"a9059cbb": "transfer(address,uint256)",
  5466  	"23b872dd": "transferFrom(address,address,uint256)",
  5467  }
  5468  
  5469  // UniswapV2PairBin is the compiled bytecode used for deploying new contracts.
  5470  var UniswapV2PairBin = "0x60806040526001600c5534801561001557600080fd5b5060405146908060526123868239604080519182900360520182208282018252600a8352692ab734b9bbb0b8102b1960b11b6020938401528151808301835260018152603160f81b908401528151808401919091527fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612281806101056000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610afe565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b24565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b4e565b604080519115158252519081900360200190f35b610339610b65565b604080516001600160a01b039092168252519081900360200190f35b61035d610b74565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b7a565b61035d610c14565b6103b5610c38565b6040805160ff9092168252519081900360200190f35b61035d610c3d565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c43565b61035d610cc7565b61035d610ccd565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cd3565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fd3565b61035d610fe5565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610feb565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316610ffd565b6040805192835260208301919091528051918290030190f35b6102446113a3565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113c5565b61035d6113d2565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113d8565b610339611543565b610339611552565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611561565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611763565b61023a611780565b600c5460011461060e576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55841515806106215750600084115b61065c5760405162461bcd60e51b81526004018080602001828103825260258152602001806121936025913960400191505060405180910390fd5b600080610667610b24565b5091509150816001600160701b03168710801561068c5750806001600160701b031686105b6106c75760405162461bcd60e51b81526004018080602001828103825260218152602001806121dc6021913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107055750806001600160a01b0316896001600160a01b031614155b61074e576040805162461bcd60e51b8152602060048201526015602482015274556e697377617056323a20494e56414c49445f544f60581b604482015290519081900360640190fd5b8a1561075f5761075f828a8d6118e2565b891561077057610770818a8c6118e2565b861561082b57886001600160a01b03166310d1e85c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561081257600080fd5b505af1158015610826573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561087157600080fd5b505afa158015610885573d6000803e3d6000fd5b505050506040513d602081101561089b57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108e757600080fd5b505afa1580156108fb573d6000803e3d6000fd5b505050506040513d602081101561091157600080fd5b5051925060009150506001600160701b0385168a90038311610934576000610943565b89856001600160701b03160383035b9050600089856001600160701b031603831161096057600061096f565b89856001600160701b03160383035b905060008211806109805750600081115b6109bb5760405162461bcd60e51b81526004018080602001828103825260248152602001806121b86024913960400191505060405180910390fd5b60006109ef6109d184600363ffffffff611a7c16565b6109e3876103e863ffffffff611a7c16565b9063ffffffff611adf16565b90506000610a076109d184600363ffffffff611a7c16565b9050610a38620f4240610a2c6001600160701b038b8116908b1663ffffffff611a7c16565b9063ffffffff611a7c16565b610a48838363ffffffff611a7c16565b1015610a8a576040805162461bcd60e51b815260206004820152600c60248201526b556e697377617056323a204b60a01b604482015290519081900360640190fd5b5050610a9884848888611b2f565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a8152602001692ab734b9bbb0b8102b1960b11b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b5b338484611cf4565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bff576001600160a01b0384166000908152600260209081526040808320338452909152902054610bda908363ffffffff611adf16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c0a848484611d56565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c99576040805162461bcd60e51b81526020600482015260146024820152732ab734b9bbb0b82b191d102327a92124a22222a760611b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d20576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c81905580610d30610b24565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0157600080fd5b505afa158015610e15573d6000803e3d6000fd5b505050506040513d6020811015610e2b57600080fd5b505190506000610e4a836001600160701b03871663ffffffff611adf16565b90506000610e67836001600160701b03871663ffffffff611adf16565b90506000610e758787611e10565b60005490915080610eb257610e9e6103e86109e3610e99878763ffffffff611a7c16565b611f6e565b9850610ead60006103e8611fc0565b610f01565b610efe6001600160701b038916610ecf868463ffffffff611a7c16565b81610ed657fe5b046001600160701b038916610ef1868563ffffffff611a7c16565b81610ef857fe5b04612056565b98505b60008911610f405760405162461bcd60e51b81526004018080602001828103825260288152602001806122256028913960400191505060405180910390fd5b610f4a8a8a611fc0565b610f5686868a8a611b2f565b8115610f8657600854610f82906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461104b576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c8190558061105b610b24565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110b757600080fd5b505afa1580156110cb573d6000803e3d6000fd5b505050506040513d60208110156110e157600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561112f57600080fd5b505afa158015611143573d6000803e3d6000fd5b505050506040513d602081101561115957600080fd5b5051306000908152600160205260408120549192506111788888611e10565b6000549091508061118f848763ffffffff611a7c16565b8161119657fe5b049a50806111aa848663ffffffff611a7c16565b816111b157fe5b04995060008b1180156111c4575060008a115b6111ff5760405162461bcd60e51b81526004018080602001828103825260288152602001806121fd6028913960400191505060405180910390fd5b611209308461206e565b611214878d8d6118e2565b61121f868d8c6118e2565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126557600080fd5b505afa158015611279573d6000803e3d6000fd5b505050506040513d602081101561128f57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112db57600080fd5b505afa1580156112ef573d6000803e3d6000fd5b505050506040513d602081101561130557600080fd5b5051935061131585858b8b611b2f565b811561134557600854611341906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b604051806040016040528060068152602001652aa72496ab1960d11b81525081565b6000610b5b338484611d56565b6103e881565b600c54600114611423576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114d292859287926114cd926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561149557600080fd5b505afa1580156114a9573d6000803e3d6000fd5b505050506040513d60208110156114bf57600080fd5b50519063ffffffff611adf16565b6118e2565b600854604080516370a0823160e01b8152306004820152905161153992849287926114cd92600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561149557600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115ab576040805162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116c6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116fc5750886001600160a01b0316816001600160a01b0316145b61174d576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611758898989611cf4565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117cb576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118db926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b50516008546001600160701b0380821691600160701b900416611b2f565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061198f5780518252601f199092019160209182019101611970565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f1576040519150601f19603f3d011682016040523d82523d6000602084013e6119f6565b606091505b5091509150818015611a24575080511580611a245750808060200190516020811015611a2157600080fd5b50515b611a75576040805162461bcd60e51b815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a9757505080820282828281611a9457fe5b04145b610b5f576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b5f576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b4d57506001600160701b038311155b611b94576040805162461bcd60e51b8152602060048201526013602482015272556e697377617056323a204f564552464c4f5760681b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bc457506001600160701b03841615155b8015611bd857506001600160701b03831615155b15611c49578063ffffffff16611c0685611bf18661210c565b6001600160e01b03169063ffffffff61211e16565b600980546001600160e01b03929092169290920201905563ffffffff8116611c3184611bf18761210c565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d7f908263ffffffff611adf16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611db4908263ffffffff61214316565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e6157600080fd5b505afa158015611e75573d6000803e3d6000fd5b505050506040513d6020811015611e8b57600080fd5b5051600b546001600160a01b038216158015945091925090611f5a578015611f55576000611ece610e996001600160701b0388811690881663ffffffff611a7c16565b90506000611edb83611f6e565b905080821115611f52576000611f09611efa848463ffffffff611adf16565b6000549063ffffffff611a7c16565b90506000611f2e83611f2286600563ffffffff611a7c16565b9063ffffffff61214316565b90506000818381611f3b57fe5b0490508015611f4e57611f4e8782611fc0565b5050505b50505b611f66565b8015611f66576000600b555b505092915050565b60006003821115611fb1575080600160028204015b81811015611fab57809150600281828581611f9a57fe5b040181611fa357fe5b049050611f83565b50611fbb565b8115611fbb575060015b919050565b600054611fd3908263ffffffff61214316565b60009081556001600160a01b038316815260016020526040902054611ffe908263ffffffff61214316565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106120655781612067565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612097908263ffffffff611adf16565b6001600160a01b038316600090815260016020526040812091909155546120c4908263ffffffff611adf16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161213b57fe5b049392505050565b80820182811015610b5f576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a723158203f68d6476c69f7c898a0d7766fdcebd7675e47c753a4d6278607786fbb1945df64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429"
  5471  
  5472  // DeployUniswapV2Pair deploys a new Ethereum contract, binding an instance of UniswapV2Pair to it.
  5473  func DeployUniswapV2Pair(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *UniswapV2Pair, error) {
  5474  	parsed, err := abi.JSON(strings.NewReader(UniswapV2PairABI))
  5475  	if err != nil {
  5476  		return common.Address{}, nil, nil, err
  5477  	}
  5478  
  5479  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(UniswapV2PairBin), backend)
  5480  	if err != nil {
  5481  		return common.Address{}, nil, nil, err
  5482  	}
  5483  	return address, tx, &UniswapV2Pair{UniswapV2PairCaller: UniswapV2PairCaller{contract: contract}, UniswapV2PairTransactor: UniswapV2PairTransactor{contract: contract}, UniswapV2PairFilterer: UniswapV2PairFilterer{contract: contract}}, nil
  5484  }
  5485  
  5486  // UniswapV2Pair is an auto generated Go binding around an Ethereum contract.
  5487  type UniswapV2Pair struct {
  5488  	UniswapV2PairCaller     // Read-only binding to the contract
  5489  	UniswapV2PairTransactor // Write-only binding to the contract
  5490  	UniswapV2PairFilterer   // Log filterer for contract events
  5491  }
  5492  
  5493  // UniswapV2PairCaller is an auto generated read-only Go binding around an Ethereum contract.
  5494  type UniswapV2PairCaller struct {
  5495  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5496  }
  5497  
  5498  // UniswapV2PairTransactor is an auto generated write-only Go binding around an Ethereum contract.
  5499  type UniswapV2PairTransactor struct {
  5500  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5501  }
  5502  
  5503  // UniswapV2PairFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  5504  type UniswapV2PairFilterer struct {
  5505  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5506  }
  5507  
  5508  // UniswapV2PairSession is an auto generated Go binding around an Ethereum contract,
  5509  // with pre-set call and transact options.
  5510  type UniswapV2PairSession struct {
  5511  	Contract     *UniswapV2Pair    // Generic contract binding to set the session for
  5512  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  5513  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  5514  }
  5515  
  5516  // UniswapV2PairCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  5517  // with pre-set call options.
  5518  type UniswapV2PairCallerSession struct {
  5519  	Contract *UniswapV2PairCaller // Generic contract caller binding to set the session for
  5520  	CallOpts bind.CallOpts        // Call options to use throughout this session
  5521  }
  5522  
  5523  // UniswapV2PairTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  5524  // with pre-set transact options.
  5525  type UniswapV2PairTransactorSession struct {
  5526  	Contract     *UniswapV2PairTransactor // Generic contract transactor binding to set the session for
  5527  	TransactOpts bind.TransactOpts        // Transaction auth options to use throughout this session
  5528  }
  5529  
  5530  // UniswapV2PairRaw is an auto generated low-level Go binding around an Ethereum contract.
  5531  type UniswapV2PairRaw struct {
  5532  	Contract *UniswapV2Pair // Generic contract binding to access the raw methods on
  5533  }
  5534  
  5535  // UniswapV2PairCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  5536  type UniswapV2PairCallerRaw struct {
  5537  	Contract *UniswapV2PairCaller // Generic read-only contract binding to access the raw methods on
  5538  }
  5539  
  5540  // UniswapV2PairTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  5541  type UniswapV2PairTransactorRaw struct {
  5542  	Contract *UniswapV2PairTransactor // Generic write-only contract binding to access the raw methods on
  5543  }
  5544  
  5545  // NewUniswapV2Pair creates a new instance of UniswapV2Pair, bound to a specific deployed contract.
  5546  func NewUniswapV2Pair(address common.Address, backend bind.ContractBackend) (*UniswapV2Pair, error) {
  5547  	contract, err := bindUniswapV2Pair(address, backend, backend, backend)
  5548  	if err != nil {
  5549  		return nil, err
  5550  	}
  5551  	return &UniswapV2Pair{UniswapV2PairCaller: UniswapV2PairCaller{contract: contract}, UniswapV2PairTransactor: UniswapV2PairTransactor{contract: contract}, UniswapV2PairFilterer: UniswapV2PairFilterer{contract: contract}}, nil
  5552  }
  5553  
  5554  // NewUniswapV2PairCaller creates a new read-only instance of UniswapV2Pair, bound to a specific deployed contract.
  5555  func NewUniswapV2PairCaller(address common.Address, caller bind.ContractCaller) (*UniswapV2PairCaller, error) {
  5556  	contract, err := bindUniswapV2Pair(address, caller, nil, nil)
  5557  	if err != nil {
  5558  		return nil, err
  5559  	}
  5560  	return &UniswapV2PairCaller{contract: contract}, nil
  5561  }
  5562  
  5563  // NewUniswapV2PairTransactor creates a new write-only instance of UniswapV2Pair, bound to a specific deployed contract.
  5564  func NewUniswapV2PairTransactor(address common.Address, transactor bind.ContractTransactor) (*UniswapV2PairTransactor, error) {
  5565  	contract, err := bindUniswapV2Pair(address, nil, transactor, nil)
  5566  	if err != nil {
  5567  		return nil, err
  5568  	}
  5569  	return &UniswapV2PairTransactor{contract: contract}, nil
  5570  }
  5571  
  5572  // NewUniswapV2PairFilterer creates a new log filterer instance of UniswapV2Pair, bound to a specific deployed contract.
  5573  func NewUniswapV2PairFilterer(address common.Address, filterer bind.ContractFilterer) (*UniswapV2PairFilterer, error) {
  5574  	contract, err := bindUniswapV2Pair(address, nil, nil, filterer)
  5575  	if err != nil {
  5576  		return nil, err
  5577  	}
  5578  	return &UniswapV2PairFilterer{contract: contract}, nil
  5579  }
  5580  
  5581  // bindUniswapV2Pair binds a generic wrapper to an already deployed contract.
  5582  func bindUniswapV2Pair(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  5583  	parsed, err := abi.JSON(strings.NewReader(UniswapV2PairABI))
  5584  	if err != nil {
  5585  		return nil, err
  5586  	}
  5587  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  5588  }
  5589  
  5590  // Call invokes the (constant) contract method with params as input values and
  5591  // sets the output to result. The result type might be a single field for simple
  5592  // returns, a slice of interfaces for anonymous returns and a struct for named
  5593  // returns.
  5594  func (_UniswapV2Pair *UniswapV2PairRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  5595  	return _UniswapV2Pair.Contract.UniswapV2PairCaller.contract.Call(opts, result, method, params...)
  5596  }
  5597  
  5598  // Transfer initiates a plain transaction to move funds to the contract, calling
  5599  // its default method if one is available.
  5600  func (_UniswapV2Pair *UniswapV2PairRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  5601  	return _UniswapV2Pair.Contract.UniswapV2PairTransactor.contract.Transfer(opts)
  5602  }
  5603  
  5604  // Transact invokes the (paid) contract method with params as input values.
  5605  func (_UniswapV2Pair *UniswapV2PairRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  5606  	return _UniswapV2Pair.Contract.UniswapV2PairTransactor.contract.Transact(opts, method, params...)
  5607  }
  5608  
  5609  // Call invokes the (constant) contract method with params as input values and
  5610  // sets the output to result. The result type might be a single field for simple
  5611  // returns, a slice of interfaces for anonymous returns and a struct for named
  5612  // returns.
  5613  func (_UniswapV2Pair *UniswapV2PairCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  5614  	return _UniswapV2Pair.Contract.contract.Call(opts, result, method, params...)
  5615  }
  5616  
  5617  // Transfer initiates a plain transaction to move funds to the contract, calling
  5618  // its default method if one is available.
  5619  func (_UniswapV2Pair *UniswapV2PairTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  5620  	return _UniswapV2Pair.Contract.contract.Transfer(opts)
  5621  }
  5622  
  5623  // Transact invokes the (paid) contract method with params as input values.
  5624  func (_UniswapV2Pair *UniswapV2PairTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  5625  	return _UniswapV2Pair.Contract.contract.Transact(opts, method, params...)
  5626  }
  5627  
  5628  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  5629  //
  5630  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  5631  func (_UniswapV2Pair *UniswapV2PairCaller) DOMAINSEPARATOR(opts *bind.CallOpts) ([32]byte, error) {
  5632  	var out []interface{}
  5633  	err := _UniswapV2Pair.contract.Call(opts, &out, "DOMAIN_SEPARATOR")
  5634  
  5635  	if err != nil {
  5636  		return *new([32]byte), err
  5637  	}
  5638  
  5639  	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
  5640  
  5641  	return out0, err
  5642  
  5643  }
  5644  
  5645  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  5646  //
  5647  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  5648  func (_UniswapV2Pair *UniswapV2PairSession) DOMAINSEPARATOR() ([32]byte, error) {
  5649  	return _UniswapV2Pair.Contract.DOMAINSEPARATOR(&_UniswapV2Pair.CallOpts)
  5650  }
  5651  
  5652  // DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
  5653  //
  5654  // Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
  5655  func (_UniswapV2Pair *UniswapV2PairCallerSession) DOMAINSEPARATOR() ([32]byte, error) {
  5656  	return _UniswapV2Pair.Contract.DOMAINSEPARATOR(&_UniswapV2Pair.CallOpts)
  5657  }
  5658  
  5659  // MINIMUMLIQUIDITY is a free data retrieval call binding the contract method 0xba9a7a56.
  5660  //
  5661  // Solidity: function MINIMUM_LIQUIDITY() view returns(uint256)
  5662  func (_UniswapV2Pair *UniswapV2PairCaller) MINIMUMLIQUIDITY(opts *bind.CallOpts) (*big.Int, error) {
  5663  	var out []interface{}
  5664  	err := _UniswapV2Pair.contract.Call(opts, &out, "MINIMUM_LIQUIDITY")
  5665  
  5666  	if err != nil {
  5667  		return *new(*big.Int), err
  5668  	}
  5669  
  5670  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5671  
  5672  	return out0, err
  5673  
  5674  }
  5675  
  5676  // MINIMUMLIQUIDITY is a free data retrieval call binding the contract method 0xba9a7a56.
  5677  //
  5678  // Solidity: function MINIMUM_LIQUIDITY() view returns(uint256)
  5679  func (_UniswapV2Pair *UniswapV2PairSession) MINIMUMLIQUIDITY() (*big.Int, error) {
  5680  	return _UniswapV2Pair.Contract.MINIMUMLIQUIDITY(&_UniswapV2Pair.CallOpts)
  5681  }
  5682  
  5683  // MINIMUMLIQUIDITY is a free data retrieval call binding the contract method 0xba9a7a56.
  5684  //
  5685  // Solidity: function MINIMUM_LIQUIDITY() view returns(uint256)
  5686  func (_UniswapV2Pair *UniswapV2PairCallerSession) MINIMUMLIQUIDITY() (*big.Int, error) {
  5687  	return _UniswapV2Pair.Contract.MINIMUMLIQUIDITY(&_UniswapV2Pair.CallOpts)
  5688  }
  5689  
  5690  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  5691  //
  5692  // Solidity: function PERMIT_TYPEHASH() view returns(bytes32)
  5693  func (_UniswapV2Pair *UniswapV2PairCaller) PERMITTYPEHASH(opts *bind.CallOpts) ([32]byte, error) {
  5694  	var out []interface{}
  5695  	err := _UniswapV2Pair.contract.Call(opts, &out, "PERMIT_TYPEHASH")
  5696  
  5697  	if err != nil {
  5698  		return *new([32]byte), err
  5699  	}
  5700  
  5701  	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
  5702  
  5703  	return out0, err
  5704  
  5705  }
  5706  
  5707  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  5708  //
  5709  // Solidity: function PERMIT_TYPEHASH() view returns(bytes32)
  5710  func (_UniswapV2Pair *UniswapV2PairSession) PERMITTYPEHASH() ([32]byte, error) {
  5711  	return _UniswapV2Pair.Contract.PERMITTYPEHASH(&_UniswapV2Pair.CallOpts)
  5712  }
  5713  
  5714  // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f.
  5715  //
  5716  // Solidity: function PERMIT_TYPEHASH() view returns(bytes32)
  5717  func (_UniswapV2Pair *UniswapV2PairCallerSession) PERMITTYPEHASH() ([32]byte, error) {
  5718  	return _UniswapV2Pair.Contract.PERMITTYPEHASH(&_UniswapV2Pair.CallOpts)
  5719  }
  5720  
  5721  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  5722  //
  5723  // Solidity: function allowance(address , address ) view returns(uint256)
  5724  func (_UniswapV2Pair *UniswapV2PairCaller) Allowance(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) {
  5725  	var out []interface{}
  5726  	err := _UniswapV2Pair.contract.Call(opts, &out, "allowance", arg0, arg1)
  5727  
  5728  	if err != nil {
  5729  		return *new(*big.Int), err
  5730  	}
  5731  
  5732  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5733  
  5734  	return out0, err
  5735  
  5736  }
  5737  
  5738  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  5739  //
  5740  // Solidity: function allowance(address , address ) view returns(uint256)
  5741  func (_UniswapV2Pair *UniswapV2PairSession) Allowance(arg0 common.Address, arg1 common.Address) (*big.Int, error) {
  5742  	return _UniswapV2Pair.Contract.Allowance(&_UniswapV2Pair.CallOpts, arg0, arg1)
  5743  }
  5744  
  5745  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  5746  //
  5747  // Solidity: function allowance(address , address ) view returns(uint256)
  5748  func (_UniswapV2Pair *UniswapV2PairCallerSession) Allowance(arg0 common.Address, arg1 common.Address) (*big.Int, error) {
  5749  	return _UniswapV2Pair.Contract.Allowance(&_UniswapV2Pair.CallOpts, arg0, arg1)
  5750  }
  5751  
  5752  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5753  //
  5754  // Solidity: function balanceOf(address ) view returns(uint256)
  5755  func (_UniswapV2Pair *UniswapV2PairCaller) BalanceOf(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) {
  5756  	var out []interface{}
  5757  	err := _UniswapV2Pair.contract.Call(opts, &out, "balanceOf", arg0)
  5758  
  5759  	if err != nil {
  5760  		return *new(*big.Int), err
  5761  	}
  5762  
  5763  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5764  
  5765  	return out0, err
  5766  
  5767  }
  5768  
  5769  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5770  //
  5771  // Solidity: function balanceOf(address ) view returns(uint256)
  5772  func (_UniswapV2Pair *UniswapV2PairSession) BalanceOf(arg0 common.Address) (*big.Int, error) {
  5773  	return _UniswapV2Pair.Contract.BalanceOf(&_UniswapV2Pair.CallOpts, arg0)
  5774  }
  5775  
  5776  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5777  //
  5778  // Solidity: function balanceOf(address ) view returns(uint256)
  5779  func (_UniswapV2Pair *UniswapV2PairCallerSession) BalanceOf(arg0 common.Address) (*big.Int, error) {
  5780  	return _UniswapV2Pair.Contract.BalanceOf(&_UniswapV2Pair.CallOpts, arg0)
  5781  }
  5782  
  5783  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  5784  //
  5785  // Solidity: function decimals() view returns(uint8)
  5786  func (_UniswapV2Pair *UniswapV2PairCaller) Decimals(opts *bind.CallOpts) (uint8, error) {
  5787  	var out []interface{}
  5788  	err := _UniswapV2Pair.contract.Call(opts, &out, "decimals")
  5789  
  5790  	if err != nil {
  5791  		return *new(uint8), err
  5792  	}
  5793  
  5794  	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
  5795  
  5796  	return out0, err
  5797  
  5798  }
  5799  
  5800  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  5801  //
  5802  // Solidity: function decimals() view returns(uint8)
  5803  func (_UniswapV2Pair *UniswapV2PairSession) Decimals() (uint8, error) {
  5804  	return _UniswapV2Pair.Contract.Decimals(&_UniswapV2Pair.CallOpts)
  5805  }
  5806  
  5807  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  5808  //
  5809  // Solidity: function decimals() view returns(uint8)
  5810  func (_UniswapV2Pair *UniswapV2PairCallerSession) Decimals() (uint8, error) {
  5811  	return _UniswapV2Pair.Contract.Decimals(&_UniswapV2Pair.CallOpts)
  5812  }
  5813  
  5814  // Factory is a free data retrieval call binding the contract method 0xc45a0155.
  5815  //
  5816  // Solidity: function factory() view returns(address)
  5817  func (_UniswapV2Pair *UniswapV2PairCaller) Factory(opts *bind.CallOpts) (common.Address, error) {
  5818  	var out []interface{}
  5819  	err := _UniswapV2Pair.contract.Call(opts, &out, "factory")
  5820  
  5821  	if err != nil {
  5822  		return *new(common.Address), err
  5823  	}
  5824  
  5825  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5826  
  5827  	return out0, err
  5828  
  5829  }
  5830  
  5831  // Factory is a free data retrieval call binding the contract method 0xc45a0155.
  5832  //
  5833  // Solidity: function factory() view returns(address)
  5834  func (_UniswapV2Pair *UniswapV2PairSession) Factory() (common.Address, error) {
  5835  	return _UniswapV2Pair.Contract.Factory(&_UniswapV2Pair.CallOpts)
  5836  }
  5837  
  5838  // Factory is a free data retrieval call binding the contract method 0xc45a0155.
  5839  //
  5840  // Solidity: function factory() view returns(address)
  5841  func (_UniswapV2Pair *UniswapV2PairCallerSession) Factory() (common.Address, error) {
  5842  	return _UniswapV2Pair.Contract.Factory(&_UniswapV2Pair.CallOpts)
  5843  }
  5844  
  5845  // GetReserves is a free data retrieval call binding the contract method 0x0902f1ac.
  5846  //
  5847  // Solidity: function getReserves() view returns(uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)
  5848  func (_UniswapV2Pair *UniswapV2PairCaller) GetReserves(opts *bind.CallOpts) (struct {
  5849  	Reserve0           *big.Int
  5850  	Reserve1           *big.Int
  5851  	BlockTimestampLast uint32
  5852  }, error) {
  5853  	var out []interface{}
  5854  	err := _UniswapV2Pair.contract.Call(opts, &out, "getReserves")
  5855  
  5856  	outstruct := new(struct {
  5857  		Reserve0           *big.Int
  5858  		Reserve1           *big.Int
  5859  		BlockTimestampLast uint32
  5860  	})
  5861  
  5862  	outstruct.Reserve0 = out[0].(*big.Int)
  5863  	outstruct.Reserve1 = out[1].(*big.Int)
  5864  	outstruct.BlockTimestampLast = out[2].(uint32)
  5865  
  5866  	return *outstruct, err
  5867  
  5868  }
  5869  
  5870  // GetReserves is a free data retrieval call binding the contract method 0x0902f1ac.
  5871  //
  5872  // Solidity: function getReserves() view returns(uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)
  5873  func (_UniswapV2Pair *UniswapV2PairSession) GetReserves() (struct {
  5874  	Reserve0           *big.Int
  5875  	Reserve1           *big.Int
  5876  	BlockTimestampLast uint32
  5877  }, error) {
  5878  	return _UniswapV2Pair.Contract.GetReserves(&_UniswapV2Pair.CallOpts)
  5879  }
  5880  
  5881  // GetReserves is a free data retrieval call binding the contract method 0x0902f1ac.
  5882  //
  5883  // Solidity: function getReserves() view returns(uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)
  5884  func (_UniswapV2Pair *UniswapV2PairCallerSession) GetReserves() (struct {
  5885  	Reserve0           *big.Int
  5886  	Reserve1           *big.Int
  5887  	BlockTimestampLast uint32
  5888  }, error) {
  5889  	return _UniswapV2Pair.Contract.GetReserves(&_UniswapV2Pair.CallOpts)
  5890  }
  5891  
  5892  // KLast is a free data retrieval call binding the contract method 0x7464fc3d.
  5893  //
  5894  // Solidity: function kLast() view returns(uint256)
  5895  func (_UniswapV2Pair *UniswapV2PairCaller) KLast(opts *bind.CallOpts) (*big.Int, error) {
  5896  	var out []interface{}
  5897  	err := _UniswapV2Pair.contract.Call(opts, &out, "kLast")
  5898  
  5899  	if err != nil {
  5900  		return *new(*big.Int), err
  5901  	}
  5902  
  5903  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5904  
  5905  	return out0, err
  5906  
  5907  }
  5908  
  5909  // KLast is a free data retrieval call binding the contract method 0x7464fc3d.
  5910  //
  5911  // Solidity: function kLast() view returns(uint256)
  5912  func (_UniswapV2Pair *UniswapV2PairSession) KLast() (*big.Int, error) {
  5913  	return _UniswapV2Pair.Contract.KLast(&_UniswapV2Pair.CallOpts)
  5914  }
  5915  
  5916  // KLast is a free data retrieval call binding the contract method 0x7464fc3d.
  5917  //
  5918  // Solidity: function kLast() view returns(uint256)
  5919  func (_UniswapV2Pair *UniswapV2PairCallerSession) KLast() (*big.Int, error) {
  5920  	return _UniswapV2Pair.Contract.KLast(&_UniswapV2Pair.CallOpts)
  5921  }
  5922  
  5923  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  5924  //
  5925  // Solidity: function name() view returns(string)
  5926  func (_UniswapV2Pair *UniswapV2PairCaller) Name(opts *bind.CallOpts) (string, error) {
  5927  	var out []interface{}
  5928  	err := _UniswapV2Pair.contract.Call(opts, &out, "name")
  5929  
  5930  	if err != nil {
  5931  		return *new(string), err
  5932  	}
  5933  
  5934  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  5935  
  5936  	return out0, err
  5937  
  5938  }
  5939  
  5940  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  5941  //
  5942  // Solidity: function name() view returns(string)
  5943  func (_UniswapV2Pair *UniswapV2PairSession) Name() (string, error) {
  5944  	return _UniswapV2Pair.Contract.Name(&_UniswapV2Pair.CallOpts)
  5945  }
  5946  
  5947  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  5948  //
  5949  // Solidity: function name() view returns(string)
  5950  func (_UniswapV2Pair *UniswapV2PairCallerSession) Name() (string, error) {
  5951  	return _UniswapV2Pair.Contract.Name(&_UniswapV2Pair.CallOpts)
  5952  }
  5953  
  5954  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  5955  //
  5956  // Solidity: function nonces(address ) view returns(uint256)
  5957  func (_UniswapV2Pair *UniswapV2PairCaller) Nonces(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) {
  5958  	var out []interface{}
  5959  	err := _UniswapV2Pair.contract.Call(opts, &out, "nonces", arg0)
  5960  
  5961  	if err != nil {
  5962  		return *new(*big.Int), err
  5963  	}
  5964  
  5965  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5966  
  5967  	return out0, err
  5968  
  5969  }
  5970  
  5971  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  5972  //
  5973  // Solidity: function nonces(address ) view returns(uint256)
  5974  func (_UniswapV2Pair *UniswapV2PairSession) Nonces(arg0 common.Address) (*big.Int, error) {
  5975  	return _UniswapV2Pair.Contract.Nonces(&_UniswapV2Pair.CallOpts, arg0)
  5976  }
  5977  
  5978  // Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
  5979  //
  5980  // Solidity: function nonces(address ) view returns(uint256)
  5981  func (_UniswapV2Pair *UniswapV2PairCallerSession) Nonces(arg0 common.Address) (*big.Int, error) {
  5982  	return _UniswapV2Pair.Contract.Nonces(&_UniswapV2Pair.CallOpts, arg0)
  5983  }
  5984  
  5985  // Price0CumulativeLast is a free data retrieval call binding the contract method 0x5909c0d5.
  5986  //
  5987  // Solidity: function price0CumulativeLast() view returns(uint256)
  5988  func (_UniswapV2Pair *UniswapV2PairCaller) Price0CumulativeLast(opts *bind.CallOpts) (*big.Int, error) {
  5989  	var out []interface{}
  5990  	err := _UniswapV2Pair.contract.Call(opts, &out, "price0CumulativeLast")
  5991  
  5992  	if err != nil {
  5993  		return *new(*big.Int), err
  5994  	}
  5995  
  5996  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5997  
  5998  	return out0, err
  5999  
  6000  }
  6001  
  6002  // Price0CumulativeLast is a free data retrieval call binding the contract method 0x5909c0d5.
  6003  //
  6004  // Solidity: function price0CumulativeLast() view returns(uint256)
  6005  func (_UniswapV2Pair *UniswapV2PairSession) Price0CumulativeLast() (*big.Int, error) {
  6006  	return _UniswapV2Pair.Contract.Price0CumulativeLast(&_UniswapV2Pair.CallOpts)
  6007  }
  6008  
  6009  // Price0CumulativeLast is a free data retrieval call binding the contract method 0x5909c0d5.
  6010  //
  6011  // Solidity: function price0CumulativeLast() view returns(uint256)
  6012  func (_UniswapV2Pair *UniswapV2PairCallerSession) Price0CumulativeLast() (*big.Int, error) {
  6013  	return _UniswapV2Pair.Contract.Price0CumulativeLast(&_UniswapV2Pair.CallOpts)
  6014  }
  6015  
  6016  // Price1CumulativeLast is a free data retrieval call binding the contract method 0x5a3d5493.
  6017  //
  6018  // Solidity: function price1CumulativeLast() view returns(uint256)
  6019  func (_UniswapV2Pair *UniswapV2PairCaller) Price1CumulativeLast(opts *bind.CallOpts) (*big.Int, error) {
  6020  	var out []interface{}
  6021  	err := _UniswapV2Pair.contract.Call(opts, &out, "price1CumulativeLast")
  6022  
  6023  	if err != nil {
  6024  		return *new(*big.Int), err
  6025  	}
  6026  
  6027  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  6028  
  6029  	return out0, err
  6030  
  6031  }
  6032  
  6033  // Price1CumulativeLast is a free data retrieval call binding the contract method 0x5a3d5493.
  6034  //
  6035  // Solidity: function price1CumulativeLast() view returns(uint256)
  6036  func (_UniswapV2Pair *UniswapV2PairSession) Price1CumulativeLast() (*big.Int, error) {
  6037  	return _UniswapV2Pair.Contract.Price1CumulativeLast(&_UniswapV2Pair.CallOpts)
  6038  }
  6039  
  6040  // Price1CumulativeLast is a free data retrieval call binding the contract method 0x5a3d5493.
  6041  //
  6042  // Solidity: function price1CumulativeLast() view returns(uint256)
  6043  func (_UniswapV2Pair *UniswapV2PairCallerSession) Price1CumulativeLast() (*big.Int, error) {
  6044  	return _UniswapV2Pair.Contract.Price1CumulativeLast(&_UniswapV2Pair.CallOpts)
  6045  }
  6046  
  6047  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  6048  //
  6049  // Solidity: function symbol() view returns(string)
  6050  func (_UniswapV2Pair *UniswapV2PairCaller) Symbol(opts *bind.CallOpts) (string, error) {
  6051  	var out []interface{}
  6052  	err := _UniswapV2Pair.contract.Call(opts, &out, "symbol")
  6053  
  6054  	if err != nil {
  6055  		return *new(string), err
  6056  	}
  6057  
  6058  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  6059  
  6060  	return out0, err
  6061  
  6062  }
  6063  
  6064  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  6065  //
  6066  // Solidity: function symbol() view returns(string)
  6067  func (_UniswapV2Pair *UniswapV2PairSession) Symbol() (string, error) {
  6068  	return _UniswapV2Pair.Contract.Symbol(&_UniswapV2Pair.CallOpts)
  6069  }
  6070  
  6071  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  6072  //
  6073  // Solidity: function symbol() view returns(string)
  6074  func (_UniswapV2Pair *UniswapV2PairCallerSession) Symbol() (string, error) {
  6075  	return _UniswapV2Pair.Contract.Symbol(&_UniswapV2Pair.CallOpts)
  6076  }
  6077  
  6078  // Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
  6079  //
  6080  // Solidity: function token0() view returns(address)
  6081  func (_UniswapV2Pair *UniswapV2PairCaller) Token0(opts *bind.CallOpts) (common.Address, error) {
  6082  	var out []interface{}
  6083  	err := _UniswapV2Pair.contract.Call(opts, &out, "token0")
  6084  
  6085  	if err != nil {
  6086  		return *new(common.Address), err
  6087  	}
  6088  
  6089  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  6090  
  6091  	return out0, err
  6092  
  6093  }
  6094  
  6095  // Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
  6096  //
  6097  // Solidity: function token0() view returns(address)
  6098  func (_UniswapV2Pair *UniswapV2PairSession) Token0() (common.Address, error) {
  6099  	return _UniswapV2Pair.Contract.Token0(&_UniswapV2Pair.CallOpts)
  6100  }
  6101  
  6102  // Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
  6103  //
  6104  // Solidity: function token0() view returns(address)
  6105  func (_UniswapV2Pair *UniswapV2PairCallerSession) Token0() (common.Address, error) {
  6106  	return _UniswapV2Pair.Contract.Token0(&_UniswapV2Pair.CallOpts)
  6107  }
  6108  
  6109  // Token1 is a free data retrieval call binding the contract method 0xd21220a7.
  6110  //
  6111  // Solidity: function token1() view returns(address)
  6112  func (_UniswapV2Pair *UniswapV2PairCaller) Token1(opts *bind.CallOpts) (common.Address, error) {
  6113  	var out []interface{}
  6114  	err := _UniswapV2Pair.contract.Call(opts, &out, "token1")
  6115  
  6116  	if err != nil {
  6117  		return *new(common.Address), err
  6118  	}
  6119  
  6120  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  6121  
  6122  	return out0, err
  6123  
  6124  }
  6125  
  6126  // Token1 is a free data retrieval call binding the contract method 0xd21220a7.
  6127  //
  6128  // Solidity: function token1() view returns(address)
  6129  func (_UniswapV2Pair *UniswapV2PairSession) Token1() (common.Address, error) {
  6130  	return _UniswapV2Pair.Contract.Token1(&_UniswapV2Pair.CallOpts)
  6131  }
  6132  
  6133  // Token1 is a free data retrieval call binding the contract method 0xd21220a7.
  6134  //
  6135  // Solidity: function token1() view returns(address)
  6136  func (_UniswapV2Pair *UniswapV2PairCallerSession) Token1() (common.Address, error) {
  6137  	return _UniswapV2Pair.Contract.Token1(&_UniswapV2Pair.CallOpts)
  6138  }
  6139  
  6140  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  6141  //
  6142  // Solidity: function totalSupply() view returns(uint256)
  6143  func (_UniswapV2Pair *UniswapV2PairCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  6144  	var out []interface{}
  6145  	err := _UniswapV2Pair.contract.Call(opts, &out, "totalSupply")
  6146  
  6147  	if err != nil {
  6148  		return *new(*big.Int), err
  6149  	}
  6150  
  6151  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  6152  
  6153  	return out0, err
  6154  
  6155  }
  6156  
  6157  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  6158  //
  6159  // Solidity: function totalSupply() view returns(uint256)
  6160  func (_UniswapV2Pair *UniswapV2PairSession) TotalSupply() (*big.Int, error) {
  6161  	return _UniswapV2Pair.Contract.TotalSupply(&_UniswapV2Pair.CallOpts)
  6162  }
  6163  
  6164  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  6165  //
  6166  // Solidity: function totalSupply() view returns(uint256)
  6167  func (_UniswapV2Pair *UniswapV2PairCallerSession) TotalSupply() (*big.Int, error) {
  6168  	return _UniswapV2Pair.Contract.TotalSupply(&_UniswapV2Pair.CallOpts)
  6169  }
  6170  
  6171  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  6172  //
  6173  // Solidity: function approve(address spender, uint256 value) returns(bool)
  6174  func (_UniswapV2Pair *UniswapV2PairTransactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) {
  6175  	return _UniswapV2Pair.contract.Transact(opts, "approve", spender, value)
  6176  }
  6177  
  6178  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  6179  //
  6180  // Solidity: function approve(address spender, uint256 value) returns(bool)
  6181  func (_UniswapV2Pair *UniswapV2PairSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
  6182  	return _UniswapV2Pair.Contract.Approve(&_UniswapV2Pair.TransactOpts, spender, value)
  6183  }
  6184  
  6185  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  6186  //
  6187  // Solidity: function approve(address spender, uint256 value) returns(bool)
  6188  func (_UniswapV2Pair *UniswapV2PairTransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
  6189  	return _UniswapV2Pair.Contract.Approve(&_UniswapV2Pair.TransactOpts, spender, value)
  6190  }
  6191  
  6192  // Burn is a paid mutator transaction binding the contract method 0x89afcb44.
  6193  //
  6194  // Solidity: function burn(address to) returns(uint256 amount0, uint256 amount1)
  6195  func (_UniswapV2Pair *UniswapV2PairTransactor) Burn(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
  6196  	return _UniswapV2Pair.contract.Transact(opts, "burn", to)
  6197  }
  6198  
  6199  // Burn is a paid mutator transaction binding the contract method 0x89afcb44.
  6200  //
  6201  // Solidity: function burn(address to) returns(uint256 amount0, uint256 amount1)
  6202  func (_UniswapV2Pair *UniswapV2PairSession) Burn(to common.Address) (*types.Transaction, error) {
  6203  	return _UniswapV2Pair.Contract.Burn(&_UniswapV2Pair.TransactOpts, to)
  6204  }
  6205  
  6206  // Burn is a paid mutator transaction binding the contract method 0x89afcb44.
  6207  //
  6208  // Solidity: function burn(address to) returns(uint256 amount0, uint256 amount1)
  6209  func (_UniswapV2Pair *UniswapV2PairTransactorSession) Burn(to common.Address) (*types.Transaction, error) {
  6210  	return _UniswapV2Pair.Contract.Burn(&_UniswapV2Pair.TransactOpts, to)
  6211  }
  6212  
  6213  // Initialize is a paid mutator transaction binding the contract method 0x485cc955.
  6214  //
  6215  // Solidity: function initialize(address _token0, address _token1) returns()
  6216  func (_UniswapV2Pair *UniswapV2PairTransactor) Initialize(opts *bind.TransactOpts, _token0 common.Address, _token1 common.Address) (*types.Transaction, error) {
  6217  	return _UniswapV2Pair.contract.Transact(opts, "initialize", _token0, _token1)
  6218  }
  6219  
  6220  // Initialize is a paid mutator transaction binding the contract method 0x485cc955.
  6221  //
  6222  // Solidity: function initialize(address _token0, address _token1) returns()
  6223  func (_UniswapV2Pair *UniswapV2PairSession) Initialize(_token0 common.Address, _token1 common.Address) (*types.Transaction, error) {
  6224  	return _UniswapV2Pair.Contract.Initialize(&_UniswapV2Pair.TransactOpts, _token0, _token1)
  6225  }
  6226  
  6227  // Initialize is a paid mutator transaction binding the contract method 0x485cc955.
  6228  //
  6229  // Solidity: function initialize(address _token0, address _token1) returns()
  6230  func (_UniswapV2Pair *UniswapV2PairTransactorSession) Initialize(_token0 common.Address, _token1 common.Address) (*types.Transaction, error) {
  6231  	return _UniswapV2Pair.Contract.Initialize(&_UniswapV2Pair.TransactOpts, _token0, _token1)
  6232  }
  6233  
  6234  // Mint is a paid mutator transaction binding the contract method 0x6a627842.
  6235  //
  6236  // Solidity: function mint(address to) returns(uint256 liquidity)
  6237  func (_UniswapV2Pair *UniswapV2PairTransactor) Mint(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
  6238  	return _UniswapV2Pair.contract.Transact(opts, "mint", to)
  6239  }
  6240  
  6241  // Mint is a paid mutator transaction binding the contract method 0x6a627842.
  6242  //
  6243  // Solidity: function mint(address to) returns(uint256 liquidity)
  6244  func (_UniswapV2Pair *UniswapV2PairSession) Mint(to common.Address) (*types.Transaction, error) {
  6245  	return _UniswapV2Pair.Contract.Mint(&_UniswapV2Pair.TransactOpts, to)
  6246  }
  6247  
  6248  // Mint is a paid mutator transaction binding the contract method 0x6a627842.
  6249  //
  6250  // Solidity: function mint(address to) returns(uint256 liquidity)
  6251  func (_UniswapV2Pair *UniswapV2PairTransactorSession) Mint(to common.Address) (*types.Transaction, error) {
  6252  	return _UniswapV2Pair.Contract.Mint(&_UniswapV2Pair.TransactOpts, to)
  6253  }
  6254  
  6255  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  6256  //
  6257  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  6258  func (_UniswapV2Pair *UniswapV2PairTransactor) Permit(opts *bind.TransactOpts, owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  6259  	return _UniswapV2Pair.contract.Transact(opts, "permit", owner, spender, value, deadline, v, r, s)
  6260  }
  6261  
  6262  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  6263  //
  6264  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  6265  func (_UniswapV2Pair *UniswapV2PairSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  6266  	return _UniswapV2Pair.Contract.Permit(&_UniswapV2Pair.TransactOpts, owner, spender, value, deadline, v, r, s)
  6267  }
  6268  
  6269  // Permit is a paid mutator transaction binding the contract method 0xd505accf.
  6270  //
  6271  // Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
  6272  func (_UniswapV2Pair *UniswapV2PairTransactorSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
  6273  	return _UniswapV2Pair.Contract.Permit(&_UniswapV2Pair.TransactOpts, owner, spender, value, deadline, v, r, s)
  6274  }
  6275  
  6276  // Skim is a paid mutator transaction binding the contract method 0xbc25cf77.
  6277  //
  6278  // Solidity: function skim(address to) returns()
  6279  func (_UniswapV2Pair *UniswapV2PairTransactor) Skim(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
  6280  	return _UniswapV2Pair.contract.Transact(opts, "skim", to)
  6281  }
  6282  
  6283  // Skim is a paid mutator transaction binding the contract method 0xbc25cf77.
  6284  //
  6285  // Solidity: function skim(address to) returns()
  6286  func (_UniswapV2Pair *UniswapV2PairSession) Skim(to common.Address) (*types.Transaction, error) {
  6287  	return _UniswapV2Pair.Contract.Skim(&_UniswapV2Pair.TransactOpts, to)
  6288  }
  6289  
  6290  // Skim is a paid mutator transaction binding the contract method 0xbc25cf77.
  6291  //
  6292  // Solidity: function skim(address to) returns()
  6293  func (_UniswapV2Pair *UniswapV2PairTransactorSession) Skim(to common.Address) (*types.Transaction, error) {
  6294  	return _UniswapV2Pair.Contract.Skim(&_UniswapV2Pair.TransactOpts, to)
  6295  }
  6296  
  6297  // Swap is a paid mutator transaction binding the contract method 0x022c0d9f.
  6298  //
  6299  // Solidity: function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data) returns()
  6300  func (_UniswapV2Pair *UniswapV2PairTransactor) Swap(opts *bind.TransactOpts, amount0Out *big.Int, amount1Out *big.Int, to common.Address, data []byte) (*types.Transaction, error) {
  6301  	return _UniswapV2Pair.contract.Transact(opts, "swap", amount0Out, amount1Out, to, data)
  6302  }
  6303  
  6304  // Swap is a paid mutator transaction binding the contract method 0x022c0d9f.
  6305  //
  6306  // Solidity: function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data) returns()
  6307  func (_UniswapV2Pair *UniswapV2PairSession) Swap(amount0Out *big.Int, amount1Out *big.Int, to common.Address, data []byte) (*types.Transaction, error) {
  6308  	return _UniswapV2Pair.Contract.Swap(&_UniswapV2Pair.TransactOpts, amount0Out, amount1Out, to, data)
  6309  }
  6310  
  6311  // Swap is a paid mutator transaction binding the contract method 0x022c0d9f.
  6312  //
  6313  // Solidity: function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data) returns()
  6314  func (_UniswapV2Pair *UniswapV2PairTransactorSession) Swap(amount0Out *big.Int, amount1Out *big.Int, to common.Address, data []byte) (*types.Transaction, error) {
  6315  	return _UniswapV2Pair.Contract.Swap(&_UniswapV2Pair.TransactOpts, amount0Out, amount1Out, to, data)
  6316  }
  6317  
  6318  // Sync is a paid mutator transaction binding the contract method 0xfff6cae9.
  6319  //
  6320  // Solidity: function sync() returns()
  6321  func (_UniswapV2Pair *UniswapV2PairTransactor) Sync(opts *bind.TransactOpts) (*types.Transaction, error) {
  6322  	return _UniswapV2Pair.contract.Transact(opts, "sync")
  6323  }
  6324  
  6325  // Sync is a paid mutator transaction binding the contract method 0xfff6cae9.
  6326  //
  6327  // Solidity: function sync() returns()
  6328  func (_UniswapV2Pair *UniswapV2PairSession) Sync() (*types.Transaction, error) {
  6329  	return _UniswapV2Pair.Contract.Sync(&_UniswapV2Pair.TransactOpts)
  6330  }
  6331  
  6332  // Sync is a paid mutator transaction binding the contract method 0xfff6cae9.
  6333  //
  6334  // Solidity: function sync() returns()
  6335  func (_UniswapV2Pair *UniswapV2PairTransactorSession) Sync() (*types.Transaction, error) {
  6336  	return _UniswapV2Pair.Contract.Sync(&_UniswapV2Pair.TransactOpts)
  6337  }
  6338  
  6339  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  6340  //
  6341  // Solidity: function transfer(address to, uint256 value) returns(bool)
  6342  func (_UniswapV2Pair *UniswapV2PairTransactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) {
  6343  	return _UniswapV2Pair.contract.Transact(opts, "transfer", to, value)
  6344  }
  6345  
  6346  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  6347  //
  6348  // Solidity: function transfer(address to, uint256 value) returns(bool)
  6349  func (_UniswapV2Pair *UniswapV2PairSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
  6350  	return _UniswapV2Pair.Contract.Transfer(&_UniswapV2Pair.TransactOpts, to, value)
  6351  }
  6352  
  6353  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  6354  //
  6355  // Solidity: function transfer(address to, uint256 value) returns(bool)
  6356  func (_UniswapV2Pair *UniswapV2PairTransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
  6357  	return _UniswapV2Pair.Contract.Transfer(&_UniswapV2Pair.TransactOpts, to, value)
  6358  }
  6359  
  6360  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  6361  //
  6362  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  6363  func (_UniswapV2Pair *UniswapV2PairTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  6364  	return _UniswapV2Pair.contract.Transact(opts, "transferFrom", from, to, value)
  6365  }
  6366  
  6367  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  6368  //
  6369  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  6370  func (_UniswapV2Pair *UniswapV2PairSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  6371  	return _UniswapV2Pair.Contract.TransferFrom(&_UniswapV2Pair.TransactOpts, from, to, value)
  6372  }
  6373  
  6374  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  6375  //
  6376  // Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
  6377  func (_UniswapV2Pair *UniswapV2PairTransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
  6378  	return _UniswapV2Pair.Contract.TransferFrom(&_UniswapV2Pair.TransactOpts, from, to, value)
  6379  }
  6380  
  6381  // UniswapV2PairApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the UniswapV2Pair contract.
  6382  type UniswapV2PairApprovalIterator struct {
  6383  	Event *UniswapV2PairApproval // Event containing the contract specifics and raw log
  6384  
  6385  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6386  	event    string              // Event name to use for unpacking event data
  6387  
  6388  	logs chan types.Log        // Log channel receiving the found contract events
  6389  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6390  	done bool                  // Whether the subscription completed delivering logs
  6391  	fail error                 // Occurred error to stop iteration
  6392  }
  6393  
  6394  // Next advances the iterator to the subsequent event, returning whether there
  6395  // are any more events found. In case of a retrieval or parsing error, false is
  6396  // returned and Error() can be queried for the exact failure.
  6397  func (it *UniswapV2PairApprovalIterator) Next() bool {
  6398  	// If the iterator failed, stop iterating
  6399  	if it.fail != nil {
  6400  		return false
  6401  	}
  6402  	// If the iterator completed, deliver directly whatever's available
  6403  	if it.done {
  6404  		select {
  6405  		case log := <-it.logs:
  6406  			it.Event = new(UniswapV2PairApproval)
  6407  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6408  				it.fail = err
  6409  				return false
  6410  			}
  6411  			it.Event.Raw = log
  6412  			return true
  6413  
  6414  		default:
  6415  			return false
  6416  		}
  6417  	}
  6418  	// Iterator still in progress, wait for either a data or an error event
  6419  	select {
  6420  	case log := <-it.logs:
  6421  		it.Event = new(UniswapV2PairApproval)
  6422  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6423  			it.fail = err
  6424  			return false
  6425  		}
  6426  		it.Event.Raw = log
  6427  		return true
  6428  
  6429  	case err := <-it.sub.Err():
  6430  		it.done = true
  6431  		it.fail = err
  6432  		return it.Next()
  6433  	}
  6434  }
  6435  
  6436  // Error returns any retrieval or parsing error occurred during filtering.
  6437  func (it *UniswapV2PairApprovalIterator) Error() error {
  6438  	return it.fail
  6439  }
  6440  
  6441  // Close terminates the iteration process, releasing any pending underlying
  6442  // resources.
  6443  func (it *UniswapV2PairApprovalIterator) Close() error {
  6444  	it.sub.Unsubscribe()
  6445  	return nil
  6446  }
  6447  
  6448  // UniswapV2PairApproval represents a Approval event raised by the UniswapV2Pair contract.
  6449  type UniswapV2PairApproval struct {
  6450  	Owner   common.Address
  6451  	Spender common.Address
  6452  	Value   *big.Int
  6453  	Raw     types.Log // Blockchain specific contextual infos
  6454  }
  6455  
  6456  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  6457  //
  6458  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  6459  func (_UniswapV2Pair *UniswapV2PairFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*UniswapV2PairApprovalIterator, error) {
  6460  
  6461  	var ownerRule []interface{}
  6462  	for _, ownerItem := range owner {
  6463  		ownerRule = append(ownerRule, ownerItem)
  6464  	}
  6465  	var spenderRule []interface{}
  6466  	for _, spenderItem := range spender {
  6467  		spenderRule = append(spenderRule, spenderItem)
  6468  	}
  6469  
  6470  	logs, sub, err := _UniswapV2Pair.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
  6471  	if err != nil {
  6472  		return nil, err
  6473  	}
  6474  	return &UniswapV2PairApprovalIterator{contract: _UniswapV2Pair.contract, event: "Approval", logs: logs, sub: sub}, nil
  6475  }
  6476  
  6477  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  6478  //
  6479  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  6480  func (_UniswapV2Pair *UniswapV2PairFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *UniswapV2PairApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
  6481  
  6482  	var ownerRule []interface{}
  6483  	for _, ownerItem := range owner {
  6484  		ownerRule = append(ownerRule, ownerItem)
  6485  	}
  6486  	var spenderRule []interface{}
  6487  	for _, spenderItem := range spender {
  6488  		spenderRule = append(spenderRule, spenderItem)
  6489  	}
  6490  
  6491  	logs, sub, err := _UniswapV2Pair.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
  6492  	if err != nil {
  6493  		return nil, err
  6494  	}
  6495  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6496  		defer sub.Unsubscribe()
  6497  		for {
  6498  			select {
  6499  			case log := <-logs:
  6500  				// New log arrived, parse the event and forward to the user
  6501  				event := new(UniswapV2PairApproval)
  6502  				if err := _UniswapV2Pair.contract.UnpackLog(event, "Approval", log); err != nil {
  6503  					return err
  6504  				}
  6505  				event.Raw = log
  6506  
  6507  				select {
  6508  				case sink <- event:
  6509  				case err := <-sub.Err():
  6510  					return err
  6511  				case <-quit:
  6512  					return nil
  6513  				}
  6514  			case err := <-sub.Err():
  6515  				return err
  6516  			case <-quit:
  6517  				return nil
  6518  			}
  6519  		}
  6520  	}), nil
  6521  }
  6522  
  6523  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  6524  //
  6525  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  6526  func (_UniswapV2Pair *UniswapV2PairFilterer) ParseApproval(log types.Log) (*UniswapV2PairApproval, error) {
  6527  	event := new(UniswapV2PairApproval)
  6528  	if err := _UniswapV2Pair.contract.UnpackLog(event, "Approval", log); err != nil {
  6529  		return nil, err
  6530  	}
  6531  	return event, nil
  6532  }
  6533  
  6534  // UniswapV2PairBurnIterator is returned from FilterBurn and is used to iterate over the raw logs and unpacked data for Burn events raised by the UniswapV2Pair contract.
  6535  type UniswapV2PairBurnIterator struct {
  6536  	Event *UniswapV2PairBurn // Event containing the contract specifics and raw log
  6537  
  6538  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6539  	event    string              // Event name to use for unpacking event data
  6540  
  6541  	logs chan types.Log        // Log channel receiving the found contract events
  6542  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6543  	done bool                  // Whether the subscription completed delivering logs
  6544  	fail error                 // Occurred error to stop iteration
  6545  }
  6546  
  6547  // Next advances the iterator to the subsequent event, returning whether there
  6548  // are any more events found. In case of a retrieval or parsing error, false is
  6549  // returned and Error() can be queried for the exact failure.
  6550  func (it *UniswapV2PairBurnIterator) Next() bool {
  6551  	// If the iterator failed, stop iterating
  6552  	if it.fail != nil {
  6553  		return false
  6554  	}
  6555  	// If the iterator completed, deliver directly whatever's available
  6556  	if it.done {
  6557  		select {
  6558  		case log := <-it.logs:
  6559  			it.Event = new(UniswapV2PairBurn)
  6560  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6561  				it.fail = err
  6562  				return false
  6563  			}
  6564  			it.Event.Raw = log
  6565  			return true
  6566  
  6567  		default:
  6568  			return false
  6569  		}
  6570  	}
  6571  	// Iterator still in progress, wait for either a data or an error event
  6572  	select {
  6573  	case log := <-it.logs:
  6574  		it.Event = new(UniswapV2PairBurn)
  6575  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6576  			it.fail = err
  6577  			return false
  6578  		}
  6579  		it.Event.Raw = log
  6580  		return true
  6581  
  6582  	case err := <-it.sub.Err():
  6583  		it.done = true
  6584  		it.fail = err
  6585  		return it.Next()
  6586  	}
  6587  }
  6588  
  6589  // Error returns any retrieval or parsing error occurred during filtering.
  6590  func (it *UniswapV2PairBurnIterator) Error() error {
  6591  	return it.fail
  6592  }
  6593  
  6594  // Close terminates the iteration process, releasing any pending underlying
  6595  // resources.
  6596  func (it *UniswapV2PairBurnIterator) Close() error {
  6597  	it.sub.Unsubscribe()
  6598  	return nil
  6599  }
  6600  
  6601  // UniswapV2PairBurn represents a Burn event raised by the UniswapV2Pair contract.
  6602  type UniswapV2PairBurn struct {
  6603  	Sender  common.Address
  6604  	Amount0 *big.Int
  6605  	Amount1 *big.Int
  6606  	To      common.Address
  6607  	Raw     types.Log // Blockchain specific contextual infos
  6608  }
  6609  
  6610  // FilterBurn is a free log retrieval operation binding the contract event 0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496.
  6611  //
  6612  // Solidity: event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to)
  6613  func (_UniswapV2Pair *UniswapV2PairFilterer) FilterBurn(opts *bind.FilterOpts, sender []common.Address, to []common.Address) (*UniswapV2PairBurnIterator, error) {
  6614  
  6615  	var senderRule []interface{}
  6616  	for _, senderItem := range sender {
  6617  		senderRule = append(senderRule, senderItem)
  6618  	}
  6619  
  6620  	var toRule []interface{}
  6621  	for _, toItem := range to {
  6622  		toRule = append(toRule, toItem)
  6623  	}
  6624  
  6625  	logs, sub, err := _UniswapV2Pair.contract.FilterLogs(opts, "Burn", senderRule, toRule)
  6626  	if err != nil {
  6627  		return nil, err
  6628  	}
  6629  	return &UniswapV2PairBurnIterator{contract: _UniswapV2Pair.contract, event: "Burn", logs: logs, sub: sub}, nil
  6630  }
  6631  
  6632  // WatchBurn is a free log subscription operation binding the contract event 0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496.
  6633  //
  6634  // Solidity: event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to)
  6635  func (_UniswapV2Pair *UniswapV2PairFilterer) WatchBurn(opts *bind.WatchOpts, sink chan<- *UniswapV2PairBurn, sender []common.Address, to []common.Address) (event.Subscription, error) {
  6636  
  6637  	var senderRule []interface{}
  6638  	for _, senderItem := range sender {
  6639  		senderRule = append(senderRule, senderItem)
  6640  	}
  6641  
  6642  	var toRule []interface{}
  6643  	for _, toItem := range to {
  6644  		toRule = append(toRule, toItem)
  6645  	}
  6646  
  6647  	logs, sub, err := _UniswapV2Pair.contract.WatchLogs(opts, "Burn", senderRule, toRule)
  6648  	if err != nil {
  6649  		return nil, err
  6650  	}
  6651  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6652  		defer sub.Unsubscribe()
  6653  		for {
  6654  			select {
  6655  			case log := <-logs:
  6656  				// New log arrived, parse the event and forward to the user
  6657  				event := new(UniswapV2PairBurn)
  6658  				if err := _UniswapV2Pair.contract.UnpackLog(event, "Burn", log); err != nil {
  6659  					return err
  6660  				}
  6661  				event.Raw = log
  6662  
  6663  				select {
  6664  				case sink <- event:
  6665  				case err := <-sub.Err():
  6666  					return err
  6667  				case <-quit:
  6668  					return nil
  6669  				}
  6670  			case err := <-sub.Err():
  6671  				return err
  6672  			case <-quit:
  6673  				return nil
  6674  			}
  6675  		}
  6676  	}), nil
  6677  }
  6678  
  6679  // ParseBurn is a log parse operation binding the contract event 0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496.
  6680  //
  6681  // Solidity: event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to)
  6682  func (_UniswapV2Pair *UniswapV2PairFilterer) ParseBurn(log types.Log) (*UniswapV2PairBurn, error) {
  6683  	event := new(UniswapV2PairBurn)
  6684  	if err := _UniswapV2Pair.contract.UnpackLog(event, "Burn", log); err != nil {
  6685  		return nil, err
  6686  	}
  6687  	return event, nil
  6688  }
  6689  
  6690  // UniswapV2PairMintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the UniswapV2Pair contract.
  6691  type UniswapV2PairMintIterator struct {
  6692  	Event *UniswapV2PairMint // Event containing the contract specifics and raw log
  6693  
  6694  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6695  	event    string              // Event name to use for unpacking event data
  6696  
  6697  	logs chan types.Log        // Log channel receiving the found contract events
  6698  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6699  	done bool                  // Whether the subscription completed delivering logs
  6700  	fail error                 // Occurred error to stop iteration
  6701  }
  6702  
  6703  // Next advances the iterator to the subsequent event, returning whether there
  6704  // are any more events found. In case of a retrieval or parsing error, false is
  6705  // returned and Error() can be queried for the exact failure.
  6706  func (it *UniswapV2PairMintIterator) Next() bool {
  6707  	// If the iterator failed, stop iterating
  6708  	if it.fail != nil {
  6709  		return false
  6710  	}
  6711  	// If the iterator completed, deliver directly whatever's available
  6712  	if it.done {
  6713  		select {
  6714  		case log := <-it.logs:
  6715  			it.Event = new(UniswapV2PairMint)
  6716  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6717  				it.fail = err
  6718  				return false
  6719  			}
  6720  			it.Event.Raw = log
  6721  			return true
  6722  
  6723  		default:
  6724  			return false
  6725  		}
  6726  	}
  6727  	// Iterator still in progress, wait for either a data or an error event
  6728  	select {
  6729  	case log := <-it.logs:
  6730  		it.Event = new(UniswapV2PairMint)
  6731  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6732  			it.fail = err
  6733  			return false
  6734  		}
  6735  		it.Event.Raw = log
  6736  		return true
  6737  
  6738  	case err := <-it.sub.Err():
  6739  		it.done = true
  6740  		it.fail = err
  6741  		return it.Next()
  6742  	}
  6743  }
  6744  
  6745  // Error returns any retrieval or parsing error occurred during filtering.
  6746  func (it *UniswapV2PairMintIterator) Error() error {
  6747  	return it.fail
  6748  }
  6749  
  6750  // Close terminates the iteration process, releasing any pending underlying
  6751  // resources.
  6752  func (it *UniswapV2PairMintIterator) Close() error {
  6753  	it.sub.Unsubscribe()
  6754  	return nil
  6755  }
  6756  
  6757  // UniswapV2PairMint represents a Mint event raised by the UniswapV2Pair contract.
  6758  type UniswapV2PairMint struct {
  6759  	Sender  common.Address
  6760  	Amount0 *big.Int
  6761  	Amount1 *big.Int
  6762  	Raw     types.Log // Blockchain specific contextual infos
  6763  }
  6764  
  6765  // FilterMint is a free log retrieval operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  6766  //
  6767  // Solidity: event Mint(address indexed sender, uint256 amount0, uint256 amount1)
  6768  func (_UniswapV2Pair *UniswapV2PairFilterer) FilterMint(opts *bind.FilterOpts, sender []common.Address) (*UniswapV2PairMintIterator, error) {
  6769  
  6770  	var senderRule []interface{}
  6771  	for _, senderItem := range sender {
  6772  		senderRule = append(senderRule, senderItem)
  6773  	}
  6774  
  6775  	logs, sub, err := _UniswapV2Pair.contract.FilterLogs(opts, "Mint", senderRule)
  6776  	if err != nil {
  6777  		return nil, err
  6778  	}
  6779  	return &UniswapV2PairMintIterator{contract: _UniswapV2Pair.contract, event: "Mint", logs: logs, sub: sub}, nil
  6780  }
  6781  
  6782  // WatchMint is a free log subscription operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  6783  //
  6784  // Solidity: event Mint(address indexed sender, uint256 amount0, uint256 amount1)
  6785  func (_UniswapV2Pair *UniswapV2PairFilterer) WatchMint(opts *bind.WatchOpts, sink chan<- *UniswapV2PairMint, sender []common.Address) (event.Subscription, error) {
  6786  
  6787  	var senderRule []interface{}
  6788  	for _, senderItem := range sender {
  6789  		senderRule = append(senderRule, senderItem)
  6790  	}
  6791  
  6792  	logs, sub, err := _UniswapV2Pair.contract.WatchLogs(opts, "Mint", senderRule)
  6793  	if err != nil {
  6794  		return nil, err
  6795  	}
  6796  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6797  		defer sub.Unsubscribe()
  6798  		for {
  6799  			select {
  6800  			case log := <-logs:
  6801  				// New log arrived, parse the event and forward to the user
  6802  				event := new(UniswapV2PairMint)
  6803  				if err := _UniswapV2Pair.contract.UnpackLog(event, "Mint", log); err != nil {
  6804  					return err
  6805  				}
  6806  				event.Raw = log
  6807  
  6808  				select {
  6809  				case sink <- event:
  6810  				case err := <-sub.Err():
  6811  					return err
  6812  				case <-quit:
  6813  					return nil
  6814  				}
  6815  			case err := <-sub.Err():
  6816  				return err
  6817  			case <-quit:
  6818  				return nil
  6819  			}
  6820  		}
  6821  	}), nil
  6822  }
  6823  
  6824  // ParseMint is a log parse operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  6825  //
  6826  // Solidity: event Mint(address indexed sender, uint256 amount0, uint256 amount1)
  6827  func (_UniswapV2Pair *UniswapV2PairFilterer) ParseMint(log types.Log) (*UniswapV2PairMint, error) {
  6828  	event := new(UniswapV2PairMint)
  6829  	if err := _UniswapV2Pair.contract.UnpackLog(event, "Mint", log); err != nil {
  6830  		return nil, err
  6831  	}
  6832  	return event, nil
  6833  }
  6834  
  6835  // UniswapV2PairSwapIterator is returned from FilterSwap and is used to iterate over the raw logs and unpacked data for Swap events raised by the UniswapV2Pair contract.
  6836  type UniswapV2PairSwapIterator struct {
  6837  	Event *UniswapV2PairSwap // Event containing the contract specifics and raw log
  6838  
  6839  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6840  	event    string              // Event name to use for unpacking event data
  6841  
  6842  	logs chan types.Log        // Log channel receiving the found contract events
  6843  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6844  	done bool                  // Whether the subscription completed delivering logs
  6845  	fail error                 // Occurred error to stop iteration
  6846  }
  6847  
  6848  // Next advances the iterator to the subsequent event, returning whether there
  6849  // are any more events found. In case of a retrieval or parsing error, false is
  6850  // returned and Error() can be queried for the exact failure.
  6851  func (it *UniswapV2PairSwapIterator) Next() bool {
  6852  	// If the iterator failed, stop iterating
  6853  	if it.fail != nil {
  6854  		return false
  6855  	}
  6856  	// If the iterator completed, deliver directly whatever's available
  6857  	if it.done {
  6858  		select {
  6859  		case log := <-it.logs:
  6860  			it.Event = new(UniswapV2PairSwap)
  6861  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6862  				it.fail = err
  6863  				return false
  6864  			}
  6865  			it.Event.Raw = log
  6866  			return true
  6867  
  6868  		default:
  6869  			return false
  6870  		}
  6871  	}
  6872  	// Iterator still in progress, wait for either a data or an error event
  6873  	select {
  6874  	case log := <-it.logs:
  6875  		it.Event = new(UniswapV2PairSwap)
  6876  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6877  			it.fail = err
  6878  			return false
  6879  		}
  6880  		it.Event.Raw = log
  6881  		return true
  6882  
  6883  	case err := <-it.sub.Err():
  6884  		it.done = true
  6885  		it.fail = err
  6886  		return it.Next()
  6887  	}
  6888  }
  6889  
  6890  // Error returns any retrieval or parsing error occurred during filtering.
  6891  func (it *UniswapV2PairSwapIterator) Error() error {
  6892  	return it.fail
  6893  }
  6894  
  6895  // Close terminates the iteration process, releasing any pending underlying
  6896  // resources.
  6897  func (it *UniswapV2PairSwapIterator) Close() error {
  6898  	it.sub.Unsubscribe()
  6899  	return nil
  6900  }
  6901  
  6902  // UniswapV2PairSwap represents a Swap event raised by the UniswapV2Pair contract.
  6903  type UniswapV2PairSwap struct {
  6904  	Sender     common.Address
  6905  	Amount0In  *big.Int
  6906  	Amount1In  *big.Int
  6907  	Amount0Out *big.Int
  6908  	Amount1Out *big.Int
  6909  	To         common.Address
  6910  	Raw        types.Log // Blockchain specific contextual infos
  6911  }
  6912  
  6913  // FilterSwap is a free log retrieval operation binding the contract event 0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822.
  6914  //
  6915  // Solidity: event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to)
  6916  func (_UniswapV2Pair *UniswapV2PairFilterer) FilterSwap(opts *bind.FilterOpts, sender []common.Address, to []common.Address) (*UniswapV2PairSwapIterator, error) {
  6917  
  6918  	var senderRule []interface{}
  6919  	for _, senderItem := range sender {
  6920  		senderRule = append(senderRule, senderItem)
  6921  	}
  6922  
  6923  	var toRule []interface{}
  6924  	for _, toItem := range to {
  6925  		toRule = append(toRule, toItem)
  6926  	}
  6927  
  6928  	logs, sub, err := _UniswapV2Pair.contract.FilterLogs(opts, "Swap", senderRule, toRule)
  6929  	if err != nil {
  6930  		return nil, err
  6931  	}
  6932  	return &UniswapV2PairSwapIterator{contract: _UniswapV2Pair.contract, event: "Swap", logs: logs, sub: sub}, nil
  6933  }
  6934  
  6935  // WatchSwap is a free log subscription operation binding the contract event 0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822.
  6936  //
  6937  // Solidity: event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to)
  6938  func (_UniswapV2Pair *UniswapV2PairFilterer) WatchSwap(opts *bind.WatchOpts, sink chan<- *UniswapV2PairSwap, sender []common.Address, to []common.Address) (event.Subscription, error) {
  6939  
  6940  	var senderRule []interface{}
  6941  	for _, senderItem := range sender {
  6942  		senderRule = append(senderRule, senderItem)
  6943  	}
  6944  
  6945  	var toRule []interface{}
  6946  	for _, toItem := range to {
  6947  		toRule = append(toRule, toItem)
  6948  	}
  6949  
  6950  	logs, sub, err := _UniswapV2Pair.contract.WatchLogs(opts, "Swap", senderRule, toRule)
  6951  	if err != nil {
  6952  		return nil, err
  6953  	}
  6954  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6955  		defer sub.Unsubscribe()
  6956  		for {
  6957  			select {
  6958  			case log := <-logs:
  6959  				// New log arrived, parse the event and forward to the user
  6960  				event := new(UniswapV2PairSwap)
  6961  				if err := _UniswapV2Pair.contract.UnpackLog(event, "Swap", log); err != nil {
  6962  					return err
  6963  				}
  6964  				event.Raw = log
  6965  
  6966  				select {
  6967  				case sink <- event:
  6968  				case err := <-sub.Err():
  6969  					return err
  6970  				case <-quit:
  6971  					return nil
  6972  				}
  6973  			case err := <-sub.Err():
  6974  				return err
  6975  			case <-quit:
  6976  				return nil
  6977  			}
  6978  		}
  6979  	}), nil
  6980  }
  6981  
  6982  // ParseSwap is a log parse operation binding the contract event 0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822.
  6983  //
  6984  // Solidity: event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to)
  6985  func (_UniswapV2Pair *UniswapV2PairFilterer) ParseSwap(log types.Log) (*UniswapV2PairSwap, error) {
  6986  	event := new(UniswapV2PairSwap)
  6987  	if err := _UniswapV2Pair.contract.UnpackLog(event, "Swap", log); err != nil {
  6988  		return nil, err
  6989  	}
  6990  	return event, nil
  6991  }
  6992  
  6993  // UniswapV2PairSyncIterator is returned from FilterSync and is used to iterate over the raw logs and unpacked data for Sync events raised by the UniswapV2Pair contract.
  6994  type UniswapV2PairSyncIterator struct {
  6995  	Event *UniswapV2PairSync // Event containing the contract specifics and raw log
  6996  
  6997  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6998  	event    string              // Event name to use for unpacking event data
  6999  
  7000  	logs chan types.Log        // Log channel receiving the found contract events
  7001  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  7002  	done bool                  // Whether the subscription completed delivering logs
  7003  	fail error                 // Occurred error to stop iteration
  7004  }
  7005  
  7006  // Next advances the iterator to the subsequent event, returning whether there
  7007  // are any more events found. In case of a retrieval or parsing error, false is
  7008  // returned and Error() can be queried for the exact failure.
  7009  func (it *UniswapV2PairSyncIterator) Next() bool {
  7010  	// If the iterator failed, stop iterating
  7011  	if it.fail != nil {
  7012  		return false
  7013  	}
  7014  	// If the iterator completed, deliver directly whatever's available
  7015  	if it.done {
  7016  		select {
  7017  		case log := <-it.logs:
  7018  			it.Event = new(UniswapV2PairSync)
  7019  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7020  				it.fail = err
  7021  				return false
  7022  			}
  7023  			it.Event.Raw = log
  7024  			return true
  7025  
  7026  		default:
  7027  			return false
  7028  		}
  7029  	}
  7030  	// Iterator still in progress, wait for either a data or an error event
  7031  	select {
  7032  	case log := <-it.logs:
  7033  		it.Event = new(UniswapV2PairSync)
  7034  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7035  			it.fail = err
  7036  			return false
  7037  		}
  7038  		it.Event.Raw = log
  7039  		return true
  7040  
  7041  	case err := <-it.sub.Err():
  7042  		it.done = true
  7043  		it.fail = err
  7044  		return it.Next()
  7045  	}
  7046  }
  7047  
  7048  // Error returns any retrieval or parsing error occurred during filtering.
  7049  func (it *UniswapV2PairSyncIterator) Error() error {
  7050  	return it.fail
  7051  }
  7052  
  7053  // Close terminates the iteration process, releasing any pending underlying
  7054  // resources.
  7055  func (it *UniswapV2PairSyncIterator) Close() error {
  7056  	it.sub.Unsubscribe()
  7057  	return nil
  7058  }
  7059  
  7060  // UniswapV2PairSync represents a Sync event raised by the UniswapV2Pair contract.
  7061  type UniswapV2PairSync struct {
  7062  	Reserve0 *big.Int
  7063  	Reserve1 *big.Int
  7064  	Raw      types.Log // Blockchain specific contextual infos
  7065  }
  7066  
  7067  // FilterSync is a free log retrieval operation binding the contract event 0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1.
  7068  //
  7069  // Solidity: event Sync(uint112 reserve0, uint112 reserve1)
  7070  func (_UniswapV2Pair *UniswapV2PairFilterer) FilterSync(opts *bind.FilterOpts) (*UniswapV2PairSyncIterator, error) {
  7071  
  7072  	logs, sub, err := _UniswapV2Pair.contract.FilterLogs(opts, "Sync")
  7073  	if err != nil {
  7074  		return nil, err
  7075  	}
  7076  	return &UniswapV2PairSyncIterator{contract: _UniswapV2Pair.contract, event: "Sync", logs: logs, sub: sub}, nil
  7077  }
  7078  
  7079  // WatchSync is a free log subscription operation binding the contract event 0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1.
  7080  //
  7081  // Solidity: event Sync(uint112 reserve0, uint112 reserve1)
  7082  func (_UniswapV2Pair *UniswapV2PairFilterer) WatchSync(opts *bind.WatchOpts, sink chan<- *UniswapV2PairSync) (event.Subscription, error) {
  7083  
  7084  	logs, sub, err := _UniswapV2Pair.contract.WatchLogs(opts, "Sync")
  7085  	if err != nil {
  7086  		return nil, err
  7087  	}
  7088  	return event.NewSubscription(func(quit <-chan struct{}) error {
  7089  		defer sub.Unsubscribe()
  7090  		for {
  7091  			select {
  7092  			case log := <-logs:
  7093  				// New log arrived, parse the event and forward to the user
  7094  				event := new(UniswapV2PairSync)
  7095  				if err := _UniswapV2Pair.contract.UnpackLog(event, "Sync", log); err != nil {
  7096  					return err
  7097  				}
  7098  				event.Raw = log
  7099  
  7100  				select {
  7101  				case sink <- event:
  7102  				case err := <-sub.Err():
  7103  					return err
  7104  				case <-quit:
  7105  					return nil
  7106  				}
  7107  			case err := <-sub.Err():
  7108  				return err
  7109  			case <-quit:
  7110  				return nil
  7111  			}
  7112  		}
  7113  	}), nil
  7114  }
  7115  
  7116  // ParseSync is a log parse operation binding the contract event 0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1.
  7117  //
  7118  // Solidity: event Sync(uint112 reserve0, uint112 reserve1)
  7119  func (_UniswapV2Pair *UniswapV2PairFilterer) ParseSync(log types.Log) (*UniswapV2PairSync, error) {
  7120  	event := new(UniswapV2PairSync)
  7121  	if err := _UniswapV2Pair.contract.UnpackLog(event, "Sync", log); err != nil {
  7122  		return nil, err
  7123  	}
  7124  	return event, nil
  7125  }
  7126  
  7127  // UniswapV2PairTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the UniswapV2Pair contract.
  7128  type UniswapV2PairTransferIterator struct {
  7129  	Event *UniswapV2PairTransfer // Event containing the contract specifics and raw log
  7130  
  7131  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  7132  	event    string              // Event name to use for unpacking event data
  7133  
  7134  	logs chan types.Log        // Log channel receiving the found contract events
  7135  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  7136  	done bool                  // Whether the subscription completed delivering logs
  7137  	fail error                 // Occurred error to stop iteration
  7138  }
  7139  
  7140  // Next advances the iterator to the subsequent event, returning whether there
  7141  // are any more events found. In case of a retrieval or parsing error, false is
  7142  // returned and Error() can be queried for the exact failure.
  7143  func (it *UniswapV2PairTransferIterator) Next() bool {
  7144  	// If the iterator failed, stop iterating
  7145  	if it.fail != nil {
  7146  		return false
  7147  	}
  7148  	// If the iterator completed, deliver directly whatever's available
  7149  	if it.done {
  7150  		select {
  7151  		case log := <-it.logs:
  7152  			it.Event = new(UniswapV2PairTransfer)
  7153  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7154  				it.fail = err
  7155  				return false
  7156  			}
  7157  			it.Event.Raw = log
  7158  			return true
  7159  
  7160  		default:
  7161  			return false
  7162  		}
  7163  	}
  7164  	// Iterator still in progress, wait for either a data or an error event
  7165  	select {
  7166  	case log := <-it.logs:
  7167  		it.Event = new(UniswapV2PairTransfer)
  7168  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7169  			it.fail = err
  7170  			return false
  7171  		}
  7172  		it.Event.Raw = log
  7173  		return true
  7174  
  7175  	case err := <-it.sub.Err():
  7176  		it.done = true
  7177  		it.fail = err
  7178  		return it.Next()
  7179  	}
  7180  }
  7181  
  7182  // Error returns any retrieval or parsing error occurred during filtering.
  7183  func (it *UniswapV2PairTransferIterator) Error() error {
  7184  	return it.fail
  7185  }
  7186  
  7187  // Close terminates the iteration process, releasing any pending underlying
  7188  // resources.
  7189  func (it *UniswapV2PairTransferIterator) Close() error {
  7190  	it.sub.Unsubscribe()
  7191  	return nil
  7192  }
  7193  
  7194  // UniswapV2PairTransfer represents a Transfer event raised by the UniswapV2Pair contract.
  7195  type UniswapV2PairTransfer struct {
  7196  	From  common.Address
  7197  	To    common.Address
  7198  	Value *big.Int
  7199  	Raw   types.Log // Blockchain specific contextual infos
  7200  }
  7201  
  7202  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  7203  //
  7204  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  7205  func (_UniswapV2Pair *UniswapV2PairFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*UniswapV2PairTransferIterator, error) {
  7206  
  7207  	var fromRule []interface{}
  7208  	for _, fromItem := range from {
  7209  		fromRule = append(fromRule, fromItem)
  7210  	}
  7211  	var toRule []interface{}
  7212  	for _, toItem := range to {
  7213  		toRule = append(toRule, toItem)
  7214  	}
  7215  
  7216  	logs, sub, err := _UniswapV2Pair.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
  7217  	if err != nil {
  7218  		return nil, err
  7219  	}
  7220  	return &UniswapV2PairTransferIterator{contract: _UniswapV2Pair.contract, event: "Transfer", logs: logs, sub: sub}, nil
  7221  }
  7222  
  7223  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  7224  //
  7225  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  7226  func (_UniswapV2Pair *UniswapV2PairFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *UniswapV2PairTransfer, from []common.Address, to []common.Address) (event.Subscription, error) {
  7227  
  7228  	var fromRule []interface{}
  7229  	for _, fromItem := range from {
  7230  		fromRule = append(fromRule, fromItem)
  7231  	}
  7232  	var toRule []interface{}
  7233  	for _, toItem := range to {
  7234  		toRule = append(toRule, toItem)
  7235  	}
  7236  
  7237  	logs, sub, err := _UniswapV2Pair.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
  7238  	if err != nil {
  7239  		return nil, err
  7240  	}
  7241  	return event.NewSubscription(func(quit <-chan struct{}) error {
  7242  		defer sub.Unsubscribe()
  7243  		for {
  7244  			select {
  7245  			case log := <-logs:
  7246  				// New log arrived, parse the event and forward to the user
  7247  				event := new(UniswapV2PairTransfer)
  7248  				if err := _UniswapV2Pair.contract.UnpackLog(event, "Transfer", log); err != nil {
  7249  					return err
  7250  				}
  7251  				event.Raw = log
  7252  
  7253  				select {
  7254  				case sink <- event:
  7255  				case err := <-sub.Err():
  7256  					return err
  7257  				case <-quit:
  7258  					return nil
  7259  				}
  7260  			case err := <-sub.Err():
  7261  				return err
  7262  			case <-quit:
  7263  				return nil
  7264  			}
  7265  		}
  7266  	}), nil
  7267  }
  7268  
  7269  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  7270  //
  7271  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  7272  func (_UniswapV2Pair *UniswapV2PairFilterer) ParseTransfer(log types.Log) (*UniswapV2PairTransfer, error) {
  7273  	event := new(UniswapV2PairTransfer)
  7274  	if err := _UniswapV2Pair.contract.UnpackLog(event, "Transfer", log); err != nil {
  7275  		return nil, err
  7276  	}
  7277  	return event, nil
  7278  }