Source Code
Overview
MOVR Balance
MOVR Value
$0.00View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ERC20Mine
Compiler Version
v0.6.9+commit.3e3065ac
Contract Source Code (Solidity)
/**
*Submitted for verification at moonriver.moonscan.io on 2021-10-29
*/
// File: contracts/intf/IERC20.sol
// This is a file copied from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
}
// File: contracts/lib/SafeMath.sol
/**
* @title SafeMath
* @author DODO Breeder
*
* @notice Math operations with safety checks that revert on error
*/
library SafeMath {
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "MUL_ERROR");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "DIVIDING_ERROR");
return a / b;
}
function divCeil(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 quotient = div(a, b);
uint256 remainder = a - quotient * b;
if (remainder > 0) {
return quotient + 1;
} else {
return quotient;
}
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SUB_ERROR");
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "ADD_ERROR");
return c;
}
function sqrt(uint256 x) internal pure returns (uint256 y) {
uint256 z = x / 2 + 1;
y = x;
while (z < y) {
y = z;
z = (x / z + z) / 2;
}
}
}
// File: contracts/lib/SafeERC20.sol
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
);
}
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: contracts/lib/DecimalMath.sol
/**
* @title DecimalMath
* @author DODO Breeder
*
* @notice Functions for fixed point number with 18 decimals
*/
library DecimalMath {
using SafeMath for uint256;
uint256 internal constant ONE = 10**18;
uint256 internal constant ONE2 = 10**36;
function mulFloor(uint256 target, uint256 d) internal pure returns (uint256) {
return target.mul(d) / (10**18);
}
function mulCeil(uint256 target, uint256 d) internal pure returns (uint256) {
return target.mul(d).divCeil(10**18);
}
function divFloor(uint256 target, uint256 d) internal pure returns (uint256) {
return target.mul(10**18).div(d);
}
function divCeil(uint256 target, uint256 d) internal pure returns (uint256) {
return target.mul(10**18).divCeil(d);
}
function reciprocalFloor(uint256 target) internal pure returns (uint256) {
return uint256(10**36).div(target);
}
function reciprocalCeil(uint256 target) internal pure returns (uint256) {
return uint256(10**36).divCeil(target);
}
function powFloor(uint256 target, uint256 e) internal pure returns (uint256) {
if (e == 0) {
return 10 ** 18;
} else if (e == 1) {
return target;
} else {
uint p = powFloor(target, e.div(2));
p = p.mul(p) / (10**18);
if (e % 2 == 1) {
p = p.mul(target) / (10**18);
}
return p;
}
}
}
// File: contracts/lib/InitializableOwnable.sol
/**
* @title Ownable
* @author DODO Breeder
*
* @notice Ownership related functions
*/
contract InitializableOwnable {
address public _OWNER_;
address public _NEW_OWNER_;
bool internal _INITIALIZED_;
// ============ Events ============
event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
// ============ Modifiers ============
modifier notInitialized() {
require(!_INITIALIZED_, "DODO_INITIALIZED");
_;
}
modifier onlyOwner() {
require(msg.sender == _OWNER_, "NOT_OWNER");
_;
}
// ============ Functions ============
function initOwner(address newOwner) public notInitialized {
_INITIALIZED_ = true;
_OWNER_ = newOwner;
}
function transferOwnership(address newOwner) public onlyOwner {
emit OwnershipTransferPrepared(_OWNER_, newOwner);
_NEW_OWNER_ = newOwner;
}
function claimOwnership() public {
require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM");
emit OwnershipTransferred(_OWNER_, _NEW_OWNER_);
_OWNER_ = _NEW_OWNER_;
_NEW_OWNER_ = address(0);
}
}
// File: contracts/lib/Ownable.sol
/**
* @title Ownable
* @author DODO Breeder
*
* @notice Ownership related functions
*/
contract Ownable {
address public _OWNER_;
address public _NEW_OWNER_;
// ============ Events ============
event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
// ============ Modifiers ============
modifier onlyOwner() {
require(msg.sender == _OWNER_, "NOT_OWNER");
_;
}
// ============ Functions ============
constructor() internal {
_OWNER_ = msg.sender;
emit OwnershipTransferred(address(0), _OWNER_);
}
function transferOwnership(address newOwner) external virtual onlyOwner {
emit OwnershipTransferPrepared(_OWNER_, newOwner);
_NEW_OWNER_ = newOwner;
}
function claimOwnership() external {
require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM");
emit OwnershipTransferred(_OWNER_, _NEW_OWNER_);
_OWNER_ = _NEW_OWNER_;
_NEW_OWNER_ = address(0);
}
}
// File: contracts/DODOToken/DODOMineV2/RewardVault.sol
interface IRewardVault {
function reward(address to, uint256 amount) external;
function withdrawLeftOver(address to, uint256 amount) external;
}
contract RewardVault is Ownable {
using SafeERC20 for IERC20;
address public rewardToken;
constructor(address _rewardToken) public {
rewardToken = _rewardToken;
}
function reward(address to, uint256 amount) external onlyOwner {
IERC20(rewardToken).safeTransfer(to, amount);
}
function withdrawLeftOver(address to,uint256 amount) external onlyOwner {
uint256 leftover = IERC20(rewardToken).balanceOf(address(this));
require(amount <= leftover, "VAULT_NOT_ENOUGH");
IERC20(rewardToken).safeTransfer(to, amount);
}
}
// File: contracts/DODOToken/DODOMineV2/BaseMine.sol
contract BaseMine is InitializableOwnable {
using SafeERC20 for IERC20;
using SafeMath for uint256;
// ============ Storage ============
struct RewardTokenInfo {
address rewardToken;
uint256 startBlock;
uint256 endBlock;
address rewardVault;
uint256 rewardPerBlock;
uint256 accRewardPerShare;
uint256 lastRewardBlock;
mapping(address => uint256) userRewardPerSharePaid;
mapping(address => uint256) userRewards;
}
RewardTokenInfo[] public rewardTokenInfos;
uint256 internal _totalSupply;
mapping(address => uint256) internal _balances;
// ============ Event =============
event Claim(uint256 indexed i, address indexed user, uint256 reward);
event UpdateReward(uint256 indexed i, uint256 rewardPerBlock);
event UpdateEndBlock(uint256 indexed i, uint256 endBlock);
event NewRewardToken(uint256 indexed i, address rewardToken);
event RemoveRewardToken(address rewardToken);
event WithdrawLeftOver(address owner, uint256 i);
// ============ View ============
function getPendingReward(address user, uint256 i) public view returns (uint256) {
require(i<rewardTokenInfos.length, "DODOMineV2: REWARD_ID_NOT_FOUND");
RewardTokenInfo storage rt = rewardTokenInfos[i];
uint256 accRewardPerShare = rt.accRewardPerShare;
if (rt.lastRewardBlock != block.number) {
accRewardPerShare = _getAccRewardPerShare(i);
}
return
DecimalMath.mulFloor(
balanceOf(user),
accRewardPerShare.sub(rt.userRewardPerSharePaid[user])
).add(rt.userRewards[user]);
}
function getPendingRewardByToken(address user, address rewardToken) external view returns (uint256) {
return getPendingReward(user, getIdByRewardToken(rewardToken));
}
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address user) public view returns (uint256) {
return _balances[user];
}
function getRewardTokenById(uint256 i) external view returns (address) {
require(i<rewardTokenInfos.length, "DODOMineV2: REWARD_ID_NOT_FOUND");
RewardTokenInfo memory rt = rewardTokenInfos[i];
return rt.rewardToken;
}
function getIdByRewardToken(address rewardToken) public view returns(uint256) {
uint256 len = rewardTokenInfos.length;
for (uint256 i = 0; i < len; i++) {
if (rewardToken == rewardTokenInfos[i].rewardToken) {
return i;
}
}
require(false, "DODOMineV2: TOKEN_NOT_FOUND");
}
function getRewardNum() external view returns(uint256) {
return rewardTokenInfos.length;
}
// ============ Claim ============
function claimReward(uint256 i) public {
require(i<rewardTokenInfos.length, "DODOMineV2: REWARD_ID_NOT_FOUND");
_updateReward(msg.sender, i);
RewardTokenInfo storage rt = rewardTokenInfos[i];
uint256 reward = rt.userRewards[msg.sender];
if (reward > 0) {
rt.userRewards[msg.sender] = 0;
IRewardVault(rt.rewardVault).reward(msg.sender, reward);
emit Claim(i, msg.sender, reward);
}
}
function claimAllRewards() external {
uint256 len = rewardTokenInfos.length;
for (uint256 i = 0; i < len; i++) {
claimReward(i);
}
}
// =============== Ownable ================
function addRewardToken(
address rewardToken,
uint256 rewardPerBlock,
uint256 startBlock,
uint256 endBlock
) external onlyOwner {
require(rewardToken != address(0), "DODOMineV2: TOKEN_INVALID");
require(startBlock > block.number, "DODOMineV2: START_BLOCK_INVALID");
require(endBlock > startBlock, "DODOMineV2: DURATION_INVALID");
uint256 len = rewardTokenInfos.length;
for (uint256 i = 0; i < len; i++) {
require(
rewardToken != rewardTokenInfos[i].rewardToken,
"DODOMineV2: TOKEN_ALREADY_ADDED"
);
}
RewardTokenInfo storage rt = rewardTokenInfos.push();
rt.rewardToken = rewardToken;
rt.startBlock = startBlock;
rt.endBlock = endBlock;
rt.rewardPerBlock = rewardPerBlock;
rt.rewardVault = address(new RewardVault(rewardToken));
emit NewRewardToken(len, rewardToken);
}
function removeRewardToken(address rewardToken) external onlyOwner {
uint256 len = rewardTokenInfos.length;
for (uint256 i = 0; i < len; i++) {
if (rewardToken == rewardTokenInfos[i].rewardToken) {
if(i != len - 1) {
rewardTokenInfos[i] = rewardTokenInfos[len - 1];
}
rewardTokenInfos.pop();
emit RemoveRewardToken(rewardToken);
break;
}
}
}
function setEndBlock(uint256 i, uint256 newEndBlock)
external
onlyOwner
{
require(i < rewardTokenInfos.length, "DODOMineV2: REWARD_ID_NOT_FOUND");
_updateReward(address(0), i);
RewardTokenInfo storage rt = rewardTokenInfos[i];
require(block.number < newEndBlock, "DODOMineV2: END_BLOCK_INVALID");
require(block.number > rt.startBlock, "DODOMineV2: NOT_START");
require(block.number < rt.endBlock, "DODOMineV2: ALREADY_CLOSE");
rt.endBlock = newEndBlock;
emit UpdateEndBlock(i, newEndBlock);
}
function setReward(uint256 i, uint256 newRewardPerBlock)
external
onlyOwner
{
require(i < rewardTokenInfos.length, "DODOMineV2: REWARD_ID_NOT_FOUND");
_updateReward(address(0), i);
RewardTokenInfo storage rt = rewardTokenInfos[i];
require(block.number < rt.endBlock, "DODOMineV2: ALREADY_CLOSE");
rt.rewardPerBlock = newRewardPerBlock;
emit UpdateReward(i, newRewardPerBlock);
}
function withdrawLeftOver(uint256 i, uint256 amount) external onlyOwner {
require(i < rewardTokenInfos.length, "DODOMineV2: REWARD_ID_NOT_FOUND");
RewardTokenInfo storage rt = rewardTokenInfos[i];
require(block.number > rt.endBlock, "DODOMineV2: MINING_NOT_FINISHED");
IRewardVault(rt.rewardVault).withdrawLeftOver(msg.sender,amount);
emit WithdrawLeftOver(msg.sender, i);
}
// ============ Internal ============
function _updateReward(address user, uint256 i) internal {
RewardTokenInfo storage rt = rewardTokenInfos[i];
if (rt.lastRewardBlock != block.number){
rt.accRewardPerShare = _getAccRewardPerShare(i);
rt.lastRewardBlock = block.number;
}
if (user != address(0)) {
rt.userRewards[user] = getPendingReward(user, i);
rt.userRewardPerSharePaid[user] = rt.accRewardPerShare;
}
}
function _updateAllReward(address user) internal {
uint256 len = rewardTokenInfos.length;
for (uint256 i = 0; i < len; i++) {
_updateReward(user, i);
}
}
function _getUnrewardBlockNum(uint256 i) internal view returns (uint256) {
RewardTokenInfo memory rt = rewardTokenInfos[i];
if (block.number < rt.startBlock || rt.lastRewardBlock > rt.endBlock) {
return 0;
}
uint256 start = rt.lastRewardBlock < rt.startBlock ? rt.startBlock : rt.lastRewardBlock;
uint256 end = rt.endBlock < block.number ? rt.endBlock : block.number;
return end.sub(start);
}
function _getAccRewardPerShare(uint256 i) internal view returns (uint256) {
RewardTokenInfo memory rt = rewardTokenInfos[i];
if (totalSupply() == 0) {
return rt.accRewardPerShare;
}
return
rt.accRewardPerShare.add(
DecimalMath.divFloor(_getUnrewardBlockNum(i).mul(rt.rewardPerBlock), totalSupply())
);
}
}
// File: contracts/DODOToken/DODOMineV2/ERC20Mine.sol
contract ERC20Mine is BaseMine {
using SafeERC20 for IERC20;
using SafeMath for uint256;
// ============ Storage ============
address public _TOKEN_;
function init(address owner, address token) external {
super.initOwner(owner);
_TOKEN_ = token;
}
// ============ Event ============
event Deposit(address indexed user, uint256 amount);
event Withdraw(address indexed user, uint256 amount);
// ============ Deposit && Withdraw && Exit ============
function deposit(uint256 amount) external {
require(amount > 0, "DODOMineV2: CANNOT_DEPOSIT_ZERO");
_updateAllReward(msg.sender);
uint256 erc20OriginBalance = IERC20(_TOKEN_).balanceOf(address(this));
IERC20(_TOKEN_).safeTransferFrom(msg.sender, address(this), amount);
uint256 actualStakeAmount = IERC20(_TOKEN_).balanceOf(address(this)).sub(erc20OriginBalance);
_totalSupply = _totalSupply.add(actualStakeAmount);
_balances[msg.sender] = _balances[msg.sender].add(actualStakeAmount);
emit Deposit(msg.sender, actualStakeAmount);
}
function withdraw(uint256 amount) external {
require(amount > 0, "DODOMineV2: CANNOT_WITHDRAW_ZERO");
_updateAllReward(msg.sender);
_totalSupply = _totalSupply.sub(amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount);
IERC20(_TOKEN_).safeTransfer(msg.sender, amount);
emit Withdraw(msg.sender, amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"i","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"i","type":"uint256"},{"indexed":false,"internalType":"address","name":"rewardToken","type":"address"}],"name":"NewRewardToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferPrepared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"rewardToken","type":"address"}],"name":"RemoveRewardToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"i","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"}],"name":"UpdateEndBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"i","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPerBlock","type":"uint256"}],"name":"UpdateReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"i","type":"uint256"}],"name":"WithdrawLeftOver","type":"event"},{"inputs":[],"name":"_NEW_OWNER_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_OWNER_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_TOKEN_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"rewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"}],"name":"addRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardToken","type":"address"}],"name":"getIdByRewardToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getPendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"rewardToken","type":"address"}],"name":"getPendingRewardByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getRewardTokenById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"initOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardToken","type":"address"}],"name":"removeRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardTokenInfos","outputs":[{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"address","name":"rewardVault","type":"address"},{"internalType":"uint256","name":"rewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"accRewardPerShare","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"},{"internalType":"uint256","name":"newEndBlock","type":"uint256"}],"name":"setEndBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"},{"internalType":"uint256","name":"newRewardPerBlock","type":"uint256"}],"name":"setReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawLeftOver","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50612739806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001775760003560e01c806370a0823111620000d5578063a7c3e4e51162000087578063a7c3e4e514620002fd578063ae169a501462000314578063b6b55f25146200032b578063d895fff11462000342578063f09a40161462000359578063f2fde38b14620003705762000177565b806370a08231146200028d5780638456db1514620002a457806392e3200b14620002ae578063999ffd9714620002b8578063a2a54bee14620002cf578063a47bd49614620002e65762000177565b80631c00a0de116200012f5780631c00a0de14620002085780632e1a7d4d14620002345780633d509c97146200024b5780634e71e0c814620002625780635ae9a549146200026c578063697d86a214620002765762000177565b8062b68f08146200017c5780630b83a72714620001ab5780630d00929714620001b757806316048bc414620001ce57806318160ddd14620001e75780631abbeb5414620001f1575b600080fd5b620001936200018d3660046200196a565b62000387565b604051620001a2919062001f6c565b60405180910390f35b620001b5620003a2565b005b620001b5620001c83660046200194c565b620003c9565b620001d862000435565b604051620001a2919062001ac9565b6200019362000444565b620001b56200020236600462001a6b565b6200044a565b6200021f6200021936600462001a39565b6200057e565b604051620001a2979695949392919062001b1a565b620001b56200024536600462001a39565b620005d8565b620001b56200025c3660046200194c565b620006b4565b620001b56200087c565b620001936200090d565b620001d86200028736600462001a39565b62000913565b620001936200029e3660046200194c565b620009cb565b620001d8620009e6565b620001d8620009f5565b62000193620002c9366004620019a3565b62000a04565b62000193620002e03660046200194c565b62000ae7565b620001b5620002f736600462001a6b565b62000b59565b620001b56200030e366004620019d0565b62000c38565b620001b56200032536600462001a39565b62000ea0565b620001b56200033c36600462001a39565b62000fd1565b620001b56200035336600462001a6b565b620011c7565b620001b56200036a3660046200196a565b62001308565b620001b5620003813660046200194c565b62001336565b60006200039983620002c98462000ae7565b90505b92915050565b60025460005b81811015620003c557620003bc8162000ea0565b600101620003a8565b5050565b600154600160a01b900460ff1615620003ff5760405162461bcd60e51b8152600401620003f69062001d47565b60405180910390fd5b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b031681565b60035490565b6000546001600160a01b03163314620004775760405162461bcd60e51b8152600401620003f69062001e82565b60025482106200049b5760405162461bcd60e51b8152600401620003f69062001d71565b620004a8600083620013be565b600060028381548110620004b857fe5b90600052602060002090600902019050814310620004ea5760405162461bcd60e51b8152600401620003f69062001bbc565b80600101544311620005105760405162461bcd60e51b8152600401620003f69062001cf5565b80600201544310620005365760405162461bcd60e51b8152600401620003f69062001cbe565b818160020181905550827f7283eac7a9c64d862e3560a616651ea06b57add3efe966190156d8862c10efd48360405162000571919062001f6c565b60405180910390a2505050565b600281815481106200058c57fe5b600091825260209091206009909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750939592949091169290919087565b60008111620005fb5760405162461bcd60e51b8152600401620003f69062001ddf565b620006063362001453565b6003546200061b908263ffffffff6200147716565b6003553360009081526004602052604090205462000640908263ffffffff6200147716565b336000818152600460205260409020919091556005546200066e916001600160a01b039091169083620014a2565b336001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051620006a9919062001f6c565b60405180910390a250565b6000546001600160a01b03163314620006e15760405162461bcd60e51b8152600401620003f69062001e82565b60025460005b81811015620008775760028181548110620006fe57fe5b60009182526020909120600990910201546001600160a01b03848116911614156200086e57600182038114620007d057600260018303815481106200073f57fe5b9060005260206000209060090201600282815481106200075b57fe5b60009182526020909120825460099092020180546001600160a01b039283166001600160a01b0319918216178255600180850154908301556002808501549083015560038085015490830180549190941691161790915560048083015490820155600580830154908201556006918201549101555b6002805480620007dc57fe5b60008281526020812060096000199093019283020180546001600160a01b031990811682556001820183905560028201839055600382018054909116905560048101829055600581018290556006015590556040517f36bd04094fa067bb9471a8fbdb0a6e8a43424a2566ad3a740c88973fa40a3118906200086090859062001ac9565b60405180910390a162000877565b600101620006e7565b505050565b6001546001600160a01b03163314620008a95760405162461bcd60e51b8152600401620003f69062001b95565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60025490565b60025460009082106200093a5760405162461bcd60e51b8152600401620003f69062001d71565b62000944620018d7565b600283815481106200095257fe5b60009182526020918290206040805160e081018252600990930290910180546001600160a01b039081168085526001830154958501959095526002820154928401929092526003810154909116606083015260048101546080830152600581015460a08301526006015460c0909101529150505b919050565b6001600160a01b031660009081526004602052604090205490565b6001546001600160a01b031681565b6005546001600160a01b031681565b600254600090821062000a2b5760405162461bcd60e51b8152600401620003f69062001d71565b60006002838154811062000a3b57fe5b906000526020600020906009020190506000816005015490504382600601541462000a6e5762000a6b84620014fc565b90505b6001600160a01b038516600090815260088301602052604090205462000ade9062000ad162000a9d88620009cb565b6001600160a01b038916600090815260078701602052604090205462000acb90869063ffffffff6200147716565b620015f5565b9063ffffffff6200162216565b95945050505050565b600254600090815b8181101562000b3e576002818154811062000b0657fe5b60009182526020909120600990910201546001600160a01b038581169116141562000b35579150620009c69050565b60010162000aef565b5060405162461bcd60e51b8152600401620003f69062001bf3565b6000546001600160a01b0316331462000b865760405162461bcd60e51b8152600401620003f69062001e82565b600254821062000baa5760405162461bcd60e51b8152600401620003f69062001d71565b62000bb7600083620013be565b60006002838154811062000bc757fe5b906000526020600020906009020190508060020154431062000bfd5760405162461bcd60e51b8152600401620003f69062001cbe565b818160040181905550827fbcabeac7f89430597dc942c3264f28fd08010c3b2e19ecf95c6e690f9820b2a48360405162000571919062001f6c565b6000546001600160a01b0316331462000c655760405162461bcd60e51b8152600401620003f69062001e82565b6001600160a01b03841662000c8e5760405162461bcd60e51b8152600401620003f69062001da8565b43821162000cb05760405162461bcd60e51b8152600401620003f69062001ea5565b81811162000cd25760405162461bcd60e51b8152600401620003f69062001c87565b60025460005b8181101562000d37576002818154811062000cef57fe5b60009182526020909120600990910201546001600160a01b038781169116141562000d2e5760405162461bcd60e51b8152600401620003f69062001b5e565b60010162000cd8565b50600280546001810182556000919091526009027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810180546001600160a01b0388166001600160a01b03199091161781557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82018590557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082018490557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2909101859055604051869062000e0c9062001926565b62000e18919062001ac9565b604051809103906000f08015801562000e35573d6000803e3d6000fd5b508160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550817ff164ae823f4542cc5c8fce1671fabc0d21159bf75d4fc92d697be0f1e74885268760405162000e90919062001ac9565b60405180910390a2505050505050565b600254811062000ec45760405162461bcd60e51b8152600401620003f69062001d71565b62000ed03382620013be565b60006002828154811062000ee057fe5b60009182526020808320338452600860099093020191820190526040909120549091508015620008775733600081815260088401602052604080822091909155600384015490516310b3879160e11b81526001600160a01b03909116916321670f229162000f549190859060040162001add565b600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b50505050336001600160a01b0316837f3ed1528b0fdc7c5207c1bf935e34a667e13656b9ed165260c522be0bc544f3038360405162000fc4919062001f6c565b60405180910390a3505050565b6000811162000ff45760405162461bcd60e51b8152600401620003f69062001e14565b62000fff3362001453565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a08231906200103290309060040162001ac9565b60206040518083038186803b1580156200104b57600080fd5b505afa15801562001060573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001086919062001a52565b600554909150620010a9906001600160a01b031633308563ffffffff6200164a16565b6005546040516370a0823160e01b8152600091620011449184916001600160a01b0316906370a0823190620010e390309060040162001ac9565b60206040518083038186803b158015620010fc57600080fd5b505afa15801562001111573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001137919062001a52565b9063ffffffff6200147716565b6003549091506200115c908263ffffffff6200162216565b6003553360009081526004602052604090205462001181908263ffffffff6200162216565b33600081815260046020526040908190209290925590517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c906200057190849062001f6c565b6000546001600160a01b03163314620011f45760405162461bcd60e51b8152600401620003f69062001e82565b6002548210620012185760405162461bcd60e51b8152600401620003f69062001d71565b6000600283815481106200122857fe5b90600052602060002090600902019050806002015443116200125e5760405162461bcd60e51b8152600401620003f69062001e4b565b6003810154604051633550d7eb60e11b81526001600160a01b0390911690636aa1afd69062001294903390869060040162001add565b600060405180830381600087803b158015620012af57600080fd5b505af1158015620012c4573d6000803e3d6000fd5b505050507f6b769350ff403947f8ca4f54b35b9747d58b4b2676c957c460c1d5e4ba64342e3384604051620012fb92919062001add565b60405180910390a1505050565b6200131382620003c9565b600580546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314620013635760405162461bcd60e51b8152600401620003f69062001e82565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600060028281548110620013ce57fe5b90600052602060002090600902019050438160060154146200140157620013f582620014fc565b60058201554360068201555b6001600160a01b0383161562000877576200141d838362000a04565b6001600160a01b038416600090815260088301602090815260408083209390935560058401546007850190915291902055505050565b60025460005b8181101562000877576200146e8382620013be565b60010162001459565b6000828211156200149c5760405162461bcd60e51b8152600401620003f69062001d24565b50900390565b620008778363a9059cbb60e01b8484604051602401620014c492919062001add565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001674565b600062001508620018d7565b600283815481106200151657fe5b60009182526020918290206040805160e081018252600990930290910180546001600160a01b0390811684526001820154948401949094526002810154918301919091526003810154909216606082015260048201546080820152600582015460a082015260069091015460c082015290506200159262000444565b620015a35760a001519050620009c6565b620015ee620015dc620015cc8360800151620015bf8762001738565b9063ffffffff6200183b16565b620015d662000444565b6200187b565b60a08301519063ffffffff6200162216565b9392505050565b6000670de0b6b3a764000062001612848463ffffffff6200183b16565b816200161a57fe5b049392505050565b600082820183811015620003995760405162461bcd60e51b8152600401620003f69062001edc565b6200166e846323b872dd60e01b858585604051602401620014c49392919062001af6565b50505050565b60006060836001600160a01b03168360405162001692919062001a8d565b6000604051808303816000865af19150503d8060008114620016d1576040519150601f19603f3d011682016040523d82523d6000602084013e620016d6565b606091505b509150915081620016fb5760405162461bcd60e51b8152600401620003f69062001c2a565b8051156200166e578080602001905181019062001719919062001a17565b6200166e5760405162461bcd60e51b8152600401620003f69062001eff565b600062001744620018d7565b600283815481106200175257fe5b60009182526020918290206040805160e081018252600990930290910180546001600160a01b03908116845260018201549484018590526002820154928401929092526003810154909116606083015260048101546080830152600581015460a08301526006015460c08201529150431080620017d6575080604001518160c00151115b15620017e7576000915050620009c6565b600081602001518260c001511062001804578160c001516200180a565b81602001515b905060004383604001511062001821574362001827565b82604001515b905062000ade818363ffffffff6200147716565b6000826200184c575060006200039c565b828202828482816200185a57fe5b0414620003995760405162461bcd60e51b8152600401620003f69062001f49565b600062000399826200189c85670de0b6b3a764000063ffffffff6200183b16565b9063ffffffff620018a916565b6000808211620018cd5760405162461bcd60e51b8152600401620003f69062001c5f565b8183816200161a57fe5b6040518060e0016040528060006001600160a01b03168152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b61078e8062001f7683390190565b80356001600160a01b03811681146200039c57600080fd5b6000602082840312156200195e578081fd5b62000399838362001934565b600080604083850312156200197d578081fd5b62001989848462001934565b91506200199a846020850162001934565b90509250929050565b60008060408385031215620019b6578182fd5b620019c2848462001934565b946020939093013593505050565b60008060008060808587031215620019e6578182fd5b84356001600160a01b0381168114620019fd578283fd5b966020860135965060408601359560600135945092505050565b60006020828403121562001a29578081fd5b8151801515811462000399578182fd5b60006020828403121562001a4b578081fd5b5035919050565b60006020828403121562001a64578081fd5b5051919050565b6000806040838503121562001a7e578182fd5b50508035926020909101359150565b60008251815b8181101562001aaf576020818601810151858301520162001a93565b8181111562001abe5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03978816815260208101969096526040860194909452919094166060840152608083019390935260a082019290925260c081019190915260e00190565b6020808252601f908201527f444f444f4d696e6556323a20544f4b454e5f414c52454144595f414444454400604082015260600190565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b6020808252601d908201527f444f444f4d696e6556323a20454e445f424c4f434b5f494e56414c4944000000604082015260600190565b6020808252601b908201527f444f444f4d696e6556323a20544f4b454e5f4e4f545f464f554e440000000000604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b6020808252601c908201527f444f444f4d696e6556323a204455524154494f4e5f494e56414c494400000000604082015260600190565b60208082526019908201527f444f444f4d696e6556323a20414c52454144595f434c4f534500000000000000604082015260600190565b6020808252601590820152741113d113d35a5b99558c8e881393d517d4d5105495605a1b604082015260600190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252601f908201527f444f444f4d696e6556323a205245574152445f49445f4e4f545f464f554e4400604082015260600190565b60208082526019908201527f444f444f4d696e6556323a20544f4b454e5f494e56414c494400000000000000604082015260600190565b6020808252818101527f444f444f4d696e6556323a2043414e4e4f545f57495448445241575f5a45524f604082015260600190565b6020808252601f908201527f444f444f4d696e6556323a2043414e4e4f545f4445504f5349545f5a45524f00604082015260600190565b6020808252601f908201527f444f444f4d696e6556323a204d494e494e475f4e4f545f46494e495348454400604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b6020808252601f908201527f444f444f4d696e6556323a2053544152545f424c4f434b5f494e56414c494400604082015260600190565b60208082526009908201526820a2222fa2a92927a960b91b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b9081526020019056fe608060405234801561001057600080fd5b5060405161078e38038061078e83398101604081905261002f9161009d565b600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600280546001600160a01b0319166001600160a01b03929092169190911790556100cb565b6000602082840312156100ae578081fd5b81516001600160a01b03811681146100c4578182fd5b9392505050565b6106b4806100da6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636aa1afd61161005b5780636aa1afd6146100bd5780638456db15146100d0578063f2fde38b146100d8578063f7c618c1146100eb5761007d565b806316048bc41461008257806321670f22146100a05780634e71e0c8146100b5575b600080fd5b61008a6100f3565b604051610097919061055e565b60405180910390f35b6100b36100ae3660046104c3565b610102565b005b6100b3610156565b6100b36100cb3660046104c3565b6101e4565b61008a6102d3565b6100b36100e63660046104a1565b6102e2565b61008a610367565b6000546001600160a01b031681565b6000546001600160a01b031633146101355760405162461bcd60e51b815260040161012c906105e7565b60405180910390fd5b600254610152906001600160a01b0316838363ffffffff61037616565b5050565b6001546001600160a01b031633146101805760405162461bcd60e51b815260040161012c9061058b565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b0316331461020e5760405162461bcd60e51b815260040161012c906105e7565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a082319061023f90309060040161055e565b60206040518083038186803b15801561025757600080fd5b505afa15801561026b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028f919061050d565b9050808211156102b15760405162461bcd60e51b815260040161012c90610654565b6002546102ce906001600160a01b0316848463ffffffff61037616565b505050565b6001546001600160a01b031681565b6000546001600160a01b0316331461030c5760405162461bcd60e51b815260040161012c906105e7565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b6102ce8363a9059cbb60e01b8484604051602401610395929190610572565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260006060836001600160a01b0316836040516103e39190610525565b6000604051808303816000865af19150503d8060008114610420576040519150601f19603f3d011682016040523d82523d6000602084013e610425565b606091505b5091509150816104475760405162461bcd60e51b815260040161012c906105b2565b80511561047e578080602001905181019061046291906104ed565b61047e5760405162461bcd60e51b815260040161012c9061060a565b50505050565b80356001600160a01b038116811461049b57600080fd5b92915050565b6000602082840312156104b2578081fd5b6104bc8383610484565b9392505050565b600080604083850312156104d5578081fd5b6104df8484610484565b946020939093013593505050565b6000602082840312156104fe578081fd5b815180151581146104bc578182fd5b60006020828403121561051e578081fd5b5051919050565b60008251815b81811015610545576020818601810151858301520161052b565b818111156105535782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526010908201526f0ac82aa98a8be9c9ea8be8a9c9eaa8e960831b60408201526060019056fea264697066735822122042396c672081307e3a16b314006dc6dde2eaefd312eb8baf34d38c1d6ca692bb64736f6c63430006090033a2646970667358221220804e439e6237feaea8f2e428fe9b080c31f0e7eebe4172f62951a2b1ff7e30f564736f6c63430006090033
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620001775760003560e01c806370a0823111620000d5578063a7c3e4e51162000087578063a7c3e4e514620002fd578063ae169a501462000314578063b6b55f25146200032b578063d895fff11462000342578063f09a40161462000359578063f2fde38b14620003705762000177565b806370a08231146200028d5780638456db1514620002a457806392e3200b14620002ae578063999ffd9714620002b8578063a2a54bee14620002cf578063a47bd49614620002e65762000177565b80631c00a0de116200012f5780631c00a0de14620002085780632e1a7d4d14620002345780633d509c97146200024b5780634e71e0c814620002625780635ae9a549146200026c578063697d86a214620002765762000177565b8062b68f08146200017c5780630b83a72714620001ab5780630d00929714620001b757806316048bc414620001ce57806318160ddd14620001e75780631abbeb5414620001f1575b600080fd5b620001936200018d3660046200196a565b62000387565b604051620001a2919062001f6c565b60405180910390f35b620001b5620003a2565b005b620001b5620001c83660046200194c565b620003c9565b620001d862000435565b604051620001a2919062001ac9565b6200019362000444565b620001b56200020236600462001a6b565b6200044a565b6200021f6200021936600462001a39565b6200057e565b604051620001a2979695949392919062001b1a565b620001b56200024536600462001a39565b620005d8565b620001b56200025c3660046200194c565b620006b4565b620001b56200087c565b620001936200090d565b620001d86200028736600462001a39565b62000913565b620001936200029e3660046200194c565b620009cb565b620001d8620009e6565b620001d8620009f5565b62000193620002c9366004620019a3565b62000a04565b62000193620002e03660046200194c565b62000ae7565b620001b5620002f736600462001a6b565b62000b59565b620001b56200030e366004620019d0565b62000c38565b620001b56200032536600462001a39565b62000ea0565b620001b56200033c36600462001a39565b62000fd1565b620001b56200035336600462001a6b565b620011c7565b620001b56200036a3660046200196a565b62001308565b620001b5620003813660046200194c565b62001336565b60006200039983620002c98462000ae7565b90505b92915050565b60025460005b81811015620003c557620003bc8162000ea0565b600101620003a8565b5050565b600154600160a01b900460ff1615620003ff5760405162461bcd60e51b8152600401620003f69062001d47565b60405180910390fd5b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b031681565b60035490565b6000546001600160a01b03163314620004775760405162461bcd60e51b8152600401620003f69062001e82565b60025482106200049b5760405162461bcd60e51b8152600401620003f69062001d71565b620004a8600083620013be565b600060028381548110620004b857fe5b90600052602060002090600902019050814310620004ea5760405162461bcd60e51b8152600401620003f69062001bbc565b80600101544311620005105760405162461bcd60e51b8152600401620003f69062001cf5565b80600201544310620005365760405162461bcd60e51b8152600401620003f69062001cbe565b818160020181905550827f7283eac7a9c64d862e3560a616651ea06b57add3efe966190156d8862c10efd48360405162000571919062001f6c565b60405180910390a2505050565b600281815481106200058c57fe5b600091825260209091206009909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169750939592949091169290919087565b60008111620005fb5760405162461bcd60e51b8152600401620003f69062001ddf565b620006063362001453565b6003546200061b908263ffffffff6200147716565b6003553360009081526004602052604090205462000640908263ffffffff6200147716565b336000818152600460205260409020919091556005546200066e916001600160a01b039091169083620014a2565b336001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051620006a9919062001f6c565b60405180910390a250565b6000546001600160a01b03163314620006e15760405162461bcd60e51b8152600401620003f69062001e82565b60025460005b81811015620008775760028181548110620006fe57fe5b60009182526020909120600990910201546001600160a01b03848116911614156200086e57600182038114620007d057600260018303815481106200073f57fe5b9060005260206000209060090201600282815481106200075b57fe5b60009182526020909120825460099092020180546001600160a01b039283166001600160a01b0319918216178255600180850154908301556002808501549083015560038085015490830180549190941691161790915560048083015490820155600580830154908201556006918201549101555b6002805480620007dc57fe5b60008281526020812060096000199093019283020180546001600160a01b031990811682556001820183905560028201839055600382018054909116905560048101829055600581018290556006015590556040517f36bd04094fa067bb9471a8fbdb0a6e8a43424a2566ad3a740c88973fa40a3118906200086090859062001ac9565b60405180910390a162000877565b600101620006e7565b505050565b6001546001600160a01b03163314620008a95760405162461bcd60e51b8152600401620003f69062001b95565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60025490565b60025460009082106200093a5760405162461bcd60e51b8152600401620003f69062001d71565b62000944620018d7565b600283815481106200095257fe5b60009182526020918290206040805160e081018252600990930290910180546001600160a01b039081168085526001830154958501959095526002820154928401929092526003810154909116606083015260048101546080830152600581015460a08301526006015460c0909101529150505b919050565b6001600160a01b031660009081526004602052604090205490565b6001546001600160a01b031681565b6005546001600160a01b031681565b600254600090821062000a2b5760405162461bcd60e51b8152600401620003f69062001d71565b60006002838154811062000a3b57fe5b906000526020600020906009020190506000816005015490504382600601541462000a6e5762000a6b84620014fc565b90505b6001600160a01b038516600090815260088301602052604090205462000ade9062000ad162000a9d88620009cb565b6001600160a01b038916600090815260078701602052604090205462000acb90869063ffffffff6200147716565b620015f5565b9063ffffffff6200162216565b95945050505050565b600254600090815b8181101562000b3e576002818154811062000b0657fe5b60009182526020909120600990910201546001600160a01b038581169116141562000b35579150620009c69050565b60010162000aef565b5060405162461bcd60e51b8152600401620003f69062001bf3565b6000546001600160a01b0316331462000b865760405162461bcd60e51b8152600401620003f69062001e82565b600254821062000baa5760405162461bcd60e51b8152600401620003f69062001d71565b62000bb7600083620013be565b60006002838154811062000bc757fe5b906000526020600020906009020190508060020154431062000bfd5760405162461bcd60e51b8152600401620003f69062001cbe565b818160040181905550827fbcabeac7f89430597dc942c3264f28fd08010c3b2e19ecf95c6e690f9820b2a48360405162000571919062001f6c565b6000546001600160a01b0316331462000c655760405162461bcd60e51b8152600401620003f69062001e82565b6001600160a01b03841662000c8e5760405162461bcd60e51b8152600401620003f69062001da8565b43821162000cb05760405162461bcd60e51b8152600401620003f69062001ea5565b81811162000cd25760405162461bcd60e51b8152600401620003f69062001c87565b60025460005b8181101562000d37576002818154811062000cef57fe5b60009182526020909120600990910201546001600160a01b038781169116141562000d2e5760405162461bcd60e51b8152600401620003f69062001b5e565b60010162000cd8565b50600280546001810182556000919091526009027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810180546001600160a01b0388166001600160a01b03199091161781557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82018590557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082018490557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2909101859055604051869062000e0c9062001926565b62000e18919062001ac9565b604051809103906000f08015801562000e35573d6000803e3d6000fd5b508160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550817ff164ae823f4542cc5c8fce1671fabc0d21159bf75d4fc92d697be0f1e74885268760405162000e90919062001ac9565b60405180910390a2505050505050565b600254811062000ec45760405162461bcd60e51b8152600401620003f69062001d71565b62000ed03382620013be565b60006002828154811062000ee057fe5b60009182526020808320338452600860099093020191820190526040909120549091508015620008775733600081815260088401602052604080822091909155600384015490516310b3879160e11b81526001600160a01b03909116916321670f229162000f549190859060040162001add565b600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b50505050336001600160a01b0316837f3ed1528b0fdc7c5207c1bf935e34a667e13656b9ed165260c522be0bc544f3038360405162000fc4919062001f6c565b60405180910390a3505050565b6000811162000ff45760405162461bcd60e51b8152600401620003f69062001e14565b62000fff3362001453565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a08231906200103290309060040162001ac9565b60206040518083038186803b1580156200104b57600080fd5b505afa15801562001060573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001086919062001a52565b600554909150620010a9906001600160a01b031633308563ffffffff6200164a16565b6005546040516370a0823160e01b8152600091620011449184916001600160a01b0316906370a0823190620010e390309060040162001ac9565b60206040518083038186803b158015620010fc57600080fd5b505afa15801562001111573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001137919062001a52565b9063ffffffff6200147716565b6003549091506200115c908263ffffffff6200162216565b6003553360009081526004602052604090205462001181908263ffffffff6200162216565b33600081815260046020526040908190209290925590517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c906200057190849062001f6c565b6000546001600160a01b03163314620011f45760405162461bcd60e51b8152600401620003f69062001e82565b6002548210620012185760405162461bcd60e51b8152600401620003f69062001d71565b6000600283815481106200122857fe5b90600052602060002090600902019050806002015443116200125e5760405162461bcd60e51b8152600401620003f69062001e4b565b6003810154604051633550d7eb60e11b81526001600160a01b0390911690636aa1afd69062001294903390869060040162001add565b600060405180830381600087803b158015620012af57600080fd5b505af1158015620012c4573d6000803e3d6000fd5b505050507f6b769350ff403947f8ca4f54b35b9747d58b4b2676c957c460c1d5e4ba64342e3384604051620012fb92919062001add565b60405180910390a1505050565b6200131382620003c9565b600580546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314620013635760405162461bcd60e51b8152600401620003f69062001e82565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600060028281548110620013ce57fe5b90600052602060002090600902019050438160060154146200140157620013f582620014fc565b60058201554360068201555b6001600160a01b0383161562000877576200141d838362000a04565b6001600160a01b038416600090815260088301602090815260408083209390935560058401546007850190915291902055505050565b60025460005b8181101562000877576200146e8382620013be565b60010162001459565b6000828211156200149c5760405162461bcd60e51b8152600401620003f69062001d24565b50900390565b620008778363a9059cbb60e01b8484604051602401620014c492919062001add565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001674565b600062001508620018d7565b600283815481106200151657fe5b60009182526020918290206040805160e081018252600990930290910180546001600160a01b0390811684526001820154948401949094526002810154918301919091526003810154909216606082015260048201546080820152600582015460a082015260069091015460c082015290506200159262000444565b620015a35760a001519050620009c6565b620015ee620015dc620015cc8360800151620015bf8762001738565b9063ffffffff6200183b16565b620015d662000444565b6200187b565b60a08301519063ffffffff6200162216565b9392505050565b6000670de0b6b3a764000062001612848463ffffffff6200183b16565b816200161a57fe5b049392505050565b600082820183811015620003995760405162461bcd60e51b8152600401620003f69062001edc565b6200166e846323b872dd60e01b858585604051602401620014c49392919062001af6565b50505050565b60006060836001600160a01b03168360405162001692919062001a8d565b6000604051808303816000865af19150503d8060008114620016d1576040519150601f19603f3d011682016040523d82523d6000602084013e620016d6565b606091505b509150915081620016fb5760405162461bcd60e51b8152600401620003f69062001c2a565b8051156200166e578080602001905181019062001719919062001a17565b6200166e5760405162461bcd60e51b8152600401620003f69062001eff565b600062001744620018d7565b600283815481106200175257fe5b60009182526020918290206040805160e081018252600990930290910180546001600160a01b03908116845260018201549484018590526002820154928401929092526003810154909116606083015260048101546080830152600581015460a08301526006015460c08201529150431080620017d6575080604001518160c00151115b15620017e7576000915050620009c6565b600081602001518260c001511062001804578160c001516200180a565b81602001515b905060004383604001511062001821574362001827565b82604001515b905062000ade818363ffffffff6200147716565b6000826200184c575060006200039c565b828202828482816200185a57fe5b0414620003995760405162461bcd60e51b8152600401620003f69062001f49565b600062000399826200189c85670de0b6b3a764000063ffffffff6200183b16565b9063ffffffff620018a916565b6000808211620018cd5760405162461bcd60e51b8152600401620003f69062001c5f565b8183816200161a57fe5b6040518060e0016040528060006001600160a01b03168152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b61078e8062001f7683390190565b80356001600160a01b03811681146200039c57600080fd5b6000602082840312156200195e578081fd5b62000399838362001934565b600080604083850312156200197d578081fd5b62001989848462001934565b91506200199a846020850162001934565b90509250929050565b60008060408385031215620019b6578182fd5b620019c2848462001934565b946020939093013593505050565b60008060008060808587031215620019e6578182fd5b84356001600160a01b0381168114620019fd578283fd5b966020860135965060408601359560600135945092505050565b60006020828403121562001a29578081fd5b8151801515811462000399578182fd5b60006020828403121562001a4b578081fd5b5035919050565b60006020828403121562001a64578081fd5b5051919050565b6000806040838503121562001a7e578182fd5b50508035926020909101359150565b60008251815b8181101562001aaf576020818601810151858301520162001a93565b8181111562001abe5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03978816815260208101969096526040860194909452919094166060840152608083019390935260a082019290925260c081019190915260e00190565b6020808252601f908201527f444f444f4d696e6556323a20544f4b454e5f414c52454144595f414444454400604082015260600190565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b6020808252601d908201527f444f444f4d696e6556323a20454e445f424c4f434b5f494e56414c4944000000604082015260600190565b6020808252601b908201527f444f444f4d696e6556323a20544f4b454e5f4e4f545f464f554e440000000000604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b6020808252601c908201527f444f444f4d696e6556323a204455524154494f4e5f494e56414c494400000000604082015260600190565b60208082526019908201527f444f444f4d696e6556323a20414c52454144595f434c4f534500000000000000604082015260600190565b6020808252601590820152741113d113d35a5b99558c8e881393d517d4d5105495605a1b604082015260600190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252601f908201527f444f444f4d696e6556323a205245574152445f49445f4e4f545f464f554e4400604082015260600190565b60208082526019908201527f444f444f4d696e6556323a20544f4b454e5f494e56414c494400000000000000604082015260600190565b6020808252818101527f444f444f4d696e6556323a2043414e4e4f545f57495448445241575f5a45524f604082015260600190565b6020808252601f908201527f444f444f4d696e6556323a2043414e4e4f545f4445504f5349545f5a45524f00604082015260600190565b6020808252601f908201527f444f444f4d696e6556323a204d494e494e475f4e4f545f46494e495348454400604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b6020808252601f908201527f444f444f4d696e6556323a2053544152545f424c4f434b5f494e56414c494400604082015260600190565b60208082526009908201526820a2222fa2a92927a960b91b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b9081526020019056fe608060405234801561001057600080fd5b5060405161078e38038061078e83398101604081905261002f9161009d565b600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600280546001600160a01b0319166001600160a01b03929092169190911790556100cb565b6000602082840312156100ae578081fd5b81516001600160a01b03811681146100c4578182fd5b9392505050565b6106b4806100da6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636aa1afd61161005b5780636aa1afd6146100bd5780638456db15146100d0578063f2fde38b146100d8578063f7c618c1146100eb5761007d565b806316048bc41461008257806321670f22146100a05780634e71e0c8146100b5575b600080fd5b61008a6100f3565b604051610097919061055e565b60405180910390f35b6100b36100ae3660046104c3565b610102565b005b6100b3610156565b6100b36100cb3660046104c3565b6101e4565b61008a6102d3565b6100b36100e63660046104a1565b6102e2565b61008a610367565b6000546001600160a01b031681565b6000546001600160a01b031633146101355760405162461bcd60e51b815260040161012c906105e7565b60405180910390fd5b600254610152906001600160a01b0316838363ffffffff61037616565b5050565b6001546001600160a01b031633146101805760405162461bcd60e51b815260040161012c9061058b565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b0316331461020e5760405162461bcd60e51b815260040161012c906105e7565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a082319061023f90309060040161055e565b60206040518083038186803b15801561025757600080fd5b505afa15801561026b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028f919061050d565b9050808211156102b15760405162461bcd60e51b815260040161012c90610654565b6002546102ce906001600160a01b0316848463ffffffff61037616565b505050565b6001546001600160a01b031681565b6000546001600160a01b0316331461030c5760405162461bcd60e51b815260040161012c906105e7565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b6102ce8363a9059cbb60e01b8484604051602401610395929190610572565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260006060836001600160a01b0316836040516103e39190610525565b6000604051808303816000865af19150503d8060008114610420576040519150601f19603f3d011682016040523d82523d6000602084013e610425565b606091505b5091509150816104475760405162461bcd60e51b815260040161012c906105b2565b80511561047e578080602001905181019061046291906104ed565b61047e5760405162461bcd60e51b815260040161012c9061060a565b50505050565b80356001600160a01b038116811461049b57600080fd5b92915050565b6000602082840312156104b2578081fd5b6104bc8383610484565b9392505050565b600080604083850312156104d5578081fd5b6104df8484610484565b946020939093013593505050565b6000602082840312156104fe578081fd5b815180151581146104bc578182fd5b60006020828403121561051e578081fd5b5051919050565b60008251815b81811015610545576020818601810151858301520161052b565b818111156105535782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526010908201526f0ac82aa98a8be9c9ea8be8a9c9eaa8e960831b60408201526060019056fea264697066735822122042396c672081307e3a16b314006dc6dde2eaefd312eb8baf34d38c1d6ca692bb64736f6c63430006090033a2646970667358221220804e439e6237feaea8f2e428fe9b080c31f0e7eebe4172f62951a2b1ff7e30f564736f6c63430006090033
Deployed Bytecode Sourcemap
20709:1552:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14084:181;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15746:177;;;:::i;:::-;;9701:127;;;;;;;;;:::i;9068:22::-;;;:::i;:::-;;;;;;;;14273:91;;;:::i;17502:596::-;;;;;;;;;:::i;12860:41::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;21877:381;;;;;;;;;:::i;16989:505::-;;;;;;;;;:::i;10007:228::-;;;:::i;15104:104::-;;;:::i;14484:249::-;;;;;;;;;:::i;14372:104::-;;;;;;;;;:::i;9097:26::-;;;:::i;20859:22::-;;;:::i;13468:608::-;;;;;;;;;:::i;14741:355::-;;;;;;;;;:::i;18106:472::-;;;;;;;;;:::i;15983:998::-;;;;;;;;;:::i;15258:480::-;;;;;;;;;:::i;21244:625::-;;;;;;;;;:::i;18586:438::-;;;;;;;;;:::i;20890:120::-;;;;;;;;;:::i;9836:163::-;;;;;;;;;:::i;14084:181::-;14175:7;14202:55;14219:4;14225:31;14244:11;14225:18;:31::i;14202:55::-;14195:62;;14084:181;;;;;:::o;15746:177::-;15807:16;:23;15793:11;15841:75;15865:3;15861:1;:7;15841:75;;;15890:14;15902:1;15890:11;:14::i;:::-;15870:3;;15841:75;;;;15746:177;:::o;9701:127::-;9490:13;;-1:-1:-1;;;9490:13:0;;;;9489:14;9481:43;;;;-1:-1:-1;;;9481:43:0;;;;;;;;;;;;;;;;;9787:4:::1;9771:20:::0;;-1:-1:-1;;;;9771:20:0::1;-1:-1:-1::0;;;9771:20:0::1;::::0;;;9802:18;;-1:-1:-1;;;;;9802:18:0;;::::1;-1:-1:-1::0;;;;;;9802:18:0;;::::1;::::0;;;::::1;::::0;;9701:127::o;9068:22::-;;;-1:-1:-1;;;;;9068:22:0;;:::o;14273:91::-;14344:12;;14273:91;:::o;17502:596::-;9606:7;;-1:-1:-1;;;;;9606:7:0;9592:10;:21;9584:43;;;;-1:-1:-1;;;9584:43:0;;;;;;;;;17620:16:::1;:23:::0;17616:27;::::1;17608:71;;;;-1:-1:-1::0;;;17608:71:0::1;;;;;;;;;17690:28;17712:1;17716;17690:13;:28::i;:::-;17729:26;17758:16;17775:1;17758:19;;;;;;;;;;;;;;;;;;17729:48;;17813:11;17798:12;:26;17790:68;;;;-1:-1:-1::0;;;17790:68:0::1;;;;;;;;;17892:2;:13;;;17877:12;:28;17869:62;;;;-1:-1:-1::0;;;17869:62:0::1;;;;;;;;;17965:2;:11;;;17950:12;:26;17942:64;;;;-1:-1:-1::0;;;17942:64:0::1;;;;;;;;;18033:11;18019:2;:11;;:25;;;;18075:1;18060:30;18078:11;18060:30;;;;;;;;;;;;;;;9638:1;17502:596:::0;;:::o;12860:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12860:41:0;;;;-1:-1:-1;12860:41:0;;;;;;;;;;;;:::o;21877:381::-;21948:1;21939:6;:10;21931:55;;;;-1:-1:-1;;;21931:55:0;;;;;;;;;21999:28;22016:10;21999:16;:28::i;:::-;22053:12;;:24;;22070:6;22053:24;:16;:24;:::i;:::-;22038:12;:39;22122:10;22112:21;;;;:9;:21;;;;;;:33;;22138:6;22112:33;:25;:33;:::i;:::-;22098:10;22088:21;;;;:9;:21;;;;;:57;;;;22163:7;;22156:48;;-1:-1:-1;;;;;22163:7:0;;;;22197:6;22156:28;:48::i;:::-;22231:10;-1:-1:-1;;;;;22222:28:0;;22243:6;22222:28;;;;;;;;;;;;;;;21877:381;:::o;16989:505::-;9606:7;;-1:-1:-1;;;;;9606:7:0;9592:10;:21;9584:43;;;;-1:-1:-1;;;9584:43:0;;;;;;;;;17081:16:::1;:23:::0;17067:11:::1;17115:372;17139:3;17135:1;:7;17115:372;;;17183:16;17200:1;17183:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:31:::0;-1:-1:-1;;;;;17168:46:0;;::::1;17183:31:::0;::::1;17168:46;17164:312;;;17249:1;17243:3;:7;17238:1;:12;17235:107;;17297:16;17320:1;17314:3;:7;17297:25;;;;;;;;;;;;;;;;;;17275:16;17292:1;17275:19;;;;;;;;;::::0;;;::::1;::::0;;;:47;;:19:::1;::::0;;::::1;;:47:::0;;-1:-1:-1;;;;;17275:47:0;;::::1;-1:-1:-1::0;;;;;;17275:47:0;;::::1;;::::0;;-1:-1:-1;17275:47:0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;17235:107:::1;17360:16;:22;;;;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;17360:22:0;;;;;::::1;;::::0;;-1:-1:-1;;;;;;17360:22:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;17406:30:::1;::::0;::::1;::::0;::::1;::::0;17424:11;;17406:30:::1;;;;;;;;;;17455:5;;17164:312;17144:3;;17115:372;;;;9638:1;16989:505:::0;:::o;10007:228::-;10073:11;;-1:-1:-1;;;;;10073:11:0;10059:10;:25;10051:51;;;;-1:-1:-1;;;10051:51:0;;;;;;;;;10148:11;;;10139:7;;10118:42;;-1:-1:-1;;;;;10148:11:0;;;;10139:7;;;;10118:42;;;10181:11;;;;10171:21;;-1:-1:-1;;;;;;10171:21:0;;;-1:-1:-1;;;;;10181:11:0;;10171:21;;;;10203:24;;;10007:228::o;15104:104::-;15177:16;:23;15104:104;:::o;14484:249::-;14576:16;:23;14546:7;;14574:25;;14566:69;;;;-1:-1:-1;;;14566:69:0;;;;;;;;;14646:25;;:::i;:::-;14674:16;14691:1;14674:19;;;;;;;;;;;;;;;;;14646:47;;;;;;;;14674:19;;;;;;;14646:47;;-1:-1:-1;;;;;14646:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14484:249:0;;;;:::o;14372:104::-;-1:-1:-1;;;;;14453:15:0;14426:7;14453:15;;;:9;:15;;;;;;;14372:104::o;9097:26::-;;;-1:-1:-1;;;;;9097:26:0;;:::o;20859:22::-;;;-1:-1:-1;;;;;20859:22:0;;:::o;13468:608::-;13570:16;:23;13540:7;;13568:25;;13560:69;;;;-1:-1:-1;;;13560:69:0;;;;;;;;;13640:26;13669:16;13686:1;13669:19;;;;;;;;;;;;;;;;;;13640:48;;13699:25;13727:2;:20;;;13699:48;;13784:12;13762:2;:18;;;:34;13758:111;;13833:24;13855:1;13833:21;:24::i;:::-;13813:44;;13758:111;-1:-1:-1;;;;;14047:20:0;;;;;;:14;;;:20;;;;;;13899:169;;:143;13938:15;14062:4;13938:9;:15::i;:::-;-1:-1:-1;;;;;13995:31:0;;;;;;:25;;;:31;;;;;;13973:54;;:17;;:54;:21;:54;:::i;:::-;13899:20;:143::i;:::-;:147;:169;:147;:169;:::i;:::-;13879:189;13468:608;-1:-1:-1;;;;;13468:608:0:o;14741:355::-;14844:16;:23;14810:7;;;14878:155;14902:3;14898:1;:7;14878:155;;;14946:16;14963:1;14946:19;;;;;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;14931:46:0;;;14946:31;;14931:46;14927:95;;;15005:1;-1:-1:-1;14998:8:0;;-1:-1:-1;14998:8:0;14927:95;14907:3;;14878:155;;;-1:-1:-1;15043:45:0;;-1:-1:-1;;;15043:45:0;;;;;;;;18106:472;9606:7;;-1:-1:-1;;;;;9606:7:0;9592:10;:21;9584:43;;;;-1:-1:-1;;;9584:43:0;;;;;;;;;18228:16:::1;:23:::0;18224:27;::::1;18216:71;;;;-1:-1:-1::0;;;18216:71:0::1;;;;;;;;;18298:28;18320:1;18324;18298:13;:28::i;:::-;18337:26;18366:16;18383:1;18366:19;;;;;;;;;;;;;;;;;;18337:48;;18429:2;:11;;;18414:12;:26;18406:64;;;;-1:-1:-1::0;;;18406:64:0::1;;;;;;;;;18503:17;18483:2;:17;;:37;;;;18549:1;18536:34;18552:17;18536:34;;;;;;;15983:998:::0;9606:7;;-1:-1:-1;;;;;9606:7:0;9592:10;:21;9584:43;;;;-1:-1:-1;;;9584:43:0;;;;;;;;;-1:-1:-1;;;;;16171:25:0;::::1;16163:63;;;;-1:-1:-1::0;;;16163:63:0::1;;;;;;;;;16258:12;16245:10;:25;16237:69;;;;-1:-1:-1::0;;;16237:69:0::1;;;;;;;;;16336:10;16325:8;:21;16317:62;;;;-1:-1:-1::0;;;16317:62:0::1;;;;;;;;;16406:16;:23:::0;16392:11:::1;16440:200;16464:3;16460:1;:7;16440:200;;;16530:16;16547:1;16530:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:31:::0;-1:-1:-1;;;;;16515:46:0;;::::1;16530:31:::0;::::1;16515:46;;16489:139;;;;-1:-1:-1::0;;;16489:139:0::1;;;;;;;;;16469:3;;16440:200;;;-1:-1:-1::0;16681:16:0::1;:23:::0;;::::1;::::0;::::1;::::0;;16652:26:::1;16681:23:::0;;;;::::1;;::::0;;::::1;16715:28:::0;;-1:-1:-1;;;;;16715:28:0;::::1;-1:-1:-1::0;;;;;;16715:28:0;;::::1;;::::0;;16754:13;;;:26;;;16791:11;;;:22;;;16824:17;;;;:34;;;16894:28:::1;::::0;16732:11;;16894:28:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;16869:2;:14;;;:54;;;;;-1:-1:-1::0;;;;;16869:54:0::1;;;;;-1:-1:-1::0;;;;;16869:54:0::1;;;;;;16956:3;16941:32;16961:11;16941:32;;;;;;;;;;;;;;;9638:1;;15983:998:::0;;;;:::o;15258:480::-;15318:16;:23;15316:25;;15308:69;;;;-1:-1:-1;;;15308:69:0;;;;;;;;;15388:28;15402:10;15414:1;15388:13;:28::i;:::-;15427:26;15456:16;15473:1;15456:19;;;;;;;;;;;;;;;;15518:10;15503:26;;:14;15456:19;;;;;15503:14;;;:26;;;;;;;15456:19;;-1:-1:-1;15544:10:0;;15540:191;;15586:10;15600:1;15571:26;;;:14;;;:26;;;;;;:30;;;;15629:14;;;;15616:55;;-1:-1:-1;;;15616:55:0;;-1:-1:-1;;;;;15629:14:0;;;;15616:35;;:55;;15586:10;15664:6;;15616:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15700:10;-1:-1:-1;;;;;15691:28:0;15697:1;15691:28;15712:6;15691:28;;;;;;;;;;;;;;;15258:480;;;:::o;21244:625::-;21314:1;21305:6;:10;21297:54;;;;-1:-1:-1;;;21297:54:0;;;;;;;;;21364:28;21381:10;21364:16;:28::i;:::-;21441:7;;21434:40;;-1:-1:-1;;;21434:40:0;;21405:26;;-1:-1:-1;;;;;21441:7:0;;21434:25;;:40;;21468:4;;21434:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21492:7;;21405:69;;-1:-1:-1;21485:67:0;;-1:-1:-1;;;;;21492:7:0;21518:10;21538:4;21545:6;21485:67;:32;:67;:::i;:::-;21598:7;;21591:40;;-1:-1:-1;;;21591:40:0;;21563:25;;21591:64;;21636:18;;-1:-1:-1;;;;;21598:7:0;;21591:25;;:40;;21625:4;;21591:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;:64;:44;:64;:::i;:::-;21691:12;;21563:92;;-1:-1:-1;21691:35:0;;21563:92;21691:35;:16;:35;:::i;:::-;21676:12;:50;21771:10;21761:21;;;;:9;:21;;;;;;:44;;21787:17;21761:44;:25;:44;:::i;:::-;21747:10;21737:21;;;;:9;:21;;;;;;;:68;;;;21823:38;;;;;;21843:17;;21823:38;;18586:438;9606:7;;-1:-1:-1;;;;;9606:7:0;9592:10;:21;9584:43;;;;-1:-1:-1;;;9584:43:0;;;;;;;;;18681:16:::1;:23:::0;18677:27;::::1;18669:71;;;;-1:-1:-1::0;;;18669:71:0::1;;;;;;;;;18761:26;18790:16;18807:1;18790:19;;;;;;;;;;;;;;;;;;18761:48;;18843:2;:11;;;18828:12;:26;18820:70;;;;-1:-1:-1::0;;;18820:70:0::1;;;;;;;;;18916:14;::::0;::::1;::::0;18903:64:::1;::::0;-1:-1:-1;;;18903:64:0;;-1:-1:-1;;;;;18916:14:0;;::::1;::::0;18903:45:::1;::::0;:64:::1;::::0;18949:10:::1;::::0;18960:6;;18903:64:::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18985:31;19002:10;19014:1;18985:31;;;;;;;;;;;;;;;;9638:1;18586:438:::0;;:::o;20890:120::-;20954:22;20970:5;20954:15;:22::i;:::-;20987:7;:15;;-1:-1:-1;;;;;;20987:15:0;-1:-1:-1;;;;;20987:15:0;;;;;;;;;;-1:-1:-1;20890:120:0:o;9836:163::-;9606:7;;-1:-1:-1;;;;;9606:7:0;9592:10;:21;9584:43;;;;-1:-1:-1;;;9584:43:0;;;;;;;;;9940:7:::1;::::0;;9914:44:::1;::::0;-1:-1:-1;;;;;9914:44:0;;::::1;::::0;9940:7;::::1;::::0;9914:44:::1;::::0;::::1;9969:11;:22:::0;;-1:-1:-1;;;;;;9969:22:0::1;-1:-1:-1::0;;;;;9969:22:0;;;::::1;::::0;;;::::1;::::0;;9836:163::o;19080:473::-;19148:26;19177:16;19194:1;19177:19;;;;;;;;;;;;;;;;;;19148:48;;19233:12;19211:2;:18;;;:34;19207:161;;19284:24;19306:1;19284:21;:24::i;:::-;19261:20;;;:47;19344:12;19323:18;;;:33;19207:161;-1:-1:-1;;;;;19382:18:0;;;19378:168;;19440:25;19457:4;19463:1;19440:16;:25::i;:::-;-1:-1:-1;;;;;19417:20:0;;;;;;:14;;;:20;;;;;;;;:48;;;;19514:20;;;;19480:25;;;:31;;;;;;:54;19080:473;;;:::o;19561:198::-;19635:16;:23;19621:11;19669:83;19693:3;19689:1;:7;19669:83;;;19718:22;19732:4;19738:1;19718:13;:22::i;:::-;19698:3;;19669:83;;3577:137;3635:7;3668:1;3663;:6;;3655:28;;;;-1:-1:-1;;;3655:28:0;;;;;;;;;-1:-1:-1;3701:5:0;;;3577:137::o;4673:211::-;4790:86;4810:5;4840:23;;;4865:2;4869:5;4817:58;;;;;;;;;;;;;;-1:-1:-1;;4817:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;4817:58:0;-1:-1:-1;;;;;;4817:58:0;;;;;;;;;;4790:19;:86::i;20239:400::-;20304:7;20324:25;;:::i;:::-;20352:16;20369:1;20352:19;;;;;;;;;;;;;;;;;20324:47;;;;;;;;20352:19;;;;;;;20324:47;;-1:-1:-1;;;;;20324:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20386:13:0;:11;:13::i;:::-;20382:78;;20428:20;;;;-1:-1:-1;20421:27:0;;20382:78;20490:141;20533:83;20554:46;20582:2;:17;;;20554:23;20575:1;20554:20;:23::i;:::-;:27;:46;:27;:46;:::i;:::-;20602:13;:11;:13::i;:::-;20533:20;:83::i;:::-;20490:20;;;;;:141;:24;:141;:::i;:::-;20470:161;20239:400;-1:-1:-1;;;20239:400:0:o;7624:127::-;7692:7;7736:6;7719:13;:6;7730:1;7719:13;:10;:13;:::i;:::-;:24;;;;;;;7624:127;-1:-1:-1;;;7624:127:0:o;3722:161::-;3780:7;3812:5;;;3836:6;;;;3828:28;;;;-1:-1:-1;;;3828:28:0;;;;;;;;4892:285;5036:133;5070:5;5113:27;;;5142:4;5148:2;5152:5;5090:68;;;;;;;;;;;5036:133;4892:285;;;;:::o;6246:1046::-;6906:12;6920:23;6955:5;-1:-1:-1;;;;;6947:19:0;6967:4;6947:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6905:67;;;;6991:7;6983:52;;;;-1:-1:-1;;;6983:52:0;;;;;;;;;7052:17;;:21;7048:237;;7207:10;7196:30;;;;;;;;;;;;;;7188:85;;;;-1:-1:-1;;;7188:85:0;;;;;;;;19767:464;19831:7;19851:25;;:::i;:::-;19879:16;19896:1;19879:19;;;;;;;;;;;;;;;;;19851:47;;;;;;;;19879:19;;;;;;;19851:47;;-1:-1:-1;;;;;19851:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19913:12:0;:28;;:64;;;19966:2;:11;;;19945:2;:18;;;:32;19913:64;19909:105;;;20001:1;19994:8;;;;;19909:105;20024:13;20061:2;:13;;;20040:2;:18;;;:34;:71;;20093:2;:18;;;20040:71;;;20077:2;:13;;;20040:71;20024:87;;20122:11;20150:12;20136:2;:11;;;:26;:55;;20179:12;20136:55;;;20165:2;:11;;;20136:55;20122:69;-1:-1:-1;20209:14:0;20122:69;20217:5;20209:14;:7;:14;:::i;2898:226::-;2956:7;2980:6;2976:47;;-1:-1:-1;3010:1:0;3003:8;;2976:47;3047:5;;;3051:1;3047;:5;:1;3071:5;;;;;:10;3063:32;;;;-1:-1:-1;;;3063:32:0;;;;;;;;7898:128;7966:7;7993:25;8016:1;7993:18;:6;8004;7993:18;:10;:18;:::i;:::-;:22;:25;:22;:25;:::i;3132:141::-;3190:7;3222:1;3218;:5;3210:32;;;;-1:-1:-1;;;3210:32:0;;;;;;;;;3264:1;3260;:5;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;5:130::-;72:20;;-1:-1;;;;;23467:54;;24327:35;;24317:2;;24376:1;;24366:12;555:241;;659:2;647:9;638:7;634:23;630:32;627:2;;;-1:-1;;665:12;627:2;727:53;772:7;748:22;727:53;;803:366;;;924:2;912:9;903:7;899:23;895:32;892:2;;;-1:-1;;930:12;892:2;992:53;1037:7;1013:22;992:53;;;982:63;;1100:53;1145:7;1082:2;1125:9;1121:22;1100:53;;;1090:63;;886:283;;;;;;1176:366;;;1297:2;1285:9;1276:7;1272:23;1268:32;1265:2;;;-1:-1;;1303:12;1265:2;1365:53;1410:7;1386:22;1365:53;;;1355:63;1455:2;1494:22;;;;344:20;;-1:-1;;;1259:283;1549:617;;;;;1704:3;1692:9;1683:7;1679:23;1675:33;1672:2;;;-1:-1;;1711:12;1672:2;72:20;;-1:-1;;;;;23467:54;;24327:35;;24317:2;;-1:-1;;24366:12;24317:2;1763:63;1863:2;1902:22;;344:20;;-1:-1;1971:2;2010:22;;344:20;;2079:2;2118:22;344:20;;-1:-1;1666:500;-1:-1;;;1666:500;2173:257;;2285:2;2273:9;2264:7;2260:23;2256:32;2253:2;;;-1:-1;;2291:12;2253:2;223:6;217:13;24473:5;23379:13;23372:21;24451:5;24448:32;24438:2;;-1:-1;;24484:12;2437:241;;2541:2;2529:9;2520:7;2516:23;2512:32;2509:2;;;-1:-1;;2547:12;2509:2;-1:-1;344:20;;2503:175;-1:-1;2503:175;2685:263;;2800:2;2788:9;2779:7;2775:23;2771:32;2768:2;;;-1:-1;;2806:12;2768:2;-1:-1;492:13;;2762:186;-1:-1;2762:186;2955:366;;;3076:2;3064:9;3055:7;3051:23;3047:32;3044:2;;;-1:-1;;3082:12;3044:2;-1:-1;;344:20;;;3234:2;3273:22;;;344:20;;-1:-1;3038:283;11097:271;;3757:5;22849:12;-1:-1;24064:101;24078:6;24075:1;24072:13;24064:101;;;3901:4;24145:11;;;;;24139:18;24126:11;;;24119:39;24093:10;24064:101;;;24180:6;24177:1;24174:13;24171:2;;;-1:-1;24236:6;24231:3;24227:16;24220:27;24171:2;-1:-1;3932:16;;;;;11231:137;-1:-1;;11231:137;11375:222;-1:-1;;;;;23467:54;;;;3548:37;;11502:2;11487:18;;11473:124;11604:349;-1:-1;;;;;23467:54;;;;3407:58;;11939:2;11924:18;;11048:37;11767:2;11752:18;;11738:215;11960:444;-1:-1;;;;;23467:54;;;3548:37;;23467:54;;;;12307:2;12292:18;;3548:37;12390:2;12375:18;;11048:37;;;;12143:2;12128:18;;12114:290;12751:892;-1:-1;;;;;23467:54;;;3548:37;;13211:2;13196:18;;11048:37;;;;13294:2;13279:18;;11048:37;;;;23467:54;;;;13377:2;13362:18;;3548:37;13460:3;13445:19;;11048:37;;;;23478:42;13529:19;;11048:37;;;;13628:3;13613:19;;11048:37;;;;13046:3;13031:19;;13017:626;13650:416;13850:2;13864:47;;;4185:2;13835:18;;;23147:19;4221:33;23187:14;;;4201:54;4274:12;;;13821:245;14073:416;14273:2;14287:47;;;4525:2;14258:18;;;23147:19;-1:-1;;;23187:14;;;4541:36;4596:12;;;14244:245;14496:416;14696:2;14710:47;;;4847:2;14681:18;;;23147:19;4883:31;23187:14;;;4863:52;4934:12;;;14667:245;14919:416;15119:2;15133:47;;;5185:2;15104:18;;;23147:19;5221:29;23187:14;;;5201:50;5270:12;;;15090:245;15342:416;15542:2;15556:47;;;15527:18;;;23147:19;5557:34;23187:14;;;5537:55;5611:12;;;15513:245;15765:416;15965:2;15979:47;;;5862:2;15950:18;;;23147:19;-1:-1;;;23187:14;;;5878:37;5934:12;;;15936:245;16188:416;16388:2;16402:47;;;6185:2;16373:18;;;23147:19;6221:30;23187:14;;;6201:51;6271:12;;;16359:245;16611:416;16811:2;16825:47;;;6522:2;16796:18;;;23147:19;6558:27;23187:14;;;6538:48;6605:12;;;16782:245;17034:416;17234:2;17248:47;;;6856:2;17219:18;;;23147:19;-1:-1;;;23187:14;;;6872:44;6935:12;;;17205:245;17457:416;17657:2;17671:47;;;7186:1;17642:18;;;23147:19;-1:-1;;;23187:14;;;7201:32;7252:12;;;17628:245;17880:416;18080:2;18094:47;;;7503:2;18065:18;;;23147:19;-1:-1;;;23187:14;;;7519:39;7577:12;;;18051:245;18303:416;18503:2;18517:47;;;7828:2;18488:18;;;23147:19;7864:33;23187:14;;;7844:54;7917:12;;;18474:245;18726:416;18926:2;18940:47;;;8168:2;18911:18;;;23147:19;8204:27;23187:14;;;8184:48;8251:12;;;18897:245;19149:416;19349:2;19363:47;;;19334:18;;;23147:19;8538:34;23187:14;;;8518:55;8592:12;;;19320:245;19572:416;19772:2;19786:47;;;8843:2;19757:18;;;23147:19;8879:33;23187:14;;;8859:54;8932:12;;;19743:245;19995:416;20195:2;20209:47;;;9183:2;20180:18;;;23147:19;9219:33;23187:14;;;9199:54;9272:12;;;20166:245;20418:416;20618:2;20632:47;;;9523:1;20603:18;;;23147:19;-1:-1;;;23187:14;;;9538:32;9589:12;;;20589:245;20841:416;21041:2;21055:47;;;9840:2;21026:18;;;23147:19;9876:33;23187:14;;;9856:54;9929:12;;;21012:245;21264:416;21464:2;21478:47;;;10180:1;21449:18;;;23147:19;-1:-1;;;23187:14;;;10195:32;10246:12;;;21435:245;21687:416;21887:2;21901:47;;;10497:2;21872:18;;;23147:19;10533:34;23187:14;;;10513:55;-1:-1;;;10588:12;;;10581:34;10634:12;;;21858:245;22110:416;22310:2;22324:47;;;10885:1;22295:18;;;23147:19;-1:-1;;;23187:14;;;10900:32;10951:12;;;22281:245;22533:222;11048:37;;;22660:2;22645:18;;22631:124
Swarm Source
ipfs://804e439e6237feaea8f2e428fe9b080c31f0e7eebe4172f62951a2b1ff7e30f5
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MOVR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.