diff --git a/contracts/RewardsDistributor.sol b/contracts/RewardsDistributor.sol new file mode 100644 index 0000000..6dea234 --- /dev/null +++ b/contracts/RewardsDistributor.sol @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.19; + +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; +import {IRewardsDistributor} from "./interfaces/IRewardsDistributor.sol"; +import {IVotingEscrow} from "./interfaces/IVotingEscrow.sol"; +import {IMinter} from "./interfaces/IMinter.sol"; + +/* + * @title Curve Fee Distribution modified for ve(3,3) emissions + * @author Curve Finance, andrecronje + * @author velodrome.finance, @figs999, @pegahcarter + * @license MIT + */ +contract RewardsDistributor is IRewardsDistributor { + /// @inheritdoc IRewardsDistributor + uint256 public constant WEEK = 7 * 86400; + + /// @inheritdoc IRewardsDistributor + uint256 public startTime; + /// @inheritdoc IRewardsDistributor + mapping(uint256 => uint256) public timeCursorOf; + + /// @inheritdoc IRewardsDistributor + uint256 public lastTokenTime; + uint256[1000000000000000] public tokensPerWeek; + + /// @inheritdoc IRewardsDistributor + IVotingEscrow public immutable ve; + /// @inheritdoc IRewardsDistributor + address public minter; + /// @inheritdoc IRewardsDistributor + uint256 public tokenLastBalance; + + constructor(address _ve) { + uint256 _t = (block.timestamp / WEEK) * WEEK; + startTime = _t; + lastTokenTime = _t; + ve = IVotingEscrow(_ve); + minter = msg.sender; + } + + function _checkpointToken() internal { + uint256 tokenBalance = address(this).balance; + uint256 toDistribute = tokenBalance - tokenLastBalance; + tokenLastBalance = tokenBalance; + + uint256 t = lastTokenTime; + uint256 sinceLast = block.timestamp - t; + lastTokenTime = block.timestamp; + uint256 thisWeek = (t / WEEK) * WEEK; + uint256 nextWeek = 0; + uint256 timestamp = block.timestamp; + + for (uint256 i = 0; i < 20; i++) { + nextWeek = thisWeek + WEEK; + if (timestamp < nextWeek) { + if (sinceLast == 0 && timestamp == t) { + tokensPerWeek[thisWeek] += toDistribute; + } else { + tokensPerWeek[thisWeek] += (toDistribute * (timestamp - t)) / sinceLast; + } + break; + } else { + if (sinceLast == 0 && nextWeek == t) { + tokensPerWeek[thisWeek] += toDistribute; + } else { + tokensPerWeek[thisWeek] += (toDistribute * (nextWeek - t)) / sinceLast; + } + } + t = nextWeek; + thisWeek = nextWeek; + } + emit CheckpointToken(timestamp, toDistribute); + } + + /// @inheritdoc IRewardsDistributor + function checkpointToken() external { + if (msg.sender != minter) revert NotMinter(); + _checkpointToken(); + } + + function _claim(uint256 _tokenId, uint256 _lastTokenTime) internal returns (uint256) { + (uint256 toDistribute, uint256 epochStart, uint256 weekCursor) = _claimable(_tokenId, _lastTokenTime); + timeCursorOf[_tokenId] = weekCursor; + if (toDistribute == 0) return 0; + + emit Claimed(_tokenId, epochStart, weekCursor, toDistribute); + return toDistribute; + } + + function _claimable( + uint256 _tokenId, + uint256 _lastTokenTime + ) internal view returns (uint256 toDistribute, uint256 weekCursorStart, uint256 weekCursor) { + uint256 _startTime = startTime; + weekCursor = timeCursorOf[_tokenId]; + weekCursorStart = weekCursor; + + // case where token does not exist + uint256 maxUserEpoch = ve.userPointEpoch(_tokenId); + if (maxUserEpoch == 0) return (0, weekCursorStart, weekCursor); + + // case where token exists but has never been claimed + if (weekCursor == 0) { + IVotingEscrow.UserPoint memory userPoint = ve.userPointHistory(_tokenId, 1); + weekCursor = (userPoint.ts / WEEK) * WEEK; + weekCursorStart = weekCursor; + } + if (weekCursor >= _lastTokenTime) return (0, weekCursorStart, weekCursor); + if (weekCursor < _startTime) weekCursor = _startTime; + + for (uint256 i = 0; i < 50; i++) { + if (weekCursor >= _lastTokenTime) break; + + uint256 balance = ve.balanceOfNFTAt(_tokenId, weekCursor + WEEK - 1); + uint256 supply = ve.totalSupplyAt(weekCursor + WEEK - 1); + supply = supply == 0 ? 1 : supply; + toDistribute += (balance * tokensPerWeek[weekCursor]) / supply; + weekCursor += WEEK; + } + } + + /// @inheritdoc IRewardsDistributor + function claimable(uint256 _tokenId) external view returns (uint256 claimable_) { + uint256 _lastTokenTime = (lastTokenTime / WEEK) * WEEK; + (claimable_, , ) = _claimable(_tokenId, _lastTokenTime); + } + + /// @inheritdoc IRewardsDistributor + function claim(uint256 _tokenId) external returns (uint256) { + if (IMinter(minter).activePeriod() < ((block.timestamp / WEEK) * WEEK)) revert UpdatePeriod(); + uint256 _timestamp = block.timestamp; + uint256 _lastTokenTime = lastTokenTime; + _lastTokenTime = (_lastTokenTime / WEEK) * WEEK; + uint256 amount = _claim(_tokenId, _lastTokenTime); + if (amount != 0) { + IVotingEscrow.LockedBalance memory _locked = ve.locked(_tokenId); + if ((_timestamp >= _locked.end && !_locked.isPermanent) || ve.lockedToken(_tokenId) != address(0)) { + address _owner = ve.ownerOf(_tokenId); + payable(_owner).transfer(amount); + } else { + ve.depositFor{value: amount}(_tokenId, amount); + } + tokenLastBalance -= amount; + } + return amount; + } + + /// @inheritdoc IRewardsDistributor + function claimMany(uint256[] calldata _tokenIds) external returns (bool) { + if (IMinter(minter).activePeriod() < ((block.timestamp / WEEK) * WEEK)) revert UpdatePeriod(); + uint256 _timestamp = block.timestamp; + uint256 _lastTokenTime = lastTokenTime; + _lastTokenTime = (_lastTokenTime / WEEK) * WEEK; + uint256 total = 0; + uint256 _length = _tokenIds.length; + + for (uint256 i = 0; i < _length; i++) { + uint256 _tokenId = _tokenIds[i]; + if (_tokenId == 0) break; + uint256 amount = _claim(_tokenId, _lastTokenTime); + if (amount != 0) { + IVotingEscrow.LockedBalance memory _locked = ve.locked(_tokenId); + if ((_timestamp >= _locked.end && !_locked.isPermanent) || ve.lockedToken(_tokenId) != address(0)) { + address _owner = ve.ownerOf(_tokenId); + payable(_owner).transfer(amount); + } else { + ve.depositFor{value: amount}(_tokenId, amount); + } + total += amount; + } + } + if (total != 0) { + tokenLastBalance -= total; + } + + return true; + } + + /// @inheritdoc IRewardsDistributor + function setMinter(address _minter) external { + if (msg.sender != minter) revert NotMinter(); + minter = _minter; + } +} diff --git a/contracts/interfaces/IMinter.sol b/contracts/interfaces/IMinter.sol new file mode 100644 index 0000000..f8c6d9c --- /dev/null +++ b/contracts/interfaces/IMinter.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IVoter} from "./IVoter.sol"; +import {IVotingEscrow} from "./IVotingEscrow.sol"; +import {IRewardsDistributor} from "./IRewardsDistributor.sol"; + +interface IMinter { + error AlreadyNudged(); + error NotEpochGovernor(); + error TailEmissionsInactive(); + + event Mint(address indexed _sender, uint256 _weekly, uint256 _circulating_supply, bool indexed _tail); + event Nudge(uint256 indexed _period, uint256 _oldRate, uint256 _newRate); + + /// @notice Interface of Voter.sol + function voter() external view returns (IVoter); + + /// @notice Interface of IVotingEscrow.sol + function ve() external view returns (IVotingEscrow); + + /// @notice Interface of RewardsDistributor.sol + function rewardsDistributor() external view returns (IRewardsDistributor); + + /// @notice Duration of epoch in seconds + function WEEK() external view returns (uint256); + + /// @notice Decay rate of emissions as percentage of `MAX_BPS` + function WEEKLY_DECAY() external view returns (uint256); + + /// @notice Maximum tail emission rate in basis points. + function MAXIMUM_TAIL_RATE() external view returns (uint256); + + /// @notice Minimum tail emission rate in basis points. + function MINIMUM_TAIL_RATE() external view returns (uint256); + + /// @notice Denominator for emissions calculations (as basis points) + function MAX_BPS() external view returns (uint256); + + /// @notice Rate change per proposal + function NUDGE() external view returns (uint256); + + /// @notice When emissions fall below this amount, begin tail emissions + function TAIL_START() external view returns (uint256); + + /// @notice Tail emissions rate in basis points + function tailEmissionRate() external view returns (uint256); + + /// @notice Starting weekly emission of 15M VELO (VELO has 18 decimals) + function weekly() external view returns (uint256); + + /// @notice Timestamp of start of epoch that updatePeriod was last called in + function activePeriod() external returns (uint256); + + /// @dev activePeriod => proposal existing, used to enforce one proposal per epoch + /// @param _activePeriod Timestamp of start of epoch + /// @return True if proposal has been executed, else false + function proposals(uint256 _activePeriod) external view returns (bool); + + /// @notice Allows epoch governor to modify the tail emission rate by at most 1 basis point + /// per epoch to a maximum of 100 basis points or to a minimum of 1 basis point. + /// Note: the very first nudge proposal must take place the week prior + /// to the tail emission schedule starting. + /// @dev Throws if not epoch governor. + /// Throws if not currently in tail emission schedule. + /// Throws if already nudged this epoch. + /// Throws if nudging above maximum rate. + /// Throws if nudging below minimum rate. + /// This contract is coupled to EpochGovernor as it requires three option simple majority voting. + function nudge() external; + + /// @notice Calculates rebases according to the formula + /// weekly * (ve.totalSupply / velo.totalSupply) ^ 3 / 2 + /// Note that ve.totalSupply is the locked ve supply + /// velo.totalSupply is the total ve supply minted + /// @param _minted Amount of VELO minted this epoch + /// @return _growth Rebases + function calculateGrowth(uint256 _minted) external view returns (uint256 _growth); + + /// @notice Processes emissions and rebases. Callable once per epoch (1 week). + /// @return _period Start of current epoch. + function updatePeriod() external returns (uint256 _period); +} diff --git a/contracts/interfaces/IRewardsDistributor.sol b/contracts/interfaces/IRewardsDistributor.sol new file mode 100644 index 0000000..fddc217 --- /dev/null +++ b/contracts/interfaces/IRewardsDistributor.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IVotingEscrow} from "./IVotingEscrow.sol"; + +interface IRewardsDistributor { + event CheckpointToken(uint256 time, uint256 tokens); + event Claimed(uint256 indexed tokenId, uint256 indexed epochStart, uint256 indexed epochEnd, uint256 amount); + + error NotMinter(); + error NotManagedOrNormalNFT(); + error UpdatePeriod(); + + /// @notice 7 days in seconds + function WEEK() external view returns (uint256); + + /// @notice Timestamp of contract creation + function startTime() external view returns (uint256); + + /// @notice Timestamp of most recent claim of tokenId + function timeCursorOf(uint256 tokenId) external view returns (uint256); + + /// @notice The last timestamp Minter has called checkpointToken() + function lastTokenTime() external view returns (uint256); + + /// @notice Interface of VotingEscrow.sol + function ve() external view returns (IVotingEscrow); + + /// @notice Address of Minter.sol + /// Authorized caller of checkpointToken() + function minter() external view returns (address); + + /// @notice Amount of token in contract when checkpointToken() was last called + function tokenLastBalance() external view returns (uint256); + + /// @notice Called by Minter to notify Distributor of rebases + function checkpointToken() external; + + /// @notice Returns the amount of rebases claimable for a given token ID + /// @dev Allows claiming of rebases up to 50 epochs old + /// @param tokenId The token ID to check + /// @return The amount of rebases claimable for the given token ID + function claimable(uint256 tokenId) external view returns (uint256); + + /// @notice Claims rebases for a given token ID + /// @dev Allows claiming of rebases up to 50 epochs old + /// `Minter.updatePeriod()` must be called before claiming + /// @param tokenId The token ID to claim for + /// @return The amount of rebases claimed + function claim(uint256 tokenId) external returns (uint256); + + /// @notice Claims rebases for a list of token IDs + /// @dev `Minter.updatePeriod()` must be called before claiming + /// @param tokenIds The token IDs to claim for + /// @return Whether or not the claim succeeded + function claimMany(uint256[] calldata tokenIds) external returns (bool); + + /// @notice Used to set minter once on initialization + /// @dev Callable once by Minter only, Minter is immutable + function setMinter(address _minter) external; +} diff --git a/src/types/contracts/RewardsDistributor.ts b/src/types/contracts/RewardsDistributor.ts new file mode 100644 index 0000000..8e64720 --- /dev/null +++ b/src/types/contracts/RewardsDistributor.ts @@ -0,0 +1,307 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "../common"; + +export interface RewardsDistributorInterface extends Interface { + getFunction( + nameOrSignature: + | "WEEK" + | "checkpointToken" + | "claim" + | "claimMany" + | "claimable" + | "lastTokenTime" + | "minter" + | "setMinter" + | "startTime" + | "timeCursorOf" + | "tokenLastBalance" + | "tokensPerWeek" + | "ve" + ): FunctionFragment; + + getEvent( + nameOrSignatureOrTopic: "CheckpointToken" | "Claimed" + ): EventFragment; + + encodeFunctionData(functionFragment: "WEEK", values?: undefined): string; + encodeFunctionData( + functionFragment: "checkpointToken", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "claim", values: [BigNumberish]): string; + encodeFunctionData( + functionFragment: "claimMany", + values: [BigNumberish[]] + ): string; + encodeFunctionData( + functionFragment: "claimable", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "lastTokenTime", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "minter", values?: undefined): string; + encodeFunctionData( + functionFragment: "setMinter", + values: [AddressLike] + ): string; + encodeFunctionData(functionFragment: "startTime", values?: undefined): string; + encodeFunctionData( + functionFragment: "timeCursorOf", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "tokenLastBalance", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "tokensPerWeek", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "ve", values?: undefined): string; + + decodeFunctionResult(functionFragment: "WEEK", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "checkpointToken", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "claim", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claimMany", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claimable", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "lastTokenTime", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "minter", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setMinter", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "startTime", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "timeCursorOf", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "tokenLastBalance", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "tokensPerWeek", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "ve", data: BytesLike): Result; +} + +export namespace CheckpointTokenEvent { + export type InputTuple = [time: BigNumberish, tokens: BigNumberish]; + export type OutputTuple = [time: bigint, tokens: bigint]; + export interface OutputObject { + time: bigint; + tokens: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace ClaimedEvent { + export type InputTuple = [ + tokenId: BigNumberish, + epochStart: BigNumberish, + epochEnd: BigNumberish, + amount: BigNumberish + ]; + export type OutputTuple = [ + tokenId: bigint, + epochStart: bigint, + epochEnd: bigint, + amount: bigint + ]; + export interface OutputObject { + tokenId: bigint; + epochStart: bigint; + epochEnd: bigint; + amount: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface RewardsDistributor extends BaseContract { + connect(runner?: ContractRunner | null): RewardsDistributor; + waitForDeployment(): Promise; + + interface: RewardsDistributorInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + WEEK: TypedContractMethod<[], [bigint], "view">; + + checkpointToken: TypedContractMethod<[], [void], "nonpayable">; + + claim: TypedContractMethod<[_tokenId: BigNumberish], [bigint], "nonpayable">; + + claimMany: TypedContractMethod< + [_tokenIds: BigNumberish[]], + [boolean], + "nonpayable" + >; + + claimable: TypedContractMethod<[_tokenId: BigNumberish], [bigint], "view">; + + lastTokenTime: TypedContractMethod<[], [bigint], "view">; + + minter: TypedContractMethod<[], [string], "view">; + + setMinter: TypedContractMethod<[_minter: AddressLike], [void], "nonpayable">; + + startTime: TypedContractMethod<[], [bigint], "view">; + + timeCursorOf: TypedContractMethod<[arg0: BigNumberish], [bigint], "view">; + + tokenLastBalance: TypedContractMethod<[], [bigint], "view">; + + tokensPerWeek: TypedContractMethod<[arg0: BigNumberish], [bigint], "view">; + + ve: TypedContractMethod<[], [string], "view">; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "WEEK" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "checkpointToken" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "claim" + ): TypedContractMethod<[_tokenId: BigNumberish], [bigint], "nonpayable">; + getFunction( + nameOrSignature: "claimMany" + ): TypedContractMethod<[_tokenIds: BigNumberish[]], [boolean], "nonpayable">; + getFunction( + nameOrSignature: "claimable" + ): TypedContractMethod<[_tokenId: BigNumberish], [bigint], "view">; + getFunction( + nameOrSignature: "lastTokenTime" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "minter" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "setMinter" + ): TypedContractMethod<[_minter: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "startTime" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "timeCursorOf" + ): TypedContractMethod<[arg0: BigNumberish], [bigint], "view">; + getFunction( + nameOrSignature: "tokenLastBalance" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "tokensPerWeek" + ): TypedContractMethod<[arg0: BigNumberish], [bigint], "view">; + getFunction(nameOrSignature: "ve"): TypedContractMethod<[], [string], "view">; + + getEvent( + key: "CheckpointToken" + ): TypedContractEvent< + CheckpointTokenEvent.InputTuple, + CheckpointTokenEvent.OutputTuple, + CheckpointTokenEvent.OutputObject + >; + getEvent( + key: "Claimed" + ): TypedContractEvent< + ClaimedEvent.InputTuple, + ClaimedEvent.OutputTuple, + ClaimedEvent.OutputObject + >; + + filters: { + "CheckpointToken(uint256,uint256)": TypedContractEvent< + CheckpointTokenEvent.InputTuple, + CheckpointTokenEvent.OutputTuple, + CheckpointTokenEvent.OutputObject + >; + CheckpointToken: TypedContractEvent< + CheckpointTokenEvent.InputTuple, + CheckpointTokenEvent.OutputTuple, + CheckpointTokenEvent.OutputObject + >; + + "Claimed(uint256,uint256,uint256,uint256)": TypedContractEvent< + ClaimedEvent.InputTuple, + ClaimedEvent.OutputTuple, + ClaimedEvent.OutputObject + >; + Claimed: TypedContractEvent< + ClaimedEvent.InputTuple, + ClaimedEvent.OutputTuple, + ClaimedEvent.OutputObject + >; + }; +} diff --git a/src/types/contracts/index.ts b/src/types/contracts/index.ts index 32e64a9..3e7782e 100644 --- a/src/types/contracts/index.ts +++ b/src/types/contracts/index.ts @@ -11,5 +11,6 @@ import type * as libraries from "./libraries"; export type { libraries }; export type { DAOForwarder } from "./DAOForwarder"; export type { MarshallGovernor } from "./MarshallGovernor"; +export type { RewardsDistributor } from "./RewardsDistributor"; export type { VeArtProxy } from "./VeArtProxy"; export type { VotingEscrow } from "./VotingEscrow"; diff --git a/src/types/contracts/interfaces/IMinter.ts b/src/types/contracts/interfaces/IMinter.ts new file mode 100644 index 0000000..55fd77a --- /dev/null +++ b/src/types/contracts/interfaces/IMinter.ts @@ -0,0 +1,365 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "../../common"; + +export interface IMinterInterface extends Interface { + getFunction( + nameOrSignature: + | "MAXIMUM_TAIL_RATE" + | "MAX_BPS" + | "MINIMUM_TAIL_RATE" + | "NUDGE" + | "TAIL_START" + | "WEEK" + | "WEEKLY_DECAY" + | "activePeriod" + | "calculateGrowth" + | "nudge" + | "proposals" + | "rewardsDistributor" + | "tailEmissionRate" + | "updatePeriod" + | "ve" + | "voter" + | "weekly" + ): FunctionFragment; + + getEvent(nameOrSignatureOrTopic: "Mint" | "Nudge"): EventFragment; + + encodeFunctionData( + functionFragment: "MAXIMUM_TAIL_RATE", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "MAX_BPS", values?: undefined): string; + encodeFunctionData( + functionFragment: "MINIMUM_TAIL_RATE", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "NUDGE", values?: undefined): string; + encodeFunctionData( + functionFragment: "TAIL_START", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "WEEK", values?: undefined): string; + encodeFunctionData( + functionFragment: "WEEKLY_DECAY", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "activePeriod", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "calculateGrowth", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "nudge", values?: undefined): string; + encodeFunctionData( + functionFragment: "proposals", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "rewardsDistributor", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "tailEmissionRate", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "updatePeriod", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "ve", values?: undefined): string; + encodeFunctionData(functionFragment: "voter", values?: undefined): string; + encodeFunctionData(functionFragment: "weekly", values?: undefined): string; + + decodeFunctionResult( + functionFragment: "MAXIMUM_TAIL_RATE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "MAX_BPS", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "MINIMUM_TAIL_RATE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "NUDGE", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "TAIL_START", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "WEEK", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "WEEKLY_DECAY", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "activePeriod", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "calculateGrowth", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nudge", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "rewardsDistributor", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "tailEmissionRate", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updatePeriod", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "ve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "voter", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "weekly", data: BytesLike): Result; +} + +export namespace MintEvent { + export type InputTuple = [ + _sender: AddressLike, + _weekly: BigNumberish, + _circulating_supply: BigNumberish, + _tail: boolean + ]; + export type OutputTuple = [ + _sender: string, + _weekly: bigint, + _circulating_supply: bigint, + _tail: boolean + ]; + export interface OutputObject { + _sender: string; + _weekly: bigint; + _circulating_supply: bigint; + _tail: boolean; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace NudgeEvent { + export type InputTuple = [ + _period: BigNumberish, + _oldRate: BigNumberish, + _newRate: BigNumberish + ]; + export type OutputTuple = [ + _period: bigint, + _oldRate: bigint, + _newRate: bigint + ]; + export interface OutputObject { + _period: bigint; + _oldRate: bigint; + _newRate: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface IMinter extends BaseContract { + connect(runner?: ContractRunner | null): IMinter; + waitForDeployment(): Promise; + + interface: IMinterInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + MAXIMUM_TAIL_RATE: TypedContractMethod<[], [bigint], "view">; + + MAX_BPS: TypedContractMethod<[], [bigint], "view">; + + MINIMUM_TAIL_RATE: TypedContractMethod<[], [bigint], "view">; + + NUDGE: TypedContractMethod<[], [bigint], "view">; + + TAIL_START: TypedContractMethod<[], [bigint], "view">; + + WEEK: TypedContractMethod<[], [bigint], "view">; + + WEEKLY_DECAY: TypedContractMethod<[], [bigint], "view">; + + activePeriod: TypedContractMethod<[], [bigint], "nonpayable">; + + calculateGrowth: TypedContractMethod< + [_minted: BigNumberish], + [bigint], + "view" + >; + + nudge: TypedContractMethod<[], [void], "nonpayable">; + + proposals: TypedContractMethod< + [_activePeriod: BigNumberish], + [boolean], + "view" + >; + + rewardsDistributor: TypedContractMethod<[], [string], "view">; + + tailEmissionRate: TypedContractMethod<[], [bigint], "view">; + + updatePeriod: TypedContractMethod<[], [bigint], "nonpayable">; + + ve: TypedContractMethod<[], [string], "view">; + + voter: TypedContractMethod<[], [string], "view">; + + weekly: TypedContractMethod<[], [bigint], "view">; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "MAXIMUM_TAIL_RATE" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "MAX_BPS" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "MINIMUM_TAIL_RATE" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "NUDGE" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "TAIL_START" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "WEEK" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "WEEKLY_DECAY" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "activePeriod" + ): TypedContractMethod<[], [bigint], "nonpayable">; + getFunction( + nameOrSignature: "calculateGrowth" + ): TypedContractMethod<[_minted: BigNumberish], [bigint], "view">; + getFunction( + nameOrSignature: "nudge" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "proposals" + ): TypedContractMethod<[_activePeriod: BigNumberish], [boolean], "view">; + getFunction( + nameOrSignature: "rewardsDistributor" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "tailEmissionRate" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "updatePeriod" + ): TypedContractMethod<[], [bigint], "nonpayable">; + getFunction(nameOrSignature: "ve"): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "voter" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "weekly" + ): TypedContractMethod<[], [bigint], "view">; + + getEvent( + key: "Mint" + ): TypedContractEvent< + MintEvent.InputTuple, + MintEvent.OutputTuple, + MintEvent.OutputObject + >; + getEvent( + key: "Nudge" + ): TypedContractEvent< + NudgeEvent.InputTuple, + NudgeEvent.OutputTuple, + NudgeEvent.OutputObject + >; + + filters: { + "Mint(address,uint256,uint256,bool)": TypedContractEvent< + MintEvent.InputTuple, + MintEvent.OutputTuple, + MintEvent.OutputObject + >; + Mint: TypedContractEvent< + MintEvent.InputTuple, + MintEvent.OutputTuple, + MintEvent.OutputObject + >; + + "Nudge(uint256,uint256,uint256)": TypedContractEvent< + NudgeEvent.InputTuple, + NudgeEvent.OutputTuple, + NudgeEvent.OutputObject + >; + Nudge: TypedContractEvent< + NudgeEvent.InputTuple, + NudgeEvent.OutputTuple, + NudgeEvent.OutputObject + >; + }; +} diff --git a/src/types/contracts/interfaces/IRewardsDistributor.ts b/src/types/contracts/interfaces/IRewardsDistributor.ts new file mode 100644 index 0000000..d84ea86 --- /dev/null +++ b/src/types/contracts/interfaces/IRewardsDistributor.ts @@ -0,0 +1,293 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "../../common"; + +export interface IRewardsDistributorInterface extends Interface { + getFunction( + nameOrSignature: + | "WEEK" + | "checkpointToken" + | "claim" + | "claimMany" + | "claimable" + | "lastTokenTime" + | "minter" + | "setMinter" + | "startTime" + | "timeCursorOf" + | "tokenLastBalance" + | "ve" + ): FunctionFragment; + + getEvent( + nameOrSignatureOrTopic: "CheckpointToken" | "Claimed" + ): EventFragment; + + encodeFunctionData(functionFragment: "WEEK", values?: undefined): string; + encodeFunctionData( + functionFragment: "checkpointToken", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "claim", values: [BigNumberish]): string; + encodeFunctionData( + functionFragment: "claimMany", + values: [BigNumberish[]] + ): string; + encodeFunctionData( + functionFragment: "claimable", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "lastTokenTime", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "minter", values?: undefined): string; + encodeFunctionData( + functionFragment: "setMinter", + values: [AddressLike] + ): string; + encodeFunctionData(functionFragment: "startTime", values?: undefined): string; + encodeFunctionData( + functionFragment: "timeCursorOf", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "tokenLastBalance", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "ve", values?: undefined): string; + + decodeFunctionResult(functionFragment: "WEEK", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "checkpointToken", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "claim", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claimMany", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claimable", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "lastTokenTime", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "minter", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setMinter", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "startTime", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "timeCursorOf", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "tokenLastBalance", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "ve", data: BytesLike): Result; +} + +export namespace CheckpointTokenEvent { + export type InputTuple = [time: BigNumberish, tokens: BigNumberish]; + export type OutputTuple = [time: bigint, tokens: bigint]; + export interface OutputObject { + time: bigint; + tokens: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace ClaimedEvent { + export type InputTuple = [ + tokenId: BigNumberish, + epochStart: BigNumberish, + epochEnd: BigNumberish, + amount: BigNumberish + ]; + export type OutputTuple = [ + tokenId: bigint, + epochStart: bigint, + epochEnd: bigint, + amount: bigint + ]; + export interface OutputObject { + tokenId: bigint; + epochStart: bigint; + epochEnd: bigint; + amount: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface IRewardsDistributor extends BaseContract { + connect(runner?: ContractRunner | null): IRewardsDistributor; + waitForDeployment(): Promise; + + interface: IRewardsDistributorInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + WEEK: TypedContractMethod<[], [bigint], "view">; + + checkpointToken: TypedContractMethod<[], [void], "nonpayable">; + + claim: TypedContractMethod<[tokenId: BigNumberish], [bigint], "nonpayable">; + + claimMany: TypedContractMethod< + [tokenIds: BigNumberish[]], + [boolean], + "nonpayable" + >; + + claimable: TypedContractMethod<[tokenId: BigNumberish], [bigint], "view">; + + lastTokenTime: TypedContractMethod<[], [bigint], "view">; + + minter: TypedContractMethod<[], [string], "view">; + + setMinter: TypedContractMethod<[_minter: AddressLike], [void], "nonpayable">; + + startTime: TypedContractMethod<[], [bigint], "view">; + + timeCursorOf: TypedContractMethod<[tokenId: BigNumberish], [bigint], "view">; + + tokenLastBalance: TypedContractMethod<[], [bigint], "view">; + + ve: TypedContractMethod<[], [string], "view">; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "WEEK" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "checkpointToken" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "claim" + ): TypedContractMethod<[tokenId: BigNumberish], [bigint], "nonpayable">; + getFunction( + nameOrSignature: "claimMany" + ): TypedContractMethod<[tokenIds: BigNumberish[]], [boolean], "nonpayable">; + getFunction( + nameOrSignature: "claimable" + ): TypedContractMethod<[tokenId: BigNumberish], [bigint], "view">; + getFunction( + nameOrSignature: "lastTokenTime" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "minter" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "setMinter" + ): TypedContractMethod<[_minter: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "startTime" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "timeCursorOf" + ): TypedContractMethod<[tokenId: BigNumberish], [bigint], "view">; + getFunction( + nameOrSignature: "tokenLastBalance" + ): TypedContractMethod<[], [bigint], "view">; + getFunction(nameOrSignature: "ve"): TypedContractMethod<[], [string], "view">; + + getEvent( + key: "CheckpointToken" + ): TypedContractEvent< + CheckpointTokenEvent.InputTuple, + CheckpointTokenEvent.OutputTuple, + CheckpointTokenEvent.OutputObject + >; + getEvent( + key: "Claimed" + ): TypedContractEvent< + ClaimedEvent.InputTuple, + ClaimedEvent.OutputTuple, + ClaimedEvent.OutputObject + >; + + filters: { + "CheckpointToken(uint256,uint256)": TypedContractEvent< + CheckpointTokenEvent.InputTuple, + CheckpointTokenEvent.OutputTuple, + CheckpointTokenEvent.OutputObject + >; + CheckpointToken: TypedContractEvent< + CheckpointTokenEvent.InputTuple, + CheckpointTokenEvent.OutputTuple, + CheckpointTokenEvent.OutputObject + >; + + "Claimed(uint256,uint256,uint256,uint256)": TypedContractEvent< + ClaimedEvent.InputTuple, + ClaimedEvent.OutputTuple, + ClaimedEvent.OutputObject + >; + Claimed: TypedContractEvent< + ClaimedEvent.InputTuple, + ClaimedEvent.OutputTuple, + ClaimedEvent.OutputObject + >; + }; +} diff --git a/src/types/contracts/interfaces/index.ts b/src/types/contracts/interfaces/index.ts index 31b4315..81d0733 100644 --- a/src/types/contracts/interfaces/index.ts +++ b/src/types/contracts/interfaces/index.ts @@ -1,6 +1,8 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +export type { IMinter } from "./IMinter"; +export type { IRewardsDistributor } from "./IRewardsDistributor"; export type { IVeArtProxy } from "./IVeArtProxy"; export type { IVoter } from "./IVoter"; export type { IVotingEscrow } from "./IVotingEscrow"; diff --git a/src/types/factories/contracts/RewardsDistributor__factory.ts b/src/types/factories/contracts/RewardsDistributor__factory.ts new file mode 100644 index 0000000..3a04e6f --- /dev/null +++ b/src/types/factories/contracts/RewardsDistributor__factory.ts @@ -0,0 +1,345 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { + Signer, + AddressLike, + ContractDeployTransaction, + ContractRunner, +} from "ethers"; +import type { NonPayableOverrides } from "../../common"; +import type { + RewardsDistributor, + RewardsDistributorInterface, +} from "../../contracts/RewardsDistributor"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_ve", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "NotManagedOrNormalNFT", + type: "error", + }, + { + inputs: [], + name: "NotMinter", + type: "error", + }, + { + inputs: [], + name: "UpdatePeriod", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "time", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "tokens", + type: "uint256", + }, + ], + name: "CheckpointToken", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + indexed: true, + internalType: "uint256", + name: "epochStart", + type: "uint256", + }, + { + indexed: true, + internalType: "uint256", + name: "epochEnd", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "Claimed", + type: "event", + }, + { + inputs: [], + name: "WEEK", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "checkpointToken", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_tokenId", + type: "uint256", + }, + ], + name: "claim", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256[]", + name: "_tokenIds", + type: "uint256[]", + }, + ], + name: "claimMany", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_tokenId", + type: "uint256", + }, + ], + name: "claimable", + outputs: [ + { + internalType: "uint256", + name: "claimable_", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "lastTokenTime", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "minter", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_minter", + type: "address", + }, + ], + name: "setMinter", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "startTime", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "timeCursorOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "tokenLastBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "tokensPerWeek", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ve", + outputs: [ + { + internalType: "contract IVotingEscrow", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a0346100ea57601f61123c38819003918201601f19168301916001600160401b038311848410176100ef578084926020946040528339810103126100ea57516001600160a01b038116908190036100ea5762093a808042048181029181830414901517156100d457600081905560025560805266038d7ea4c6800380546001600160a01b031916331790556040516111369081610106823960805181818161055a015281816105d60152818161068b015281816106e701528181610761015281816109a201528181610ba10152610cce0152f35b634e487b7160e01b600052601160045260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b60003560e01c9081630754617214610bc5575080631f85071614610b81578063379607f5146108e75780634607bf60146108bb57806378e979251461089d578063899519be1461086b5780638ec8468a14610847578063925489a8146103e8578063939ea66b146103ca578063bee5dc321461019d578063d1d58b2514610145578063f4359ce5146101275763fca3b5aa146100ae57600080fd5b34610122576020366003190112610122576004356001600160a01b03908181168091036101225766038d7ea4c680039182549081163303610110577fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b604051633e34a41b60e21b8152600490fd5b600080fd5b3461012257600036600319011261012257602060405162093a808152f35b346101225760203660031901126101225762093a8080600254048181029181830414901517156101875761017d602091600435610ca5565b5050604051908152f35b634e487b7160e01b600052601160045260246000fd5b34610122576000366003190112610122576001600160a01b0366038d7ea4c6800354163303610110574766038d7ea4c68004906101db825482610bef565b91556002546101ea8142610bef565b904260025562093a80918282048381029080820485149015171561018757926000905b60148210610248575b7fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d66040878151904282526020820152a1005b808501908186116101875781421060001461034157505050801580610338575b156102d357505066038d7ea4c680008110156102bd577fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d6916040916003016102b1828254610c3e565b90555b91838080610216565b634e487b7160e01b600052603260045260246000fd5b6102e96102e36102ee9342610bef565b85610c1c565b610bfc565b9166038d7ea4c680008210156102bd577fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d692610331604093600301918254610c3e565b90556102b4565b50814214610268565b91949093838015806103c1575b1561038557505066038d7ea4c680008110156102bd57600301610372868254610c3e565b90555b61037f8394610c2f565b9061020d565b6102e961039561039b9388610bef565b89610c1c565b9066038d7ea4c680008110156102bd576103ba90600301918254610c3e565b9055610375565b5081861461034e565b34610122576000366003190112610122576020600254604051908152f35b346101225760203660031901126101225767ffffffffffffffff806004351161012257366023600435011215610122576004356004013511610122573660246004356004013560051b60043501011161012257600060206001600160a01b0366038d7ea4c680035416600460405180948193630a441f7b60e01b83525af190811561063c57600091610815575b5062093a8090814204908282029180830484149015171561018757106108035780600254049081818102048114821517156101875760009160005b6004356004013581106104ed575b505050806104d2575b602060405160018152f35b6104e566038d7ea4c68004918254610bef565b9055806104c7565b60248160051b600435010135156107fe5761051583830260248360051b6004350101356110d0565b8061052a575b5061052590610c2f565b6104b0565b9093604051635a2d1e0760e11b815260248660051b60043501013560048201526060816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561063c576000916107cf575b50602081015142101590816107c2575b508015610732575b15610681576040516331a9108f60e11b815260248660051b60043501013560048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa801561063c576000808581949382948391610652575b5082908215610648575b6001600160a01b031690f11561063c576105259161063591610c3e565b939061051b565b6040513d6000823e3d90fd5b6108fc9150610618565b610674915060203d60201161067a575b61066c8183610c75565b8101906110b1565b8b61060e565b503d610662565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15610122576040519163076426ed60e11b835260248660051b6004350101356004840152806024840152600083604481846001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af191821561063c576105259361063593610723575b50610c3e565b61072c90610c4b565b8761071d565b5060405163bb941cff60e01b815260248660051b60043501013560048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa801561063c576001600160a01b03916000916107a3575b501615156105a3565b6107bc915060203d60201161067a5761066c8183610c75565b8761079a565b604091500151158661059b565b6107f1915060603d6060116107f7575b6107e98183610c75565b81019061105d565b8661058b565b503d6107df565b6104be565b60405163465a1c3560e01b8152600490fd5b90506020813d60201161083f575b8161083060209383610c75565b81010312610122575181610475565b3d9150610823565b3461012257600036600319011261012257602066038d7ea4c6800454604051908152f35b346101225760203660031901126101225760043566038d7ea4c680008110156101225760209060030154604051908152f35b34610122576000366003190112610122576020600054604051908152f35b346101225760203660031901126101225760043560005260016020526020604060002054604051908152f35b3461012257602080600319360112610122576004356001600160a01b03906000838366038d7ea4c680035416600460405180948193630a441f7b60e01b83525af190811561063c57600091610b54575b5062093a8090814204908282029180830484149015171561018757106108035780600254048181029181830414901517156101875761097690826110d0565b91821590811561098c575b505050604051908152f35b604051635a2d1e0760e11b8152600481018490527f0000000000000000000000000000000000000000000000000000000000000000821693606082602481885afa801561063c578792600091610b36575b50828101514210159081610b29575b508015610ad1575b15610a80576024604051809681936331a9108f60e11b835260048301525afa801561063c5760009384938493849388938591610a63575b508492610a59575b1690f11561063c575b66038d7ea4c68004610a4f828254610bef565b9055828080610981565b6108fc9250610a33565b610a7a91508a3d8c1161067a5761066c8183610c75565b8a610a2b565b92505050813b156101225782916044600092604051948593849263076426ed60e11b845260048401528160248401525af1801561063c57610ac2575b50610a3c565b610acb90610c4b565b82610abc565b5060405163bb941cff60e01b81526004810182905291508682602481885afa91821561063c5787928491600091610b0c575b501615156109f4565b610b239150843d861161067a5761066c8183610c75565b89610b03565b60409150015115886109ec565b610b4e915060603d81116107f7576107e98183610c75565b886109dd565b90508381813d8311610b7a575b610b6b8183610c75565b81010312610122575184610937565b503d610b61565b346101225760003660031901126101225760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610122576000366003190112610122576020906001600160a01b0366038d7ea4c6800354168152f35b9190820391821161018757565b8115610c06570490565b634e487b7160e01b600052601260045260246000fd5b8181029291811591840414171561018757565b60001981146101875760010190565b9190820180921161018757565b67ffffffffffffffff8111610c5f57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610c5f57604052565b519081600f0b820361012257565b600092600091825490808452600191602091838352604096878720549687986001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681519363e58f594760e01b8552600496868887015260249589818881875afa908115611053578691611022575b501561100f578b15610ef8575b818c1015610eea57808c10610ee2575b5090839291899897969594995b610d56575b50505050505050505050565b9091929394959697989a9c6032808d1015610eda57828f1015610eda5762093a808f019e8f8111610ec8578f9062093a7f8101918211610eb657865191637028a55d60e11b83528a8c840152808a8401528c836044818a5afa928315610e7d578993610e87575b50875190630981b24d60e41b82528c8201528c818b818a5afa908115610e7d578991610e4c575b5080610e4657508c925b66038d7ea4c68000821015610e36575092610e1d610e2a936102e98f9998979694610e23956003015490610c1c565b90610c3e565b9e9c610c2f565b99989796959493610d45565b634e487b7160e01b89528b528888fd5b92610dee565b90508c81813d8311610e76575b610e638183610c75565b81010312610e72575138610de4565b8880fd5b503d610e59565b88513d8b823e3d90fd5b9092508c81813d8311610eaf575b610e9f8183610c75565b81010312610e7257519138610dbd565b503d610e95565b634e487b7160e01b885260118b528888fd5b634e487b7160e01b875260118a528787fd5b509c9a610d4a565b9a5088610d38565b50929b505050505050505050565b9b509091809a50516322565a1560e11b81528587820152888582015260a081604481865afa90811561100557908b9392918591610f65575b5062093a809b8c910151048b81029b818d041490151715610f52578a9b610d28565b5050634e487b7160e01b82525060118452fd5b919293505060a0813d8211610ffd575b81610f8260a09383610c75565b81010312610ff9578a519060a0820182811067ffffffffffffffff821117610fe7578c949392916080918652610fb781610c97565b8352610fc48b8201610c97565b8b8401528581015186840152606081015160608401520151608082015238610f30565b634e487b7160e01b8652604189528686fd5b8380fd5b3d9150610f75565b8b513d86823e3d90fd5b5050505096975050505050509250918190565b90508981813d831161104c575b6110398183610c75565b81010312611048575138610d1b565b8580fd5b503d61102f565b85513d88823e3d90fd5b908160609103126101225760405190606082019082821067ffffffffffffffff831117610c5f57604091825261109281610c97565b8352602081015160208401520151801515810361012257604082015290565b9081602091031261012257516001600160a01b03811681036101225790565b906110db9082610ca5565b9192806000526001602052826040600020558315611120577fcae2990aa9af8eb1c64713b7eddb3a80bf18e49a94a13fe0d0002b5d61d58f006020604051868152a490565b5050505060009056fea164736f6c6343000813000a"; + +type RewardsDistributorConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: RewardsDistributorConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class RewardsDistributor__factory extends ContractFactory { + constructor(...args: RewardsDistributorConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + _ve: AddressLike, + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction(_ve, overrides || {}); + } + override deploy( + _ve: AddressLike, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(_ve, overrides || {}) as Promise< + RewardsDistributor & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect(runner: ContractRunner | null): RewardsDistributor__factory { + return super.connect(runner) as RewardsDistributor__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): RewardsDistributorInterface { + return new Interface(_abi) as RewardsDistributorInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): RewardsDistributor { + return new Contract(address, _abi, runner) as unknown as RewardsDistributor; + } +} diff --git a/src/types/factories/contracts/VotingEscrow__factory.ts b/src/types/factories/contracts/VotingEscrow__factory.ts index 5244dd7..75a2e5d 100644 --- a/src/types/factories/contracts/VotingEscrow__factory.ts +++ b/src/types/factories/contracts/VotingEscrow__factory.ts @@ -2116,7 +2116,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c0346200019057601f6200526a38819003918201601f191683019291906001600160401b0384118385101762000195578160209284926040968752833981010312620001905751906001600160a01b03808316830362000190578260805260019060009382855560a0528380528160205242838520558062000081620001ab565b169060018060a01b0319918260045416176004556200009f620001ab565b6003805490931691161790558280526007602090815282842043600282015542908301556301ffc9a760e01b845260089052818320805460ff1990811683179091556380ac58cd60e01b84528284208054821683179055635b5e139f60e01b84528284208054821683179055632483248360e11b8452828420805482168317905563da287a1d60e01b8452828420805490911690911790556009549051917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef823083838180a430908280a4615069908162000201823960805181818161194d01526131b7015260a051816131520152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b6080516001600160a01b0316331480620001f4575b15620001f0576013193601368111620001da573560601c90565b634e487b7160e01b600052601160045260246000fd5b3390565b506014361015620001c056fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a714610492578063047fc9aa1461048d57806306fdde0314610488578063081812fc14610483578063095cf5c61461047e578063095ea7b3146104795780630ec84dda1461047457806317d70f7c1461046f57806318160ddd1461046a57806320606b701461046557806323b872dd146104605780632818d8851461045b5780632d0485ec146104565780632e1a7d4d146104515780632e720f7d1461044c578063313ce5671461044757806333230dc01461044257806335b0f6bd1461043d5780633d085a371461043857806342842e0e14610433578063430c20811461042e57806344acb42a1461042957806346c96aac146104245780634b19becc1461041f5780634bf5d7e91461041a5780634d01cb66146104155780634d03c048146104105780634d6fb7751461040b578063505897931461040657806354fd4d50146104015780635594a045146103fc578063572b6c05146103f75780635a4f459a146103f25780635fa7b584146103ed5780636352211e146103e8578063650e1505146103e35780636837f96e146103de5780636d46a1db146103d957806370a08231146103d45780637ecebe00146103cf578063834b0b69146103ca57806385f2aef2146103c55780638ad4c447146103c05780638bf9d84c146103bb5780638e539e8c146103a25780638fbb38ff146103b6578063900cf0cf146103b157806391ddadf4146103ac57806395d89b41146103a7578063981b24d0146103a25780639d507b8b1461039d578063a22cb46514610398578063b1548afc14610393578063b2383e551461038e578063b45a3c0e14610389578063b88d4fde14610384578063bb941cff1461037f578063bfe109281461037a578063c2c4c5c114610375578063c87b56dd14610370578063d1c2babb1461036b578063d938ebf914610366578063d9a3495214610361578063e0514aba1461035c578063e58f594714610357578063e75b1c2e14610352578063e7a324dc1461034d578063e7e242d414610348578063e985e9c514610343578063f04cb3a81461033e578063f52a36f7146103395763f645d4f91461033457600080fd5b613132565b613103565b613034565b612fd2565b612fb4565b612f79565b612dfd565b612dd1565b612db0565b612d7e565b612c8d565b612925565b612858565b6124eb565b6124c4565b61248f565b612406565b612392565b612233565b612207565b612157565b611fe8565b611efa565b611f8a565b611f67565b611f49565b611f18565b611eb2565b611e7e565b611e57565b611c02565b611bc8565b611b8e565b611b54565b611ac0565b611a9b565b611a66565b6119d2565b611974565b611923565b6118fc565b6118e0565b611873565b6117c2565b611747565b611729565b6116cb565b61137c565b611355565b6112d8565b6112a7565b61126d565b61122e565b6110ab565b611045565b61101f565b610fa1565b610d4b565b610cd3565b610b89565b610b67565b610af7565b610ad3565b610ab5565b610927565b6107ca565b610755565b6106f4565b6106c0565b610514565b6104c6565b7fffffffff000000000000000000000000000000000000000000000000000000008116036104c157565b600080fd5b346104c15760203660031901126104c1576004356104e381610497565b63ffffffff60e01b166000526008602052602060ff604060002054166040519015158152f35b60009103126104c157565b346104c15760003660031901126104c1576020601254604051908152f35b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761056457604052565b610532565b6080810190811067ffffffffffffffff82111761056457604052565b60a0810190811067ffffffffffffffff82111761056457604052565b67ffffffffffffffff811161056457604052565b6040810190811067ffffffffffffffff82111761056457604052565b90601f8019910116810190811067ffffffffffffffff82111761056457604052565b6040519061060082610548565b565b6040519061060082610585565b67ffffffffffffffff811161056457601f01601f191660200190565b60405190610638826105b5565b601282527f4d61727368616c6c2044414f2076654e465400000000000000000000000000006020830152565b60005b8381106106775750506000910152565b8181015183820152602001610667565b906020916106a081518092818552858086019101610664565b601f01601f1916010190565b9060206106bd928181520190610687565b90565b346104c15760003660031901126104c1576106f06106dc61062b565b604051918291602083526020830190610687565b0390f35b346104c15760203660031901126104c157600435600052600c60205260206001600160a01b0360406000205416604051908152f35b600435906001600160a01b03821682036104c157565b602435906001600160a01b03821682036104c157565b346104c15760203660031901126104c15761076e610729565b6107766131ad565b600454916001600160a01b0391828085169116036107b857169081156107a6576001600160a01b03191617600455005b60405163d92e233d60e01b8152600490fd5b604051633a7cfa5d60e21b8152600490fd5b346104c15760403660031901126104c1576107e3610729565b602435906107ef6131ad565b9061081461080784600052600a602052604060002090565b546001600160a01b031690565b906001600160a01b03928383169283156107a65784831694858514610915578061088e6108878561086f6108556108078d600052600a602052604060002090565b966001600160a01b0316600052600d602052604060002090565b906001600160a01b0316600052602052604060002090565b5460ff1690565b931691161415908161090c575b506108fa576108d3906108b885600052600c602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60405163390cdd9b60e21b8152600490fd5b9050153861089b565b60405163367558c360e01b8152600490fd5b6040806003193601126104c1576004359060243561094361385e565b61095f61095a846000526013602052604060002090565b613796565b9061099361097a610807866000526014602052604060002090565b6001600160a01b03166000526001602052604060002090565b5415610aa4578015610a935760006109ac8351600f0b90565b600f0b1315610a8257602082015142101580610a69575b610a585791610a2782610a35946109fe847ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce798960151151590565b610a3f575b610a2181610a1b87600052601b602052604060002090565b54614dc7565b84614567565b519081529081906020820190565b0390a16001600055005b610a53610a4e8260195461357b565b601955565b610a03565b82516307b7d7dd60e51b8152600490fd5b50610a7d610a7984840151151590565b1590565b6109c3565b825163f90e998d60e01b8152600490fd5b8251631f2a200560e01b8152600490fd5b825163c1ab6dc160e01b8152600490fd5b346104c15760003660031901126104c1576020600954604051908152f35b346104c15760003660031901126104c1576020610aef42614c70565b604051908152f35b346104c15760003660031901126104c15760206040517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8668152f35b60609060031901126104c1576001600160a01b039060043582811681036104c1579160243590811681036104c1579060443590565b346104c157610b87610b7836610b32565b90610b816131ad565b926132ed565b005b346104c15760203660031901126104c157610ba2610729565b610baa6131ad565b90610bcc610bc06004546001600160a01b031690565b6001600160a01b031690565b6001600160a01b03809316036107b857610bf9816001600160a01b03166000526006602052604060002090565b5415610cc157610c25610c1f826001600160a01b03166000526006602052604060002090565b5461354c565b4210610caf57610c48816001600160a01b03166000526006602052604060002090565b54610c66826001600160a01b03166000526001602052604060002090565b556000610c86826001600160a01b03166000526006602052604060002090565b55167fc1ebeeae6519aa11b0c58d4f0ced8b3685c5a64f82b7b1f40bb37e39f5f02f35600080a2005b60405163514f220f60e01b8152600490fd5b60405163224a1b1160e11b8152600490fd5b346104c15760403660031901126104c157610cec610729565b610cf461073f565b90610cfd6131ad565b916003546001600160a01b039384808316911603610d395783926001600160a01b03199485911691161760035516906002541617600255600080f35b60405163c18384c160e01b8152600490fd5b346104c15760203660031901126104c157600435610d6761385e565b610d6f6131ad565b90610d7d610a798284613271565b6108fa57610d9861088782600052601a602052604060002090565b610f8f57610db361095a826000526013602052604060002090565b604090610dc282820151151590565b610f7e5760208101514210610f6d57610de4610ddf8251600f0b90565b614ffd565b93610dee84614a34565b610df66105f3565b94610e246000968781528760208201528786820152610e1f876000526013602052604060002090565b614249565b610e5a60125493610e3d610e3884876131a0565b601255565b610e456105f3565b90888252886020830152888783015287613a72565b6001600160a01b039081610e7b610807886000526014602052604060002090565b1680610f2457508680828015610f1a575b82809291819287891690f115610f155760008051602061503d83398151915295610f05937f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94610eee945b8851858152426020820152921691604090a3836131a0565b925191825260208201929092529081906040820190565b0390a1610f126001600055565b80f35b613265565b6108fc9150610e8c565b95837f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94610eee94610f6885610f059860008051602061503d8339815191529c6149ff565b610ed6565b815163342ad40160e11b8152600490fd5b81516334d10f9560e11b8152600490fd5b604051637c9a1cf960e01b8152600490fd5b346104c15760203660031901126104c157610fba610729565b610fc26131ad565b906001600160a01b03918280600454169116036107b857166001600160a01b031960055416176005557f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c60408051600081526000196020820152a1005b346104c15760003660031901126104c157602060405160128152f35b801515036104c157565b346104c15760403660031901126104c15761105e610729565b60243561106a8161103b565b6110726131ad565b6001600160a01b03908180600454169116036107b857610b879216600052601860205260406000209060ff801983541691151516179055565b346104c15760203660031901126104c1576004356110c76131ad565b6110d4610a798383613271565b6108fa576110ef61088783600052601a602052604060002090565b610f8f5761110a61095a836000526013602052604060002090565b91604083019261111d610a798551151590565b61121c577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7937f668d293c0a181c1f163fd0d3c757239a9c17bd26c5e483150e374455433b27fa6001600160a01b03611217956111f6856000611185610ddf8a9951600f0b90565b96611195610a4e896019546131a0565b6111b26111ad6111a44261355c565b62093a80900490565b6138cb565b6020840152526111c187614e32565b6111e2816111dc61095a8a6000526013602052604060002090565b89613a72565b610e1f876000526013602052604060002090565b60408051948552426020860152911692a36040519081529081906020820190565b0390a1005b604051632188f8ab60e01b8152600490fd5b346104c15760203660031901126104c1576001600160a01b0361124f610729565b166000526018602052602060ff604060002054166040519015158152f35b346104c15761127b36610b32565b60405191602083019383851067ffffffffffffffff86111761056457610b87946040526000845261342e565b346104c15760403660031901126104c15760206112ce6112c5610729565b60243590613271565b6040519015158152f35b346104c15760403660031901126104c1576112f16137c6565b50600435600052601560205260a061131861131260243560406000206137f1565b5061381e565b6113536040518092608080918051600f0b84526020810151600f0b602085015260408101516040850152606081015160608501520151910152565bf35b346104c15760003660031901126104c15760206001600160a01b0360035416604051908152f35b346104c1576040806003193601126104c157600490813561139b61385e565b6113a36131ad565b906113bb61080782600052600a602052604060002090565b906001600160a01b038216156116bb576113ee610a79610887846001600160a01b03166000526018602052604060002090565b80611680575b6116705761140f61088782600052601a602052604060002090565b61166057611420610a798285613271565b6116505761143b61095a826000526013602052604060002090565b94602086019081514210158061163b575b61162d5761145b602435614fc5565b9081600f0b801561161e5761147a6114748a51600f0b90565b600f0b90565b1315611610576115ed886106f0898989897f8303de8187a6102fdc3fe20c756dddd68df0ae027b77e2391c19a855e0821f338a8a6114b784614a34565b6115076114c26105f3565b6114ea600091828152826020820152828b820152610e1f886000526013602052604060002090565b6114f26105f3565b90808252806020830152898201528a86613a72565b61152561151e826115198c51600f0b90565b61393d565b600f0b8a52565b61156f6115328a87614b2e565b998a9661156361154f610807896000526014602052604060002090565b6108b88a6000526014602052604060002090565b600f84900b8252614b2e565b998a9661158c61154f610807886000526014602052604060002090565b6115b66115b0610ddf6115a98a6000526013602052604060002090565b54600f0b90565b93614ffd565b93518951948594429386919260809396959491966001600160a01b0360a08501981684526020840152604083015260608201520152565b0390a46115fa6001600055565b5191825260208201929092529081906040820190565b8651636b2f218360e01b8152fd5b508651631f2a200560e01b8152fd5b85516307b7d7dd60e51b8152fd5b5061164b610a7987890151151590565b61144c565b5050505163390cdd9b60e21b8152fd5b50505051637c9a1cf960e01b8152fd5b50505051633df16fd960e21b8152fd5b506000805260186020526116b6610a797f999d26de3473317ead3eeaf34ca78057f1439db67b6953469c3c96ce9caf6bd7610887565b6113f4565b50505051632c2151ef60e11b8152fd5b346104c15760003660031901126104c1576106f06040516116eb816105b5565b600e81527f6d6f64653d74696d657374616d700000000000000000000000000000000000006020820152604051918291602083526020830190610687565b346104c15760003660031901126104c1576020601954604051908152f35b60803660031901126104c15761175b610729565b606435906001600160a01b03821682036104c15760209161178b9161177e61385e565b6044359060243590614104565b6001600055604051908152f35b60609060031901126104c1576004356001600160a01b03811681036104c157906024359060443590565b346104c1576117d036611798565b906001600160a01b03604051936332b53f5360e11b8552601d6004860152601c60248601521660448401526064830152608482015260208160a48173__$d6f092accc63e0bf8f1744f29529542834$__5af48015610f15576106f091600091611845575b506040519081529081906020820190565b611866915060203d811161186c575b61185e81836105d1565b810190614bf3565b38611834565b503d611854565b346104c15760203660031901126104c157600435600052601d602052602065ffffffffffff60406000205416604051908152f35b604051906118b4826105b5565b600582527f322e302e300000000000000000000000000000000000000000000000000000006020830152565b346104c15760003660031901126104c1576106f06106dc6118a7565b346104c15760003660031901126104c15760206001600160a01b0360055416604051908152f35b346104c15760203660031901126104c157602061193e610729565b604051906001600160a01b03807f0000000000000000000000000000000000000000000000000000000000000000169116148152f35b346104c15760403660031901126104c1576024356119918161103b565b6119996131ad565b6001600160a01b038060035416911603610d3957610b8790600435600052601a60205260406000209060ff801983541691151516179055565b346104c15760203660031901126104c1576119eb610729565b6119f36131ad565b6001600160a01b03908180600454169116036107b85781166000918183526001602052604083205415610cc157611a3e83916001600160a01b03166000526001602052604060002090565b557f4c910b69fe65a61f7531b9c5042b2329ca7179c77290aa7e2eb3afa3c8511fd38280a280f35b346104c15760203660031901126104c157600435600052600a60205260206001600160a01b0360406000205416604051908152f35b602061178b611aa936611798565b90611ab261385e565b611aba6131ad565b92614104565b346104c15760203660031901126104c157611ad9610729565b611ae16131ad565b6001600160a01b03908180600454169116036107b85781166000918183526006602052604083205415610cc157611b2c83916001600160a01b03166000526006602052604060002090565b557f7a97490440826fccf62ae2502464143548d7bc46e1c207bad4d0e5c799d54d828280a280f35b346104c15760203660031901126104c1576001600160a01b03611b75610729565b1660005260016020526020604060002054604051908152f35b346104c15760203660031901126104c1576001600160a01b03611baf610729565b16600052600b6020526020604060002054604051908152f35b346104c15760203660031901126104c1576001600160a01b03611be9610729565b16600052601e6020526020604060002054604051908152f35b346104c15760e03660031901126104c1576004608435602435823560443560643560ff851685036104c15760c435917f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311611e4657611c6061062b565b805160208092012093611c716118a7565b805190830120604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818601908152602081019890985287820192909252466060880152306080880152958160a082010391601f19928381018252611cd890826105d1565b51902086517f9947d5709c1682eaa3946b2d84115c9c0d1c946b149d76e69b457458b42ea29e858201908152602081018a9052604081018b90526060810187905260808101889052908060a08301038481018252611d3690826105d1565b519020875161190160f01b8682019081526002810193909352602283019190915290918160428401039081018252611d6e90826105d1565b519020855190815260ff98909816602089015260a4356040890152606088015260008080529687906080905a600190fa15610f15578551611db2610a798683613271565b611e36576001600160a01b03811615611e2657611de2906001600160a01b0316600052601e602052604060002090565b90815491611def8361392e565b905503611e16574211611e07575090610f1291614f27565b51630819bdcd60e01b81528490fd5b8151633ab3447f60e11b81528690fd5b8351638baa579f60e01b81528890fd5b835163390cdd9b60e21b81528890fd5b6040516317e97eb760e31b81528790fd5b346104c15760003660031901126104c15760206001600160a01b0360045416604051908152f35b346104c15760203660031901126104c157611e976137c6565b50600435600052600760205260a0611318604060002061381e565b346104c15760403660031901126104c1576001600160a01b03611ed3610729565b16600052600f60205260406000206024356000526020526020604060002054604051908152f35b346104c15760203660031901126104c1576020610aef600435614c70565b346104c15760203660031901126104c157600435600052601a602052602060ff604060002054166040519015158152f35b346104c15760003660031901126104c1576020601154604051908152f35b346104c15760003660031901126104c157602060405165ffffffffffff42168152f35b346104c15760003660031901126104c1576106f0604051611faa816105b5565b600581527f76654e46540000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610687565b346104c1576040806003193601126104c15760049081359161200861385e565b61201c610a79846120176131ad565b613271565b6121495761203a61097a610807856000526014602052604060002090565b541561213b5761205761095a846000526013602052604060002090565b9061206483830151151590565b61212d5761207a6111ad6111a46024354261357b565b9060208301428151111561211e5760006120958551600f0b90565b600f0b131561210f5751821115612101576120af4261355c565b82116120f3577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce76120e68686610a27878784614297565b0390a1610b876001600055565b835163f761f1cd60e01b8152fd5b8351638e6b5b6760e01b8152fd5b50835163f90e998d60e01b8152fd5b5083516307b7d7dd60e51b8152fd5b82516334d10f9560e11b8152fd5b905163c1ab6dc160e01b8152fd5b905163390cdd9b60e21b8152fd5b346104c15760403660031901126104c157612170610729565b60243561217c8161103b565b6001600160a01b03908161218e6131ad565b169183169282841461091557816121fc7f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31936121eb60209487600052600d86526040600020906001600160a01b0316600052602052604060002090565b9060ff801983541691151516179055565b6040519015158152a3005b346104c15760203660031901126104c157600435600052601b6020526020604060002054604051908152f35b6040806003193601126104c15760049081359160243561225161385e565b61225d846120176131ad565b156123835761227961095a856000526013602052604060002090565b9161229461097a610807876000526014602052604060002090565b54156123755781156123675760006122ad8451600f0b90565b600f0b131561235957602083015142101580612344575b612336577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7610a358686610a2787876122ff84830151151590565b612322575b61231c81610a1b87600052601b602052604060002090565b846146fd565b612331610a4e8260195461357b565b612304565b83516307b7d7dd60e51b8152fd5b50612354610a7985850151151590565b6122c4565b835163f90e998d60e01b8152fd5b8351631f2a200560e01b8152fd5b835163c1ab6dc160e01b8152fd5b50905163390cdd9b60e21b8152fd5b346104c15760203660031901126104c1576123ab613777565b506004356000526013602052606060406000206040516123ca81610548565b8154600f0b91828252604060ff600260018401549360208601948552015416920191151582526040519283525160208301525115156040820152f35b346104c15760803660031901126104c15761241f610729565b61242761073f565b6064359167ffffffffffffffff83116104c157366023840112156104c1578260040135916124548361060f565b9261246260405194856105d1565b80845236602482870101116104c1576020816000926024610b87980183880137850101526044359161342e565b346104c15760203660031901126104c157600435600052601460205260206001600160a01b0360406000205416604051908152f35b346104c15760003660031901126104c15760206001600160a01b0360025416604051908152f35b346104c1576000806003193601126128555761250561385e565b60408181805161251481610548565b82815282602082015201528181805161252c81610548565b828152826020820152015261253f6137c6565b506125486137c6565b5060115490612555610602565b83815283602082015242828201524360608201528360808201529082612831575b80820190815190856125898551600f0b90565b602086018051600f0b94606088019560808751966125c4828c0151936125ba6125b0610602565b988990600f0b9052565b600f0b6020880152565b850194838652606081019788520152839087514211612802575b939192906125f462093a808699989799046138cb565b9783985b60ff8a10612673575b5050505050505050505060018214158061265b575b156126465761263a61262a61263f9361318c565b6000526007602052604060002090565b6139de565b6001815580f35b61263a8261262a61265694601155565b61263f565b5042600161266b61262a8561318c565b015414612616565b6126878b919c939495969798999a9c61354c565b978689428111156127c457508899509795969742996126f3936126db6126d18d6126cb6126c66126ec986126c06126e2985b51600f0b90565b936131a0565b614fc5565b906138b4565b8251600f0b61393d565b600f0b9052565b8651600f0b6139a6565b600f0b8552565b856127026114748c51600f0b90565b126127bc575b856127176114748651600f0b90565b126127b4575b61275d8792888b52612756835161275061274261273c8d8c51906131a0565b896138fb565b670de0b6b3a7640000900490565b9061357b565b8a5261356d565b9a8a8c428a036127855750505050505050505050905043905238808080808781808080612601565b6127a6929161263a6127a1926000526007602052604060002090565b61392e565b9897969593949291956125f8565b85845261271d565b858a52612708565b8997989991506126f3936126db6126d18d6126cb6126c66126ec986126c06127fc6115a96126e29a6000526017602052604060002090565b996126b9565b905061282b61281a6128158851436131a0565b6138e3565b6128258951426131a0565b9061390e565b906125de565b905061284f61284a836000526007602052604060002090565b61381e565b90612576565b80fd5b346104c15760203660031901126104c1576004356001600160a01b0361288b61080783600052600a602052604060002090565b16156129135760006128cf916128af610bc0610bc06005546001600160a01b031690565b604051808095819463c87b56dd60e01b8352600483019190602083019252565b03915afa8015610f15576106f0916000916128f2575b50604051918291826106ac565b61290d913d8091833e61290581836105d1565b810190613206565b386128e5565b604051634a1850bf60e11b8152600490fd5b346104c1576040806003193601126104c15760048035916024359061294861385e565b6129506131ad565b9361296861088782600052601a602052604060002090565b612c7d57828114612c6d5761298a610807826000526014602052604060002090565b6129a4610bc0610807866000526014602052604060002090565b6001600160a01b0380921603612c5d576129c1610a798388613271565b612c4d576129d2610a798588613271565b612c4d576129ed61095a856000526013602052604060002090565b90602096878301805142101580612c38575b612c2857612a1a61095a866000526013602052604060002090565b97612a27878a0151151590565b612c1a57509186949391858a94858b0151905180821015600014612c125750935b612a5187614a34565b612a596105f3565b600081528681016000905289810160009052612a7f886000526013602052604060002090565b90612a8991614249565b612a916105f3565b60008082528782018190528a820152612aab908c89613a72565b612ab3613777565b80958251612ac190600f0b90565b8d51600f0b612acf916139a6565b600f0b8252828b015115151515828c01908152511515600014612bb27ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79f6120e69f6126b97f986e3c958e3bdf1f58c2150357fc94624dd4e77b08f9802d8e2e885fa0d6a1989b610e1f612bf99a612bba98610ddf96610ddf99612c0a575050612b6b610a4e612b63610ddf8851600f0b90565b60195461357b565b612b97612b8282600052601b602052604060002090565b54612b91610ddf8851600f0b90565b90614dc7565b612ba2838c83613a72565b6000526013602052604060002090565b9351600f0b90565b96612bc9610ddf8351600f0b90565b9101518a5192835260208301979097526040820152606081019590955242608086015291169290819060a0820190565b0390a4519081529081906020820190565b840152612b6b565b905093612a48565b86516334d10f9560e11b8152fd5b85516307b7d7dd60e51b81528890fd5b50612c48610a7987860151151590565b6129ff565b825163390cdd9b60e21b81528590fd5b825163c1ab6dc160e01b81528590fd5b81516349da877960e11b81528490fd5b8151637c9a1cf960e01b81528490fd5b346104c15760203660031901126104c157612ca6610729565b612cae6131ad565b90612cc4610bc06004546001600160a01b031690565b6001600160a01b03809316036107b857612cf1816001600160a01b03166000526006602052604060002090565b5415801590612d58575b612d465742612d1d826001600160a01b03166000526006602052604060002090565b55167f63e1222b8b6e8d5156b4ce9fa3245ebee8133d73f318b1e02762311013937451600080a2005b6040516345e20c9f60e11b8152600490fd5b50612d76816001600160a01b03166000526001602052604060002090565b541515612cfb565b346104c15760403660031901126104c157600435612d9e816120176131ad565b156108fa57610b879060243590614f27565b346104c15760403660031901126104c1576020610aef602435600435614c02565b346104c15760203660031901126104c15760043560005260166020526020604060002054604051908152f35b346104c15760203660031901126104c1576004803590612e2d61097a610807846000526014602052604060002090565b5415612f6a57612e3b6131ad565b90612e49610a798484613271565b612f5b57612e6461095a846000526013602052604060002090565b91604092838101612e758151151590565b612f4b576020820193845142101561162d576000612e948451600f0b90565b600f0b1315612f3d577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7611217888881897f793cb7a30a4bb8669ec607dfcbdc93f5a3e9d282f38191fddab43ccaf79efb806001600160a01b038b612f1e8c6111c18d6000612f07610ddf8551600f0b90565b98612f17610a4e8b60195461357b565b5260019052565b85519384524260208501521691604090a3519081529081906020820190565b855163f90e998d60e01b8152fd5b84516334d10f9560e11b81528490fd5b60405163390cdd9b60e21b8152fd5b60405163c1ab6dc160e01b8152fd5b346104c15760003660031901126104c15760206040517f9947d5709c1682eaa3946b2d84115c9c0d1c946b149d76e69b457458b42ea29e8152f35b346104c15760203660031901126104c1576020610aef600435614bcd565b346104c15760403660031901126104c157602060ff613028612ff2610729565b6001600160a01b0361300261073f565b9116600052600d84526040600020906001600160a01b0316600052602052604060002090565b54166040519015158152f35b346104c1576040806003193601126104c1576024359065ffffffffffff82168092036104c1578060606106f093825161306c81610569565b6000928184809352826020820152828682015201526004358252601c602052828220908252602052209060038151926130a484610569565b805484526001600160a01b0360018201541660208501526002810154838501520154606083015251918291829190916060806080830194805184526001600160a01b036020820151166020850152604081015160408501520151910152565b346104c15760203660031901126104c15760043560005260176020526020604060002054600f0b604051908152f35b346104c15760003660031901126104c15760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b634e487b7160e01b600052601160045260246000fd5b60001981019190821161319b57565b613176565b9190820391821161319b57565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314806131fb575b156131f757601319360136811161319b573560601c90565b3390565b5060143610156131df565b6020818303126104c15780519067ffffffffffffffff82116104c1570181601f820112156104c15780516132398161060f565b9261324760405194856105d1565b818452602082840101116104c1576106bd9160208085019101610664565b6040513d6000823e3d90fd5b90600052600a6020526001600160a01b039060ff6132cb83604060002054169284811680851495600c602052604060002054161493600052600d6020526040600020906001600160a01b0316600052602052604060002090565b54169082156132e5575b5081156132e0575090565b905090565b9150386132d5565b9192836132f991613271565b156108fa576001600160a01b03908161331c85600052600a602052604060002090565b5416928281168094036133a857846133559161334282600052600c602052604060002090565b6001600160a01b03198154169055613622565b61335f8185614cc9565b6133698482613588565b4361337e85600052600e602052604060002090565b5516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b6040516330cd747160e01b8152600490fd5b908160209103126104c157516106bd81610497565b90926106bd94936080936001600160a01b03809216845216602083015260408201528160608201520190610687565b3d15613429573d9061340f8261060f565b9161341d60405193846105d1565b82523d6000602084013e565b606090565b90926134386131ad565b93613445858583866132ed565b803b613453575b5050505050565b6134839360006001600160a01b0360209560405197889687958693630a85bd0160e11b9c8d8652600486016133cf565b0393165af1600091816134ff575b506134bc5761349e6133fe565b805190816134b757604051626b5e2960e61b8152600490fd5b602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016036134ed57388080808061344c565b60405163279929b160e21b8152600490fd5b61352191925060203d8111613528575b61351981836105d1565b8101906133ba565b9038613491565b503d61350f565b1561353657565b634e487b7160e01b600052600160045260246000fd5b9062093a80820180921161319b57565b90630784ce00820180921161319b57565b906001820180921161319b57565b9190820180921161319b57565b613614916000818152602090600a825260106001600160a01b03926040936135b58186862054161561352f565b858452600a825284842080546001600160a01b0319166001600160a01b03891617905586168352600b81528383205494600f82528484208685528252808585205583525220556001600160a01b0316600052600b602052604060002090565b61361e815461356d565b9055565b6000828152600a6020526001600160a01b036136498160408420541691841680921461352f565b838252600a602052613668604083206001600160a01b03198154169055565b8152600b6020526040812054600019810190811161319b578382613699613700966000526010602052604060002090565b5483810361370a57506136d56136e6936136c6876001600160a01b0316600052600f602052604060002090565b90600052602052604060002090565b556000526010602052604060002090565b556001600160a01b0316600052600b602052604060002090565b61361e815461318c565b836136d5916137596137366136e6976136c68b6001600160a01b0316600052600f602052604060002090565b54806136d5846136c68d6001600160a01b0316600052600f602052604060002090565b556136c6876001600160a01b0316600052600f602052604060002090565b6040519061378482610548565b60006040838281528260208201520152565b906040516137a381610548565b604060ff600283958054600f0b8552600181015460208601520154161515910152565b604051906137d382610585565b60006080838281528260208201528260408201528260608201520152565b90633b9aca008110156138085760021b0190600090565b634e487b7160e01b600052603260045260246000fd5b9060405161382b81610585565b608060038294805480600f0b8552831d600f0b602085015260018101546040850152600281015460608501520154910152565b60026000541461386f576002600055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b90600f0b90600f0b029081600f0b91820361319b57565b9062093a809182810292818404149015171561319b57565b90670de0b6b3a7640000918083029283040361319b57565b8181029291811591840414171561319b57565b8115613918570490565b634e487b7160e01b600052601260045260246000fd5b600019811461319b5760010190565b600f91820b910b03906f7fffffffffffffffffffffffffffffff1982126f7fffffffffffffffffffffffffffffff83131761319b57565b600f0b906f7fffffffffffffffffffffffffffffff82136f7fffffffffffffffffffffffffffffff1983121761319b57565b90600f0b90600f0b01906f7fffffffffffffffffffffffffffffff1982126f7fffffffffffffffffffffffffffffff83131761319b57565b906080600391613a098151600f0b85906001600160801b0319825416906001600160801b0316179055565b602081015184546001600160801b031690831b6fffffffffffffffffffffffffffffffff191617845560408101516001850155606081015160028501550151910155565b9190613a5c57610600916139de565b634e487b7160e01b600052600060045260246000fd5b91613a7b6137c6565b613a836137c6565b926000928360115487613faa575b613a99610602565b60008152600060208201524260408201524360608201526000608082015281613f8d575b60408101518151600f0b6020830151600f0b6060840151613afc608086015192613af2613ae8610602565b958690600f0b9052565b600f0b6020850152565b83604084015260608301526080820152600060408401514211613f65575b613b2c62093a808493969594046138cb565b946000925b60ff8410613dfb575b5050505090915088613d40575b600182141580613d28575b15613d135761263a61262a613b669361318c565b86613b75575b50505050505050565b60208093019342855111613cbe575b50500190815190428211613c5d575b50505050426040820152436060820152613bb7826000526016602052604060002090565b549182151580613c38575b15613bf957613bed92613be2613be7926000526015602052604060002090565b6137f1565b90613a4d565b38808080808080613b6c565b613be790613be2613c0c613c339561392e565b9182613c22826000526016602052604060002090565b556000526015602052604060002090565b613bed565b50613c5183613be2836000526015602052604060002090565b50600101544214613bc2565b5110613c6b575b8080613b93565b613c9b613c89613cb793613c836020870151600f0b90565b9061393d565b91516000526017602052604060002090565b906001600160801b0319825416906001600160801b0316179055565b3880613c64565b830151613cf591613cd291600f0b906139a6565b8084840151865114613cfc575b50613c9b85516000526017602052604060002090565b3880613b84565b87850151613d0d9250600f0b613c83565b38613cdf565b61263a8261262a613d2394601155565b613b66565b50426001613d3861262a8561318c565b015414613b52565b613d7b613d71613d64613d5760208c0151600f0b90565b60208a0151600f0b613c83565b6020840151600f0b6139a6565b600f0b6020830152565b613daa613da3613d99613d8f8b51600f0b90565b8951600f0b613c83565b8351600f0b6139a6565b600f0b8252565b6000613dbd6114746020840151600f0b90565b12613def575b6000613dd36114748351600f0b90565b12613de6575b6019546080820152613b47565b60008152613dd9565b60006020820152613dc3565b613e08859695949761354c565b600091908042811115613f28575050613e6d91613e56613e4f613e45613e63946126cb6126c6613e3e6020429d5b0151600f0b90565b928c6131a0565b8a51600f0b61393d565b600f0b8952565b6020880151600f0b6139a6565b600f0b6020870152565b6000613e7d6114748751600f0b90565b12613f1f575b6000613e966114746020880151600f0b90565b12613f13575b84613ece8495856040840152613ec4606085015161275061274261273c60408901518b6131a0565b606084015261356d565b9687428603613eef5750505050505050436060820152819038808080613b3a565b613f0a9261263a6127a1926000526007602052604060002090565b92959493613b31565b60006020860152613e9c565b60008552613e83565b613e6d9350613e4f613e45613e63946126cb6126c6613e3e6020613f5f6115a9999e99613e56996000526017602052604060002090565b98613e36565b50613f88613f7a6128156060860151436131a0565b6128256040860151426131a0565b613b1a565b50613fa561284a826000526007602052604060002090565b613abd565b6040830151156140fe57613fc2610ddf8451600f0b90565b60808801526020840180514210806140e8575b6140a8575b6020840192428451119081614091575b5061404b575b6140086115a982516000526017602052604060002090565b92519081614018575b5050613a91565b5191965090810361402e575080945b3880614011565b6115a9614045916000526017602052604060002090565b94614027565b61408c613e4f61407e61406f6140628851600f0b90565b630784ce0090600f0b0590565b600f0b60208c019081526126b9565b6126cb6126c64288516131a0565b613ff0565b90506140a16114748651600f0b90565b1338613fea565b6140e36140dc6140ce6140bf6140628951600f0b90565b600f0b60208a019081526126b9565b6126cb6126c64286516131a0565b600f0b8752565b613fda565b50826140f86114748751600f0b90565b13613fd5565b81613fc2565b916111ad6111a4614115924261357b565b614132836001600160a01b03166000526001602052604060002090565b54156141e35781156141d157428111156141bf5761414f4261355c565b81116141ad5761418f6106bd9361417a61416a60095461392e565b809761417582600955565b6141f5565b506108b8866000526014602052604060002090565b6141a661095a856000526013602052604060002090565b91846143a2565b60405163f761f1cd60e01b8152600490fd5b604051638e6b5b6760e01b8152600490fd5b604051631f2a200560e01b8152600490fd5b60405163c1ab6dc160e01b8152600490fd5b61421e6001600160a01b0382169161420e83151561352f565b6142188482613588565b83614cc9565b60007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600190565b60026040610600936142768151600f0b85906001600160801b0319825416906001600160801b0316179055565b602081015160018501550151151591019060ff801983541691151516179055565b91600360008051602061503d8339815191529361439593614340601254946142be86601255565b6142c6613777565b906142d28151600f0b90565b936142fe6020830151956142e96040850151151590565b1515604086015260208501968752600f0b8452565b61431b61431461430f8551600f0b90565b613974565b600f0b8452565b8061439a575b5061433a82610e1f876000526013602052604060002090565b84613a72565b60008051602061501d8339815191526001600160a01b0361435f6131ad565b9251604080516000815260208101929092524290820152921691606090a460408051828152602081019290925290918291820190565b0390a1565b845238614321565b9291614421601254936143b8610e38858761357b565b6143c0613777565b906143cc8151600f0b90565b936143e36020830151956142e96040850151151590565b6143fc6143146143f288614fc5565b8551600f0b6139a6565b8061455f575b5061441b82610e1f896000526013602052604060002090565b86613a72565b6144296131ad565b90826144a0575b51604080518481526020810192909252429082015260008051602061503d8339815191529461448893926001926001600160a01b039091169060008051602061501d8339815191529080606081015b0390a48261357b565b60408051928352602083019190915281908101614395565b6001600160a01b036144c2610807879594956000526014602052604060002090565b168061451f575081341061450d5760008051602061503d833981519152946144889360008051602061501d8339815191526001600160a01b036001945b945050509293509450614430565b60405163162908e360e11b8152600490fd5b948360008051602061501d8339815191526001600160a01b0360019461455a8760008051602061503d8339815191529b6144889a309161482a565b6144ff565b845238614402565b91906012549161457a610e38838561357b565b6145ee614585613777565b8251600f0b926145b66020820151946145a16040840151151590565b1515604085015260208401958652600f0b8352565b6145d66145cf6145c587614fc5565b8451600f0b6139a6565b600f0b8352565b61441b82610e1f896000526013602052604060002090565b6145f66131ad565b9082614650575b51604080518481526020810192909252429082015260008051602061503d8339815191529461448893926000926001600160a01b039091169060008051602061501d83398151915290806060810161447f565b6001600160a01b03614672610807879594956000526014602052604060002090565b16806146bd575081341061450d5760008051602061503d833981519152946144889360008051602061501d8339815191526001600160a01b036000945b9450505092935094506145fd565b948360008051602061501d8339815191526001600160a01b036000946146f88760008051602061503d8339815191529b6144889a309161482a565b6146af565b919060125491614710610e38838561357b565b61471b614585613777565b6147236131ad565b908261477d575b51604080518481526020810192909252429082015260008051602061503d8339815191529461448893926002926001600160a01b039091169060008051602061501d83398151915290806060810161447f565b6001600160a01b0361479f610807879594956000526014602052604060002090565b16806147ea575081341061450d5760008051602061503d833981519152946144889360008051602061501d8339815191526001600160a01b036002945b94505050929350945061472a565b948360008051602061501d8339815191526001600160a01b036002946148258760008051602061503d8339815191529b6144889a309161482a565b6147dc565b909261060093604051936323b872dd60e01b60208601526001600160a01b03809216602486015216604484015260648301526064825261486982610585565b6040516148c7916001600160a01b0316614882826105b5565b6000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af16148c16133fe565b9161496a565b805182811591821561494a575b50509050156148e05750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b83809293500103126104c1578101516149628161103b565b8082386148d4565b919290156149cc575081511561497e575090565b3b156149875790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156149df5750805190602001fd5b60405162461bcd60e51b81529081906149fb90600483016106ac565b0390fd5b610600926001600160a01b036040519363a9059cbb60e01b602086015216602484015260448301526044825261486982610569565b614a40816120176131ad565b156108fa576000818152600a6020526001600160a01b03604082205416600c602052604082206001600160a01b0319815416905573__$d6f092accc63e0bf8f1744f29529542834$__803b15614b2a578260e4916040519283809263690f66bf60e01b825260136004830152601d6024830152601c6044830152601b60648301528860848301528460a48301528460c48301525af48015610f1557614b11575b50614aeb8382613622565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4565b80614b1e614b24926105a1565b80610509565b38614ae0565b8280fd5b614bca90929192614b4060095461392e565b90816009556141758295836000526013602052614ba66040600020614b808351600f0b82906001600160801b0319825416906001600160801b0316179055565b6020830151600182015560026040840151151591019060ff801983541691151516179055565b604051614bb281610548565b60008152600060208201526000604082015284613a72565b50565b80600052600e6020526040600020544314614bed576106bd904290614c02565b50600090565b908160209103126104c1575190565b9060405191637b29b3d160e01b835260166004840152601560248401526044830152606482015260208160848173__$227f16069b523eeecbbbd0559d29a49482$__5af4908115610f1557600091614c58575090565b6106bd915060203d811161186c5761185e81836105d1565b6011549060405191637259b01960e01b835260176004840152600760248401526044830152606482015260208160848173__$227f16069b523eeecbbbd0559d29a49482$__5af4908115610f1557600091614c58575090565b73__$d6f092accc63e0bf8f1744f29529542834$__91823b156104c15760e46000926001600160a01b0394604051958694859363690f66bf60e01b855260136004860152601d6024860152601c6044860152601b606486015260848501528660a48501521660c48301525af48015610f1557614d425750565b80614b1e610600926105a1565b9073__$d6f092accc63e0bf8f1744f29529542834$__803b156104c15760009260e4916001600160a01b03604051968795869463690f66bf60e01b865260136004870152601d6024870152601c6044870152601b6064870152608486015260a48501521660c48301525af48015610f1557614d425750565b73__$d6f092accc63e0bf8f1744f29529542834$__91823b156104c15760a460009260405194859384926375f199b960e11b8452601d6004850152601c602485015260448401526064830152600160848301525af48015610f1557614e295750565b610600906105a1565b600090614e4c61095a826000526013602052604060002090565b614e5c610a796040830151151590565b61121c57614e7482600052600e602052604060002090565b544314614f15578115614f10575b614e9682600052601b602052604060002090565b5491838314614f0a57614ed2614eb3610ddf614ed89451600f0b90565b9185614ecc61080783600052600a602052604060002090565b91614d4f565b83614dc7565b614ee3610bc06131ad565b7ff1aa2a9e40138176a3ee6099df056f5c175f8511a0d8b8275d94d1ea5de46773600080a4565b50505050565b614e82565b6040516342d6fce760e01b8152600490fd5b614f3e61095a826000526013602052604060002090565b614f4e610a796040830151151590565b61121c5782151580614f9e575b61291357614f7382600052600e602052604060002090565b544314614f1557818314614f9557614e9682600052601b602052604060002090565b60009250614e82565b506001600160a01b03614fbe61080785600052600a602052604060002090565b1615614f5b565b6f7fffffffffffffffffffffffffffffff8111614feb576001600160801b0316600f0b90565b6040516393dafdf160e01b8152600490fd5b600f0b6000811261500b5790565b60405162406f5d60e21b8152600490fdfe8835c22a0c751188de86681e15904223c054bedd5c68ec8858945b78312902735e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5ca164736f6c6343000813000a"; + "0x60c0346200019057601f6200526438819003918201601f191683019291906001600160401b0384118385101762000195578160209284926040968752833981010312620001905751906001600160a01b03808316830362000190578260805260019060009382855560a0528380528160205242838520558062000081620001ab565b169060018060a01b0319918260045416176004556200009f620001ab565b6003805490931691161790558280526007602090815282842043600282015542908301556301ffc9a760e01b845260089052818320805460ff1990811683179091556380ac58cd60e01b84528284208054821683179055635b5e139f60e01b84528284208054821683179055632483248360e11b8452828420805482168317905563da287a1d60e01b8452828420805490911690911790556009549051917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef823083838180a430908280a4615063908162000201823960805181818161194d01526131b5015260a051816131500152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b6080516001600160a01b0316331480620001f4575b15620001f0576013193601368111620001da573560601c90565b634e487b7160e01b600052601160045260246000fd5b3390565b506014361015620001c056fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a714610492578063047fc9aa1461048d57806306fdde0314610488578063081812fc14610483578063095cf5c61461047e578063095ea7b3146104795780630ec84dda1461047457806317d70f7c1461046f57806318160ddd1461046a57806320606b701461046557806323b872dd146104605780632818d8851461045b5780632d0485ec146104565780632e1a7d4d146104515780632e720f7d1461044c578063313ce5671461044757806333230dc01461044257806335b0f6bd1461043d5780633d085a371461043857806342842e0e14610433578063430c20811461042e57806344acb42a1461042957806346c96aac146104245780634b19becc1461041f5780634bf5d7e91461041a5780634d01cb66146104155780634d03c048146104105780634d6fb7751461040b578063505897931461040657806354fd4d50146104015780635594a045146103fc578063572b6c05146103f75780635a4f459a146103f25780635fa7b584146103ed5780636352211e146103e8578063650e1505146103e35780636837f96e146103de5780636d46a1db146103d957806370a08231146103d45780637ecebe00146103cf578063834b0b69146103ca57806385f2aef2146103c55780638ad4c447146103c05780638bf9d84c146103bb5780638e539e8c146103a25780638fbb38ff146103b6578063900cf0cf146103b157806391ddadf4146103ac57806395d89b41146103a7578063981b24d0146103a25780639d507b8b1461039d578063a22cb46514610398578063b1548afc14610393578063b2383e551461038e578063b45a3c0e14610389578063b88d4fde14610384578063bb941cff1461037f578063bfe109281461037a578063c2c4c5c114610375578063c87b56dd14610370578063d1c2babb1461036b578063d938ebf914610366578063d9a3495214610361578063e0514aba1461035c578063e58f594714610357578063e75b1c2e14610352578063e7a324dc1461034d578063e7e242d414610348578063e985e9c514610343578063f04cb3a81461033e578063f52a36f7146103395763f645d4f91461033457600080fd5b613130565b613101565b613032565b612fd0565b612fb2565b612f77565b612dfb565b612dcf565b612dae565b612d7c565b612c8b565b612923565b612856565b6124eb565b6124c4565b61248f565b612406565b612392565b612233565b612207565b612157565b611fe8565b611efa565b611f8a565b611f67565b611f49565b611f18565b611eb2565b611e7e565b611e57565b611c02565b611bc8565b611b8e565b611b54565b611ac0565b611a9b565b611a66565b6119d2565b611974565b611923565b6118fc565b6118e0565b611873565b6117c2565b611747565b611729565b6116cb565b61137c565b611355565b6112d8565b6112a7565b61126d565b61122e565b6110ab565b611045565b61101f565b610fa1565b610d4b565b610cd3565b610b89565b610b67565b610af7565b610ad3565b610ab5565b610927565b6107ca565b610755565b6106f4565b6106c0565b610514565b6104c6565b7fffffffff000000000000000000000000000000000000000000000000000000008116036104c157565b600080fd5b346104c15760203660031901126104c1576004356104e381610497565b63ffffffff60e01b166000526008602052602060ff604060002054166040519015158152f35b60009103126104c157565b346104c15760003660031901126104c1576020601254604051908152f35b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761056457604052565b610532565b6080810190811067ffffffffffffffff82111761056457604052565b60a0810190811067ffffffffffffffff82111761056457604052565b67ffffffffffffffff811161056457604052565b6040810190811067ffffffffffffffff82111761056457604052565b90601f8019910116810190811067ffffffffffffffff82111761056457604052565b6040519061060082610548565b565b6040519061060082610585565b67ffffffffffffffff811161056457601f01601f191660200190565b60405190610638826105b5565b601282527f4d61727368616c6c2044414f2076654e465400000000000000000000000000006020830152565b60005b8381106106775750506000910152565b8181015183820152602001610667565b906020916106a081518092818552858086019101610664565b601f01601f1916010190565b9060206106bd928181520190610687565b90565b346104c15760003660031901126104c1576106f06106dc61062b565b604051918291602083526020830190610687565b0390f35b346104c15760203660031901126104c157600435600052600c60205260206001600160a01b0360406000205416604051908152f35b600435906001600160a01b03821682036104c157565b602435906001600160a01b03821682036104c157565b346104c15760203660031901126104c15761076e610729565b6107766131ab565b600454916001600160a01b0391828085169116036107b857169081156107a6576001600160a01b03191617600455005b60405163d92e233d60e01b8152600490fd5b604051633a7cfa5d60e21b8152600490fd5b346104c15760403660031901126104c1576107e3610729565b602435906107ef6131ab565b9061081461080784600052600a602052604060002090565b546001600160a01b031690565b906001600160a01b03928383169283156107a65784831694858514610915578061088e6108878561086f6108556108078d600052600a602052604060002090565b966001600160a01b0316600052600d602052604060002090565b906001600160a01b0316600052602052604060002090565b5460ff1690565b931691161415908161090c575b506108fa576108d3906108b885600052600c602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60405163390cdd9b60e21b8152600490fd5b9050153861089b565b60405163367558c360e01b8152600490fd5b6040806003193601126104c1576004359060243561094361385c565b61095f61095a846000526013602052604060002090565b613794565b9061099361097a610807866000526014602052604060002090565b6001600160a01b03166000526001602052604060002090565b5415610aa4578015610a935760006109ac8351600f0b90565b600f0b1315610a8257602082015142101580610a69575b610a585791610a2782610a35946109fe847ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce798960151151590565b610a3f575b610a2181610a1b87600052601b602052604060002090565b54614dc1565b84614561565b519081529081906020820190565b0390a16001600055005b610a53610a4e82601954613579565b601955565b610a03565b82516307b7d7dd60e51b8152600490fd5b50610a7d610a7984840151151590565b1590565b6109c3565b825163f90e998d60e01b8152600490fd5b8251631f2a200560e01b8152600490fd5b825163c1ab6dc160e01b8152600490fd5b346104c15760003660031901126104c1576020600954604051908152f35b346104c15760003660031901126104c1576020610aef42614c6a565b604051908152f35b346104c15760003660031901126104c15760206040517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8668152f35b60609060031901126104c1576001600160a01b039060043582811681036104c1579160243590811681036104c1579060443590565b346104c157610b87610b7836610b32565b90610b816131ab565b926132eb565b005b346104c15760203660031901126104c157610ba2610729565b610baa6131ab565b90610bcc610bc06004546001600160a01b031690565b6001600160a01b031690565b6001600160a01b03809316036107b857610bf9816001600160a01b03166000526006602052604060002090565b5415610cc157610c25610c1f826001600160a01b03166000526006602052604060002090565b5461354a565b4210610caf57610c48816001600160a01b03166000526006602052604060002090565b54610c66826001600160a01b03166000526001602052604060002090565b556000610c86826001600160a01b03166000526006602052604060002090565b55167fc1ebeeae6519aa11b0c58d4f0ced8b3685c5a64f82b7b1f40bb37e39f5f02f35600080a2005b60405163514f220f60e01b8152600490fd5b60405163224a1b1160e11b8152600490fd5b346104c15760403660031901126104c157610cec610729565b610cf461073f565b90610cfd6131ab565b916003546001600160a01b039384808316911603610d395783926001600160a01b03199485911691161760035516906002541617600255600080f35b60405163c18384c160e01b8152600490fd5b346104c15760203660031901126104c157600435610d6761385c565b610d6f6131ab565b90610d7d610a79828461326f565b6108fa57610d9861088782600052601a602052604060002090565b610f8f57610db361095a826000526013602052604060002090565b604090610dc282820151151590565b610f7e5760208101514210610f6d57610de4610ddf8251600f0b90565b614ff7565b93610dee84614a2e565b610df66105f3565b94610e246000968781528760208201528786820152610e1f876000526013602052604060002090565b614243565b610e5a60125493610e3d610e38848761319e565b601255565b610e456105f3565b90888252886020830152888783015287613a70565b6001600160a01b039081610e7b610807886000526014602052604060002090565b1680610f2457508680828015610f1a575b82809291819287891690f115610f155760008051602061503783398151915295610f05937f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94610eee945b8851858152426020820152921691604090a38361319e565b925191825260208201929092529081906040820190565b0390a1610f126001600055565b80f35b613263565b6108fc9150610e8c565b95837f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94610eee94610f6885610f05986000805160206150378339815191529c6149f9565b610ed6565b815163342ad40160e11b8152600490fd5b81516334d10f9560e11b8152600490fd5b604051637c9a1cf960e01b8152600490fd5b346104c15760203660031901126104c157610fba610729565b610fc26131ab565b906001600160a01b03918280600454169116036107b857166001600160a01b031960055416176005557f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c60408051600081526000196020820152a1005b346104c15760003660031901126104c157602060405160128152f35b801515036104c157565b346104c15760403660031901126104c15761105e610729565b60243561106a8161103b565b6110726131ab565b6001600160a01b03908180600454169116036107b857610b879216600052601860205260406000209060ff801983541691151516179055565b346104c15760203660031901126104c1576004356110c76131ab565b6110d4610a79838361326f565b6108fa576110ef61088783600052601a602052604060002090565b610f8f5761110a61095a836000526013602052604060002090565b91604083019261111d610a798551151590565b61121c577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7937f668d293c0a181c1f163fd0d3c757239a9c17bd26c5e483150e374455433b27fa6001600160a01b03611217956111f6856000611185610ddf8a9951600f0b90565b96611195610a4e8960195461319e565b6111b26111ad6111a44261355a565b62093a80900490565b6138c9565b6020840152526111c187614e2c565b6111e2816111dc61095a8a6000526013602052604060002090565b89613a70565b610e1f876000526013602052604060002090565b60408051948552426020860152911692a36040519081529081906020820190565b0390a1005b604051632188f8ab60e01b8152600490fd5b346104c15760203660031901126104c1576001600160a01b0361124f610729565b166000526018602052602060ff604060002054166040519015158152f35b346104c15761127b36610b32565b60405191602083019383851067ffffffffffffffff86111761056457610b87946040526000845261342c565b346104c15760403660031901126104c15760206112ce6112c5610729565b6024359061326f565b6040519015158152f35b346104c15760403660031901126104c1576112f16137c4565b50600435600052601560205260a061131861131260243560406000206137ef565b5061381c565b6113536040518092608080918051600f0b84526020810151600f0b602085015260408101516040850152606081015160608501520151910152565bf35b346104c15760003660031901126104c15760206001600160a01b0360035416604051908152f35b346104c1576040806003193601126104c157600490813561139b61385c565b6113a36131ab565b906113bb61080782600052600a602052604060002090565b906001600160a01b038216156116bb576113ee610a79610887846001600160a01b03166000526018602052604060002090565b80611680575b6116705761140f61088782600052601a602052604060002090565b61166057611420610a79828561326f565b6116505761143b61095a826000526013602052604060002090565b94602086019081514210158061163b575b61162d5761145b602435614fbf565b9081600f0b801561161e5761147a6114748a51600f0b90565b600f0b90565b1315611610576115ed886106f0898989897f8303de8187a6102fdc3fe20c756dddd68df0ae027b77e2391c19a855e0821f338a8a6114b784614a2e565b6115076114c26105f3565b6114ea600091828152826020820152828b820152610e1f886000526013602052604060002090565b6114f26105f3565b90808252806020830152898201528a86613a70565b61152561151e826115198c51600f0b90565b61393b565b600f0b8a52565b61156f6115328a87614b28565b998a9661156361154f610807896000526014602052604060002090565b6108b88a6000526014602052604060002090565b600f84900b8252614b28565b998a9661158c61154f610807886000526014602052604060002090565b6115b66115b0610ddf6115a98a6000526013602052604060002090565b54600f0b90565b93614ff7565b93518951948594429386919260809396959491966001600160a01b0360a08501981684526020840152604083015260608201520152565b0390a46115fa6001600055565b5191825260208201929092529081906040820190565b8651636b2f218360e01b8152fd5b508651631f2a200560e01b8152fd5b85516307b7d7dd60e51b8152fd5b5061164b610a7987890151151590565b61144c565b5050505163390cdd9b60e21b8152fd5b50505051637c9a1cf960e01b8152fd5b50505051633df16fd960e21b8152fd5b506000805260186020526116b6610a797f999d26de3473317ead3eeaf34ca78057f1439db67b6953469c3c96ce9caf6bd7610887565b6113f4565b50505051632c2151ef60e11b8152fd5b346104c15760003660031901126104c1576106f06040516116eb816105b5565b600e81527f6d6f64653d74696d657374616d700000000000000000000000000000000000006020820152604051918291602083526020830190610687565b346104c15760003660031901126104c1576020601954604051908152f35b60803660031901126104c15761175b610729565b606435906001600160a01b03821682036104c15760209161178b9161177e61385c565b60443590602435906140fe565b6001600055604051908152f35b60609060031901126104c1576004356001600160a01b03811681036104c157906024359060443590565b346104c1576117d036611798565b906001600160a01b03604051936332b53f5360e11b8552601d6004860152601c60248601521660448401526064830152608482015260208160a48173__$d6f092accc63e0bf8f1744f29529542834$__5af48015610f15576106f091600091611845575b506040519081529081906020820190565b611866915060203d811161186c575b61185e81836105d1565b810190614bed565b38611834565b503d611854565b346104c15760203660031901126104c157600435600052601d602052602065ffffffffffff60406000205416604051908152f35b604051906118b4826105b5565b600582527f322e302e300000000000000000000000000000000000000000000000000000006020830152565b346104c15760003660031901126104c1576106f06106dc6118a7565b346104c15760003660031901126104c15760206001600160a01b0360055416604051908152f35b346104c15760203660031901126104c157602061193e610729565b604051906001600160a01b03807f0000000000000000000000000000000000000000000000000000000000000000169116148152f35b346104c15760403660031901126104c1576024356119918161103b565b6119996131ab565b6001600160a01b038060035416911603610d3957610b8790600435600052601a60205260406000209060ff801983541691151516179055565b346104c15760203660031901126104c1576119eb610729565b6119f36131ab565b6001600160a01b03908180600454169116036107b85781166000918183526001602052604083205415610cc157611a3e83916001600160a01b03166000526001602052604060002090565b557f4c910b69fe65a61f7531b9c5042b2329ca7179c77290aa7e2eb3afa3c8511fd38280a280f35b346104c15760203660031901126104c157600435600052600a60205260206001600160a01b0360406000205416604051908152f35b602061178b611aa936611798565b90611ab261385c565b611aba6131ab565b926140fe565b346104c15760203660031901126104c157611ad9610729565b611ae16131ab565b6001600160a01b03908180600454169116036107b85781166000918183526006602052604083205415610cc157611b2c83916001600160a01b03166000526006602052604060002090565b557f7a97490440826fccf62ae2502464143548d7bc46e1c207bad4d0e5c799d54d828280a280f35b346104c15760203660031901126104c1576001600160a01b03611b75610729565b1660005260016020526020604060002054604051908152f35b346104c15760203660031901126104c1576001600160a01b03611baf610729565b16600052600b6020526020604060002054604051908152f35b346104c15760203660031901126104c1576001600160a01b03611be9610729565b16600052601e6020526020604060002054604051908152f35b346104c15760e03660031901126104c1576004608435602435823560443560643560ff851685036104c15760c435917f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311611e4657611c6061062b565b805160208092012093611c716118a7565b805190830120604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818601908152602081019890985287820192909252466060880152306080880152958160a082010391601f19928381018252611cd890826105d1565b51902086517f9947d5709c1682eaa3946b2d84115c9c0d1c946b149d76e69b457458b42ea29e858201908152602081018a9052604081018b90526060810187905260808101889052908060a08301038481018252611d3690826105d1565b519020875161190160f01b8682019081526002810193909352602283019190915290918160428401039081018252611d6e90826105d1565b519020855190815260ff98909816602089015260a4356040890152606088015260008080529687906080905a600190fa15610f15578551611db2610a79868361326f565b611e36576001600160a01b03811615611e2657611de2906001600160a01b0316600052601e602052604060002090565b90815491611def8361392c565b905503611e16574211611e07575090610f1291614f21565b51630819bdcd60e01b81528490fd5b8151633ab3447f60e11b81528690fd5b8351638baa579f60e01b81528890fd5b835163390cdd9b60e21b81528890fd5b6040516317e97eb760e31b81528790fd5b346104c15760003660031901126104c15760206001600160a01b0360045416604051908152f35b346104c15760203660031901126104c157611e976137c4565b50600435600052600760205260a0611318604060002061381c565b346104c15760403660031901126104c1576001600160a01b03611ed3610729565b16600052600f60205260406000206024356000526020526020604060002054604051908152f35b346104c15760203660031901126104c1576020610aef600435614c6a565b346104c15760203660031901126104c157600435600052601a602052602060ff604060002054166040519015158152f35b346104c15760003660031901126104c1576020601154604051908152f35b346104c15760003660031901126104c157602060405165ffffffffffff42168152f35b346104c15760003660031901126104c1576106f0604051611faa816105b5565b600581527f76654e46540000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610687565b346104c1576040806003193601126104c15760049081359161200861385c565b61201c610a79846120176131ab565b61326f565b6121495761203a61097a610807856000526014602052604060002090565b541561213b5761205761095a846000526013602052604060002090565b9061206483830151151590565b61212d5761207a6111ad6111a460243542613579565b9060208301428151111561211e5760006120958551600f0b90565b600f0b131561210f5751821115612101576120af4261355a565b82116120f3577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce76120e68686610a27878784614291565b0390a1610b876001600055565b835163f761f1cd60e01b8152fd5b8351638e6b5b6760e01b8152fd5b50835163f90e998d60e01b8152fd5b5083516307b7d7dd60e51b8152fd5b82516334d10f9560e11b8152fd5b905163c1ab6dc160e01b8152fd5b905163390cdd9b60e21b8152fd5b346104c15760403660031901126104c157612170610729565b60243561217c8161103b565b6001600160a01b03908161218e6131ab565b169183169282841461091557816121fc7f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31936121eb60209487600052600d86526040600020906001600160a01b0316600052602052604060002090565b9060ff801983541691151516179055565b6040519015158152a3005b346104c15760203660031901126104c157600435600052601b6020526020604060002054604051908152f35b6040806003193601126104c15760049081359160243561225161385c565b61225d846120176131ab565b156123835761227961095a856000526013602052604060002090565b9161229461097a610807876000526014602052604060002090565b54156123755781156123675760006122ad8451600f0b90565b600f0b131561235957602083015142101580612344575b612336577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7610a358686610a2787876122ff84830151151590565b612322575b61231c81610a1b87600052601b602052604060002090565b846146f7565b612331610a4e82601954613579565b612304565b83516307b7d7dd60e51b8152fd5b50612354610a7985850151151590565b6122c4565b835163f90e998d60e01b8152fd5b8351631f2a200560e01b8152fd5b835163c1ab6dc160e01b8152fd5b50905163390cdd9b60e21b8152fd5b346104c15760203660031901126104c1576123ab613775565b506004356000526013602052606060406000206040516123ca81610548565b8154600f0b91828252604060ff600260018401549360208601948552015416920191151582526040519283525160208301525115156040820152f35b346104c15760803660031901126104c15761241f610729565b61242761073f565b6064359167ffffffffffffffff83116104c157366023840112156104c1578260040135916124548361060f565b9261246260405194856105d1565b80845236602482870101116104c1576020816000926024610b87980183880137850101526044359161342c565b346104c15760203660031901126104c157600435600052601460205260206001600160a01b0360406000205416604051908152f35b346104c15760003660031901126104c15760206001600160a01b0360025416604051908152f35b346104c1576000806003193601126128535761250561385c565b60408181805161251481610548565b82815282602082015201528181805161252c81610548565b828152826020820152015261253f6137c4565b506125486137c4565b5060115490612555610602565b8381528360208201524282820152436060820152836080820152908261282f575b80820190815190856125898551600f0b90565b602086018051600f0b94606088019560808751966125c4828c0151936125ba6125b0610602565b988990600f0b9052565b600f0b6020880152565b850194838652606081019788520152839087514211612800575b939192906125f462093a808699989799046138c9565b9783985b60ff8a10612673575b5050505050505050505060018214158061265b575b156126465761263a61262a61263f9361318a565b6000526007602052604060002090565b6139dc565b6001815580f35b61263a8261262a61265694601155565b61263f565b5042600161266b61262a8561318a565b015414612616565b6126878b919c939495969798999a9c61354a565b9786428a11156127c2578899509795969742996126f1936126d96126cf8d6126c96126c46126ea986126be6126e0985b51600f0b90565b9361319e565b614fbf565b906138b2565b8251600f0b61393b565b600f0b9052565b8651600f0b6139a4565b600f0b8552565b856127006114748c51600f0b90565b126127ba575b856127156114748651600f0b90565b126127b2575b61275b8792888b52612754835161274e61274061273a8d8c519061319e565b896138f9565b670de0b6b3a7640000900490565b90613579565b8a5261356b565b9a8a8c428a036127835750505050505050505050905043905238808080808781808080612601565b6127a4929161263a61279f926000526007602052604060002090565b61392c565b9897969593949291956125f8565b85845261271b565b858a52612706565b50876126e06126f1936126d96126cf8d6126c96126c49d9e9c9d6126ea986126be6127fa6115a9866000526017602052604060002090565b996126b7565b905061282961281861281388514361319e565b6138e1565b61282389514261319e565b9061390c565b906125de565b905061284d612848836000526007602052604060002090565b61381c565b90612576565b80fd5b346104c15760203660031901126104c1576004356001600160a01b0361288961080783600052600a602052604060002090565b16156129115760006128cd916128ad610bc0610bc06005546001600160a01b031690565b604051808095819463c87b56dd60e01b8352600483019190602083019252565b03915afa8015610f15576106f0916000916128f0575b50604051918291826106ac565b61290b913d8091833e61290381836105d1565b810190613204565b386128e3565b604051634a1850bf60e11b8152600490fd5b346104c1576040806003193601126104c15760048035916024359061294661385c565b61294e6131ab565b9361296661088782600052601a602052604060002090565b612c7b57828114612c6b57612988610807826000526014602052604060002090565b6129a2610bc0610807866000526014602052604060002090565b6001600160a01b0380921603612c5b576129bf610a79838861326f565b612c4b576129d0610a79858861326f565b612c4b576129eb61095a856000526013602052604060002090565b90602096878301805142101580612c36575b612c2657612a1861095a866000526013602052604060002090565b97612a25878a0151151590565b612c1857509186949391858a94858b0151905180821015600014612c105750935b612a4f87614a2e565b612a576105f3565b600081528681016000905289810160009052612a7d886000526013602052604060002090565b90612a8791614243565b612a8f6105f3565b60008082528782018190528a820152612aa9908c89613a70565b612ab1613775565b80958251612abf90600f0b90565b8d51600f0b612acd916139a4565b600f0b8252828b015115151515828c01908152511515600014612bb07ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79f6120e69f6126b77f986e3c958e3bdf1f58c2150357fc94624dd4e77b08f9802d8e2e885fa0d6a1989b610e1f612bf79a612bb898610ddf96610ddf99612c08575050612b69610a4e612b61610ddf8851600f0b90565b601954613579565b612b95612b8082600052601b602052604060002090565b54612b8f610ddf8851600f0b90565b90614dc1565b612ba0838c83613a70565b6000526013602052604060002090565b9351600f0b90565b96612bc7610ddf8351600f0b90565b9101518a5192835260208301979097526040820152606081019590955242608086015291169290819060a0820190565b0390a4519081529081906020820190565b840152612b69565b905093612a46565b86516334d10f9560e11b8152fd5b85516307b7d7dd60e51b81528890fd5b50612c46610a7987860151151590565b6129fd565b825163390cdd9b60e21b81528590fd5b825163c1ab6dc160e01b81528590fd5b81516349da877960e11b81528490fd5b8151637c9a1cf960e01b81528490fd5b346104c15760203660031901126104c157612ca4610729565b612cac6131ab565b90612cc2610bc06004546001600160a01b031690565b6001600160a01b03809316036107b857612cef816001600160a01b03166000526006602052604060002090565b5415801590612d56575b612d445742612d1b826001600160a01b03166000526006602052604060002090565b55167f63e1222b8b6e8d5156b4ce9fa3245ebee8133d73f318b1e02762311013937451600080a2005b6040516345e20c9f60e11b8152600490fd5b50612d74816001600160a01b03166000526001602052604060002090565b541515612cf9565b346104c15760403660031901126104c157600435612d9c816120176131ab565b156108fa57610b879060243590614f21565b346104c15760403660031901126104c1576020610aef602435600435614bfc565b346104c15760203660031901126104c15760043560005260166020526020604060002054604051908152f35b346104c15760203660031901126104c1576004803590612e2b61097a610807846000526014602052604060002090565b5415612f6857612e396131ab565b90612e47610a79848461326f565b612f5957612e6261095a846000526013602052604060002090565b91604092838101612e738151151590565b612f49576020820193845142101561162d576000612e928451600f0b90565b600f0b1315612f3b577ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7611217888881897f793cb7a30a4bb8669ec607dfcbdc93f5a3e9d282f38191fddab43ccaf79efb806001600160a01b038b612f1c8c6111c18d6000612f05610ddf8551600f0b90565b98612f15610a4e8b601954613579565b5260019052565b85519384524260208501521691604090a3519081529081906020820190565b855163f90e998d60e01b8152fd5b84516334d10f9560e11b81528490fd5b60405163390cdd9b60e21b8152fd5b60405163c1ab6dc160e01b8152fd5b346104c15760003660031901126104c15760206040517f9947d5709c1682eaa3946b2d84115c9c0d1c946b149d76e69b457458b42ea29e8152f35b346104c15760203660031901126104c1576020610aef600435614bc7565b346104c15760403660031901126104c157602060ff613026612ff0610729565b6001600160a01b0361300061073f565b9116600052600d84526040600020906001600160a01b0316600052602052604060002090565b54166040519015158152f35b346104c1576040806003193601126104c1576024359065ffffffffffff82168092036104c1578060606106f093825161306a81610569565b6000928184809352826020820152828682015201526004358252601c602052828220908252602052209060038151926130a284610569565b805484526001600160a01b0360018201541660208501526002810154838501520154606083015251918291829190916060806080830194805184526001600160a01b036020820151166020850152604081015160408501520151910152565b346104c15760203660031901126104c15760043560005260176020526020604060002054600f0b604051908152f35b346104c15760003660031901126104c15760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b634e487b7160e01b600052601160045260246000fd5b60001981019190821161319957565b613174565b9190820391821161319957565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314806131f9575b156131f5576013193601368111613199573560601c90565b3390565b5060143610156131dd565b6020818303126104c15780519067ffffffffffffffff82116104c1570181601f820112156104c15780516132378161060f565b9261324560405194856105d1565b818452602082840101116104c1576106bd9160208085019101610664565b6040513d6000823e3d90fd5b90600052600a6020526001600160a01b039060ff6132c983604060002054169284811680851495600c602052604060002054161493600052600d6020526040600020906001600160a01b0316600052602052604060002090565b54169082156132e3575b5081156132de575090565b905090565b9150386132d3565b9192836132f79161326f565b156108fa576001600160a01b03908161331a85600052600a602052604060002090565b5416928281168094036133a657846133539161334082600052600c602052604060002090565b6001600160a01b03198154169055613620565b61335d8185614cc3565b6133678482613586565b4361337c85600052600e602052604060002090565b5516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b6040516330cd747160e01b8152600490fd5b908160209103126104c157516106bd81610497565b90926106bd94936080936001600160a01b03809216845216602083015260408201528160608201520190610687565b3d15613427573d9061340d8261060f565b9161341b60405193846105d1565b82523d6000602084013e565b606090565b90926134366131ab565b93613443858583866132eb565b803b613451575b5050505050565b6134819360006001600160a01b0360209560405197889687958693630a85bd0160e11b9c8d8652600486016133cd565b0393165af1600091816134fd575b506134ba5761349c6133fc565b805190816134b557604051626b5e2960e61b8152600490fd5b602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016036134eb57388080808061344a565b60405163279929b160e21b8152600490fd5b61351f91925060203d8111613526575b61351781836105d1565b8101906133b8565b903861348f565b503d61350d565b1561353457565b634e487b7160e01b600052600160045260246000fd5b9062093a80820180921161319957565b90630784ce00820180921161319957565b906001820180921161319957565b9190820180921161319957565b613612916000818152602090600a825260106001600160a01b03926040936135b38186862054161561352d565b858452600a825284842080546001600160a01b0319166001600160a01b03891617905586168352600b81528383205494600f82528484208685528252808585205583525220556001600160a01b0316600052600b602052604060002090565b61361c815461356b565b9055565b6000828152600a6020526001600160a01b036136478160408420541691841680921461352d565b838252600a602052613666604083206001600160a01b03198154169055565b8152600b602052604081205460001981019081116131995783826136976136fe966000526010602052604060002090565b5483810361370857506136d36136e4936136c4876001600160a01b0316600052600f602052604060002090565b90600052602052604060002090565b556000526010602052604060002090565b556001600160a01b0316600052600b602052604060002090565b61361c815461318a565b836136d3916137576137346136e4976136c48b6001600160a01b0316600052600f602052604060002090565b54806136d3846136c48d6001600160a01b0316600052600f602052604060002090565b556136c4876001600160a01b0316600052600f602052604060002090565b6040519061378282610548565b60006040838281528260208201520152565b906040516137a181610548565b604060ff600283958054600f0b8552600181015460208601520154161515910152565b604051906137d182610585565b60006080838281528260208201528260408201528260608201520152565b90633b9aca008110156138065760021b0190600090565b634e487b7160e01b600052603260045260246000fd5b9060405161382981610585565b608060038294805480600f0b8552831d600f0b602085015260018101546040850152600281015460608501520154910152565b60026000541461386d576002600055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b90600f0b90600f0b029081600f0b91820361319957565b9062093a809182810292818404149015171561319957565b90670de0b6b3a7640000918083029283040361319957565b8181029291811591840414171561319957565b8115613916570490565b634e487b7160e01b600052601260045260246000fd5b60001981146131995760010190565b600f91820b910b03906f7fffffffffffffffffffffffffffffff1982126f7fffffffffffffffffffffffffffffff83131761319957565b600f0b906f7fffffffffffffffffffffffffffffff82136f7fffffffffffffffffffffffffffffff1983121761319957565b90600f0b90600f0b01906f7fffffffffffffffffffffffffffffff1982126f7fffffffffffffffffffffffffffffff83131761319957565b906080600391613a078151600f0b85906001600160801b0319825416906001600160801b0316179055565b602081015184546001600160801b031690831b6fffffffffffffffffffffffffffffffff191617845560408101516001850155606081015160028501550151910155565b9190613a5a57610600916139dc565b634e487b7160e01b600052600060045260246000fd5b91613a796137c4565b613a816137c4565b926000928360115487613fa4575b613a97610602565b60008152600060208201524260408201524360608201526000608082015281613f87575b60408101518151600f0b6020830151600f0b6060840151613afa608086015192613af0613ae6610602565b958690600f0b9052565b600f0b6020850152565b83604084015260608301526080820152600060408401514211613f5f575b613b2a62093a808493969594046138c9565b946000925b60ff8410613df6575b5050505090915088613d3b575b600182141580613d23575b15613d0e5761263a61262a613b649361318a565b86613b73575b50505050505050565b60208093019342855111613cbc575b50500190815190428211613c5b575b50505050426040820152436060820152613bb5826000526016602052604060002090565b549182151580613c36575b15613bf757613beb92613be0613be5926000526015602052604060002090565b6137ef565b90613a4b565b38808080808080613b6a565b613be590613be0613c0a613c319561392c565b9182613c20826000526016602052604060002090565b556000526015602052604060002090565b613beb565b50613c4f83613be0836000526015602052604060002090565b50600101544214613bc0565b5110613c69575b8080613b91565b613c99613c87613cb593613c816020870151600f0b90565b9061393b565b91516000526017602052604060002090565b906001600160801b0319825416906001600160801b0316179055565b3880613c62565b830151613cf191613cd091600f0b906139a4565b83830151855114613cf8575b613c9985516000526017602052604060002090565b3880613b82565b613d0990613c8185890151600f0b90565b613cdc565b61263a8261262a613d1e94601155565b613b64565b50426001613d3361262a8561318a565b015414613b50565b613d76613d6c613d5f613d5260208c0151600f0b90565b60208a0151600f0b613c81565b6020840151600f0b6139a4565b600f0b6020830152565b613da5613d9e613d94613d8a8b51600f0b90565b8951600f0b613c81565b8351600f0b6139a4565b600f0b8252565b6000613db86114746020840151600f0b90565b12613dea575b6000613dce6114748351600f0b90565b12613de1575b6019546080820152613b45565b60008152613dd4565b60006020820152613dbe565b613e03859695949761354a565b6000919042811115613f245750613e6691613e4f613e48613e3e613e5c946126c96126c4613e376020429d5b0151600f0b90565b928c61319e565b8a51600f0b61393b565b600f0b8952565b6020880151600f0b6139a4565b600f0b6020870152565b6000613e766114748751600f0b90565b12613f1b575b6000613e8f6114746020880151600f0b90565b12613f0f575b613ecc8394846040880152613ec2606084015161274e612740613ebc60408801518a61319e565b886138f9565b606088015261356b565b95428403613eea575050505050436060820152819038808080613b38565b613f069061279f8761263a8a6000526007602052604060002090565b92959493613b2f565b60006020860152613e95565b60008552613e7c565b94613e669250613e4f613e48613e3e613e5c946126c96126c4613e376020613f596115a98f6000526017602052604060002090565b98613e2f565b50613f82613f7461281360608601514361319e565b61282360408601514261319e565b613b18565b50613f9f612848826000526007602052604060002090565b613abb565b6040830151156140f857613fbc610ddf8451600f0b90565b60808801526020840180514210806140e2575b6140a2575b602084019242845111908161408b575b50614045575b6140026115a982516000526017602052604060002090565b92519081614012575b5050613a8f565b51919650908103614028575080945b388061400b565b6115a961403f916000526017602052604060002090565b94614021565b614086613e4861407861406961405c8851600f0b90565b630784ce0090600f0b0590565b600f0b60208c019081526126b7565b6126c96126c442885161319e565b613fea565b905061409b6114748651600f0b90565b1338613fe4565b6140dd6140d66140c86140b961405c8951600f0b90565b600f0b60208a019081526126b7565b6126c96126c442865161319e565b600f0b8752565b613fd4565b50826140f26114748751600f0b90565b13613fcf565b81613fbc565b916111ad6111a461410f9242613579565b61412c836001600160a01b03166000526001602052604060002090565b54156141dd5781156141cb57428111156141b9576141494261355a565b81116141a7576141896106bd9361417461416460095461392c565b809761416f82600955565b6141ef565b506108b8866000526014602052604060002090565b6141a061095a856000526013602052604060002090565b918461439c565b60405163f761f1cd60e01b8152600490fd5b604051638e6b5b6760e01b8152600490fd5b604051631f2a200560e01b8152600490fd5b60405163c1ab6dc160e01b8152600490fd5b6142186001600160a01b0382169161420883151561352d565b6142128482613586565b83614cc3565b60007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600190565b60026040610600936142708151600f0b85906001600160801b0319825416906001600160801b0316179055565b602081015160018501550151151591019060ff801983541691151516179055565b9160036000805160206150378339815191529361438f9361433a601254946142b886601255565b6142c0613775565b906142cc8151600f0b90565b936142f86020830151956142e36040850151151590565b1515604086015260208501968752600f0b8452565b61431561430e6143098551600f0b90565b613972565b600f0b8452565b80614394575b5061433482610e1f876000526013602052604060002090565b84613a70565b6000805160206150178339815191526001600160a01b036143596131ab565b9251604080516000815260208101929092524290820152921691606090a460408051828152602081019290925290918291820190565b0390a1565b84523861431b565b929161441b601254936143b2610e388587613579565b6143ba613775565b906143c68151600f0b90565b936143dd6020830151956142e36040850151151590565b6143f661430e6143ec88614fbf565b8551600f0b6139a4565b80614559575b5061441582610e1f896000526013602052604060002090565b86613a70565b6144236131ab565b908261449a575b5160408051848152602081019290925242908201526000805160206150378339815191529461448293926001926001600160a01b03909116906000805160206150178339815191529080606081015b0390a482613579565b6040805192835260208301919091528190810161438f565b6001600160a01b036144bc610807879594956000526014602052604060002090565b168061451957508134106145075760008051602061503783398151915294614482936000805160206150178339815191526001600160a01b036001945b94505050929350945061442a565b60405163162908e360e11b8152600490fd5b94836000805160206150178339815191526001600160a01b03600194614554876000805160206150378339815191529b6144829a3091614824565b6144f9565b8452386143fc565b919060125491614574610e388385613579565b6145e861457f613775565b8251600f0b926145b060208201519461459b6040840151151590565b1515604085015260208401958652600f0b8352565b6145d06145c96145bf87614fbf565b8451600f0b6139a4565b600f0b8352565b61441582610e1f896000526013602052604060002090565b6145f06131ab565b908261464a575b5160408051848152602081019290925242908201526000805160206150378339815191529461448293926000926001600160a01b0390911690600080516020615017833981519152908060608101614479565b6001600160a01b0361466c610807879594956000526014602052604060002090565b16806146b757508134106145075760008051602061503783398151915294614482936000805160206150178339815191526001600160a01b036000945b9450505092935094506145f7565b94836000805160206150178339815191526001600160a01b036000946146f2876000805160206150378339815191529b6144829a3091614824565b6146a9565b91906012549161470a610e388385613579565b61471561457f613775565b61471d6131ab565b9082614777575b5160408051848152602081019290925242908201526000805160206150378339815191529461448293926002926001600160a01b0390911690600080516020615017833981519152908060608101614479565b6001600160a01b03614799610807879594956000526014602052604060002090565b16806147e457508134106145075760008051602061503783398151915294614482936000805160206150178339815191526001600160a01b036002945b945050509293509450614724565b94836000805160206150178339815191526001600160a01b0360029461481f876000805160206150378339815191529b6144829a3091614824565b6147d6565b909261060093604051936323b872dd60e01b60208601526001600160a01b03809216602486015216604484015260648301526064825261486382610585565b6040516148c1916001600160a01b031661487c826105b5565b6000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af16148bb6133fc565b91614964565b8051828115918215614944575b50509050156148da5750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b83809293500103126104c15781015161495c8161103b565b8082386148ce565b919290156149c65750815115614978575090565b3b156149815790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156149d95750805190602001fd5b60405162461bcd60e51b81529081906149f590600483016106ac565b0390fd5b610600926001600160a01b036040519363a9059cbb60e01b602086015216602484015260448301526044825261486382610569565b614a3a816120176131ab565b156108fa576000818152600a6020526001600160a01b03604082205416600c602052604082206001600160a01b0319815416905573__$d6f092accc63e0bf8f1744f29529542834$__803b15614b24578260e4916040519283809263690f66bf60e01b825260136004830152601d6024830152601c6044830152601b60648301528860848301528460a48301528460c48301525af48015610f1557614b0b575b50614ae58382613620565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4565b80614b18614b1e926105a1565b80610509565b38614ada565b8280fd5b614bc490929192614b3a60095461392c565b908160095561416f8295836000526013602052614ba06040600020614b7a8351600f0b82906001600160801b0319825416906001600160801b0316179055565b6020830151600182015560026040840151151591019060ff801983541691151516179055565b604051614bac81610548565b60008152600060208201526000604082015284613a70565b50565b80600052600e6020526040600020544314614be7576106bd904290614bfc565b50600090565b908160209103126104c1575190565b9060405191637b29b3d160e01b835260166004840152601560248401526044830152606482015260208160848173__$227f16069b523eeecbbbd0559d29a49482$__5af4908115610f1557600091614c52575090565b6106bd915060203d811161186c5761185e81836105d1565b6011549060405191637259b01960e01b835260176004840152600760248401526044830152606482015260208160848173__$227f16069b523eeecbbbd0559d29a49482$__5af4908115610f1557600091614c52575090565b73__$d6f092accc63e0bf8f1744f29529542834$__91823b156104c15760e46000926001600160a01b0394604051958694859363690f66bf60e01b855260136004860152601d6024860152601c6044860152601b606486015260848501528660a48501521660c48301525af48015610f1557614d3c5750565b80614b18610600926105a1565b9073__$d6f092accc63e0bf8f1744f29529542834$__803b156104c15760009260e4916001600160a01b03604051968795869463690f66bf60e01b865260136004870152601d6024870152601c6044870152601b6064870152608486015260a48501521660c48301525af48015610f1557614d3c5750565b73__$d6f092accc63e0bf8f1744f29529542834$__91823b156104c15760a460009260405194859384926375f199b960e11b8452601d6004850152601c602485015260448401526064830152600160848301525af48015610f1557614e235750565b610600906105a1565b600090614e4661095a826000526013602052604060002090565b614e56610a796040830151151590565b61121c57614e6e82600052600e602052604060002090565b544314614f0f578115614f0a575b614e9082600052601b602052604060002090565b5491838314614f0457614ecc614ead610ddf614ed29451600f0b90565b9185614ec661080783600052600a602052604060002090565b91614d49565b83614dc1565b614edd610bc06131ab565b7ff1aa2a9e40138176a3ee6099df056f5c175f8511a0d8b8275d94d1ea5de46773600080a4565b50505050565b614e7c565b6040516342d6fce760e01b8152600490fd5b614f3861095a826000526013602052604060002090565b614f48610a796040830151151590565b61121c5782151580614f98575b61291157614f6d82600052600e602052604060002090565b544314614f0f57818314614f8f57614e9082600052601b602052604060002090565b60009250614e7c565b506001600160a01b03614fb861080785600052600a602052604060002090565b1615614f55565b6f7fffffffffffffffffffffffffffffff8111614fe5576001600160801b0316600f0b90565b6040516393dafdf160e01b8152600490fd5b600f0b600081126150055790565b60405162406f5d60e21b8152600490fdfe8835c22a0c751188de86681e15904223c054bedd5c68ec8858945b78312902735e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5ca164736f6c6343000813000a"; type VotingEscrowConstructorParams = | [linkLibraryAddresses: VotingEscrowLibraryAddresses, signer?: Signer] diff --git a/src/types/factories/contracts/index.ts b/src/types/factories/contracts/index.ts index 81fa80a..9c64581 100644 --- a/src/types/factories/contracts/index.ts +++ b/src/types/factories/contracts/index.ts @@ -7,5 +7,6 @@ export * as interfaces from "./interfaces"; export * as libraries from "./libraries"; export { DAOForwarder__factory } from "./DAOForwarder__factory"; export { MarshallGovernor__factory } from "./MarshallGovernor__factory"; +export { RewardsDistributor__factory } from "./RewardsDistributor__factory"; export { VeArtProxy__factory } from "./VeArtProxy__factory"; export { VotingEscrow__factory } from "./VotingEscrow__factory"; diff --git a/src/types/factories/contracts/interfaces/IMinter__factory.ts b/src/types/factories/contracts/interfaces/IMinter__factory.ts new file mode 100644 index 0000000..33f6403 --- /dev/null +++ b/src/types/factories/contracts/interfaces/IMinter__factory.ts @@ -0,0 +1,320 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Interface, type ContractRunner } from "ethers"; +import type { + IMinter, + IMinterInterface, +} from "../../../contracts/interfaces/IMinter"; + +const _abi = [ + { + inputs: [], + name: "AlreadyNudged", + type: "error", + }, + { + inputs: [], + name: "NotEpochGovernor", + type: "error", + }, + { + inputs: [], + name: "TailEmissionsInactive", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "_sender", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "_weekly", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "_circulating_supply", + type: "uint256", + }, + { + indexed: true, + internalType: "bool", + name: "_tail", + type: "bool", + }, + ], + name: "Mint", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "_period", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "_oldRate", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "_newRate", + type: "uint256", + }, + ], + name: "Nudge", + type: "event", + }, + { + inputs: [], + name: "MAXIMUM_TAIL_RATE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "MAX_BPS", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "MINIMUM_TAIL_RATE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "NUDGE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "TAIL_START", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "WEEK", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "WEEKLY_DECAY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "activePeriod", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_minted", + type: "uint256", + }, + ], + name: "calculateGrowth", + outputs: [ + { + internalType: "uint256", + name: "_growth", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nudge", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_activePeriod", + type: "uint256", + }, + ], + name: "proposals", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "rewardsDistributor", + outputs: [ + { + internalType: "contract IRewardsDistributor", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "tailEmissionRate", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "updatePeriod", + outputs: [ + { + internalType: "uint256", + name: "_period", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "ve", + outputs: [ + { + internalType: "contract IVotingEscrow", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "voter", + outputs: [ + { + internalType: "contract IVoter", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "weekly", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IMinter__factory { + static readonly abi = _abi; + static createInterface(): IMinterInterface { + return new Interface(_abi) as IMinterInterface; + } + static connect(address: string, runner?: ContractRunner | null): IMinter { + return new Contract(address, _abi, runner) as unknown as IMinter; + } +} diff --git a/src/types/factories/contracts/interfaces/IRewardsDistributor__factory.ts b/src/types/factories/contracts/interfaces/IRewardsDistributor__factory.ts new file mode 100644 index 0000000..379613e --- /dev/null +++ b/src/types/factories/contracts/interfaces/IRewardsDistributor__factory.ts @@ -0,0 +1,268 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Interface, type ContractRunner } from "ethers"; +import type { + IRewardsDistributor, + IRewardsDistributorInterface, +} from "../../../contracts/interfaces/IRewardsDistributor"; + +const _abi = [ + { + inputs: [], + name: "NotManagedOrNormalNFT", + type: "error", + }, + { + inputs: [], + name: "NotMinter", + type: "error", + }, + { + inputs: [], + name: "UpdatePeriod", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "time", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "tokens", + type: "uint256", + }, + ], + name: "CheckpointToken", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + indexed: true, + internalType: "uint256", + name: "epochStart", + type: "uint256", + }, + { + indexed: true, + internalType: "uint256", + name: "epochEnd", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "Claimed", + type: "event", + }, + { + inputs: [], + name: "WEEK", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "checkpointToken", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "claim", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256[]", + name: "tokenIds", + type: "uint256[]", + }, + ], + name: "claimMany", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "claimable", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "lastTokenTime", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "minter", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_minter", + type: "address", + }, + ], + name: "setMinter", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "startTime", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "timeCursorOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "tokenLastBalance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ve", + outputs: [ + { + internalType: "contract IVotingEscrow", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IRewardsDistributor__factory { + static readonly abi = _abi; + static createInterface(): IRewardsDistributorInterface { + return new Interface(_abi) as IRewardsDistributorInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): IRewardsDistributor { + return new Contract( + address, + _abi, + runner + ) as unknown as IRewardsDistributor; + } +} diff --git a/src/types/factories/contracts/interfaces/index.ts b/src/types/factories/contracts/interfaces/index.ts index 26e4e9d..723e3dc 100644 --- a/src/types/factories/contracts/interfaces/index.ts +++ b/src/types/factories/contracts/interfaces/index.ts @@ -1,6 +1,8 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +export { IMinter__factory } from "./IMinter__factory"; +export { IRewardsDistributor__factory } from "./IRewardsDistributor__factory"; export { IVeArtProxy__factory } from "./IVeArtProxy__factory"; export { IVoter__factory } from "./IVoter__factory"; export { IVotingEscrow__factory } from "./IVotingEscrow__factory"; diff --git a/src/types/factories/contracts/libraries/DelegationLogicLibrary__factory.ts b/src/types/factories/contracts/libraries/DelegationLogicLibrary__factory.ts index 6821357..6764dae 100644 --- a/src/types/factories/contracts/libraries/DelegationLogicLibrary__factory.ts +++ b/src/types/factories/contracts/libraries/DelegationLogicLibrary__factory.ts @@ -23,7 +23,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080806040523461001c576108fd90816100228239308160080152f35b600080fdfe604060808152307f000000000000000000000000000000000000000000000000000000000000000014600436101561003657600080fd5b600091823560e01c908163656a7ea614610288578163690f66bf146100a0575063ebe333721461006557600080fd5b61009d5760a036600319011261009d57608435801515810361009957610096906064356044356024356004356104f3565b80f35b5080fd5b80fd5b9190506100995760e03660031901126100995760a435906044356084356001600160a01b0360243560c4358281169081900361028457838852602094600435865286892054600f0b89811261027457858a52838752878a205465ffffffffffff9590861693841561025d57878c52838952898c208761011e876102cb565b168d5289526101378a8d20935b60038501548689610335565b878c52838952898c20858d52895260028a8d20934285550154600284019081558c60038501928d84558a600187019273ffffffffffffffffffffffffffffffffffffffff19928385541617845561018f828a8d610603565b156101cf5797509750505050505050528352838620908154906101b3818316610311565b169065ffffffffffff19161790555b8452606435905282205580f35b9091939597995099919395979952878b528d8c8120916101ee8b6102cb565b1690528a528a8d20958603610234575b5050505050508287528352838620908652825261022f83862060036000918281558260018201558260028201550155565b6101c2565b6003944287556001870192541690825416179055546002840155549101553880808080806101fe565b838952898c208c805289526101378a8d209361012b565b875162406f5d60e21b8152600490fd5b8780fd5b839060a036600319011261009957604435916001600160a01b038316830361009d57506102c4602092608435906064359060243560043561065f565b9051908152f35b65ffffffffffff90811660001901919082116102e357565b634e487b7160e01b600052601160045260246000fd5b65ffffffffffff91821690821603919082116102e357565b65ffffffffffff8091169081146102e35760010190565b919082018092116102e357565b91909181156104ed5760009180835260209082825265ffffffffffff95604095878787205416918215156000146104da5783875281855287872089610379856102cb565b16885285528787205b8488528286528888208489528652888820914283556001600160a01b03918260018201541691600185019073ffffffffffffffffffffffffffffffffffffffff1993848354161782556002830154908181106000146104cf5781039081116104bb57600390925b600287019384550154926003860193845561040589888d610603565b156104355750505050505050508352522090815490610425818316610311565b169065ffffffffffff1916179055565b909192939495979699506104909c878c52888a528c8c20906104568c6102cb565b168c5289528b8b20958603610492575b50505050505084528152838320918352522060036000918281558260018201558260028201550155565b565b600394428755600187019254169082541617905554600284015554910155388080808080610466565b634e487b7160e01b8c52601160045260248cfd5b505060038b926103e9565b8185528787208780528552878720610382565b50505050565b909382156105fc5760009280845260209183835265ffffffffffff96604096888888205416928315156000146105e8578488528286528888208a610536866102cb565b1689528652888820915b858952838752898920858a528752898920924284556001600160a01b03928360018301541692600186019173ffffffffffffffffffffffffffffffffffffffff1994858454161783556000146105bd576105a06003916002850154610328565b92600287019384550154926003860193845561040589888d610603565b600283015490818110156105de5781039081116104bb576003905b926103e9565b505060038b6105d8565b828652888820888052865288882091610540565b5050505050565b600092835260205265ffffffffffff80604084205416908115159283610637575b5050506000146106315790565b50600190565b6020526040842092509061064a906102cb565b16825260205260408120544214388080610624565b848483610671939897959694986107d5565b94600095828752602091825260409065ffffffffffff828920911688528252808720938151608081019667ffffffffffffffff97828110898211176107c15790606092918552875490818352846001600160a01b03928360018c01541694858a820152600360028d01549c8d8b84015201549687910152116107b55716036107ac576107a257815193637028a55d60e11b8552600485015260248401528183604481305afa948515610798578795610736575b50505050610733929350610328565b90565b90918093949550913d8411610790575b601f8301601f191685019182118583101761077c57528201829003126107785761073392935051908392388080610724565b8380fd5b634e487b7160e01b88526041600452602488fd5b3d9250610746565b81513d89823e3d90fd5b5092955050505050565b50505050505050565b50505050505050505050565b634e487b7160e01b8b52604160045260248bfd5b9290926000838152602091825265ffffffffffff6040928184842054169687156108d557808252848420836108098a6102cb565b1685528252858585205411156108e05786845280825284842084805282528585852054116108d55795949392919061084183986102cb565b965b8289168389161161085957505050505050505090565b610877657fffffffffff61086d8b8b6102f9565b60011c16896102f9565b98878552818352858520848b1686528352858520548781146000146108a3575050505050505050505090565b968098999a929394959697106000146108c55750975b96959493929190610843565b98506108d0906102cb565b6108b9565b505050935050505090565b50505050505050610733906102cb56fea164736f6c6343000813000a"; + "0x6080806040523461001c5761090190816100228239308160080152f35b600080fdfe604060808152307f000000000000000000000000000000000000000000000000000000000000000014600436101561003657600080fd5b600091823560e01c908163656a7ea614610288578163690f66bf146100a0575063ebe333721461006557600080fd5b61009d5760a036600319011261009d57608435801515810361009957610096906064356044356024356004356104f3565b80f35b5080fd5b80fd5b9190506100995760e03660031901126100995760a435906044356084356001600160a01b0360243560c4358281169081900361028457838852602094600435865286892054600f0b89811261027457858a52838752878a205465ffffffffffff9590861693841561025d57878c52838952898c208761011e876102cb565b168d5289526101378a8d20935b60038501548689610335565b878c52838952898c20858d52895260028a8d20934285550154600284019081558c60038501928d84558a600187019273ffffffffffffffffffffffffffffffffffffffff19928385541617845561018f828a8d610603565b156101cf5797509750505050505050528352838620908154906101b3818316610311565b169065ffffffffffff19161790555b8452606435905282205580f35b9091939597995099919395979952878b528d8c8120916101ee8b6102cb565b1690528a528a8d20958603610234575b5050505050508287528352838620908652825261022f83862060036000918281558260018201558260028201550155565b6101c2565b6003944287556001870192541690825416179055546002840155549101553880808080806101fe565b838952898c208c805289526101378a8d209361012b565b875162406f5d60e21b8152600490fd5b8780fd5b839060a036600319011261009957604435916001600160a01b038316830361009d57506102c4602092608435906064359060243560043561065f565b9051908152f35b65ffffffffffff90811660001901919082116102e357565b634e487b7160e01b600052601160045260246000fd5b65ffffffffffff91821690821603919082116102e357565b65ffffffffffff8091169081146102e35760010190565b919082018092116102e357565b91909181156104ed5760009180835260209082825265ffffffffffff95604095878787205416918215156000146104da5783875281855287872089610379856102cb565b16885285528787205b8488528286528888208489528652888820914283556001600160a01b03918260018201541691600185019073ffffffffffffffffffffffffffffffffffffffff1993848354161782556002830154908181106000146104cf5781039081116104bb57600390925b600287019384550154926003860193845561040589888d610603565b156104355750505050505050508352522090815490610425818316610311565b169065ffffffffffff1916179055565b909192939495979699506104909c878c52888a528c8c20906104568c6102cb565b168c5289528b8b20958603610492575b50505050505084528152838320918352522060036000918281558260018201558260028201550155565b565b600394428755600187019254169082541617905554600284015554910155388080808080610466565b634e487b7160e01b8c52601160045260248cfd5b505060038b926103e9565b8185528787208780528552878720610382565b50505050565b909382156105fc5760009280845260209183835265ffffffffffff96604096888888205416928315156000146105e8578488528286528888208a610536866102cb565b1689528652888820915b858952838752898920858a528752898920924284556001600160a01b03928360018301541692600186019173ffffffffffffffffffffffffffffffffffffffff1994858454161783556000146105bd576105a06003916002850154610328565b92600287019384550154926003860193845561040589888d610603565b600283015490818110156105de5781039081116104bb576003905b926103e9565b505060038b6105d8565b828652888820888052865288882091610540565b5050505050565b600092835260205265ffffffffffff80604084205416908115159283610637575b5050506000146106315790565b50600190565b6020526040842092509061064a906102cb565b16825260205260408120544214388080610624565b848483610671939897959694986107d5565b94600095828752602091825260409065ffffffffffff828920911688528252808720938151608081019667ffffffffffffffff97828110898211176107c15790606092918552875490818352846001600160a01b03928360018c01541694858a820152600360028d01549c8d8b84015201549687910152116107b55716036107ac576107a257815193637028a55d60e11b8552600485015260248401528183604481305afa948515610798578795610736575b50505050610733929350610328565b90565b90918093949550913d8411610790575b601f8301601f191685019182118583101761077c57528201829003126107785761073392935051908392388080610724565b8380fd5b634e487b7160e01b88526041600452602488fd5b3d9250610746565b81513d89823e3d90fd5b5092955050505050565b50505050505050565b50505050505050505050565b634e487b7160e01b8b52604160045260248bfd5b926000838152602094855265ffffffffffff906040918083832054169687156108d957858152838320826108088a6102cb565b1684528152848484205411156108e45786835285815283832083805281528484842054116108d95795949392919061084082986102cb565b965b8189168289161161085857505050505050505090565b610876657fffffffffff61086c8b8b6102f9565b60011c16896102f9565b988988855287835285852084821686528352858520548781146000146108a457505050505050505050505090565b968098999a9b9394959697106000146108c7575050975b96959493929190610842565b9099506108d491506102cb565b6108bb565b505094505050505090565b50505050505050610733906102cb56fea164736f6c6343000813000a"; type DelegationLogicLibraryConstructorParams = | [signer?: Signer] diff --git a/src/types/hardhat.d.ts b/src/types/hardhat.d.ts index b453ee4..d58d776 100644 --- a/src/types/hardhat.d.ts +++ b/src/types/hardhat.d.ts @@ -117,6 +117,14 @@ declare module "hardhat/types/runtime" { name: "VetoGovernorVotesQuorumFraction", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "IMinter", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "IRewardsDistributor", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "IVeArtProxy", signerOrOptions?: ethers.Signer | FactoryOptions @@ -145,6 +153,10 @@ declare module "hardhat/types/runtime" { name: "MarshallGovernor", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "RewardsDistributor", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "VeArtProxy", signerOrOptions?: ethers.Signer | FactoryOptions @@ -284,6 +296,16 @@ declare module "hardhat/types/runtime" { address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; + getContractAt( + name: "IMinter", + address: string | ethers.Addressable, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "IRewardsDistributor", + address: string | ethers.Addressable, + signer?: ethers.Signer + ): Promise; getContractAt( name: "IVeArtProxy", address: string | ethers.Addressable, @@ -319,6 +341,11 @@ declare module "hardhat/types/runtime" { address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; + getContractAt( + name: "RewardsDistributor", + address: string | ethers.Addressable, + signer?: ethers.Signer + ): Promise; getContractAt( name: "VeArtProxy", address: string | ethers.Addressable, @@ -434,6 +461,14 @@ declare module "hardhat/types/runtime" { name: "VetoGovernorVotesQuorumFraction", signerOrOptions?: ethers.Signer | DeployContractOptions ): Promise; + deployContract( + name: "IMinter", + signerOrOptions?: ethers.Signer | DeployContractOptions + ): Promise; + deployContract( + name: "IRewardsDistributor", + signerOrOptions?: ethers.Signer | DeployContractOptions + ): Promise; deployContract( name: "IVeArtProxy", signerOrOptions?: ethers.Signer | DeployContractOptions @@ -462,6 +497,10 @@ declare module "hardhat/types/runtime" { name: "MarshallGovernor", signerOrOptions?: ethers.Signer | DeployContractOptions ): Promise; + deployContract( + name: "RewardsDistributor", + signerOrOptions?: ethers.Signer | DeployContractOptions + ): Promise; deployContract( name: "VeArtProxy", signerOrOptions?: ethers.Signer | DeployContractOptions @@ -601,6 +640,16 @@ declare module "hardhat/types/runtime" { args: any[], signerOrOptions?: ethers.Signer | DeployContractOptions ): Promise; + deployContract( + name: "IMinter", + args: any[], + signerOrOptions?: ethers.Signer | DeployContractOptions + ): Promise; + deployContract( + name: "IRewardsDistributor", + args: any[], + signerOrOptions?: ethers.Signer | DeployContractOptions + ): Promise; deployContract( name: "IVeArtProxy", args: any[], @@ -636,6 +685,11 @@ declare module "hardhat/types/runtime" { args: any[], signerOrOptions?: ethers.Signer | DeployContractOptions ): Promise; + deployContract( + name: "RewardsDistributor", + args: any[], + signerOrOptions?: ethers.Signer | DeployContractOptions + ): Promise; deployContract( name: "VeArtProxy", args: any[], diff --git a/src/types/index.ts b/src/types/index.ts index aa23077..f08917f 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -60,6 +60,10 @@ export type { VetoGovernorVotes } from "./contracts/governance/VetoGovernorVotes export { VetoGovernorVotes__factory } from "./factories/contracts/governance/VetoGovernorVotes__factory"; export type { VetoGovernorVotesQuorumFraction } from "./contracts/governance/VetoGovernorVotesQuorumFraction"; export { VetoGovernorVotesQuorumFraction__factory } from "./factories/contracts/governance/VetoGovernorVotesQuorumFraction__factory"; +export type { IMinter } from "./contracts/interfaces/IMinter"; +export { IMinter__factory } from "./factories/contracts/interfaces/IMinter__factory"; +export type { IRewardsDistributor } from "./contracts/interfaces/IRewardsDistributor"; +export { IRewardsDistributor__factory } from "./factories/contracts/interfaces/IRewardsDistributor__factory"; export type { IVeArtProxy } from "./contracts/interfaces/IVeArtProxy"; export { IVeArtProxy__factory } from "./factories/contracts/interfaces/IVeArtProxy__factory"; export type { IVoter } from "./contracts/interfaces/IVoter"; @@ -74,6 +78,8 @@ export type { SafeCastLibrary } from "./contracts/libraries/SafeCastLibrary"; export { SafeCastLibrary__factory } from "./factories/contracts/libraries/SafeCastLibrary__factory"; export type { MarshallGovernor } from "./contracts/MarshallGovernor"; export { MarshallGovernor__factory } from "./factories/contracts/MarshallGovernor__factory"; +export type { RewardsDistributor } from "./contracts/RewardsDistributor"; +export { RewardsDistributor__factory } from "./factories/contracts/RewardsDistributor__factory"; export type { VeArtProxy } from "./contracts/VeArtProxy"; export { VeArtProxy__factory } from "./factories/contracts/VeArtProxy__factory"; export type { VotingEscrow } from "./contracts/VotingEscrow";