/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */

import {
  ethers,
  EventFilter,
  Signer,
  BigNumber,
  BigNumberish,
  PopulatedTransaction,
  BaseContract,
  ContractTransaction,
  Overrides,
  CallOverrides,
} from "ethers";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
import { TypedEventFilter, TypedEvent, TypedListener } from "./commons";

interface IVotingEscrowInterface extends ethers.utils.Interface {
  functions: {
    "balanceOf(address,uint256)": FunctionFragment;
    "balanceOfAt(address,uint256)": FunctionFragment;
    "cancel()": FunctionFragment;
    "checkpoint()": FunctionFragment;
    "createLock(uint256,uint256)": FunctionFragment;
    "createLockFor(address,uint256,uint256,uint256)": FunctionFragment;
    "decimals()": FunctionFragment;
    "delegateAt(address,uint256)": FunctionFragment;
    "delegateLength(address)": FunctionFragment;
    "depositFor(address,uint256)": FunctionFragment;
    "epoch()": FunctionFragment;
    "getCheckpointTime(address,uint256)": FunctionFragment;
    "getLastUserSlope(address)": FunctionFragment;
    "increaseAmount(uint256)": FunctionFragment;
    "increaseAmountFor(address,uint256,uint256)": FunctionFragment;
    "increaseUnlockTime(uint256)": FunctionFragment;
    "interval()": FunctionFragment;
    "isDelegate(address)": FunctionFragment;
    "locked(address)": FunctionFragment;
    "maxDuration()": FunctionFragment;
    "migrate()": FunctionFragment;
    "migrated(address)": FunctionFragment;
    "migrator()": FunctionFragment;
    "name()": FunctionFragment;
    "pointHistory(uint256)": FunctionFragment;
    "setDelegate(address,bool)": FunctionFragment;
    "setMigrator(address)": FunctionFragment;
    "slopeChanges(uint256)": FunctionFragment;
    "supply()": FunctionFragment;
    "symbol()": FunctionFragment;
    "token()": FunctionFragment;
    "totalSupply()": FunctionFragment;
    "totalSupplyAt(uint256)": FunctionFragment;
    "unlockTime(address)": FunctionFragment;
    "userPointEpoch(address)": FunctionFragment;
    "userPointHistory(address,uint256)": FunctionFragment;
    "withdraw()": FunctionFragment;
  };

  encodeFunctionData(
    functionFragment: "balanceOf",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "balanceOfAt",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "cancel", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "checkpoint",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "createLock",
    values: [BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "createLockFor",
    values: [string, BigNumberish, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "delegateAt",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "delegateLength",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "depositFor",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "epoch", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "getCheckpointTime",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getLastUserSlope",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "increaseAmount",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "increaseAmountFor",
    values: [string, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "increaseUnlockTime",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "interval", values?: undefined): string;
  encodeFunctionData(functionFragment: "isDelegate", values: [string]): string;
  encodeFunctionData(functionFragment: "locked", values: [string]): string;
  encodeFunctionData(
    functionFragment: "maxDuration",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "migrate", values?: undefined): string;
  encodeFunctionData(functionFragment: "migrated", values: [string]): string;
  encodeFunctionData(functionFragment: "migrator", values?: undefined): string;
  encodeFunctionData(functionFragment: "name", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "pointHistory",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "setDelegate",
    values: [string, boolean]
  ): string;
  encodeFunctionData(functionFragment: "setMigrator", values: [string]): string;
  encodeFunctionData(
    functionFragment: "slopeChanges",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "supply", values?: undefined): string;
  encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
  encodeFunctionData(functionFragment: "token", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "totalSupply",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "totalSupplyAt",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "unlockTime", values: [string]): string;
  encodeFunctionData(
    functionFragment: "userPointEpoch",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "userPointHistory",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "withdraw", values?: undefined): string;

  decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "balanceOfAt",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "checkpoint", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "createLock", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "createLockFor",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "delegateAt", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "delegateLength",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "depositFor", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "epoch", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "getCheckpointTime",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getLastUserSlope",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "increaseAmount",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "increaseAmountFor",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "increaseUnlockTime",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "interval", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "isDelegate", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "locked", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "maxDuration",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "migrate", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "migrated", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "migrator", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "pointHistory",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setDelegate",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setMigrator",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "slopeChanges",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "supply", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "token", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "totalSupply",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "totalSupplyAt",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "unlockTime", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "userPointEpoch",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "userPointHistory",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result;

  events: {
    "Cancel(address,uint256,uint256,uint256,uint256)": EventFragment;
    "Deposit(address,uint256,uint256,uint256,int128,uint256)": EventFragment;
    "Migrate(address,uint256,uint256,uint256)": EventFragment;
    "SetDelegate(address,bool)": EventFragment;
    "SetMigrator(address)": EventFragment;
    "Supply(uint256,uint256)": EventFragment;
    "Withdraw(address,uint256,uint256,uint256)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "Cancel"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "Deposit"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "Migrate"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "SetDelegate"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "SetMigrator"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "Supply"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "Withdraw"): EventFragment;
}

export class IVotingEscrow extends BaseContract {
  connect(signerOrProvider: Signer | Provider | string): this;
  attach(addressOrName: string): this;
  deployed(): Promise<this>;

  listeners<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter?: TypedEventFilter<EventArgsArray, EventArgsObject>
  ): Array<TypedListener<EventArgsArray, EventArgsObject>>;
  off<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
    listener: TypedListener<EventArgsArray, EventArgsObject>
  ): this;
  on<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
    listener: TypedListener<EventArgsArray, EventArgsObject>
  ): this;
  once<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
    listener: TypedListener<EventArgsArray, EventArgsObject>
  ): this;
  removeListener<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
    listener: TypedListener<EventArgsArray, EventArgsObject>
  ): this;
  removeAllListeners<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>
  ): this;

  listeners(eventName?: string): Array<Listener>;
  off(eventName: string, listener: Listener): this;
  on(eventName: string, listener: Listener): this;
  once(eventName: string, listener: Listener): this;
  removeListener(eventName: string, listener: Listener): this;
  removeAllListeners(eventName?: string): this;

  queryFilter<EventArgsArray extends Array<any>, EventArgsObject>(
    event: TypedEventFilter<EventArgsArray, EventArgsObject>,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined
  ): Promise<Array<TypedEvent<EventArgsArray & EventArgsObject>>>;

  interface: IVotingEscrowInterface;

  functions: {
    "balanceOf(address,uint256)"(
      addr: string,
      _t: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    "balanceOf(address)"(
      addr: string,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    balanceOfAt(
      addr: string,
      _block: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    cancel(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    checkpoint(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    createLock(
      _value: BigNumberish,
      _duration: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    createLockFor(
      _addr: string,
      _value: BigNumberish,
      _discount: BigNumberish,
      _duration: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    decimals(overrides?: CallOverrides): Promise<[number]>;

    delegateAt(
      account: string,
      index: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[string]>;

    delegateLength(
      addr: string,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    depositFor(
      _addr: string,
      _value: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    epoch(overrides?: CallOverrides): Promise<[BigNumber]>;

    getCheckpointTime(
      _addr: string,
      _idx: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    getLastUserSlope(
      addr: string,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    increaseAmount(
      _value: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    increaseAmountFor(
      _addr: string,
      _value: BigNumberish,
      _discount: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    increaseUnlockTime(
      _duration: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    interval(overrides?: CallOverrides): Promise<[BigNumber]>;

    isDelegate(account: string, overrides?: CallOverrides): Promise<[boolean]>;

    locked(
      account: string,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber, BigNumber, BigNumber] & {
        amount: BigNumber;
        discount: BigNumber;
        start: BigNumber;
        end: BigNumber;
      }
    >;

    maxDuration(overrides?: CallOverrides): Promise<[BigNumber]>;

    migrate(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    migrated(account: string, overrides?: CallOverrides): Promise<[boolean]>;

    migrator(overrides?: CallOverrides): Promise<[string]>;

    name(overrides?: CallOverrides): Promise<[string]>;

    pointHistory(
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber, BigNumber, BigNumber] & {
        bias: BigNumber;
        slope: BigNumber;
        ts: BigNumber;
        blk: BigNumber;
      }
    >;

    setDelegate(
      account: string,
      _isDelegate: boolean,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    setMigrator(
      _migrator: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    slopeChanges(
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    supply(overrides?: CallOverrides): Promise<[BigNumber]>;

    symbol(overrides?: CallOverrides): Promise<[string]>;

    token(overrides?: CallOverrides): Promise<[string]>;

    "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>;

    "totalSupply(uint256)"(
      t: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    totalSupplyAt(
      _block: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    unlockTime(_addr: string, overrides?: CallOverrides): Promise<[BigNumber]>;

    userPointEpoch(
      account: string,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    userPointHistory(
      account: string,
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber, BigNumber, BigNumber] & {
        bias: BigNumber;
        slope: BigNumber;
        ts: BigNumber;
        blk: BigNumber;
      }
    >;

    withdraw(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;
  };

  "balanceOf(address,uint256)"(
    addr: string,
    _t: BigNumberish,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  "balanceOf(address)"(
    addr: string,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  balanceOfAt(
    addr: string,
    _block: BigNumberish,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  cancel(
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  checkpoint(
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  createLock(
    _value: BigNumberish,
    _duration: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  createLockFor(
    _addr: string,
    _value: BigNumberish,
    _discount: BigNumberish,
    _duration: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  decimals(overrides?: CallOverrides): Promise<number>;

  delegateAt(
    account: string,
    index: BigNumberish,
    overrides?: CallOverrides
  ): Promise<string>;

  delegateLength(addr: string, overrides?: CallOverrides): Promise<BigNumber>;

  depositFor(
    _addr: string,
    _value: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  epoch(overrides?: CallOverrides): Promise<BigNumber>;

  getCheckpointTime(
    _addr: string,
    _idx: BigNumberish,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  getLastUserSlope(addr: string, overrides?: CallOverrides): Promise<BigNumber>;

  increaseAmount(
    _value: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  increaseAmountFor(
    _addr: string,
    _value: BigNumberish,
    _discount: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  increaseUnlockTime(
    _duration: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  interval(overrides?: CallOverrides): Promise<BigNumber>;

  isDelegate(account: string, overrides?: CallOverrides): Promise<boolean>;

  locked(
    account: string,
    overrides?: CallOverrides
  ): Promise<
    [BigNumber, BigNumber, BigNumber, BigNumber] & {
      amount: BigNumber;
      discount: BigNumber;
      start: BigNumber;
      end: BigNumber;
    }
  >;

  maxDuration(overrides?: CallOverrides): Promise<BigNumber>;

  migrate(
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  migrated(account: string, overrides?: CallOverrides): Promise<boolean>;

  migrator(overrides?: CallOverrides): Promise<string>;

  name(overrides?: CallOverrides): Promise<string>;

  pointHistory(
    epoch: BigNumberish,
    overrides?: CallOverrides
  ): Promise<
    [BigNumber, BigNumber, BigNumber, BigNumber] & {
      bias: BigNumber;
      slope: BigNumber;
      ts: BigNumber;
      blk: BigNumber;
    }
  >;

  setDelegate(
    account: string,
    _isDelegate: boolean,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  setMigrator(
    _migrator: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  slopeChanges(
    epoch: BigNumberish,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  supply(overrides?: CallOverrides): Promise<BigNumber>;

  symbol(overrides?: CallOverrides): Promise<string>;

  token(overrides?: CallOverrides): Promise<string>;

  "totalSupply()"(overrides?: CallOverrides): Promise<BigNumber>;

  "totalSupply(uint256)"(
    t: BigNumberish,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  totalSupplyAt(
    _block: BigNumberish,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  unlockTime(_addr: string, overrides?: CallOverrides): Promise<BigNumber>;

  userPointEpoch(
    account: string,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  userPointHistory(
    account: string,
    epoch: BigNumberish,
    overrides?: CallOverrides
  ): Promise<
    [BigNumber, BigNumber, BigNumber, BigNumber] & {
      bias: BigNumber;
      slope: BigNumber;
      ts: BigNumber;
      blk: BigNumber;
    }
  >;

  withdraw(
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  callStatic: {
    "balanceOf(address,uint256)"(
      addr: string,
      _t: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    "balanceOf(address)"(
      addr: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    balanceOfAt(
      addr: string,
      _block: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    cancel(overrides?: CallOverrides): Promise<void>;

    checkpoint(overrides?: CallOverrides): Promise<void>;

    createLock(
      _value: BigNumberish,
      _duration: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    createLockFor(
      _addr: string,
      _value: BigNumberish,
      _discount: BigNumberish,
      _duration: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    decimals(overrides?: CallOverrides): Promise<number>;

    delegateAt(
      account: string,
      index: BigNumberish,
      overrides?: CallOverrides
    ): Promise<string>;

    delegateLength(addr: string, overrides?: CallOverrides): Promise<BigNumber>;

    depositFor(
      _addr: string,
      _value: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    epoch(overrides?: CallOverrides): Promise<BigNumber>;

    getCheckpointTime(
      _addr: string,
      _idx: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getLastUserSlope(
      addr: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    increaseAmount(
      _value: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    increaseAmountFor(
      _addr: string,
      _value: BigNumberish,
      _discount: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    increaseUnlockTime(
      _duration: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    interval(overrides?: CallOverrides): Promise<BigNumber>;

    isDelegate(account: string, overrides?: CallOverrides): Promise<boolean>;

    locked(
      account: string,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber, BigNumber, BigNumber] & {
        amount: BigNumber;
        discount: BigNumber;
        start: BigNumber;
        end: BigNumber;
      }
    >;

    maxDuration(overrides?: CallOverrides): Promise<BigNumber>;

    migrate(overrides?: CallOverrides): Promise<void>;

    migrated(account: string, overrides?: CallOverrides): Promise<boolean>;

    migrator(overrides?: CallOverrides): Promise<string>;

    name(overrides?: CallOverrides): Promise<string>;

    pointHistory(
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber, BigNumber, BigNumber] & {
        bias: BigNumber;
        slope: BigNumber;
        ts: BigNumber;
        blk: BigNumber;
      }
    >;

    setDelegate(
      account: string,
      _isDelegate: boolean,
      overrides?: CallOverrides
    ): Promise<void>;

    setMigrator(_migrator: string, overrides?: CallOverrides): Promise<void>;

    slopeChanges(
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    supply(overrides?: CallOverrides): Promise<BigNumber>;

    symbol(overrides?: CallOverrides): Promise<string>;

    token(overrides?: CallOverrides): Promise<string>;

    "totalSupply()"(overrides?: CallOverrides): Promise<BigNumber>;

    "totalSupply(uint256)"(
      t: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    totalSupplyAt(
      _block: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    unlockTime(_addr: string, overrides?: CallOverrides): Promise<BigNumber>;

    userPointEpoch(
      account: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    userPointHistory(
      account: string,
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber, BigNumber, BigNumber] & {
        bias: BigNumber;
        slope: BigNumber;
        ts: BigNumber;
        blk: BigNumber;
      }
    >;

    withdraw(overrides?: CallOverrides): Promise<void>;
  };

  filters: {
    Cancel(
      provider?: string | null,
      value?: null,
      discount?: null,
      penaltyRate?: null,
      ts?: null
    ): TypedEventFilter<
      [string, BigNumber, BigNumber, BigNumber, BigNumber],
      {
        provider: string;
        value: BigNumber;
        discount: BigNumber;
        penaltyRate: BigNumber;
        ts: BigNumber;
      }
    >;

    Deposit(
      provider?: string | null,
      value?: null,
      discount?: null,
      unlockTime?: BigNumberish | null,
      _type?: BigNumberish | null,
      ts?: null
    ): TypedEventFilter<
      [string, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber],
      {
        provider: string;
        value: BigNumber;
        discount: BigNumber;
        unlockTime: BigNumber;
        _type: BigNumber;
        ts: BigNumber;
      }
    >;

    Migrate(
      provider?: string | null,
      value?: null,
      discount?: null,
      ts?: null
    ): TypedEventFilter<
      [string, BigNumber, BigNumber, BigNumber],
      { provider: string; value: BigNumber; discount: BigNumber; ts: BigNumber }
    >;

    SetDelegate(
      account?: string | null,
      isDelegate?: null
    ): TypedEventFilter<
      [string, boolean],
      { account: string; isDelegate: boolean }
    >;

    SetMigrator(
      account?: string | null
    ): TypedEventFilter<[string], { account: string }>;

    Supply(
      prevSupply?: null,
      supply?: null
    ): TypedEventFilter<
      [BigNumber, BigNumber],
      { prevSupply: BigNumber; supply: BigNumber }
    >;

    Withdraw(
      provider?: string | null,
      value?: null,
      discount?: null,
      ts?: null
    ): TypedEventFilter<
      [string, BigNumber, BigNumber, BigNumber],
      { provider: string; value: BigNumber; discount: BigNumber; ts: BigNumber }
    >;
  };

  estimateGas: {
    "balanceOf(address,uint256)"(
      addr: string,
      _t: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    "balanceOf(address)"(
      addr: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    balanceOfAt(
      addr: string,
      _block: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    cancel(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    checkpoint(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    createLock(
      _value: BigNumberish,
      _duration: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    createLockFor(
      _addr: string,
      _value: BigNumberish,
      _discount: BigNumberish,
      _duration: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    decimals(overrides?: CallOverrides): Promise<BigNumber>;

    delegateAt(
      account: string,
      index: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    delegateLength(addr: string, overrides?: CallOverrides): Promise<BigNumber>;

    depositFor(
      _addr: string,
      _value: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    epoch(overrides?: CallOverrides): Promise<BigNumber>;

    getCheckpointTime(
      _addr: string,
      _idx: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getLastUserSlope(
      addr: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    increaseAmount(
      _value: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    increaseAmountFor(
      _addr: string,
      _value: BigNumberish,
      _discount: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    increaseUnlockTime(
      _duration: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    interval(overrides?: CallOverrides): Promise<BigNumber>;

    isDelegate(account: string, overrides?: CallOverrides): Promise<BigNumber>;

    locked(account: string, overrides?: CallOverrides): Promise<BigNumber>;

    maxDuration(overrides?: CallOverrides): Promise<BigNumber>;

    migrate(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    migrated(account: string, overrides?: CallOverrides): Promise<BigNumber>;

    migrator(overrides?: CallOverrides): Promise<BigNumber>;

    name(overrides?: CallOverrides): Promise<BigNumber>;

    pointHistory(
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    setDelegate(
      account: string,
      _isDelegate: boolean,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    setMigrator(
      _migrator: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    slopeChanges(
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    supply(overrides?: CallOverrides): Promise<BigNumber>;

    symbol(overrides?: CallOverrides): Promise<BigNumber>;

    token(overrides?: CallOverrides): Promise<BigNumber>;

    "totalSupply()"(overrides?: CallOverrides): Promise<BigNumber>;

    "totalSupply(uint256)"(
      t: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    totalSupplyAt(
      _block: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    unlockTime(_addr: string, overrides?: CallOverrides): Promise<BigNumber>;

    userPointEpoch(
      account: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    userPointHistory(
      account: string,
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    withdraw(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;
  };

  populateTransaction: {
    "balanceOf(address,uint256)"(
      addr: string,
      _t: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    "balanceOf(address)"(
      addr: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    balanceOfAt(
      addr: string,
      _block: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    cancel(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    checkpoint(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    createLock(
      _value: BigNumberish,
      _duration: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    createLockFor(
      _addr: string,
      _value: BigNumberish,
      _discount: BigNumberish,
      _duration: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    decimals(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    delegateAt(
      account: string,
      index: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    delegateLength(
      addr: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    depositFor(
      _addr: string,
      _value: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    epoch(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    getCheckpointTime(
      _addr: string,
      _idx: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getLastUserSlope(
      addr: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    increaseAmount(
      _value: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    increaseAmountFor(
      _addr: string,
      _value: BigNumberish,
      _discount: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    increaseUnlockTime(
      _duration: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    interval(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    isDelegate(
      account: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    locked(
      account: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    maxDuration(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    migrate(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    migrated(
      account: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    migrator(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    name(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    pointHistory(
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    setDelegate(
      account: string,
      _isDelegate: boolean,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    setMigrator(
      _migrator: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    slopeChanges(
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    supply(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    symbol(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    token(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    "totalSupply()"(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    "totalSupply(uint256)"(
      t: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    totalSupplyAt(
      _block: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    unlockTime(
      _addr: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    userPointEpoch(
      account: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    userPointHistory(
      account: string,
      epoch: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    withdraw(
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;
  };
}
