/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
import type { Provider, TransactionRequest } from "@ethersproject/providers";
import type { PromiseOrValue } from "../common";
import type {
  RewardsDistributionV2,
  RewardsDistributionV2Interface,
} from "../RewardsDistributionV2";

const _abi = [
  {
    type: "function",
    name: "__RewardsDistribution_init",
    inputs: [
      {
        name: "stakeToken",
        type: "address",
        internalType: "address",
      },
      {
        name: "rewardToken",
        type: "address",
        internalType: "address",
      },
      {
        name: "rewardDuration",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "changeBeneficiary",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "newBeneficiary",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "claimReward",
    inputs: [
      {
        name: "beneficiary",
        type: "address",
        internalType: "address",
      },
      {
        name: "recipient",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [
      {
        name: "reward",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "currentReward",
    inputs: [
      {
        name: "beneficiary",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "currentRewardPerTokenAccumulated",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "currentSpaceDelegationReward",
    inputs: [
      {
        name: "operator",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "delegationProxyById",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "depositById",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "deposit",
        type: "tuple",
        internalType: "struct StakingRewards.Deposit",
        components: [
          {
            name: "amount",
            type: "uint96",
            internalType: "uint96",
          },
          {
            name: "owner",
            type: "address",
            internalType: "address",
          },
          {
            name: "commissionEarningPower",
            type: "uint96",
            internalType: "uint96",
          },
          {
            name: "delegatee",
            type: "address",
            internalType: "address",
          },
          {
            name: "pendingWithdrawal",
            type: "uint96",
            internalType: "uint96",
          },
          {
            name: "beneficiary",
            type: "address",
            internalType: "address",
          },
        ],
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getDepositsByDepositor",
    inputs: [
      {
        name: "depositor",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [
      {
        name: "",
        type: "uint256[]",
        internalType: "uint256[]",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getPeriodRewardAmount",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "implementation",
    inputs: [],
    outputs: [
      {
        name: "result",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "increaseStake",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "amount",
        type: "uint96",
        internalType: "uint96",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "initiateWithdraw",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "amount",
        type: "uint96",
        internalType: "uint96",
      },
    ],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "isRewardNotifier",
    inputs: [
      {
        name: "notifier",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [
      {
        name: "",
        type: "bool",
        internalType: "bool",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "lastTimeRewardDistributed",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "notifyRewardAmount",
    inputs: [
      {
        name: "reward",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "permitAndIncreaseStake",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "amount",
        type: "uint96",
        internalType: "uint96",
      },
      {
        name: "nonce",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "deadline",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "signature",
        type: "bytes",
        internalType: "bytes",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "permitAndStake",
    inputs: [
      {
        name: "amount",
        type: "uint96",
        internalType: "uint96",
      },
      {
        name: "delegatee",
        type: "address",
        internalType: "address",
      },
      {
        name: "beneficiary",
        type: "address",
        internalType: "address",
      },
      {
        name: "nonce",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "deadline",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "signature",
        type: "bytes",
        internalType: "bytes",
      },
    ],
    outputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "redelegate",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "delegatee",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "setPeriodRewardAmount",
    inputs: [
      {
        name: "amount",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "setRewardNotifier",
    inputs: [
      {
        name: "notifier",
        type: "address",
        internalType: "address",
      },
      {
        name: "enabled",
        type: "bool",
        internalType: "bool",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "stake",
    inputs: [
      {
        name: "amount",
        type: "uint96",
        internalType: "uint96",
      },
      {
        name: "delegatee",
        type: "address",
        internalType: "address",
      },
      {
        name: "beneficiary",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "stakeOnBehalf",
    inputs: [
      {
        name: "amount",
        type: "uint96",
        internalType: "uint96",
      },
      {
        name: "delegatee",
        type: "address",
        internalType: "address",
      },
      {
        name: "beneficiary",
        type: "address",
        internalType: "address",
      },
      {
        name: "owner",
        type: "address",
        internalType: "address",
      },
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "",
        type: "bytes",
        internalType: "bytes",
      },
    ],
    outputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "stakedByDepositor",
    inputs: [
      {
        name: "depositor",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [
      {
        name: "amount",
        type: "uint96",
        internalType: "uint96",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "stakingState",
    inputs: [],
    outputs: [
      {
        name: "state",
        type: "tuple",
        internalType: "struct IRewardsDistributionBase.StakingState",
        components: [
          {
            name: "riverToken",
            type: "address",
            internalType: "address",
          },
          {
            name: "totalStaked",
            type: "uint96",
            internalType: "uint96",
          },
          {
            name: "rewardDuration",
            type: "uint256",
            internalType: "uint256",
          },
          {
            name: "rewardEndTime",
            type: "uint256",
            internalType: "uint256",
          },
          {
            name: "lastUpdateTime",
            type: "uint256",
            internalType: "uint256",
          },
          {
            name: "rewardRate",
            type: "uint256",
            internalType: "uint256",
          },
          {
            name: "rewardPerTokenAccumulated",
            type: "uint256",
            internalType: "uint256",
          },
          {
            name: "nextDepositId",
            type: "uint256",
            internalType: "uint256",
          },
        ],
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "treasureByBeneficiary",
    inputs: [
      {
        name: "beneficiary",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [
      {
        name: "treasure",
        type: "tuple",
        internalType: "struct StakingRewards.Treasure",
        components: [
          {
            name: "earningPower",
            type: "uint96",
            internalType: "uint96",
          },
          {
            name: "rewardPerTokenAccumulated",
            type: "uint256",
            internalType: "uint256",
          },
          {
            name: "unclaimedRewardSnapshot",
            type: "uint256",
            internalType: "uint256",
          },
        ],
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "upgradeDelegationProxy",
    inputs: [
      {
        name: "newImplementation",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "withdraw",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "amount",
        type: "uint96",
        internalType: "uint96",
      },
    ],
    stateMutability: "nonpayable",
  },
  {
    type: "event",
    name: "ChangeBeneficiary",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "newBeneficiary",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "ClaimReward",
    inputs: [
      {
        name: "beneficiary",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "recipient",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "reward",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "ClaimerSet",
    inputs: [
      {
        name: "delegator",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "claimer",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "CrossDomainMessengerSet",
    inputs: [
      {
        name: "messenger",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "DelegationDigestSet",
    inputs: [
      {
        name: "digest",
        type: "bytes32",
        indexed: false,
        internalType: "bytes32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "DelegationProxyDeployed",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "delegatee",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "proxy",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "DelegationRemoved",
    inputs: [
      {
        name: "delegator",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "DelegationSet",
    inputs: [
      {
        name: "delegator",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "operator",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "quantity",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "IncreaseStake",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "amount",
        type: "uint96",
        indexed: false,
        internalType: "uint96",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Initialized",
    inputs: [
      {
        name: "version",
        type: "uint32",
        indexed: false,
        internalType: "uint32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "InitiateWithdraw",
    inputs: [
      {
        name: "owner",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "depositId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "amount",
        type: "uint96",
        indexed: false,
        internalType: "uint96",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "InterfaceAdded",
    inputs: [
      {
        name: "interfaceId",
        type: "bytes4",
        indexed: true,
        internalType: "bytes4",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "InterfaceRemoved",
    inputs: [
      {
        name: "interfaceId",
        type: "bytes4",
        indexed: true,
        internalType: "bytes4",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "NotifyRewardAmount",
    inputs: [
      {
        name: "notifier",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "reward",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "OwnershipTransferred",
    inputs: [
      {
        name: "previousOwner",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "newOwner",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "PeriodRewardAmountSet",
    inputs: [
      {
        name: "amount",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "ProxyDelegationSet",
    inputs: [
      {
        name: "proxyDelegation",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Redelegate",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "delegatee",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "RewardNotifierSet",
    inputs: [
      {
        name: "notifier",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "enabled",
        type: "bool",
        indexed: false,
        internalType: "bool",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "RewardsDistributionInitialized",
    inputs: [
      {
        name: "stakeToken",
        type: "address",
        indexed: false,
        internalType: "address",
      },
      {
        name: "rewardToken",
        type: "address",
        indexed: false,
        internalType: "address",
      },
      {
        name: "rewardDuration",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "SpaceRewardsSwept",
    inputs: [
      {
        name: "space",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "operator",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "scaledReward",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Stake",
    inputs: [
      {
        name: "owner",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "delegatee",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "beneficiary",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "depositId",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "amount",
        type: "uint96",
        indexed: false,
        internalType: "uint96",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Upgraded",
    inputs: [
      {
        name: "implementation",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Withdraw",
    inputs: [
      {
        name: "depositId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "amount",
        type: "uint96",
        indexed: false,
        internalType: "uint96",
      },
    ],
    anonymous: false,
  },
  {
    type: "error",
    name: "DelegationAlreadySet",
    inputs: [
      {
        name: "delegator",
        type: "address",
        internalType: "address",
      },
      {
        name: "operator",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "DelegationNotSet",
    inputs: [],
  },
  {
    type: "error",
    name: "Initializable_InInitializingState",
    inputs: [],
  },
  {
    type: "error",
    name: "Initializable_NotInInitializingState",
    inputs: [],
  },
  {
    type: "error",
    name: "Introspection_AlreadySupported",
    inputs: [],
  },
  {
    type: "error",
    name: "Introspection_NotSupported",
    inputs: [],
  },
  {
    type: "error",
    name: "InvalidAccountNonce",
    inputs: [
      {
        name: "account",
        type: "address",
        internalType: "address",
      },
      {
        name: "currentNonce",
        type: "uint256",
        internalType: "uint256",
      },
    ],
  },
  {
    type: "error",
    name: "InvalidClaimer",
    inputs: [
      {
        name: "claimer",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "InvalidDelegator",
    inputs: [
      {
        name: "delegator",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "InvalidOperator",
    inputs: [
      {
        name: "operator",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "InvalidOwner",
    inputs: [
      {
        name: "owner",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "InvalidQuantity",
    inputs: [
      {
        name: "quantity",
        type: "uint256",
        internalType: "uint256",
      },
    ],
  },
  {
    type: "error",
    name: "NewImplementationHasNoCode",
    inputs: [],
  },
  {
    type: "error",
    name: "Ownable__NotOwner",
    inputs: [
      {
        name: "account",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "Ownable__ZeroAddress",
    inputs: [],
  },
  {
    type: "error",
    name: "RewardsDistribution__CannotWithdrawFromSelf",
    inputs: [],
  },
  {
    type: "error",
    name: "RewardsDistribution__ExpiredDeadline",
    inputs: [],
  },
  {
    type: "error",
    name: "RewardsDistribution__InvalidSignature",
    inputs: [],
  },
  {
    type: "error",
    name: "RewardsDistribution__NoPendingWithdrawal",
    inputs: [],
  },
  {
    type: "error",
    name: "RewardsDistribution__NotActiveOperator",
    inputs: [],
  },
  {
    type: "error",
    name: "RewardsDistribution__NotBeneficiary",
    inputs: [],
  },
  {
    type: "error",
    name: "RewardsDistribution__NotClaimer",
    inputs: [],
  },
  {
    type: "error",
    name: "RewardsDistribution__NotDepositOwner",
    inputs: [],
  },
  {
    type: "error",
    name: "RewardsDistribution__NotOperatorOrSpace",
    inputs: [],
  },
  {
    type: "error",
    name: "RewardsDistribution__NotRewardNotifier",
    inputs: [],
  },
] as const;

const _bytecode =
  "0x6080604052348015600e575f5ffd5b5060156019565b60bd565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef520008054640100000000900460ff16156064576040516366008a2d60e01b815260040160405180910390fd5b805463ffffffff908116101560ba57805463ffffffff191663ffffffff90811782556040519081527fe9c9b456cb2994b80aeef036cf59d26e9617df80f816a6ee5a5b4166e07e2f5c9060200160405180910390a15b50565b614485806100ca5f395ff3fe608060405234801561000f575f5ffd5b50600436106101bb575f3560e01c80636fd9c1f8116100f35780639d18e4b011610093578063e082f1d41161006e578063e082f1d414610613578063e2ba385b1461069f578063e69f9495146106bf578063e70f9445146106d2575f5ffd5b80639d18e4b0146105e5578063b0070a30146105f8578063ddda8a111461060b575f5ffd5b80637e108d52116100ce5780637e108d52146105995780638cf0f587146105ac57806393e876bc146105bf5780639ad4f752146105d2575f5ffd5b80636fd9c1f81461056057806372aba5d3146105735780637d84ed2614610586575f5ffd5b80633f1921121161015e5780635d331f32116101395780635d331f321461034b5780636805a4d81461035e5780636aa69573146104eb5780636cd965d01461054d575f5ffd5b80633f192112146103155780634953c782146103285780635c60da1b1461033b575f5ffd5b8063255a4f7311610199578063255a4f731461027a5780632b2e91031461028f5780632e1a7d4d146102d25780633c6b16ab14610302575f5ffd5b80630b8ddfe6146101bf5780630cbca9da146101da5780630d8221bb14610201575b5f5ffd5b6101c7610739565b6040519081526020015b60405180910390f35b7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30e546101c7565b61025561020f366004613592565b5f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30b602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d1565b61028d6102883660046135cc565b61076a565b005b6102a261029d366004613605565b61088a565b6040805182516bffffffffffffffffffffffff1681526020808401519082015291810151908201526060016101d1565b6102e56102e0366004613592565b610931565b6040516bffffffffffffffffffffffff90911681526020016101d1565b61028d610310366004613592565b610b02565b6101c7610323366004613605565b610bbe565b6101c761033636600461361e565b610bce565b68911c5a209f08d5ec5e54610255565b61028d61035936600461364f565b610da4565b61043461036c366004613592565b604080515f8082526020808301828152838501838152606085018481526080860185815260a087018681529886527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a9094529386902060c0860190965285546bffffffffffffffffffffffff808216875273ffffffffffffffffffffffffffffffffffffffff6c010000000000000000000000009283900481169094526001880154808216909352918190048316909452600290950154948516909152920490911690915290565b6040516101d191905f60c0820190506bffffffffffffffffffffffff835116825273ffffffffffffffffffffffffffffffffffffffff60208401511660208301526bffffffffffffffffffffffff604084015116604083015273ffffffffffffffffffffffffffffffffffffffff60608401511660608301526bffffffffffffffffffffffff608084015116608083015273ffffffffffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6102e56104f9366004613605565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30860205260409020546bffffffffffffffffffffffff1690565b61028d61055b366004613605565b61100d565b61028d61056e366004613592565b61108b565b6101c76105813660046136e9565b611159565b61028d61059436600461376c565b611181565b6102e56105a7366004613592565b611190565b6101c76105ba36600461378d565b61138f565b61028d6105cd3660046137cd565b6113a5565b61028d6105e0366004613839565b6113c6565b6101c76105f3366004613605565b61163e565b61028d610606366004613839565b6116d0565b6101c76117ed565b61061b611818565b6040516101d191905f6101008201905073ffffffffffffffffffffffffffffffffffffffff83511682526bffffffffffffffffffffffff602084015116602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b6106b26106ad366004613605565b6119d8565b6040516101d1919061385a565b6101c76106cd36600461389c565b611a49565b6107296106e0366004613605565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30c602052604090205460ff1690565b60405190151581526020016101d1565b5f7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30061076481611a57565b91505090565b7f4675fa8241f86f37157864d3d49b85ad4b164352c516da28e1678a90470ae3005473ffffffffffffffffffffffffffffffffffffffff1633146107e1576040517f65f490650000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30c602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fb33ca1dabfb28a2e1bd06b332c396b1a3d538278691341a5503bbad53f91919791015b60405180910390a25050565b6108b960405180606001604052805f6bffffffffffffffffffffffff1681526020015f81526020015f81525090565b73ffffffffffffffffffffffffffffffffffffffff919091165f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff309602090815260409182902060608401835280546bffffffffffffffffffffffff168452600181015491840191909152600201549082015290565b5f8181527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a6020526040812080547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30091906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff166109b181611ae2565b3073ffffffffffffffffffffffffffffffffffffffff8216036109f7576109f77f60fb71c600000000000000000000000000000000000000000000000000000000611b24565b60028201546bffffffffffffffffffffffff1693505f849003610a4257610a3d7f7f7af02100000000000000000000000000000000000000000000000000000000611b24565b610ab7565b6002820180547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690555f858152600b84016020526040902054600184015473ffffffffffffffffffffffffffffffffffffffff91821691610ab5911682846bffffffffffffffffffffffff8916611b2c565b505b6040516bffffffffffffffffffffffff8516815285907f379f5516239c4d5aa59274f4ec7af0b3fe40f0c9abbb4d4ca20bd49f4caa0fcd9060200160405180910390a2505050919050565b335f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30c60205260409020547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3009060ff16610b8257610b827faa948c2400000000000000000000000000000000000000000000000000000000611b24565b610b8c8183611b8e565b60405182815233907ff6b60b7da8e0f883e399412005b6205515604a993e7e3f0c3b199b9cb07d6ae69060200161087e565b5f610bc882611d28565b92915050565b5f7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30073ffffffffffffffffffffffffffffffffffffffff84163314610d015773ffffffffffffffffffffffffffffffffffffffff8481165f9081527f264df150e9e008a39dd109254e3af3cdadbfbd33261903d1163f43eaee68e7026020526040902054163314610d0157610c6284611e69565b15610cbc5773ffffffffffffffffffffffffffffffffffffffff8481165f9081527f3355c1fbe959688d71c13b5c967b2a46ceae34fb425fbcad0cb6451b53f36e05602052604090205416610cb681611ed6565b50610d01565b610cc584611f73565b15610cd857610cd384611ed6565b610d01565b610d017f446194b700000000000000000000000000000000000000000000000000000000611b24565b610d0b8185611f9f565b91508115610d36578054610d369073ffffffffffffffffffffffffffffffffffffffff168484612024565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f7e77f685b38c861064cb08f2776eb5dfd3c82f652ed9f21221b8c53b75628e5184604051610d9591815260200190565b60405180910390a35092915050565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef5200054640100000000900460ff16610e07576040517f77a399b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3028190557f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161783557f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3018054918716919092161790556040518190610eeb90610ecc90613585565b604051809103905ff080158015610ee5573d5f5f3e3d5ffd5b5061107f565b60078101545f5b81811015610fac575f818152600b8501602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610fa3576040517ff7e7d1fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015282169063f7e7d1fd906024015f604051808303815f87803b158015610f8c575f5ffd5b505af1158015610f9e573d5f5f3e3d5ffd5b505050505b50600101610ef2565b506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527fdaec16f9d0b7c133a3ec8632d36571e8a2c4bbb4361bc90076ad402e1ce632e29060600160405180910390a1505050505050565b7f4675fa8241f86f37157864d3d49b85ad4b164352c516da28e1678a90470ae3005473ffffffffffffffffffffffffffffffffffffffff16331461107f576040517f65f490650000000000000000000000000000000000000000000000000000000081523360048201526024016107d8565b61108881612077565b50565b7f4675fa8241f86f37157864d3d49b85ad4b164352c516da28e1678a90470ae3005473ffffffffffffffffffffffffffffffffffffffff1633146110fd576040517f65f490650000000000000000000000000000000000000000000000000000000081523360048201526024016107d8565b807f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300600e01556040518181527ffd459cfaa5ac02180581a60c1f500dbe56adf2912fb8866b2e1419e1df8c84a99060200160405180910390a150565b5f61116788868686866120d4565b6111758888883360016121de565b98975050505050505050565b61118c82825f61239e565b5050565b5f8181527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a6020526040812080547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30091906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661121081611ae2565b60018201546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661124584846125a0565b945073ffffffffffffffffffffffffffffffffffffffff821630146112f7575f868152600b850160205260408082205490517f6f267190000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff16908190636f267190906024015f604051808303815f87803b1580156112db575f5ffd5b505af11580156112ed573d5f5f3e3d5ffd5b5050505050611322565b6002830180547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690555b61132b816126ff565b6040516bffffffffffffffffffffffff86168152869073ffffffffffffffffffffffffffffffffffffffff8416907f83a8fb903cd44ada83e49af5f21f61369a370e61ae03b95f73a462cc4d38d14e9060200160405180910390a350505050919050565b5f61139d848484335f6121de565b949350505050565b6113b285858585856120d4565b6113be8686600161239e565b505050505050565b5f8281527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a6020526040902080547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30091906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661144681611ae2565b61144f846127f1565b60028201546bffffffffffffffffffffffff165f61146c86612838565b9050816bffffffffffffffffffffffff165f036114945761148f8585888461289a565b61153b565b60028401546114d39086908690869086908b906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff168761295c565b6001840180546bffffffffffffffffffffffff166c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8916021790556002840180547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690555b611544866126ff565b73ffffffffffffffffffffffffffffffffffffffff831630146115f3575f878152600b86016020526040908190205490517f6f26719000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116908190636f267190906024015f604051808303815f87803b1580156115db575f5ffd5b505af11580156115ed573d5f5f3e3d5ffd5b50505050505b60405173ffffffffffffffffffffffffffffffffffffffff87169088907fa6494190270aff4668179671a838f4079a7b83070d0dc4aafc1252956fa93d13905f90a350505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff309602052604081207f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300906ec097ce7bc90715b34b9f1000000000906116bf908390612a67565b6116c99190613934565b9392505050565b5f8281527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a6020526040902080547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3009190611750906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16611ae2565b60018101546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16611784816127f1565b61179b828561179284612838565b86929190612aa6565b6117a4816126ff565b60405173ffffffffffffffffffffffffffffffffffffffff85169086907f465099fe7523b081d53bc8776cdf5ae8d5629f83535fb55f947e85000b1fd571905f90a35050505050565b5f7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30061076481612bbf565b61187c6040518061010001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f6bffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b610100810160409081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3015473ffffffffffffffffffffffffffffffffffffffff811683527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208301527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30254908201527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3035460608201527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3045460808201527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3055460a08201527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3065460c08201527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3075460e082015290565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30d602052604090206060907f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300906116c990612bd4565b5f611175888888885f6121de565b60018101546004820154600583015460068401545f937401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16929190838503611aa65795945050505050565b5f83611ab188612bbf565b039050611acd8382876bffffffffffffffffffffffff16612be0565b611ad7908361396c565b979650505050505050565b3373ffffffffffffffffffffffffffffffffffffffff821614611088576110887f4ea09ec2000000000000000000000000000000000000000000000000000000005b805f5260045ffd5b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af18060015f511416611b8057803d873b151710611b8057637939f4245f526004601cfd5b505f60605260405250505050565b611b9782611a57565b6006830155600282015460038301545f611bc1846ec097ce7bc90715b34b9f100000000085612be0565b905042821115611bed57600585015442830390611bdf908286612be0565b611be9908361396c565b9150505b611bf7834261396c565b6005860182905542600487015560038601556ec097ce7bc90715b34b9f1000000000811015611c4957611c497f10beb8b700000000000000000000000000000000000000000000000000000000611b24565b84546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015611cb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd8919061397f565b611cf282856ec097ce7bc90715b34b9f1000000000612be0565b1115611d2157611d217f07d3df2b00000000000000000000000000000000000000000000000000000000611b24565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f3355c1fbe959688d71c13b5c967b2a46ceae34fb425fbcad0cb6451b53f36e04602052604081207f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300908290611d9890612bd4565b90505f611da483611a57565b90505f5f5b8351811015611e45575f856009015f868481518110611dca57611dca613996565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f20600181015481549086039450909150611e219084906bffffffffffffffffffffffff166139c3565b8160020154611e30919061396c565b611e3a908861396c565b965050600101611da9565b50611e5f6ec097ce7bc90715b34b9f100000000086613934565b9695505050505050565b5f80611eb88373ffffffffffffffffffffffffffffffffffffffff9081165f9081527f3355c1fbe959688d71c13b5c967b2a46ceae34fb425fbcad0cb6451b53f36e0560205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f988e8266be98e92aff755bdd688f8f4a2421e26daa6089c7e2668053a3bf550460205260409020547f988e8266be98e92aff755bdd688f8f4a2421e26daa6089c7e2668053a3bf55009116338114611f6e57611f6e7f2872c94b00000000000000000000000000000000000000000000000000000000611b24565b505050565b5f7f988e8266be98e92aff755bdd688f8f4a2421e26daa6089c7e2668053a3bf55006116c98184612c8d565b5f611fa983612cbb565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526009840160205260409020611fd98482612cda565b6ec097ce7bc90715b34b9f10000000008160020154611ff89190613934565b9150811561201d576002810180546ec097ce7bc90715b34b9f10000000008402900390555b5092915050565b81601452806034526fa9059cbb0000000000000000000000005f5260205f604460105f875af18060015f51141661206d57803d853b15171061206d576390b8ec185f526004601cfd5b505f603452505050565b73ffffffffffffffffffffffffffffffffffffffff16803b6120a057636d3e283b5f526004601cfd5b8068911c5a209f08d5ec5e55807fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f38a250565b7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff301546040805160a08101825273ffffffffffffffffffffffffffffffffffffffff909216606083018181526bffffffffffffffffffffffff8916608085018190529084526020808501899052848401889052835180850185523081529081019190915291517f30f28b7a00000000000000000000000000000000000000000000000000000000815290926e22d473030f116ddee9f6b43ac78ba3926330f28b7a926121a99291903390899089906004016139da565b5f604051808303815f87803b1580156121c0575f5ffd5b505af11580156121d2573d5f5f3e3d5ffd5b50505050505050505050565b5f6121e8856127f1565b7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3006122248488888861221982612838565b869493929190612cf7565b915061222f866126ff565b73ffffffffffffffffffffffffffffffffffffffff841630146122ce575f6122578388612e3d565b9050836122985760018201546122939073ffffffffffffffffffffffffffffffffffffffff1633836bffffffffffffffffffffffff8c16611b2c565b6122cc565b60018201546122cc9073ffffffffffffffffffffffffffffffffffffffff16826bffffffffffffffffffffffff8b16612024565b505b73ffffffffffffffffffffffffffffffffffffffff84165f908152600d8201602052604090206122fe9083612f7b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffc8744d74019c166abf1c554364af2a3d067ea57fa6f635f4552411ea44d29c7858b60405161238c9291909182526bffffffffffffffffffffffff16602082015260400190565b60405180910390a45095945050505050565b5f8381527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a6020526040902080547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30091906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661241e81611ae2565b60018201546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16612452816127f1565b6124938383888487600201600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661248787612838565b8a95949392919061295c565b61249c816126ff565b73ffffffffffffffffffffffffffffffffffffffff82163014612554575f878152600b8501602052604090205473ffffffffffffffffffffffffffffffffffffffff168561251e5760018501546125199073ffffffffffffffffffffffffffffffffffffffff1633836bffffffffffffffffffffffff8b16611b2c565b612552565b60018501546125529073ffffffffffffffffffffffffffffffffffffffff16826bffffffffffffffffffffffff8a16612024565b505b6040516bffffffffffffffffffffffff8716815287907f82eeeecf3fcd1639730b92bca89ac4aa5a7c4a252fb716d0817957e83ca6ccb39060200160405180910390a250505050505050565b5f6125aa83612cbb565b60028201546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff165f90815260098401602052604090206125ee8482612cda565b82546001850180546bffffffffffffffffffffffff80841674010000000000000000000000000000000000000000808404831682900383160273ffffffffffffffffffffffffffffffffffffffff938416179093556c01000000000000000000000000909304165f818152600888016020526040902080548085168490039094167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090941693909317909255906126a6868685612f86565b506002840180546bffffffffffffffffffffffff8084167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000092831617909255600186018054909216909155845416845591505092915050565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f3355c1fbe959688d71c13b5c967b2a46ceae34fb425fbcad0cb6451b53f36e056020526040902054168061274e575050565b7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3005f61277b828585613110565b905080156127eb578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fbb9e81030bc0a5bf3882ff3a63042541f2285d5562359eaac3e7f3e24ca7d75d836040516127e291815260200190565b60405180910390a35b50505050565b6127fa81611e69565b156128025750565b61280b81613173565b611088576110887f4fb6cb8900000000000000000000000000000000000000000000000000000000611b24565b5f61284282611e69565b15612853576128508261320e565b91505b5073ffffffffffffffffffffffffffffffffffffffff165f9081527f988e8266be98e92aff755bdd688f8f4a2421e26daa6089c7e2668053a3bf5503602052604090205490565b6128a384612cbb565b60028301546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff165f90815260098501602052604090206128e78582612cda565b6128f2858583612f86565b8354612913908690869084906bffffffffffffffffffffffff16878761328f565b50506001909101805473ffffffffffffffffffffffffffffffffffffffff9092166c01000000000000000000000000026bffffffffffffffffffffffff90921691909117905550565b61296587612cbb565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260098801602052604090206129958882612cda565b848860010160148282829054906101000a90046bffffffffffffffffffffffff166129c09190613ab8565b82546bffffffffffffffffffffffff9182166101009390930a92830292820219169190911790915573ffffffffffffffffffffffffffffffffffffffff88165f90815260088b01602052604090208054808316890183167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009182161790915589548083168901909216911617885550612a5d88888388888761328f565b5050505050505050565b5f5f8260010154612a7785611a57565b84549190039150612a979082906bffffffffffffffffffffffff166139c3565b836002015461139d919061396c565b73ffffffffffffffffffffffffffffffffffffffff8216612aea57612aea7f27c5ec8800000000000000000000000000000000000000000000000000000000611b24565b612af384612cbb565b8254600284018054600186015473ffffffffffffffffffffffffffffffffffffffff8681166c010000000000000000000000009081026bffffffffffffffffffffffff858116919091179095559283900481165f81815260098b0160205260409020949095169493929091041690612b6b8882612cda565b612b76888883612f86565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526009890160205260409020612ba68982612cda565b612bb489898388878b61328f565b505050505050505050565b5f610bc8826003015442808218908211021890565b60605f6116c9836133bf565b82820281838583041485151702612c86577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8385098181108201900382848609835f038416828511612c395763ae47f7025f526004601cfd5b93849004938382119092035f8390038390046001010292030417600260038302811880840282030280840282030280840282030280840282030280840282030280840290910302026116c9565b0492915050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260018301602052604081205415156116c9565b612cc481611a57565b6006820155612cd281612bbf565b600490910155565b612ce48282612a67565b6002820155600690910154600190910155565b5f846bffffffffffffffffffffffff165f03612d3657612d367f57699ff400000000000000000000000000000000000000000000000000000000611b24565b73ffffffffffffffffffffffffffffffffffffffff84161580612d6d575073ffffffffffffffffffffffffffffffffffffffff8316155b15612d9b57612d9b7f27c5ec8800000000000000000000000000000000000000000000000000000000611b24565b600787018054905f612dac83613adc565b909155505f818152600a89016020526040902060018101805473ffffffffffffffffffffffffffffffffffffffff8089166c010000000000000000000000009081026bffffffffffffffffffffffff93841617909355600284018054828a1685029084161790558354908b169092029116178155909150612e328882898989898961295c565b509695505050505050565b5f7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300612e693085613418565b5f858152600b830160205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff848116918217909255600185015492517f485cc9550000000000000000000000000000000000000000000000000000000081529282166004840152908616602483015291935063485cc955906044015f604051808303815f87803b158015612f19575f5ffd5b505af1158015612f2b573d5f5f3e3d5ffd5b505060405173ffffffffffffffffffffffffffffffffffffffff8581168252861692508691507f9cc45a93930c8a80c99a1f194086c25c0e14b43109f4a5adfd9689aaa703ec4c90602001610d95565b5f6116c98383613424565b815460018301546bffffffffffffffffffffffff918216918116906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1682821115612ff857612ff87fd596dda700000000000000000000000000000000000000000000000000000000611b24565b816bffffffffffffffffffffffff165f0361304f5783546bffffffffffffffffffffffff808216859003167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009091161784556113be565b6001850180547fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811690915584548385036bffffffffffffffffffffffff8281169190910316911617845573ffffffffffffffffffffffffffffffffffffffff81165f90815260098701602052604090206130cb8782612cda565b80546bffffffffffffffffffffffff808216859003167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909116179055505050505050565b5f61311b8484613470565b9050805f0361312b57505f6116c9565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260098501602052604081206002810180549192849261316690849061396c565b9091555050509392505050565b5f7f988e8266be98e92aff755bdd688f8f4a2421e26daa6089c7e2668053a3bf550061319f8184612c8d565b6131ab57505f92915050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600280830160205260409091205460ff16908160038111156131ea576131ea613b13565b148061139d5750600381600381111561320557613205613b13565b14949350505050565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f3355c1fbe959688d71c13b5c967b2a46ceae34fb425fbcad0cb6451b53f36e0560205260409020541661325d81613173565b61328a5761328a7f0e2026cb00000000000000000000000000000000000000000000000000000000611b24565b919050565b805f036132d75783546bffffffffffffffffffffffff8082168501167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009091161784556113be565b5f6127106bffffffffffffffffffffffff851683026001880180546bffffffffffffffffffffffff8082169490930493840183167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000091821617909155875480831684890301909216911617865573ffffffffffffffffffffffffffffffffffffffff84165f90815260098901602052604090209091506133778882612cda565b80547fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081166bffffffffffffffffffffffff9182169390930116919091179055505050505050565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561340c57602002820191905f5260205f20905b8154815260200190600101908083116133f8575b50505050509050919050565b5f6116c95f84846134ba565b5f81815260018301602052604081205461346957508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bc8565b505f610bc8565b5f61347a83612cbb565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260098401602052604090206134aa8482612cda565b60020180545f9091559392505050565b604080517fb3582b35133d50545afa5036515af43d6000803e604d573d6000fd5b3d6000f36060527f1b60e01b36527fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6c9091527660195155f3363d3d373d3d363d602036600436635c60da6020527c60523d8160223d3973000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8416176009525f90826074600c87f59150816135775763301164255f526004601cfd5b6040525f6060529392505050565b61094480613b4183390190565b5f602082840312156135a2575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461328a575f5ffd5b5f5f604083850312156135dd575f5ffd5b6135e6836135a9565b9150602083013580151581146135fa575f5ffd5b809150509250929050565b5f60208284031215613615575f5ffd5b6116c9826135a9565b5f5f6040838503121561362f575f5ffd5b613638836135a9565b9150613646602084016135a9565b90509250929050565b5f5f5f60608486031215613661575f5ffd5b61366a846135a9565b9250613678602085016135a9565b929592945050506040919091013590565b80356bffffffffffffffffffffffff8116811461328a575f5ffd5b5f5f83601f8401126136b4575f5ffd5b50813567ffffffffffffffff8111156136cb575f5ffd5b6020830191508360208285010111156136e2575f5ffd5b9250929050565b5f5f5f5f5f5f5f60c0888a0312156136ff575f5ffd5b61370888613689565b9650613716602089016135a9565b9550613724604089016135a9565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561374d575f5ffd5b6137598a828b016136a4565b989b979a50959850939692959293505050565b5f5f6040838503121561377d575f5ffd5b8235915061364660208401613689565b5f5f5f6060848603121561379f575f5ffd5b6137a884613689565b92506137b6602085016135a9565b91506137c4604085016135a9565b90509250925092565b5f5f5f5f5f5f60a087890312156137e2575f5ffd5b863595506137f260208801613689565b94506040870135935060608701359250608087013567ffffffffffffffff81111561381b575f5ffd5b61382789828a016136a4565b979a9699509497509295939492505050565b5f5f6040838503121561384a575f5ffd5b82359150613646602084016135a9565b602080825282518282018190525f918401906040840190835b81811015613891578351835260209384019390920191600101613873565b509095945050505050565b5f5f5f5f5f5f5f60c0888a0312156138b2575f5ffd5b6138bb88613689565b96506138c9602089016135a9565b95506138d7604089016135a9565b94506138e5606089016135a9565b93506080880135925060a088013567ffffffffffffffff81111561374d575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82613967577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820180821115610bc857610bc8613907565b5f6020828403121561398f575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082028115828204841417610bc857610bc8613907565b613a05818751805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b6020860151604082015260408601516060820152613a466080820186805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff841660c082015261010060e08201528161010082015281836101208301375f81830161012090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101949350505050565b6bffffffffffffffffffffffff8181168382160190811115610bc857610bc8613907565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b0c57613b0c613907565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfe6080604052600a600e565b60b2565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef520008054640100000000900460ff16156059576040516366008a2d60e01b815260040160405180910390fd5b805463ffffffff908116101560af57805463ffffffff191663ffffffff90811782556040519081527fe9c9b456cb2994b80aeef036cf59d26e9617df80f816a6ee5a5b4166e07e2f5c9060200160405180910390a15b50565b610885806100bf5f395ff3fe608060405260043610610058575f3560e01c80636f267190116100415780636f267190146100c6578063c45a0155146100d9578063f7e7d1fd14610104575f5ffd5b8063485cc9551461005c57806351ed6a3014610071575b5f5ffd5b61006f61006a3660046107f2565b610117565b005b34801561007c575f5ffd5b5060015461009d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006f6100d4366004610829565b6103d8565b3480156100e4575f5ffd5b505f5461009d9073ffffffffffffffffffffffffffffffffffffffff1681565b61006f610112366004610829565b61047d565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef520008054640100000000900460ff16158061015457303b1515610163565b8154600163ffffffff90911610155b156101aa5781546040517f5477bbf800000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016600117825580156102075781547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001782555b5f8054337fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556001805490911673ffffffffffffffffffffffffffffffffffffffff8681169182179092556040517f5c19a95c000000000000000000000000000000000000000000000000000000008152918516600483015290635c19a95c906024015f604051808303815f87803b1580156102a7575f5ffd5b505af11580156102b9573d5f5f3e3d5ffd5b50506040517f095ea7b30000000000000000000000000000000000000000000000000000000081523360048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015273ffffffffffffffffffffffffffffffffffffffff8716925063095ea7b391506044016020604051808303815f875af115801561034c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610370919061084b565b5080156103d25781547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff168255604051600181527fe9c9b456cb2994b80aeef036cf59d26e9617df80f816a6ee5a5b4166e07e2f5c9060200160405180910390a15b50505050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146103fa575f5ffd5b6001546040517f5c19a95c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690635c19a95c906024015f604051808303815f87803b158015610464575f5ffd5b505af1158015610476573d5f5f3e3d5ffd5b5050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461049f575f5ffd5b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef52000805460039190640100000000900460ff16806104e65750805463ffffffff808416911610155b156105285780546040517f5477bbf800000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024016101a1565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001663ffffffff8316176401000000001781556001546040517f587cde1e0000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff169063587cde1e90602401602060405180830381865afa1580156105c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ed919061086a565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87169081179091556040517f095ea7b30000000000000000000000000000000000000000000000000000000081523360048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529192509063095ea7b3906044016020604051808303815f875af11580156106ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106cf919061084b565b5073ffffffffffffffffffffffffffffffffffffffff811615610769576040517f5c19a95c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690635c19a95c906024015f604051808303815f87803b158015610752575f5ffd5b505af1158015610764573d5f5f3e3d5ffd5b505050505b5080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16815560405163ffffffff831681527fe9c9b456cb2994b80aeef036cf59d26e9617df80f816a6ee5a5b4166e07e2f5c9060200160405180910390a1505050565b73ffffffffffffffffffffffffffffffffffffffff811681146107ef575f5ffd5b50565b5f5f60408385031215610803575f5ffd5b823561080e816107ce565b9150602083013561081e816107ce565b809150509250929050565b5f60208284031215610839575f5ffd5b8135610844816107ce565b9392505050565b5f6020828403121561085b575f5ffd5b81518015158114610844575f5ffd5b5f6020828403121561087a575f5ffd5b8151610844816107ce56";

type RewardsDistributionV2ConstructorParams =
  | [signer?: Signer]
  | ConstructorParameters<typeof ContractFactory>;

const isSuperArgs = (
  xs: RewardsDistributionV2ConstructorParams
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;

export class RewardsDistributionV2__factory extends ContractFactory {
  constructor(...args: RewardsDistributionV2ConstructorParams) {
    if (isSuperArgs(args)) {
      super(...args);
    } else {
      super(_abi, _bytecode, args[0]);
    }
  }

  override deploy(
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<RewardsDistributionV2> {
    return super.deploy(overrides || {}) as Promise<RewardsDistributionV2>;
  }
  override getDeployTransaction(
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): TransactionRequest {
    return super.getDeployTransaction(overrides || {});
  }
  override attach(address: string): RewardsDistributionV2 {
    return super.attach(address) as RewardsDistributionV2;
  }
  override connect(signer: Signer): RewardsDistributionV2__factory {
    return super.connect(signer) as RewardsDistributionV2__factory;
  }

  static readonly bytecode = _bytecode;
  static readonly abi = _abi;
  static createInterface(): RewardsDistributionV2Interface {
    return new utils.Interface(_abi) as RewardsDistributionV2Interface;
  }
  static connect(
    address: string,
    signerOrProvider: Signer | Provider
  ): RewardsDistributionV2 {
    return new Contract(
      address,
      _abi,
      signerOrProvider
    ) as RewardsDistributionV2;
  }
}
