UNPKG

@collabland/staking-contracts

Version:
406 lines (405 loc) 25.2 kB
import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from "ethers"; import type { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; import type { Listener, Provider } from "@ethersproject/providers"; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common.js"; export interface BansheesStakingInterface extends utils.Interface { functions: { "EMISSION_RATE()": FunctionFragment; "bansheesContract()": FunctionFragment; "bansheesRaffle()": FunctionFragment; "calculateTokens(uint256)": FunctionFragment; "calculateTokensForBatch(address)": FunctionFragment; "getAvailableFreeTickets(address)": FunctionFragment; "getStakedTokensOfWallet(address)": FunctionFragment; "giveFreeTickets(address,uint256)": FunctionFragment; "initialize(address,address,address,uint256)": FunctionFragment; "lastTicketTimestamp(address)": FunctionFragment; "onERC721Received(address,address,uint256,bytes)": FunctionFragment; "owner()": FunctionFragment; "redeemFreeTickets()": FunctionFragment; "renounceOwnership()": FunctionFragment; "returnStakedTokens(address)": FunctionFragment; "rewardToken()": FunctionFragment; "setEmissionRate(uint256)": FunctionFragment; "setRaffleContractt(address)": FunctionFragment; "stakeSwitch()": FunctionFragment; "stakeToken(uint256[])": FunctionFragment; "stakedTokensOfWallet(address,uint256)": FunctionFragment; "stakingOn()": FunctionFragment; "tokenLastStakedAt(uint256)": FunctionFragment; "tokenStakedAt(uint256)": FunctionFragment; "transferOwnership(address)": FunctionFragment; "unstakeToken(uint256[])": FunctionFragment; }; getFunction(nameOrSignatureOrTopic: "EMISSION_RATE" | "bansheesContract" | "bansheesRaffle" | "calculateTokens" | "calculateTokensForBatch" | "getAvailableFreeTickets" | "getStakedTokensOfWallet" | "giveFreeTickets" | "initialize" | "lastTicketTimestamp" | "onERC721Received" | "owner" | "redeemFreeTickets" | "renounceOwnership" | "returnStakedTokens" | "rewardToken" | "setEmissionRate" | "setRaffleContractt" | "stakeSwitch" | "stakeToken" | "stakedTokensOfWallet" | "stakingOn" | "tokenLastStakedAt" | "tokenStakedAt" | "transferOwnership" | "unstakeToken"): FunctionFragment; encodeFunctionData(functionFragment: "EMISSION_RATE", values?: undefined): string; encodeFunctionData(functionFragment: "bansheesContract", values?: undefined): string; encodeFunctionData(functionFragment: "bansheesRaffle", values?: undefined): string; encodeFunctionData(functionFragment: "calculateTokens", values: [BigNumberish]): string; encodeFunctionData(functionFragment: "calculateTokensForBatch", values: [string]): string; encodeFunctionData(functionFragment: "getAvailableFreeTickets", values: [string]): string; encodeFunctionData(functionFragment: "getStakedTokensOfWallet", values: [string]): string; encodeFunctionData(functionFragment: "giveFreeTickets", values: [string, BigNumberish]): string; encodeFunctionData(functionFragment: "initialize", values: [string, string, string, BigNumberish]): string; encodeFunctionData(functionFragment: "lastTicketTimestamp", values: [string]): string; encodeFunctionData(functionFragment: "onERC721Received", values: [string, string, BigNumberish, BytesLike]): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData(functionFragment: "redeemFreeTickets", values?: undefined): string; encodeFunctionData(functionFragment: "renounceOwnership", values?: undefined): string; encodeFunctionData(functionFragment: "returnStakedTokens", values: [string]): string; encodeFunctionData(functionFragment: "rewardToken", values?: undefined): string; encodeFunctionData(functionFragment: "setEmissionRate", values: [BigNumberish]): string; encodeFunctionData(functionFragment: "setRaffleContractt", values: [string]): string; encodeFunctionData(functionFragment: "stakeSwitch", values?: undefined): string; encodeFunctionData(functionFragment: "stakeToken", values: [BigNumberish[]]): string; encodeFunctionData(functionFragment: "stakedTokensOfWallet", values: [string, BigNumberish]): string; encodeFunctionData(functionFragment: "stakingOn", values?: undefined): string; encodeFunctionData(functionFragment: "tokenLastStakedAt", values: [BigNumberish]): string; encodeFunctionData(functionFragment: "tokenStakedAt", values: [BigNumberish]): string; encodeFunctionData(functionFragment: "transferOwnership", values: [string]): string; encodeFunctionData(functionFragment: "unstakeToken", values: [BigNumberish[]]): string; decodeFunctionResult(functionFragment: "EMISSION_RATE", data: BytesLike): Result; decodeFunctionResult(functionFragment: "bansheesContract", data: BytesLike): Result; decodeFunctionResult(functionFragment: "bansheesRaffle", data: BytesLike): Result; decodeFunctionResult(functionFragment: "calculateTokens", data: BytesLike): Result; decodeFunctionResult(functionFragment: "calculateTokensForBatch", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getAvailableFreeTickets", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getStakedTokensOfWallet", data: BytesLike): Result; decodeFunctionResult(functionFragment: "giveFreeTickets", data: BytesLike): Result; decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; decodeFunctionResult(functionFragment: "lastTicketTimestamp", data: BytesLike): Result; decodeFunctionResult(functionFragment: "onERC721Received", data: BytesLike): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult(functionFragment: "redeemFreeTickets", data: BytesLike): Result; decodeFunctionResult(functionFragment: "renounceOwnership", data: BytesLike): Result; decodeFunctionResult(functionFragment: "returnStakedTokens", data: BytesLike): Result; decodeFunctionResult(functionFragment: "rewardToken", data: BytesLike): Result; decodeFunctionResult(functionFragment: "setEmissionRate", data: BytesLike): Result; decodeFunctionResult(functionFragment: "setRaffleContractt", data: BytesLike): Result; decodeFunctionResult(functionFragment: "stakeSwitch", data: BytesLike): Result; decodeFunctionResult(functionFragment: "stakeToken", data: BytesLike): Result; decodeFunctionResult(functionFragment: "stakedTokensOfWallet", data: BytesLike): Result; decodeFunctionResult(functionFragment: "stakingOn", data: BytesLike): Result; decodeFunctionResult(functionFragment: "tokenLastStakedAt", data: BytesLike): Result; decodeFunctionResult(functionFragment: "tokenStakedAt", data: BytesLike): Result; decodeFunctionResult(functionFragment: "transferOwnership", data: BytesLike): Result; decodeFunctionResult(functionFragment: "unstakeToken", data: BytesLike): Result; events: { "Initialized(uint8)": EventFragment; "LogMessage(string,address)": EventFragment; "OwnershipTransferred(address,address)": EventFragment; "Staked(address,uint256,uint256)": EventFragment; "Unstaked(address,uint256,uint256)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; getEvent(nameOrSignatureOrTopic: "LogMessage"): EventFragment; getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; getEvent(nameOrSignatureOrTopic: "Staked"): EventFragment; getEvent(nameOrSignatureOrTopic: "Unstaked"): EventFragment; } export interface InitializedEventObject { version: number; } export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; export type InitializedEventFilter = TypedEventFilter<InitializedEvent>; export interface LogMessageEventObject { message: string; sender: string; } export type LogMessageEvent = TypedEvent<[ string, string ], LogMessageEventObject>; export type LogMessageEventFilter = TypedEventFilter<LogMessageEvent>; export interface OwnershipTransferredEventObject { previousOwner: string; newOwner: string; } export type OwnershipTransferredEvent = TypedEvent<[ string, string ], OwnershipTransferredEventObject>; export type OwnershipTransferredEventFilter = TypedEventFilter<OwnershipTransferredEvent>; export interface StakedEventObject { wallet: string; tokenID: BigNumber; stakeTime: BigNumber; } export type StakedEvent = TypedEvent<[ string, BigNumber, BigNumber ], StakedEventObject>; export type StakedEventFilter = TypedEventFilter<StakedEvent>; export interface UnstakedEventObject { wallet: string; tokenID: BigNumber; unstakeTime: BigNumber; } export type UnstakedEvent = TypedEvent<[ string, BigNumber, BigNumber ], UnstakedEventObject>; export type UnstakedEventFilter = TypedEventFilter<UnstakedEvent>; export interface BansheesStaking extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise<this>; interface: BansheesStakingInterface; queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>; listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>; listeners(eventName?: string): Array<Listener>; removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this; removeAllListeners(eventName?: string): this; off: OnEvent<this>; on: OnEvent<this>; once: OnEvent<this>; removeListener: OnEvent<this>; functions: { EMISSION_RATE(overrides?: CallOverrides): Promise<[BigNumber]>; bansheesContract(overrides?: CallOverrides): Promise<[string]>; bansheesRaffle(overrides?: CallOverrides): Promise<[string]>; calculateTokens(tokenId: BigNumberish, overrides?: CallOverrides): Promise<[BigNumber]>; calculateTokensForBatch(wallet: string, overrides?: CallOverrides): Promise<[BigNumber]>; getAvailableFreeTickets(wallet: string, overrides?: CallOverrides): Promise<[BigNumber]>; getStakedTokensOfWallet(wallet: string, overrides?: CallOverrides): Promise<[BigNumber[]]>; giveFreeTickets(wallet: string, amount: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; initialize(_bansheesContract: string, _raffleContract: string, _rewardToken: string, _EMISSION_RATE: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; lastTicketTimestamp(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; onERC721Received(arg0: string, arg1: string, arg2: BigNumberish, arg3: BytesLike, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; owner(overrides?: CallOverrides): Promise<[string]>; redeemFreeTickets(overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; renounceOwnership(overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; returnStakedTokens(wallet: string, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; rewardToken(overrides?: CallOverrides): Promise<[string]>; setEmissionRate(newEmissionRate: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; setRaffleContractt(_raffleContract: string, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; stakeSwitch(overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; stakeToken(tokenIDs: BigNumberish[], overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; stakedTokensOfWallet(arg0: string, arg1: BigNumberish, overrides?: CallOverrides): Promise<[BigNumber]>; stakingOn(overrides?: CallOverrides): Promise<[boolean]>; tokenLastStakedAt(arg0: BigNumberish, overrides?: CallOverrides): Promise<[BigNumber]>; tokenStakedAt(arg0: BigNumberish, overrides?: CallOverrides): Promise<[BigNumber]>; transferOwnership(newOwner: string, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; unstakeToken(tokenIDs: BigNumberish[], overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; }; EMISSION_RATE(overrides?: CallOverrides): Promise<BigNumber>; bansheesContract(overrides?: CallOverrides): Promise<string>; bansheesRaffle(overrides?: CallOverrides): Promise<string>; calculateTokens(tokenId: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; calculateTokensForBatch(wallet: string, overrides?: CallOverrides): Promise<BigNumber>; getAvailableFreeTickets(wallet: string, overrides?: CallOverrides): Promise<BigNumber>; getStakedTokensOfWallet(wallet: string, overrides?: CallOverrides): Promise<BigNumber[]>; giveFreeTickets(wallet: string, amount: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; initialize(_bansheesContract: string, _raffleContract: string, _rewardToken: string, _EMISSION_RATE: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; lastTicketTimestamp(arg0: string, overrides?: CallOverrides): Promise<BigNumber>; onERC721Received(arg0: string, arg1: string, arg2: BigNumberish, arg3: BytesLike, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; owner(overrides?: CallOverrides): Promise<string>; redeemFreeTickets(overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; renounceOwnership(overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; returnStakedTokens(wallet: string, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; rewardToken(overrides?: CallOverrides): Promise<string>; setEmissionRate(newEmissionRate: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; setRaffleContractt(_raffleContract: string, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; stakeSwitch(overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; stakeToken(tokenIDs: BigNumberish[], overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; stakedTokensOfWallet(arg0: string, arg1: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; stakingOn(overrides?: CallOverrides): Promise<boolean>; tokenLastStakedAt(arg0: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; tokenStakedAt(arg0: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; transferOwnership(newOwner: string, overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; unstakeToken(tokenIDs: BigNumberish[], overrides?: Overrides & { from?: string; }): Promise<ContractTransaction>; callStatic: { EMISSION_RATE(overrides?: CallOverrides): Promise<BigNumber>; bansheesContract(overrides?: CallOverrides): Promise<string>; bansheesRaffle(overrides?: CallOverrides): Promise<string>; calculateTokens(tokenId: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; calculateTokensForBatch(wallet: string, overrides?: CallOverrides): Promise<BigNumber>; getAvailableFreeTickets(wallet: string, overrides?: CallOverrides): Promise<BigNumber>; getStakedTokensOfWallet(wallet: string, overrides?: CallOverrides): Promise<BigNumber[]>; giveFreeTickets(wallet: string, amount: BigNumberish, overrides?: CallOverrides): Promise<void>; initialize(_bansheesContract: string, _raffleContract: string, _rewardToken: string, _EMISSION_RATE: BigNumberish, overrides?: CallOverrides): Promise<void>; lastTicketTimestamp(arg0: string, overrides?: CallOverrides): Promise<BigNumber>; onERC721Received(arg0: string, arg1: string, arg2: BigNumberish, arg3: BytesLike, overrides?: CallOverrides): Promise<string>; owner(overrides?: CallOverrides): Promise<string>; redeemFreeTickets(overrides?: CallOverrides): Promise<void>; renounceOwnership(overrides?: CallOverrides): Promise<void>; returnStakedTokens(wallet: string, overrides?: CallOverrides): Promise<void>; rewardToken(overrides?: CallOverrides): Promise<string>; setEmissionRate(newEmissionRate: BigNumberish, overrides?: CallOverrides): Promise<void>; setRaffleContractt(_raffleContract: string, overrides?: CallOverrides): Promise<void>; stakeSwitch(overrides?: CallOverrides): Promise<void>; stakeToken(tokenIDs: BigNumberish[], overrides?: CallOverrides): Promise<void>; stakedTokensOfWallet(arg0: string, arg1: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; stakingOn(overrides?: CallOverrides): Promise<boolean>; tokenLastStakedAt(arg0: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; tokenStakedAt(arg0: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; transferOwnership(newOwner: string, overrides?: CallOverrides): Promise<void>; unstakeToken(tokenIDs: BigNumberish[], overrides?: CallOverrides): Promise<void>; }; filters: { "Initialized(uint8)"(version?: null): InitializedEventFilter; Initialized(version?: null): InitializedEventFilter; "LogMessage(string,address)"(message?: null, sender?: null): LogMessageEventFilter; LogMessage(message?: null, sender?: null): LogMessageEventFilter; "OwnershipTransferred(address,address)"(previousOwner?: string | null, newOwner?: string | null): OwnershipTransferredEventFilter; OwnershipTransferred(previousOwner?: string | null, newOwner?: string | null): OwnershipTransferredEventFilter; "Staked(address,uint256,uint256)"(wallet?: string | null, tokenID?: BigNumberish | null, stakeTime?: BigNumberish | null): StakedEventFilter; Staked(wallet?: string | null, tokenID?: BigNumberish | null, stakeTime?: BigNumberish | null): StakedEventFilter; "Unstaked(address,uint256,uint256)"(wallet?: string | null, tokenID?: BigNumberish | null, unstakeTime?: BigNumberish | null): UnstakedEventFilter; Unstaked(wallet?: string | null, tokenID?: BigNumberish | null, unstakeTime?: BigNumberish | null): UnstakedEventFilter; }; estimateGas: { EMISSION_RATE(overrides?: CallOverrides): Promise<BigNumber>; bansheesContract(overrides?: CallOverrides): Promise<BigNumber>; bansheesRaffle(overrides?: CallOverrides): Promise<BigNumber>; calculateTokens(tokenId: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; calculateTokensForBatch(wallet: string, overrides?: CallOverrides): Promise<BigNumber>; getAvailableFreeTickets(wallet: string, overrides?: CallOverrides): Promise<BigNumber>; getStakedTokensOfWallet(wallet: string, overrides?: CallOverrides): Promise<BigNumber>; giveFreeTickets(wallet: string, amount: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<BigNumber>; initialize(_bansheesContract: string, _raffleContract: string, _rewardToken: string, _EMISSION_RATE: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<BigNumber>; lastTicketTimestamp(arg0: string, overrides?: CallOverrides): Promise<BigNumber>; onERC721Received(arg0: string, arg1: string, arg2: BigNumberish, arg3: BytesLike, overrides?: Overrides & { from?: string; }): Promise<BigNumber>; owner(overrides?: CallOverrides): Promise<BigNumber>; redeemFreeTickets(overrides?: Overrides & { from?: string; }): Promise<BigNumber>; renounceOwnership(overrides?: Overrides & { from?: string; }): Promise<BigNumber>; returnStakedTokens(wallet: string, overrides?: Overrides & { from?: string; }): Promise<BigNumber>; rewardToken(overrides?: CallOverrides): Promise<BigNumber>; setEmissionRate(newEmissionRate: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<BigNumber>; setRaffleContractt(_raffleContract: string, overrides?: Overrides & { from?: string; }): Promise<BigNumber>; stakeSwitch(overrides?: Overrides & { from?: string; }): Promise<BigNumber>; stakeToken(tokenIDs: BigNumberish[], overrides?: Overrides & { from?: string; }): Promise<BigNumber>; stakedTokensOfWallet(arg0: string, arg1: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; stakingOn(overrides?: CallOverrides): Promise<BigNumber>; tokenLastStakedAt(arg0: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; tokenStakedAt(arg0: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>; transferOwnership(newOwner: string, overrides?: Overrides & { from?: string; }): Promise<BigNumber>; unstakeToken(tokenIDs: BigNumberish[], overrides?: Overrides & { from?: string; }): Promise<BigNumber>; }; populateTransaction: { EMISSION_RATE(overrides?: CallOverrides): Promise<PopulatedTransaction>; bansheesContract(overrides?: CallOverrides): Promise<PopulatedTransaction>; bansheesRaffle(overrides?: CallOverrides): Promise<PopulatedTransaction>; calculateTokens(tokenId: BigNumberish, overrides?: CallOverrides): Promise<PopulatedTransaction>; calculateTokensForBatch(wallet: string, overrides?: CallOverrides): Promise<PopulatedTransaction>; getAvailableFreeTickets(wallet: string, overrides?: CallOverrides): Promise<PopulatedTransaction>; getStakedTokensOfWallet(wallet: string, overrides?: CallOverrides): Promise<PopulatedTransaction>; giveFreeTickets(wallet: string, amount: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; initialize(_bansheesContract: string, _raffleContract: string, _rewardToken: string, _EMISSION_RATE: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; lastTicketTimestamp(arg0: string, overrides?: CallOverrides): Promise<PopulatedTransaction>; onERC721Received(arg0: string, arg1: string, arg2: BigNumberish, arg3: BytesLike, overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; owner(overrides?: CallOverrides): Promise<PopulatedTransaction>; redeemFreeTickets(overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; renounceOwnership(overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; returnStakedTokens(wallet: string, overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; rewardToken(overrides?: CallOverrides): Promise<PopulatedTransaction>; setEmissionRate(newEmissionRate: BigNumberish, overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; setRaffleContractt(_raffleContract: string, overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; stakeSwitch(overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; stakeToken(tokenIDs: BigNumberish[], overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; stakedTokensOfWallet(arg0: string, arg1: BigNumberish, overrides?: CallOverrides): Promise<PopulatedTransaction>; stakingOn(overrides?: CallOverrides): Promise<PopulatedTransaction>; tokenLastStakedAt(arg0: BigNumberish, overrides?: CallOverrides): Promise<PopulatedTransaction>; tokenStakedAt(arg0: BigNumberish, overrides?: CallOverrides): Promise<PopulatedTransaction>; transferOwnership(newOwner: string, overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; unstakeToken(tokenIDs: BigNumberish[], overrides?: Overrides & { from?: string; }): Promise<PopulatedTransaction>; }; }