status-im/status-go

View on GitHub
contracts/uniswapV3/uniswapv3pool.go

Summary

Maintainability
F
3 days
Test Coverage
F
0%
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.

package uniswapv3

import (
    "errors"
    "math/big"
    "strings"

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

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

// Uniswapv3MetaData contains all meta data concerning the Uniswapv3 contract.
var Uniswapv3MetaData = &bind.MetaData{
    ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"CollectProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid1\",\"type\":\"uint256\"}],\"name\":\"Flash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextOld\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextNew\",\"type\":\"uint16\"}],\"name\":\"IncreaseObservationCardinalityNext\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0New\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1New\",\"type\":\"uint8\"}],\"name\":\"SetFeeProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collectProtocol\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal0X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal1X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"flash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLiquidityPerTick\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"observations\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"blockTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"int56\",\"name\":\"tickCumulative\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityCumulativeX128\",\"type\":\"uint160\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"secondsAgos\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56[]\",\"name\":\"tickCumulatives\",\"type\":\"int56[]\"},{\"internalType\":\"uint160[]\",\"name\":\"secondsPerLiquidityCumulativeX128s\",\"type\":\"uint160[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"_liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFees\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"token0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"token1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"feeProtocol0\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol1\",\"type\":\"uint8\"}],\"name\":\"setFeeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"snapshotCumulativesInside\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"tickCumulativeInside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityInsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsInside\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16\",\"name\":\"wordPosition\",\"type\":\"int16\"}],\"name\":\"tickBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"ticks\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside0X128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside1X128\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"tickCumulativeOutside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityOutsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsOutside\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
}

// Uniswapv3ABI is the input ABI used to generate the binding from.
// Deprecated: Use Uniswapv3MetaData.ABI instead.
var Uniswapv3ABI = Uniswapv3MetaData.ABI

// Uniswapv3 is an auto generated Go binding around an Ethereum contract.
type Uniswapv3 struct {
    Uniswapv3Caller     // Read-only binding to the contract
    Uniswapv3Transactor // Write-only binding to the contract
    Uniswapv3Filterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewUniswapv3 creates a new instance of Uniswapv3, bound to a specific deployed contract.
func NewUniswapv3(address common.Address, backend bind.ContractBackend) (*Uniswapv3, error) {
    contract, err := bindUniswapv3(address, backend, backend, backend)
    if err != nil {
        return nil, err
    }
    return &Uniswapv3{Uniswapv3Caller: Uniswapv3Caller{contract: contract}, Uniswapv3Transactor: Uniswapv3Transactor{contract: contract}, Uniswapv3Filterer: Uniswapv3Filterer{contract: contract}}, nil
}

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

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

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

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

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

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

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

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

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

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

// Factory is a free data retrieval call binding the contract method 0xc45a0155.
//
// Solidity: function factory() view returns(address)
func (_Uniswapv3 *Uniswapv3Caller) Factory(opts *bind.CallOpts) (common.Address, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "factory")

    if err != nil {
        return *new(common.Address), err
    }

    out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

    return out0, err

}

// Factory is a free data retrieval call binding the contract method 0xc45a0155.
//
// Solidity: function factory() view returns(address)
func (_Uniswapv3 *Uniswapv3Session) Factory() (common.Address, error) {
    return _Uniswapv3.Contract.Factory(&_Uniswapv3.CallOpts)
}

// Factory is a free data retrieval call binding the contract method 0xc45a0155.
//
// Solidity: function factory() view returns(address)
func (_Uniswapv3 *Uniswapv3CallerSession) Factory() (common.Address, error) {
    return _Uniswapv3.Contract.Factory(&_Uniswapv3.CallOpts)
}

// Fee is a free data retrieval call binding the contract method 0xddca3f43.
//
// Solidity: function fee() view returns(uint24)
func (_Uniswapv3 *Uniswapv3Caller) Fee(opts *bind.CallOpts) (*big.Int, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "fee")

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// Fee is a free data retrieval call binding the contract method 0xddca3f43.
//
// Solidity: function fee() view returns(uint24)
func (_Uniswapv3 *Uniswapv3Session) Fee() (*big.Int, error) {
    return _Uniswapv3.Contract.Fee(&_Uniswapv3.CallOpts)
}

// Fee is a free data retrieval call binding the contract method 0xddca3f43.
//
// Solidity: function fee() view returns(uint24)
func (_Uniswapv3 *Uniswapv3CallerSession) Fee() (*big.Int, error) {
    return _Uniswapv3.Contract.Fee(&_Uniswapv3.CallOpts)
}

// FeeGrowthGlobal0X128 is a free data retrieval call binding the contract method 0xf3058399.
//
// Solidity: function feeGrowthGlobal0X128() view returns(uint256)
func (_Uniswapv3 *Uniswapv3Caller) FeeGrowthGlobal0X128(opts *bind.CallOpts) (*big.Int, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "feeGrowthGlobal0X128")

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// FeeGrowthGlobal0X128 is a free data retrieval call binding the contract method 0xf3058399.
//
// Solidity: function feeGrowthGlobal0X128() view returns(uint256)
func (_Uniswapv3 *Uniswapv3Session) FeeGrowthGlobal0X128() (*big.Int, error) {
    return _Uniswapv3.Contract.FeeGrowthGlobal0X128(&_Uniswapv3.CallOpts)
}

// FeeGrowthGlobal0X128 is a free data retrieval call binding the contract method 0xf3058399.
//
// Solidity: function feeGrowthGlobal0X128() view returns(uint256)
func (_Uniswapv3 *Uniswapv3CallerSession) FeeGrowthGlobal0X128() (*big.Int, error) {
    return _Uniswapv3.Contract.FeeGrowthGlobal0X128(&_Uniswapv3.CallOpts)
}

// FeeGrowthGlobal1X128 is a free data retrieval call binding the contract method 0x46141319.
//
// Solidity: function feeGrowthGlobal1X128() view returns(uint256)
func (_Uniswapv3 *Uniswapv3Caller) FeeGrowthGlobal1X128(opts *bind.CallOpts) (*big.Int, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "feeGrowthGlobal1X128")

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// FeeGrowthGlobal1X128 is a free data retrieval call binding the contract method 0x46141319.
//
// Solidity: function feeGrowthGlobal1X128() view returns(uint256)
func (_Uniswapv3 *Uniswapv3Session) FeeGrowthGlobal1X128() (*big.Int, error) {
    return _Uniswapv3.Contract.FeeGrowthGlobal1X128(&_Uniswapv3.CallOpts)
}

// FeeGrowthGlobal1X128 is a free data retrieval call binding the contract method 0x46141319.
//
// Solidity: function feeGrowthGlobal1X128() view returns(uint256)
func (_Uniswapv3 *Uniswapv3CallerSession) FeeGrowthGlobal1X128() (*big.Int, error) {
    return _Uniswapv3.Contract.FeeGrowthGlobal1X128(&_Uniswapv3.CallOpts)
}

// Liquidity is a free data retrieval call binding the contract method 0x1a686502.
//
// Solidity: function liquidity() view returns(uint128)
func (_Uniswapv3 *Uniswapv3Caller) Liquidity(opts *bind.CallOpts) (*big.Int, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "liquidity")

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// Liquidity is a free data retrieval call binding the contract method 0x1a686502.
//
// Solidity: function liquidity() view returns(uint128)
func (_Uniswapv3 *Uniswapv3Session) Liquidity() (*big.Int, error) {
    return _Uniswapv3.Contract.Liquidity(&_Uniswapv3.CallOpts)
}

// Liquidity is a free data retrieval call binding the contract method 0x1a686502.
//
// Solidity: function liquidity() view returns(uint128)
func (_Uniswapv3 *Uniswapv3CallerSession) Liquidity() (*big.Int, error) {
    return _Uniswapv3.Contract.Liquidity(&_Uniswapv3.CallOpts)
}

// MaxLiquidityPerTick is a free data retrieval call binding the contract method 0x70cf754a.
//
// Solidity: function maxLiquidityPerTick() view returns(uint128)
func (_Uniswapv3 *Uniswapv3Caller) MaxLiquidityPerTick(opts *bind.CallOpts) (*big.Int, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "maxLiquidityPerTick")

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// MaxLiquidityPerTick is a free data retrieval call binding the contract method 0x70cf754a.
//
// Solidity: function maxLiquidityPerTick() view returns(uint128)
func (_Uniswapv3 *Uniswapv3Session) MaxLiquidityPerTick() (*big.Int, error) {
    return _Uniswapv3.Contract.MaxLiquidityPerTick(&_Uniswapv3.CallOpts)
}

// MaxLiquidityPerTick is a free data retrieval call binding the contract method 0x70cf754a.
//
// Solidity: function maxLiquidityPerTick() view returns(uint128)
func (_Uniswapv3 *Uniswapv3CallerSession) MaxLiquidityPerTick() (*big.Int, error) {
    return _Uniswapv3.Contract.MaxLiquidityPerTick(&_Uniswapv3.CallOpts)
}

// Observations is a free data retrieval call binding the contract method 0x252c09d7.
//
// Solidity: function observations(uint256 index) view returns(uint32 blockTimestamp, int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128, bool initialized)
func (_Uniswapv3 *Uniswapv3Caller) Observations(opts *bind.CallOpts, index *big.Int) (struct {
    BlockTimestamp                    uint32
    TickCumulative                    *big.Int
    SecondsPerLiquidityCumulativeX128 *big.Int
    Initialized                       bool
}, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "observations", index)

    outstruct := new(struct {
        BlockTimestamp                    uint32
        TickCumulative                    *big.Int
        SecondsPerLiquidityCumulativeX128 *big.Int
        Initialized                       bool
    })
    if err != nil {
        return *outstruct, err
    }

    outstruct.BlockTimestamp = *abi.ConvertType(out[0], new(uint32)).(*uint32)
    outstruct.TickCumulative = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
    outstruct.SecondsPerLiquidityCumulativeX128 = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int)
    outstruct.Initialized = *abi.ConvertType(out[3], new(bool)).(*bool)

    return *outstruct, err

}

// Observations is a free data retrieval call binding the contract method 0x252c09d7.
//
// Solidity: function observations(uint256 index) view returns(uint32 blockTimestamp, int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128, bool initialized)
func (_Uniswapv3 *Uniswapv3Session) Observations(index *big.Int) (struct {
    BlockTimestamp                    uint32
    TickCumulative                    *big.Int
    SecondsPerLiquidityCumulativeX128 *big.Int
    Initialized                       bool
}, error) {
    return _Uniswapv3.Contract.Observations(&_Uniswapv3.CallOpts, index)
}

// Observations is a free data retrieval call binding the contract method 0x252c09d7.
//
// Solidity: function observations(uint256 index) view returns(uint32 blockTimestamp, int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128, bool initialized)
func (_Uniswapv3 *Uniswapv3CallerSession) Observations(index *big.Int) (struct {
    BlockTimestamp                    uint32
    TickCumulative                    *big.Int
    SecondsPerLiquidityCumulativeX128 *big.Int
    Initialized                       bool
}, error) {
    return _Uniswapv3.Contract.Observations(&_Uniswapv3.CallOpts, index)
}

// Observe is a free data retrieval call binding the contract method 0x883bdbfd.
//
// Solidity: function observe(uint32[] secondsAgos) view returns(int56[] tickCumulatives, uint160[] secondsPerLiquidityCumulativeX128s)
func (_Uniswapv3 *Uniswapv3Caller) Observe(opts *bind.CallOpts, secondsAgos []uint32) (struct {
    TickCumulatives                    []*big.Int
    SecondsPerLiquidityCumulativeX128s []*big.Int
}, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "observe", secondsAgos)

    outstruct := new(struct {
        TickCumulatives                    []*big.Int
        SecondsPerLiquidityCumulativeX128s []*big.Int
    })
    if err != nil {
        return *outstruct, err
    }

    outstruct.TickCumulatives = *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int)
    outstruct.SecondsPerLiquidityCumulativeX128s = *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int)

    return *outstruct, err

}

// Observe is a free data retrieval call binding the contract method 0x883bdbfd.
//
// Solidity: function observe(uint32[] secondsAgos) view returns(int56[] tickCumulatives, uint160[] secondsPerLiquidityCumulativeX128s)
func (_Uniswapv3 *Uniswapv3Session) Observe(secondsAgos []uint32) (struct {
    TickCumulatives                    []*big.Int
    SecondsPerLiquidityCumulativeX128s []*big.Int
}, error) {
    return _Uniswapv3.Contract.Observe(&_Uniswapv3.CallOpts, secondsAgos)
}

// Observe is a free data retrieval call binding the contract method 0x883bdbfd.
//
// Solidity: function observe(uint32[] secondsAgos) view returns(int56[] tickCumulatives, uint160[] secondsPerLiquidityCumulativeX128s)
func (_Uniswapv3 *Uniswapv3CallerSession) Observe(secondsAgos []uint32) (struct {
    TickCumulatives                    []*big.Int
    SecondsPerLiquidityCumulativeX128s []*big.Int
}, error) {
    return _Uniswapv3.Contract.Observe(&_Uniswapv3.CallOpts, secondsAgos)
}

// Positions is a free data retrieval call binding the contract method 0x514ea4bf.
//
// Solidity: function positions(bytes32 key) view returns(uint128 _liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1)
func (_Uniswapv3 *Uniswapv3Caller) Positions(opts *bind.CallOpts, key [32]byte) (struct {
    Liquidity                *big.Int
    FeeGrowthInside0LastX128 *big.Int
    FeeGrowthInside1LastX128 *big.Int
    TokensOwed0              *big.Int
    TokensOwed1              *big.Int
}, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "positions", key)

    outstruct := new(struct {
        Liquidity                *big.Int
        FeeGrowthInside0LastX128 *big.Int
        FeeGrowthInside1LastX128 *big.Int
        TokensOwed0              *big.Int
        TokensOwed1              *big.Int
    })
    if err != nil {
        return *outstruct, err
    }

    outstruct.Liquidity = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
    outstruct.FeeGrowthInside0LastX128 = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
    outstruct.FeeGrowthInside1LastX128 = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int)
    outstruct.TokensOwed0 = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int)
    outstruct.TokensOwed1 = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int)

    return *outstruct, err

}

// Positions is a free data retrieval call binding the contract method 0x514ea4bf.
//
// Solidity: function positions(bytes32 key) view returns(uint128 _liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1)
func (_Uniswapv3 *Uniswapv3Session) Positions(key [32]byte) (struct {
    Liquidity                *big.Int
    FeeGrowthInside0LastX128 *big.Int
    FeeGrowthInside1LastX128 *big.Int
    TokensOwed0              *big.Int
    TokensOwed1              *big.Int
}, error) {
    return _Uniswapv3.Contract.Positions(&_Uniswapv3.CallOpts, key)
}

// Positions is a free data retrieval call binding the contract method 0x514ea4bf.
//
// Solidity: function positions(bytes32 key) view returns(uint128 _liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1)
func (_Uniswapv3 *Uniswapv3CallerSession) Positions(key [32]byte) (struct {
    Liquidity                *big.Int
    FeeGrowthInside0LastX128 *big.Int
    FeeGrowthInside1LastX128 *big.Int
    TokensOwed0              *big.Int
    TokensOwed1              *big.Int
}, error) {
    return _Uniswapv3.Contract.Positions(&_Uniswapv3.CallOpts, key)
}

// ProtocolFees is a free data retrieval call binding the contract method 0x1ad8b03b.
//
// Solidity: function protocolFees() view returns(uint128 token0, uint128 token1)
func (_Uniswapv3 *Uniswapv3Caller) ProtocolFees(opts *bind.CallOpts) (struct {
    Token0 *big.Int
    Token1 *big.Int
}, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "protocolFees")

    outstruct := new(struct {
        Token0 *big.Int
        Token1 *big.Int
    })
    if err != nil {
        return *outstruct, err
    }

    outstruct.Token0 = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
    outstruct.Token1 = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)

    return *outstruct, err

}

// ProtocolFees is a free data retrieval call binding the contract method 0x1ad8b03b.
//
// Solidity: function protocolFees() view returns(uint128 token0, uint128 token1)
func (_Uniswapv3 *Uniswapv3Session) ProtocolFees() (struct {
    Token0 *big.Int
    Token1 *big.Int
}, error) {
    return _Uniswapv3.Contract.ProtocolFees(&_Uniswapv3.CallOpts)
}

// ProtocolFees is a free data retrieval call binding the contract method 0x1ad8b03b.
//
// Solidity: function protocolFees() view returns(uint128 token0, uint128 token1)
func (_Uniswapv3 *Uniswapv3CallerSession) ProtocolFees() (struct {
    Token0 *big.Int
    Token1 *big.Int
}, error) {
    return _Uniswapv3.Contract.ProtocolFees(&_Uniswapv3.CallOpts)
}

// Slot0 is a free data retrieval call binding the contract method 0x3850c7bd.
//
// Solidity: function slot0() view returns(uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)
func (_Uniswapv3 *Uniswapv3Caller) Slot0(opts *bind.CallOpts) (struct {
    SqrtPriceX96               *big.Int
    Tick                       *big.Int
    ObservationIndex           uint16
    ObservationCardinality     uint16
    ObservationCardinalityNext uint16
    FeeProtocol                uint8
    Unlocked                   bool
}, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "slot0")

    outstruct := new(struct {
        SqrtPriceX96               *big.Int
        Tick                       *big.Int
        ObservationIndex           uint16
        ObservationCardinality     uint16
        ObservationCardinalityNext uint16
        FeeProtocol                uint8
        Unlocked                   bool
    })
    if err != nil {
        return *outstruct, err
    }

    outstruct.SqrtPriceX96 = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
    outstruct.Tick = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
    outstruct.ObservationIndex = *abi.ConvertType(out[2], new(uint16)).(*uint16)
    outstruct.ObservationCardinality = *abi.ConvertType(out[3], new(uint16)).(*uint16)
    outstruct.ObservationCardinalityNext = *abi.ConvertType(out[4], new(uint16)).(*uint16)
    outstruct.FeeProtocol = *abi.ConvertType(out[5], new(uint8)).(*uint8)
    outstruct.Unlocked = *abi.ConvertType(out[6], new(bool)).(*bool)

    return *outstruct, err

}

// Slot0 is a free data retrieval call binding the contract method 0x3850c7bd.
//
// Solidity: function slot0() view returns(uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)
func (_Uniswapv3 *Uniswapv3Session) Slot0() (struct {
    SqrtPriceX96               *big.Int
    Tick                       *big.Int
    ObservationIndex           uint16
    ObservationCardinality     uint16
    ObservationCardinalityNext uint16
    FeeProtocol                uint8
    Unlocked                   bool
}, error) {
    return _Uniswapv3.Contract.Slot0(&_Uniswapv3.CallOpts)
}

// Slot0 is a free data retrieval call binding the contract method 0x3850c7bd.
//
// Solidity: function slot0() view returns(uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)
func (_Uniswapv3 *Uniswapv3CallerSession) Slot0() (struct {
    SqrtPriceX96               *big.Int
    Tick                       *big.Int
    ObservationIndex           uint16
    ObservationCardinality     uint16
    ObservationCardinalityNext uint16
    FeeProtocol                uint8
    Unlocked                   bool
}, error) {
    return _Uniswapv3.Contract.Slot0(&_Uniswapv3.CallOpts)
}

// SnapshotCumulativesInside is a free data retrieval call binding the contract method 0xa38807f2.
//
// Solidity: function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) view returns(int56 tickCumulativeInside, uint160 secondsPerLiquidityInsideX128, uint32 secondsInside)
func (_Uniswapv3 *Uniswapv3Caller) SnapshotCumulativesInside(opts *bind.CallOpts, tickLower *big.Int, tickUpper *big.Int) (struct {
    TickCumulativeInside          *big.Int
    SecondsPerLiquidityInsideX128 *big.Int
    SecondsInside                 uint32
}, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "snapshotCumulativesInside", tickLower, tickUpper)

    outstruct := new(struct {
        TickCumulativeInside          *big.Int
        SecondsPerLiquidityInsideX128 *big.Int
        SecondsInside                 uint32
    })
    if err != nil {
        return *outstruct, err
    }

    outstruct.TickCumulativeInside = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
    outstruct.SecondsPerLiquidityInsideX128 = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
    outstruct.SecondsInside = *abi.ConvertType(out[2], new(uint32)).(*uint32)

    return *outstruct, err

}

// SnapshotCumulativesInside is a free data retrieval call binding the contract method 0xa38807f2.
//
// Solidity: function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) view returns(int56 tickCumulativeInside, uint160 secondsPerLiquidityInsideX128, uint32 secondsInside)
func (_Uniswapv3 *Uniswapv3Session) SnapshotCumulativesInside(tickLower *big.Int, tickUpper *big.Int) (struct {
    TickCumulativeInside          *big.Int
    SecondsPerLiquidityInsideX128 *big.Int
    SecondsInside                 uint32
}, error) {
    return _Uniswapv3.Contract.SnapshotCumulativesInside(&_Uniswapv3.CallOpts, tickLower, tickUpper)
}

// SnapshotCumulativesInside is a free data retrieval call binding the contract method 0xa38807f2.
//
// Solidity: function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) view returns(int56 tickCumulativeInside, uint160 secondsPerLiquidityInsideX128, uint32 secondsInside)
func (_Uniswapv3 *Uniswapv3CallerSession) SnapshotCumulativesInside(tickLower *big.Int, tickUpper *big.Int) (struct {
    TickCumulativeInside          *big.Int
    SecondsPerLiquidityInsideX128 *big.Int
    SecondsInside                 uint32
}, error) {
    return _Uniswapv3.Contract.SnapshotCumulativesInside(&_Uniswapv3.CallOpts, tickLower, tickUpper)
}

// TickBitmap is a free data retrieval call binding the contract method 0x5339c296.
//
// Solidity: function tickBitmap(int16 wordPosition) view returns(uint256)
func (_Uniswapv3 *Uniswapv3Caller) TickBitmap(opts *bind.CallOpts, wordPosition int16) (*big.Int, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "tickBitmap", wordPosition)

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// TickBitmap is a free data retrieval call binding the contract method 0x5339c296.
//
// Solidity: function tickBitmap(int16 wordPosition) view returns(uint256)
func (_Uniswapv3 *Uniswapv3Session) TickBitmap(wordPosition int16) (*big.Int, error) {
    return _Uniswapv3.Contract.TickBitmap(&_Uniswapv3.CallOpts, wordPosition)
}

// TickBitmap is a free data retrieval call binding the contract method 0x5339c296.
//
// Solidity: function tickBitmap(int16 wordPosition) view returns(uint256)
func (_Uniswapv3 *Uniswapv3CallerSession) TickBitmap(wordPosition int16) (*big.Int, error) {
    return _Uniswapv3.Contract.TickBitmap(&_Uniswapv3.CallOpts, wordPosition)
}

// TickSpacing is a free data retrieval call binding the contract method 0xd0c93a7c.
//
// Solidity: function tickSpacing() view returns(int24)
func (_Uniswapv3 *Uniswapv3Caller) TickSpacing(opts *bind.CallOpts) (*big.Int, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "tickSpacing")

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// TickSpacing is a free data retrieval call binding the contract method 0xd0c93a7c.
//
// Solidity: function tickSpacing() view returns(int24)
func (_Uniswapv3 *Uniswapv3Session) TickSpacing() (*big.Int, error) {
    return _Uniswapv3.Contract.TickSpacing(&_Uniswapv3.CallOpts)
}

// TickSpacing is a free data retrieval call binding the contract method 0xd0c93a7c.
//
// Solidity: function tickSpacing() view returns(int24)
func (_Uniswapv3 *Uniswapv3CallerSession) TickSpacing() (*big.Int, error) {
    return _Uniswapv3.Contract.TickSpacing(&_Uniswapv3.CallOpts)
}

// Ticks is a free data retrieval call binding the contract method 0xf30dba93.
//
// Solidity: function ticks(int24 tick) view returns(uint128 liquidityGross, int128 liquidityNet, uint256 feeGrowthOutside0X128, uint256 feeGrowthOutside1X128, int56 tickCumulativeOutside, uint160 secondsPerLiquidityOutsideX128, uint32 secondsOutside, bool initialized)
func (_Uniswapv3 *Uniswapv3Caller) Ticks(opts *bind.CallOpts, tick *big.Int) (struct {
    LiquidityGross                 *big.Int
    LiquidityNet                   *big.Int
    FeeGrowthOutside0X128          *big.Int
    FeeGrowthOutside1X128          *big.Int
    TickCumulativeOutside          *big.Int
    SecondsPerLiquidityOutsideX128 *big.Int
    SecondsOutside                 uint32
    Initialized                    bool
}, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "ticks", tick)

    outstruct := new(struct {
        LiquidityGross                 *big.Int
        LiquidityNet                   *big.Int
        FeeGrowthOutside0X128          *big.Int
        FeeGrowthOutside1X128          *big.Int
        TickCumulativeOutside          *big.Int
        SecondsPerLiquidityOutsideX128 *big.Int
        SecondsOutside                 uint32
        Initialized                    bool
    })
    if err != nil {
        return *outstruct, err
    }

    outstruct.LiquidityGross = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
    outstruct.LiquidityNet = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
    outstruct.FeeGrowthOutside0X128 = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int)
    outstruct.FeeGrowthOutside1X128 = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int)
    outstruct.TickCumulativeOutside = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int)
    outstruct.SecondsPerLiquidityOutsideX128 = *abi.ConvertType(out[5], new(*big.Int)).(**big.Int)
    outstruct.SecondsOutside = *abi.ConvertType(out[6], new(uint32)).(*uint32)
    outstruct.Initialized = *abi.ConvertType(out[7], new(bool)).(*bool)

    return *outstruct, err

}

// Ticks is a free data retrieval call binding the contract method 0xf30dba93.
//
// Solidity: function ticks(int24 tick) view returns(uint128 liquidityGross, int128 liquidityNet, uint256 feeGrowthOutside0X128, uint256 feeGrowthOutside1X128, int56 tickCumulativeOutside, uint160 secondsPerLiquidityOutsideX128, uint32 secondsOutside, bool initialized)
func (_Uniswapv3 *Uniswapv3Session) Ticks(tick *big.Int) (struct {
    LiquidityGross                 *big.Int
    LiquidityNet                   *big.Int
    FeeGrowthOutside0X128          *big.Int
    FeeGrowthOutside1X128          *big.Int
    TickCumulativeOutside          *big.Int
    SecondsPerLiquidityOutsideX128 *big.Int
    SecondsOutside                 uint32
    Initialized                    bool
}, error) {
    return _Uniswapv3.Contract.Ticks(&_Uniswapv3.CallOpts, tick)
}

// Ticks is a free data retrieval call binding the contract method 0xf30dba93.
//
// Solidity: function ticks(int24 tick) view returns(uint128 liquidityGross, int128 liquidityNet, uint256 feeGrowthOutside0X128, uint256 feeGrowthOutside1X128, int56 tickCumulativeOutside, uint160 secondsPerLiquidityOutsideX128, uint32 secondsOutside, bool initialized)
func (_Uniswapv3 *Uniswapv3CallerSession) Ticks(tick *big.Int) (struct {
    LiquidityGross                 *big.Int
    LiquidityNet                   *big.Int
    FeeGrowthOutside0X128          *big.Int
    FeeGrowthOutside1X128          *big.Int
    TickCumulativeOutside          *big.Int
    SecondsPerLiquidityOutsideX128 *big.Int
    SecondsOutside                 uint32
    Initialized                    bool
}, error) {
    return _Uniswapv3.Contract.Ticks(&_Uniswapv3.CallOpts, tick)
}

// Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
//
// Solidity: function token0() view returns(address)
func (_Uniswapv3 *Uniswapv3Caller) Token0(opts *bind.CallOpts) (common.Address, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "token0")

    if err != nil {
        return *new(common.Address), err
    }

    out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

    return out0, err

}

// Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
//
// Solidity: function token0() view returns(address)
func (_Uniswapv3 *Uniswapv3Session) Token0() (common.Address, error) {
    return _Uniswapv3.Contract.Token0(&_Uniswapv3.CallOpts)
}

// Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
//
// Solidity: function token0() view returns(address)
func (_Uniswapv3 *Uniswapv3CallerSession) Token0() (common.Address, error) {
    return _Uniswapv3.Contract.Token0(&_Uniswapv3.CallOpts)
}

// Token1 is a free data retrieval call binding the contract method 0xd21220a7.
//
// Solidity: function token1() view returns(address)
func (_Uniswapv3 *Uniswapv3Caller) Token1(opts *bind.CallOpts) (common.Address, error) {
    var out []interface{}
    err := _Uniswapv3.contract.Call(opts, &out, "token1")

    if err != nil {
        return *new(common.Address), err
    }

    out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

    return out0, err

}

// Token1 is a free data retrieval call binding the contract method 0xd21220a7.
//
// Solidity: function token1() view returns(address)
func (_Uniswapv3 *Uniswapv3Session) Token1() (common.Address, error) {
    return _Uniswapv3.Contract.Token1(&_Uniswapv3.CallOpts)
}

// Token1 is a free data retrieval call binding the contract method 0xd21220a7.
//
// Solidity: function token1() view returns(address)
func (_Uniswapv3 *Uniswapv3CallerSession) Token1() (common.Address, error) {
    return _Uniswapv3.Contract.Token1(&_Uniswapv3.CallOpts)
}

// Burn is a paid mutator transaction binding the contract method 0xa34123a7.
//
// Solidity: function burn(int24 tickLower, int24 tickUpper, uint128 amount) returns(uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3Transactor) Burn(opts *bind.TransactOpts, tickLower *big.Int, tickUpper *big.Int, amount *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.contract.Transact(opts, "burn", tickLower, tickUpper, amount)
}

// Burn is a paid mutator transaction binding the contract method 0xa34123a7.
//
// Solidity: function burn(int24 tickLower, int24 tickUpper, uint128 amount) returns(uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3Session) Burn(tickLower *big.Int, tickUpper *big.Int, amount *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Burn(&_Uniswapv3.TransactOpts, tickLower, tickUpper, amount)
}

// Burn is a paid mutator transaction binding the contract method 0xa34123a7.
//
// Solidity: function burn(int24 tickLower, int24 tickUpper, uint128 amount) returns(uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3TransactorSession) Burn(tickLower *big.Int, tickUpper *big.Int, amount *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Burn(&_Uniswapv3.TransactOpts, tickLower, tickUpper, amount)
}

// Collect is a paid mutator transaction binding the contract method 0x4f1eb3d8.
//
// Solidity: function collect(address recipient, int24 tickLower, int24 tickUpper, uint128 amount0Requested, uint128 amount1Requested) returns(uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3Transactor) Collect(opts *bind.TransactOpts, recipient common.Address, tickLower *big.Int, tickUpper *big.Int, amount0Requested *big.Int, amount1Requested *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.contract.Transact(opts, "collect", recipient, tickLower, tickUpper, amount0Requested, amount1Requested)
}

// Collect is a paid mutator transaction binding the contract method 0x4f1eb3d8.
//
// Solidity: function collect(address recipient, int24 tickLower, int24 tickUpper, uint128 amount0Requested, uint128 amount1Requested) returns(uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3Session) Collect(recipient common.Address, tickLower *big.Int, tickUpper *big.Int, amount0Requested *big.Int, amount1Requested *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Collect(&_Uniswapv3.TransactOpts, recipient, tickLower, tickUpper, amount0Requested, amount1Requested)
}

// Collect is a paid mutator transaction binding the contract method 0x4f1eb3d8.
//
// Solidity: function collect(address recipient, int24 tickLower, int24 tickUpper, uint128 amount0Requested, uint128 amount1Requested) returns(uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3TransactorSession) Collect(recipient common.Address, tickLower *big.Int, tickUpper *big.Int, amount0Requested *big.Int, amount1Requested *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Collect(&_Uniswapv3.TransactOpts, recipient, tickLower, tickUpper, amount0Requested, amount1Requested)
}

// CollectProtocol is a paid mutator transaction binding the contract method 0x85b66729.
//
// Solidity: function collectProtocol(address recipient, uint128 amount0Requested, uint128 amount1Requested) returns(uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3Transactor) CollectProtocol(opts *bind.TransactOpts, recipient common.Address, amount0Requested *big.Int, amount1Requested *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.contract.Transact(opts, "collectProtocol", recipient, amount0Requested, amount1Requested)
}

// CollectProtocol is a paid mutator transaction binding the contract method 0x85b66729.
//
// Solidity: function collectProtocol(address recipient, uint128 amount0Requested, uint128 amount1Requested) returns(uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3Session) CollectProtocol(recipient common.Address, amount0Requested *big.Int, amount1Requested *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.Contract.CollectProtocol(&_Uniswapv3.TransactOpts, recipient, amount0Requested, amount1Requested)
}

// CollectProtocol is a paid mutator transaction binding the contract method 0x85b66729.
//
// Solidity: function collectProtocol(address recipient, uint128 amount0Requested, uint128 amount1Requested) returns(uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3TransactorSession) CollectProtocol(recipient common.Address, amount0Requested *big.Int, amount1Requested *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.Contract.CollectProtocol(&_Uniswapv3.TransactOpts, recipient, amount0Requested, amount1Requested)
}

// Flash is a paid mutator transaction binding the contract method 0x490e6cbc.
//
// Solidity: function flash(address recipient, uint256 amount0, uint256 amount1, bytes data) returns()
func (_Uniswapv3 *Uniswapv3Transactor) Flash(opts *bind.TransactOpts, recipient common.Address, amount0 *big.Int, amount1 *big.Int, data []byte) (*types.Transaction, error) {
    return _Uniswapv3.contract.Transact(opts, "flash", recipient, amount0, amount1, data)
}

// Flash is a paid mutator transaction binding the contract method 0x490e6cbc.
//
// Solidity: function flash(address recipient, uint256 amount0, uint256 amount1, bytes data) returns()
func (_Uniswapv3 *Uniswapv3Session) Flash(recipient common.Address, amount0 *big.Int, amount1 *big.Int, data []byte) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Flash(&_Uniswapv3.TransactOpts, recipient, amount0, amount1, data)
}

// Flash is a paid mutator transaction binding the contract method 0x490e6cbc.
//
// Solidity: function flash(address recipient, uint256 amount0, uint256 amount1, bytes data) returns()
func (_Uniswapv3 *Uniswapv3TransactorSession) Flash(recipient common.Address, amount0 *big.Int, amount1 *big.Int, data []byte) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Flash(&_Uniswapv3.TransactOpts, recipient, amount0, amount1, data)
}

// IncreaseObservationCardinalityNext is a paid mutator transaction binding the contract method 0x32148f67.
//
// Solidity: function increaseObservationCardinalityNext(uint16 observationCardinalityNext) returns()
func (_Uniswapv3 *Uniswapv3Transactor) IncreaseObservationCardinalityNext(opts *bind.TransactOpts, observationCardinalityNext uint16) (*types.Transaction, error) {
    return _Uniswapv3.contract.Transact(opts, "increaseObservationCardinalityNext", observationCardinalityNext)
}

// IncreaseObservationCardinalityNext is a paid mutator transaction binding the contract method 0x32148f67.
//
// Solidity: function increaseObservationCardinalityNext(uint16 observationCardinalityNext) returns()
func (_Uniswapv3 *Uniswapv3Session) IncreaseObservationCardinalityNext(observationCardinalityNext uint16) (*types.Transaction, error) {
    return _Uniswapv3.Contract.IncreaseObservationCardinalityNext(&_Uniswapv3.TransactOpts, observationCardinalityNext)
}

// IncreaseObservationCardinalityNext is a paid mutator transaction binding the contract method 0x32148f67.
//
// Solidity: function increaseObservationCardinalityNext(uint16 observationCardinalityNext) returns()
func (_Uniswapv3 *Uniswapv3TransactorSession) IncreaseObservationCardinalityNext(observationCardinalityNext uint16) (*types.Transaction, error) {
    return _Uniswapv3.Contract.IncreaseObservationCardinalityNext(&_Uniswapv3.TransactOpts, observationCardinalityNext)
}

// Initialize is a paid mutator transaction binding the contract method 0xf637731d.
//
// Solidity: function initialize(uint160 sqrtPriceX96) returns()
func (_Uniswapv3 *Uniswapv3Transactor) Initialize(opts *bind.TransactOpts, sqrtPriceX96 *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.contract.Transact(opts, "initialize", sqrtPriceX96)
}

// Initialize is a paid mutator transaction binding the contract method 0xf637731d.
//
// Solidity: function initialize(uint160 sqrtPriceX96) returns()
func (_Uniswapv3 *Uniswapv3Session) Initialize(sqrtPriceX96 *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Initialize(&_Uniswapv3.TransactOpts, sqrtPriceX96)
}

// Initialize is a paid mutator transaction binding the contract method 0xf637731d.
//
// Solidity: function initialize(uint160 sqrtPriceX96) returns()
func (_Uniswapv3 *Uniswapv3TransactorSession) Initialize(sqrtPriceX96 *big.Int) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Initialize(&_Uniswapv3.TransactOpts, sqrtPriceX96)
}

// Mint is a paid mutator transaction binding the contract method 0x3c8a7d8d.
//
// Solidity: function mint(address recipient, int24 tickLower, int24 tickUpper, uint128 amount, bytes data) returns(uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3Transactor) Mint(opts *bind.TransactOpts, recipient common.Address, tickLower *big.Int, tickUpper *big.Int, amount *big.Int, data []byte) (*types.Transaction, error) {
    return _Uniswapv3.contract.Transact(opts, "mint", recipient, tickLower, tickUpper, amount, data)
}

// Mint is a paid mutator transaction binding the contract method 0x3c8a7d8d.
//
// Solidity: function mint(address recipient, int24 tickLower, int24 tickUpper, uint128 amount, bytes data) returns(uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3Session) Mint(recipient common.Address, tickLower *big.Int, tickUpper *big.Int, amount *big.Int, data []byte) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Mint(&_Uniswapv3.TransactOpts, recipient, tickLower, tickUpper, amount, data)
}

// Mint is a paid mutator transaction binding the contract method 0x3c8a7d8d.
//
// Solidity: function mint(address recipient, int24 tickLower, int24 tickUpper, uint128 amount, bytes data) returns(uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3TransactorSession) Mint(recipient common.Address, tickLower *big.Int, tickUpper *big.Int, amount *big.Int, data []byte) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Mint(&_Uniswapv3.TransactOpts, recipient, tickLower, tickUpper, amount, data)
}

// SetFeeProtocol is a paid mutator transaction binding the contract method 0x8206a4d1.
//
// Solidity: function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) returns()
func (_Uniswapv3 *Uniswapv3Transactor) SetFeeProtocol(opts *bind.TransactOpts, feeProtocol0 uint8, feeProtocol1 uint8) (*types.Transaction, error) {
    return _Uniswapv3.contract.Transact(opts, "setFeeProtocol", feeProtocol0, feeProtocol1)
}

// SetFeeProtocol is a paid mutator transaction binding the contract method 0x8206a4d1.
//
// Solidity: function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) returns()
func (_Uniswapv3 *Uniswapv3Session) SetFeeProtocol(feeProtocol0 uint8, feeProtocol1 uint8) (*types.Transaction, error) {
    return _Uniswapv3.Contract.SetFeeProtocol(&_Uniswapv3.TransactOpts, feeProtocol0, feeProtocol1)
}

// SetFeeProtocol is a paid mutator transaction binding the contract method 0x8206a4d1.
//
// Solidity: function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) returns()
func (_Uniswapv3 *Uniswapv3TransactorSession) SetFeeProtocol(feeProtocol0 uint8, feeProtocol1 uint8) (*types.Transaction, error) {
    return _Uniswapv3.Contract.SetFeeProtocol(&_Uniswapv3.TransactOpts, feeProtocol0, feeProtocol1)
}

// Swap is a paid mutator transaction binding the contract method 0x128acb08.
//
// Solidity: function swap(address recipient, bool zeroForOne, int256 amountSpecified, uint160 sqrtPriceLimitX96, bytes data) returns(int256 amount0, int256 amount1)
func (_Uniswapv3 *Uniswapv3Transactor) Swap(opts *bind.TransactOpts, recipient common.Address, zeroForOne bool, amountSpecified *big.Int, sqrtPriceLimitX96 *big.Int, data []byte) (*types.Transaction, error) {
    return _Uniswapv3.contract.Transact(opts, "swap", recipient, zeroForOne, amountSpecified, sqrtPriceLimitX96, data)
}

// Swap is a paid mutator transaction binding the contract method 0x128acb08.
//
// Solidity: function swap(address recipient, bool zeroForOne, int256 amountSpecified, uint160 sqrtPriceLimitX96, bytes data) returns(int256 amount0, int256 amount1)
func (_Uniswapv3 *Uniswapv3Session) Swap(recipient common.Address, zeroForOne bool, amountSpecified *big.Int, sqrtPriceLimitX96 *big.Int, data []byte) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Swap(&_Uniswapv3.TransactOpts, recipient, zeroForOne, amountSpecified, sqrtPriceLimitX96, data)
}

// Swap is a paid mutator transaction binding the contract method 0x128acb08.
//
// Solidity: function swap(address recipient, bool zeroForOne, int256 amountSpecified, uint160 sqrtPriceLimitX96, bytes data) returns(int256 amount0, int256 amount1)
func (_Uniswapv3 *Uniswapv3TransactorSession) Swap(recipient common.Address, zeroForOne bool, amountSpecified *big.Int, sqrtPriceLimitX96 *big.Int, data []byte) (*types.Transaction, error) {
    return _Uniswapv3.Contract.Swap(&_Uniswapv3.TransactOpts, recipient, zeroForOne, amountSpecified, sqrtPriceLimitX96, data)
}

// Uniswapv3BurnIterator is returned from FilterBurn and is used to iterate over the raw logs and unpacked data for Burn events raised by the Uniswapv3 contract.
type Uniswapv3BurnIterator struct {
    Event *Uniswapv3Burn // Event containing the contract specifics and raw log

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

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

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

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

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

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

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

// Uniswapv3Burn represents a Burn event raised by the Uniswapv3 contract.
type Uniswapv3Burn struct {
    Owner     common.Address
    TickLower *big.Int
    TickUpper *big.Int
    Amount    *big.Int
    Amount0   *big.Int
    Amount1   *big.Int
    Raw       types.Log // Blockchain specific contextual infos
}

// FilterBurn is a free log retrieval operation binding the contract event 0x0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c.
//
// Solidity: event Burn(address indexed owner, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount, uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) FilterBurn(opts *bind.FilterOpts, owner []common.Address, tickLower []*big.Int, tickUpper []*big.Int) (*Uniswapv3BurnIterator, error) {

    var ownerRule []interface{}
    for _, ownerItem := range owner {
        ownerRule = append(ownerRule, ownerItem)
    }
    var tickLowerRule []interface{}
    for _, tickLowerItem := range tickLower {
        tickLowerRule = append(tickLowerRule, tickLowerItem)
    }
    var tickUpperRule []interface{}
    for _, tickUpperItem := range tickUpper {
        tickUpperRule = append(tickUpperRule, tickUpperItem)
    }

    logs, sub, err := _Uniswapv3.contract.FilterLogs(opts, "Burn", ownerRule, tickLowerRule, tickUpperRule)
    if err != nil {
        return nil, err
    }
    return &Uniswapv3BurnIterator{contract: _Uniswapv3.contract, event: "Burn", logs: logs, sub: sub}, nil
}

// WatchBurn is a free log subscription operation binding the contract event 0x0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c.
//
// Solidity: event Burn(address indexed owner, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount, uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) WatchBurn(opts *bind.WatchOpts, sink chan<- *Uniswapv3Burn, owner []common.Address, tickLower []*big.Int, tickUpper []*big.Int) (event.Subscription, error) {

    var ownerRule []interface{}
    for _, ownerItem := range owner {
        ownerRule = append(ownerRule, ownerItem)
    }
    var tickLowerRule []interface{}
    for _, tickLowerItem := range tickLower {
        tickLowerRule = append(tickLowerRule, tickLowerItem)
    }
    var tickUpperRule []interface{}
    for _, tickUpperItem := range tickUpper {
        tickUpperRule = append(tickUpperRule, tickUpperItem)
    }

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

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

// ParseBurn is a log parse operation binding the contract event 0x0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c.
//
// Solidity: event Burn(address indexed owner, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount, uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) ParseBurn(log types.Log) (*Uniswapv3Burn, error) {
    event := new(Uniswapv3Burn)
    if err := _Uniswapv3.contract.UnpackLog(event, "Burn", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// Uniswapv3CollectIterator is returned from FilterCollect and is used to iterate over the raw logs and unpacked data for Collect events raised by the Uniswapv3 contract.
type Uniswapv3CollectIterator struct {
    Event *Uniswapv3Collect // Event containing the contract specifics and raw log

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

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

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

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

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

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

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

// Uniswapv3Collect represents a Collect event raised by the Uniswapv3 contract.
type Uniswapv3Collect struct {
    Owner     common.Address
    Recipient common.Address
    TickLower *big.Int
    TickUpper *big.Int
    Amount0   *big.Int
    Amount1   *big.Int
    Raw       types.Log // Blockchain specific contextual infos
}

// FilterCollect is a free log retrieval operation binding the contract event 0x70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0.
//
// Solidity: event Collect(address indexed owner, address recipient, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) FilterCollect(opts *bind.FilterOpts, owner []common.Address, tickLower []*big.Int, tickUpper []*big.Int) (*Uniswapv3CollectIterator, error) {

    var ownerRule []interface{}
    for _, ownerItem := range owner {
        ownerRule = append(ownerRule, ownerItem)
    }

    var tickLowerRule []interface{}
    for _, tickLowerItem := range tickLower {
        tickLowerRule = append(tickLowerRule, tickLowerItem)
    }
    var tickUpperRule []interface{}
    for _, tickUpperItem := range tickUpper {
        tickUpperRule = append(tickUpperRule, tickUpperItem)
    }

    logs, sub, err := _Uniswapv3.contract.FilterLogs(opts, "Collect", ownerRule, tickLowerRule, tickUpperRule)
    if err != nil {
        return nil, err
    }
    return &Uniswapv3CollectIterator{contract: _Uniswapv3.contract, event: "Collect", logs: logs, sub: sub}, nil
}

// WatchCollect is a free log subscription operation binding the contract event 0x70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0.
//
// Solidity: event Collect(address indexed owner, address recipient, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) WatchCollect(opts *bind.WatchOpts, sink chan<- *Uniswapv3Collect, owner []common.Address, tickLower []*big.Int, tickUpper []*big.Int) (event.Subscription, error) {

    var ownerRule []interface{}
    for _, ownerItem := range owner {
        ownerRule = append(ownerRule, ownerItem)
    }

    var tickLowerRule []interface{}
    for _, tickLowerItem := range tickLower {
        tickLowerRule = append(tickLowerRule, tickLowerItem)
    }
    var tickUpperRule []interface{}
    for _, tickUpperItem := range tickUpper {
        tickUpperRule = append(tickUpperRule, tickUpperItem)
    }

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

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

// ParseCollect is a log parse operation binding the contract event 0x70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0.
//
// Solidity: event Collect(address indexed owner, address recipient, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) ParseCollect(log types.Log) (*Uniswapv3Collect, error) {
    event := new(Uniswapv3Collect)
    if err := _Uniswapv3.contract.UnpackLog(event, "Collect", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// Uniswapv3CollectProtocolIterator is returned from FilterCollectProtocol and is used to iterate over the raw logs and unpacked data for CollectProtocol events raised by the Uniswapv3 contract.
type Uniswapv3CollectProtocolIterator struct {
    Event *Uniswapv3CollectProtocol // Event containing the contract specifics and raw log

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

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

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

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

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

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

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

// Uniswapv3CollectProtocol represents a CollectProtocol event raised by the Uniswapv3 contract.
type Uniswapv3CollectProtocol struct {
    Sender    common.Address
    Recipient common.Address
    Amount0   *big.Int
    Amount1   *big.Int
    Raw       types.Log // Blockchain specific contextual infos
}

// FilterCollectProtocol is a free log retrieval operation binding the contract event 0x596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151.
//
// Solidity: event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) FilterCollectProtocol(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*Uniswapv3CollectProtocolIterator, error) {

    var senderRule []interface{}
    for _, senderItem := range sender {
        senderRule = append(senderRule, senderItem)
    }
    var recipientRule []interface{}
    for _, recipientItem := range recipient {
        recipientRule = append(recipientRule, recipientItem)
    }

    logs, sub, err := _Uniswapv3.contract.FilterLogs(opts, "CollectProtocol", senderRule, recipientRule)
    if err != nil {
        return nil, err
    }
    return &Uniswapv3CollectProtocolIterator{contract: _Uniswapv3.contract, event: "CollectProtocol", logs: logs, sub: sub}, nil
}

// WatchCollectProtocol is a free log subscription operation binding the contract event 0x596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151.
//
// Solidity: event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) WatchCollectProtocol(opts *bind.WatchOpts, sink chan<- *Uniswapv3CollectProtocol, sender []common.Address, recipient []common.Address) (event.Subscription, error) {

    var senderRule []interface{}
    for _, senderItem := range sender {
        senderRule = append(senderRule, senderItem)
    }
    var recipientRule []interface{}
    for _, recipientItem := range recipient {
        recipientRule = append(recipientRule, recipientItem)
    }

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

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

// ParseCollectProtocol is a log parse operation binding the contract event 0x596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151.
//
// Solidity: event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) ParseCollectProtocol(log types.Log) (*Uniswapv3CollectProtocol, error) {
    event := new(Uniswapv3CollectProtocol)
    if err := _Uniswapv3.contract.UnpackLog(event, "CollectProtocol", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// Uniswapv3FlashIterator is returned from FilterFlash and is used to iterate over the raw logs and unpacked data for Flash events raised by the Uniswapv3 contract.
type Uniswapv3FlashIterator struct {
    Event *Uniswapv3Flash // Event containing the contract specifics and raw log

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

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

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

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

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

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

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

// Uniswapv3Flash represents a Flash event raised by the Uniswapv3 contract.
type Uniswapv3Flash struct {
    Sender    common.Address
    Recipient common.Address
    Amount0   *big.Int
    Amount1   *big.Int
    Paid0     *big.Int
    Paid1     *big.Int
    Raw       types.Log // Blockchain specific contextual infos
}

// FilterFlash is a free log retrieval operation binding the contract event 0xbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca633.
//
// Solidity: event Flash(address indexed sender, address indexed recipient, uint256 amount0, uint256 amount1, uint256 paid0, uint256 paid1)
func (_Uniswapv3 *Uniswapv3Filterer) FilterFlash(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*Uniswapv3FlashIterator, error) {

    var senderRule []interface{}
    for _, senderItem := range sender {
        senderRule = append(senderRule, senderItem)
    }
    var recipientRule []interface{}
    for _, recipientItem := range recipient {
        recipientRule = append(recipientRule, recipientItem)
    }

    logs, sub, err := _Uniswapv3.contract.FilterLogs(opts, "Flash", senderRule, recipientRule)
    if err != nil {
        return nil, err
    }
    return &Uniswapv3FlashIterator{contract: _Uniswapv3.contract, event: "Flash", logs: logs, sub: sub}, nil
}

// WatchFlash is a free log subscription operation binding the contract event 0xbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca633.
//
// Solidity: event Flash(address indexed sender, address indexed recipient, uint256 amount0, uint256 amount1, uint256 paid0, uint256 paid1)
func (_Uniswapv3 *Uniswapv3Filterer) WatchFlash(opts *bind.WatchOpts, sink chan<- *Uniswapv3Flash, sender []common.Address, recipient []common.Address) (event.Subscription, error) {

    var senderRule []interface{}
    for _, senderItem := range sender {
        senderRule = append(senderRule, senderItem)
    }
    var recipientRule []interface{}
    for _, recipientItem := range recipient {
        recipientRule = append(recipientRule, recipientItem)
    }

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

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

// ParseFlash is a log parse operation binding the contract event 0xbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca633.
//
// Solidity: event Flash(address indexed sender, address indexed recipient, uint256 amount0, uint256 amount1, uint256 paid0, uint256 paid1)
func (_Uniswapv3 *Uniswapv3Filterer) ParseFlash(log types.Log) (*Uniswapv3Flash, error) {
    event := new(Uniswapv3Flash)
    if err := _Uniswapv3.contract.UnpackLog(event, "Flash", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// Uniswapv3IncreaseObservationCardinalityNextIterator is returned from FilterIncreaseObservationCardinalityNext and is used to iterate over the raw logs and unpacked data for IncreaseObservationCardinalityNext events raised by the Uniswapv3 contract.
type Uniswapv3IncreaseObservationCardinalityNextIterator struct {
    Event *Uniswapv3IncreaseObservationCardinalityNext // Event containing the contract specifics and raw log

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

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

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

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

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

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

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

// Uniswapv3IncreaseObservationCardinalityNext represents a IncreaseObservationCardinalityNext event raised by the Uniswapv3 contract.
type Uniswapv3IncreaseObservationCardinalityNext struct {
    ObservationCardinalityNextOld uint16
    ObservationCardinalityNextNew uint16
    Raw                           types.Log // Blockchain specific contextual infos
}

// FilterIncreaseObservationCardinalityNext is a free log retrieval operation binding the contract event 0xac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a.
//
// Solidity: event IncreaseObservationCardinalityNext(uint16 observationCardinalityNextOld, uint16 observationCardinalityNextNew)
func (_Uniswapv3 *Uniswapv3Filterer) FilterIncreaseObservationCardinalityNext(opts *bind.FilterOpts) (*Uniswapv3IncreaseObservationCardinalityNextIterator, error) {

    logs, sub, err := _Uniswapv3.contract.FilterLogs(opts, "IncreaseObservationCardinalityNext")
    if err != nil {
        return nil, err
    }
    return &Uniswapv3IncreaseObservationCardinalityNextIterator{contract: _Uniswapv3.contract, event: "IncreaseObservationCardinalityNext", logs: logs, sub: sub}, nil
}

// WatchIncreaseObservationCardinalityNext is a free log subscription operation binding the contract event 0xac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a.
//
// Solidity: event IncreaseObservationCardinalityNext(uint16 observationCardinalityNextOld, uint16 observationCardinalityNextNew)
func (_Uniswapv3 *Uniswapv3Filterer) WatchIncreaseObservationCardinalityNext(opts *bind.WatchOpts, sink chan<- *Uniswapv3IncreaseObservationCardinalityNext) (event.Subscription, error) {

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

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

// ParseIncreaseObservationCardinalityNext is a log parse operation binding the contract event 0xac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a.
//
// Solidity: event IncreaseObservationCardinalityNext(uint16 observationCardinalityNextOld, uint16 observationCardinalityNextNew)
func (_Uniswapv3 *Uniswapv3Filterer) ParseIncreaseObservationCardinalityNext(log types.Log) (*Uniswapv3IncreaseObservationCardinalityNext, error) {
    event := new(Uniswapv3IncreaseObservationCardinalityNext)
    if err := _Uniswapv3.contract.UnpackLog(event, "IncreaseObservationCardinalityNext", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// Uniswapv3InitializeIterator is returned from FilterInitialize and is used to iterate over the raw logs and unpacked data for Initialize events raised by the Uniswapv3 contract.
type Uniswapv3InitializeIterator struct {
    Event *Uniswapv3Initialize // Event containing the contract specifics and raw log

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

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

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

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

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

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

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

// Uniswapv3Initialize represents a Initialize event raised by the Uniswapv3 contract.
type Uniswapv3Initialize struct {
    SqrtPriceX96 *big.Int
    Tick         *big.Int
    Raw          types.Log // Blockchain specific contextual infos
}

// FilterInitialize is a free log retrieval operation binding the contract event 0x98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95.
//
// Solidity: event Initialize(uint160 sqrtPriceX96, int24 tick)
func (_Uniswapv3 *Uniswapv3Filterer) FilterInitialize(opts *bind.FilterOpts) (*Uniswapv3InitializeIterator, error) {

    logs, sub, err := _Uniswapv3.contract.FilterLogs(opts, "Initialize")
    if err != nil {
        return nil, err
    }
    return &Uniswapv3InitializeIterator{contract: _Uniswapv3.contract, event: "Initialize", logs: logs, sub: sub}, nil
}

// WatchInitialize is a free log subscription operation binding the contract event 0x98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95.
//
// Solidity: event Initialize(uint160 sqrtPriceX96, int24 tick)
func (_Uniswapv3 *Uniswapv3Filterer) WatchInitialize(opts *bind.WatchOpts, sink chan<- *Uniswapv3Initialize) (event.Subscription, error) {

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

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

// ParseInitialize is a log parse operation binding the contract event 0x98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95.
//
// Solidity: event Initialize(uint160 sqrtPriceX96, int24 tick)
func (_Uniswapv3 *Uniswapv3Filterer) ParseInitialize(log types.Log) (*Uniswapv3Initialize, error) {
    event := new(Uniswapv3Initialize)
    if err := _Uniswapv3.contract.UnpackLog(event, "Initialize", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// Uniswapv3MintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the Uniswapv3 contract.
type Uniswapv3MintIterator struct {
    Event *Uniswapv3Mint // Event containing the contract specifics and raw log

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

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

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

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

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

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

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

// Uniswapv3Mint represents a Mint event raised by the Uniswapv3 contract.
type Uniswapv3Mint struct {
    Sender    common.Address
    Owner     common.Address
    TickLower *big.Int
    TickUpper *big.Int
    Amount    *big.Int
    Amount0   *big.Int
    Amount1   *big.Int
    Raw       types.Log // Blockchain specific contextual infos
}

// FilterMint is a free log retrieval operation binding the contract event 0x7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde.
//
// Solidity: event Mint(address sender, address indexed owner, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount, uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) FilterMint(opts *bind.FilterOpts, owner []common.Address, tickLower []*big.Int, tickUpper []*big.Int) (*Uniswapv3MintIterator, error) {

    var ownerRule []interface{}
    for _, ownerItem := range owner {
        ownerRule = append(ownerRule, ownerItem)
    }
    var tickLowerRule []interface{}
    for _, tickLowerItem := range tickLower {
        tickLowerRule = append(tickLowerRule, tickLowerItem)
    }
    var tickUpperRule []interface{}
    for _, tickUpperItem := range tickUpper {
        tickUpperRule = append(tickUpperRule, tickUpperItem)
    }

    logs, sub, err := _Uniswapv3.contract.FilterLogs(opts, "Mint", ownerRule, tickLowerRule, tickUpperRule)
    if err != nil {
        return nil, err
    }
    return &Uniswapv3MintIterator{contract: _Uniswapv3.contract, event: "Mint", logs: logs, sub: sub}, nil
}

// WatchMint is a free log subscription operation binding the contract event 0x7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde.
//
// Solidity: event Mint(address sender, address indexed owner, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount, uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) WatchMint(opts *bind.WatchOpts, sink chan<- *Uniswapv3Mint, owner []common.Address, tickLower []*big.Int, tickUpper []*big.Int) (event.Subscription, error) {

    var ownerRule []interface{}
    for _, ownerItem := range owner {
        ownerRule = append(ownerRule, ownerItem)
    }
    var tickLowerRule []interface{}
    for _, tickLowerItem := range tickLower {
        tickLowerRule = append(tickLowerRule, tickLowerItem)
    }
    var tickUpperRule []interface{}
    for _, tickUpperItem := range tickUpper {
        tickUpperRule = append(tickUpperRule, tickUpperItem)
    }

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

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

// ParseMint is a log parse operation binding the contract event 0x7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde.
//
// Solidity: event Mint(address sender, address indexed owner, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount, uint256 amount0, uint256 amount1)
func (_Uniswapv3 *Uniswapv3Filterer) ParseMint(log types.Log) (*Uniswapv3Mint, error) {
    event := new(Uniswapv3Mint)
    if err := _Uniswapv3.contract.UnpackLog(event, "Mint", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// Uniswapv3SetFeeProtocolIterator is returned from FilterSetFeeProtocol and is used to iterate over the raw logs and unpacked data for SetFeeProtocol events raised by the Uniswapv3 contract.
type Uniswapv3SetFeeProtocolIterator struct {
    Event *Uniswapv3SetFeeProtocol // Event containing the contract specifics and raw log

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

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

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

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

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

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

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

// Uniswapv3SetFeeProtocol represents a SetFeeProtocol event raised by the Uniswapv3 contract.
type Uniswapv3SetFeeProtocol struct {
    FeeProtocol0Old uint8
    FeeProtocol1Old uint8
    FeeProtocol0New uint8
    FeeProtocol1New uint8
    Raw             types.Log // Blockchain specific contextual infos
}

// FilterSetFeeProtocol is a free log retrieval operation binding the contract event 0x973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b133.
//
// Solidity: event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New)
func (_Uniswapv3 *Uniswapv3Filterer) FilterSetFeeProtocol(opts *bind.FilterOpts) (*Uniswapv3SetFeeProtocolIterator, error) {

    logs, sub, err := _Uniswapv3.contract.FilterLogs(opts, "SetFeeProtocol")
    if err != nil {
        return nil, err
    }
    return &Uniswapv3SetFeeProtocolIterator{contract: _Uniswapv3.contract, event: "SetFeeProtocol", logs: logs, sub: sub}, nil
}

// WatchSetFeeProtocol is a free log subscription operation binding the contract event 0x973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b133.
//
// Solidity: event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New)
func (_Uniswapv3 *Uniswapv3Filterer) WatchSetFeeProtocol(opts *bind.WatchOpts, sink chan<- *Uniswapv3SetFeeProtocol) (event.Subscription, error) {

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

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

// ParseSetFeeProtocol is a log parse operation binding the contract event 0x973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b133.
//
// Solidity: event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New)
func (_Uniswapv3 *Uniswapv3Filterer) ParseSetFeeProtocol(log types.Log) (*Uniswapv3SetFeeProtocol, error) {
    event := new(Uniswapv3SetFeeProtocol)
    if err := _Uniswapv3.contract.UnpackLog(event, "SetFeeProtocol", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// Uniswapv3SwapIterator is returned from FilterSwap and is used to iterate over the raw logs and unpacked data for Swap events raised by the Uniswapv3 contract.
type Uniswapv3SwapIterator struct {
    Event *Uniswapv3Swap // Event containing the contract specifics and raw log

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

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

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

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

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

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

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

// Uniswapv3Swap represents a Swap event raised by the Uniswapv3 contract.
type Uniswapv3Swap struct {
    Sender       common.Address
    Recipient    common.Address
    Amount0      *big.Int
    Amount1      *big.Int
    SqrtPriceX96 *big.Int
    Liquidity    *big.Int
    Tick         *big.Int
    Raw          types.Log // Blockchain specific contextual infos
}

// FilterSwap is a free log retrieval operation binding the contract event 0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67.
//
// Solidity: event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)
func (_Uniswapv3 *Uniswapv3Filterer) FilterSwap(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*Uniswapv3SwapIterator, error) {

    var senderRule []interface{}
    for _, senderItem := range sender {
        senderRule = append(senderRule, senderItem)
    }
    var recipientRule []interface{}
    for _, recipientItem := range recipient {
        recipientRule = append(recipientRule, recipientItem)
    }

    logs, sub, err := _Uniswapv3.contract.FilterLogs(opts, "Swap", senderRule, recipientRule)
    if err != nil {
        return nil, err
    }
    return &Uniswapv3SwapIterator{contract: _Uniswapv3.contract, event: "Swap", logs: logs, sub: sub}, nil
}

// WatchSwap is a free log subscription operation binding the contract event 0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67.
//
// Solidity: event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)
func (_Uniswapv3 *Uniswapv3Filterer) WatchSwap(opts *bind.WatchOpts, sink chan<- *Uniswapv3Swap, sender []common.Address, recipient []common.Address) (event.Subscription, error) {

    var senderRule []interface{}
    for _, senderItem := range sender {
        senderRule = append(senderRule, senderItem)
    }
    var recipientRule []interface{}
    for _, recipientItem := range recipient {
        recipientRule = append(recipientRule, recipientItem)
    }

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

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

// ParseSwap is a log parse operation binding the contract event 0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67.
//
// Solidity: event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)
func (_Uniswapv3 *Uniswapv3Filterer) ParseSwap(log types.Log) (*Uniswapv3Swap, error) {
    event := new(Uniswapv3Swap)
    if err := _Uniswapv3.contract.UnpackLog(event, "Swap", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}