Source Code
Overview
ETH Balance
ETH Value
$0.00Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 28328045 | 1 hr ago | 0 ETH | ||||
| 28328045 | 1 hr ago | 0 ETH | ||||
| 28328045 | 1 hr ago | 0 ETH | ||||
| 28328045 | 1 hr ago | 0 ETH | ||||
| 28328045 | 1 hr ago | 0 ETH | ||||
| 28328045 | 1 hr ago | 0 ETH | ||||
| 28327959 | 1 hr ago | 0 ETH | ||||
| 28327959 | 1 hr ago | 0 ETH | ||||
| 28327959 | 1 hr ago | 0 ETH | ||||
| 28327959 | 1 hr ago | 0 ETH | ||||
| 28327959 | 1 hr ago | 0 ETH | ||||
| 28327959 | 1 hr ago | 0 ETH | ||||
| 28327555 | 1 hr ago | 0 ETH | ||||
| 28327555 | 1 hr ago | 0 ETH | ||||
| 28327555 | 1 hr ago | 0 ETH | ||||
| 28327555 | 1 hr ago | 0 ETH | ||||
| 28327555 | 1 hr ago | 0 ETH | ||||
| 28327555 | 1 hr ago | 0 ETH | ||||
| 28323143 | 4 hrs ago | 0 ETH | ||||
| 28323143 | 4 hrs ago | 0 ETH | ||||
| 28323143 | 4 hrs ago | 0 ETH | ||||
| 28323143 | 4 hrs ago | 0 ETH | ||||
| 28323143 | 4 hrs ago | 0 ETH | ||||
| 28323143 | 4 hrs ago | 0 ETH | ||||
| 28323143 | 4 hrs ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
FeeRateDIP3Impl
Compiler Version
v0.6.9+commit.3e3065ac
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/*
Copyright 2021 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
import {InitializableOwnable} from "../lib/InitializableOwnable.sol";
import {IERC20} from "../intf/IERC20.sol";
import {SafeMath} from "../lib/SafeMath.sol";
interface ICrowdPooling {
function _QUOTE_RESERVE_() external view returns (uint256);
function getShares(address user) external view returns (uint256);
function _OWNER_() external returns (address);
}
interface IFee {
function getUserFee(address user) external view returns (uint256);
}
interface IQuota {
function getUserQuota(address user) external view returns (int);
}
interface IPoolHeartBeat {
function isPoolHeartBeatLive(address pool) external view returns(bool);
}
interface IPool {
function version() external pure returns (string memory);
function _LP_FEE_RATE_() external view returns (uint256);
function _BASE_RESERVE_() external view returns (uint);
function _QUOTE_RESERVE_() external view returns (uint);
function _K_() external view returns (uint);
}
contract FeeRateDIP3Impl is InitializableOwnable {
using SafeMath for uint256;
// ============ Storage ============
uint256 public _LP_MT_RATIO_ = 25;
struct CPPoolInfo {
address quoteToken;
int globalQuota;
address feeAddr;
address quotaAddr;
}
mapping(address => CPPoolInfo) public cpPools;
mapping(address => uint256) public specPoolList;
mapping (address => bool) public isAdminListed;
address public poolHeartBeat;
// ============ Events =============
event AddAdmin(address admin);
event RemoveAdmin(address admin);
// ============ Ownable Functions ============
function addCpPoolInfo(address cpPool, address quoteToken, int globalQuota, address feeAddr, address quotaAddr) external {
require(isAdminListed[msg.sender], "ACCESS_DENIED");
CPPoolInfo memory cpPoolInfo = CPPoolInfo({
quoteToken: quoteToken,
feeAddr: feeAddr,
quotaAddr: quotaAddr,
globalQuota: globalQuota
});
cpPools[cpPool] = cpPoolInfo;
}
function setCpPoolInfo(address cpPool, address quoteToken, int globalQuota, address feeAddr, address quotaAddr) external onlyOwner {
cpPools[cpPool].quoteToken = quoteToken;
cpPools[cpPool].feeAddr = feeAddr;
cpPools[cpPool].quotaAddr = quotaAddr;
cpPools[cpPool].globalQuota = globalQuota;
}
function setLpMtRatio(uint256 newLpMtRatio) external onlyOwner {
_LP_MT_RATIO_ = newLpMtRatio;
}
function setSpecPoolList (address poolAddr, uint256 mtFeeRate) public onlyOwner {
specPoolList[poolAddr] = mtFeeRate;
}
function addAdminList (address userAddr) external onlyOwner {
isAdminListed[userAddr] = true;
emit AddAdmin(userAddr);
}
function removeAdminList (address userAddr) external onlyOwner {
isAdminListed[userAddr] = false;
emit RemoveAdmin(userAddr);
}
function setPoolHeartBeat (address newPoolHeartBeat) public onlyOwner {
poolHeartBeat = newPoolHeartBeat;
}
// ============ Pool Owner Functions ============
function setCpPoolQuotaAddr(address cpPool, address quotaAddr) external {
require(msg.sender == ICrowdPooling(cpPool)._OWNER_(), "NOT OWNER OF POOL");
cpPools[cpPool].quotaAddr = quotaAddr;
}
// ============ View Functions ============
function getFeeRate(address pool, address user) external view returns (uint256) {
try IPool(pool).version() returns (string memory poolVersion) {
bytes32 hashPoolVersion = keccak256(abi.encodePacked(poolVersion));
if(_kjudge(hashPoolVersion)) {
uint k = IPool(pool)._K_();
uint baseReserve = IPool(pool)._BASE_RESERVE_();
uint quoteReserve = IPool(pool)._QUOTE_RESERVE_();
require(!(k==0 && (baseReserve ==0 || quoteReserve == 0)), "KJUDGE_ERROR");
}
if (poolHeartBeat != address(0) && !IPoolHeartBeat(poolHeartBeat).isPoolHeartBeatLive(pool)) {
return 10**18 - IPool(pool)._LP_FEE_RATE_() - 1;
}
if(specPoolList[pool] != 0) {
return specPoolList[pool];
}
if(_cp(hashPoolVersion)) {
CPPoolInfo memory cpPoolInfo = cpPools[pool];
address quoteToken = cpPoolInfo.quoteToken;
if(quoteToken == address(0)) {
return 0;
}else {
uint256 userInput = IERC20(quoteToken).balanceOf(pool).sub(ICrowdPooling(pool)._QUOTE_RESERVE_());
uint256 userStake = ICrowdPooling(pool).getShares(user);
address feeAddr = cpPoolInfo.feeAddr;
address quotaAddr = cpPoolInfo.quotaAddr;
int curQuota = cpPoolInfo.globalQuota;
if(quotaAddr != address(0))
curQuota = IQuota(quotaAddr).getUserQuota(user);
require(curQuota == -1 || (curQuota != -1 && int(userInput.add(userStake)) <= curQuota), "DODOFeeImpl: EXCEED_YOUR_QUOTA");
if(feeAddr == address(0)) {
return 0;
} else {
return IFee(feeAddr).getUserFee(user);
}
}
} else if(_dip3dvm(hashPoolVersion) || _dip3dsp(hashPoolVersion)) {
uint256 lpFeeRate = IPool(pool)._LP_FEE_RATE_();
uint256 mtFeeRate = lpFeeRate.mul(_LP_MT_RATIO_).div(100);
if(lpFeeRate.add(mtFeeRate) >= 10**18) {
return 0;
} else {
return mtFeeRate;
}
} else {
return 0;
}
} catch (bytes memory) {
return 0;
}
}
function getCPInfoByUser(address pool, address user) external view returns (bool isHaveCap, int curQuota, uint256 userFee) {
CPPoolInfo memory cpPoolInfo = cpPools[pool];
if(cpPoolInfo.quoteToken == address(0)) {
isHaveCap = false;
curQuota = -1;
userFee = 0;
}else {
address quotaAddr = cpPoolInfo.quotaAddr;
curQuota = cpPoolInfo.globalQuota;
if(quotaAddr != address(0))
curQuota = IQuota(quotaAddr).getUserQuota(user);
if(curQuota == -1) {
isHaveCap = false;
}else {
isHaveCap = true;
uint256 userStake = ICrowdPooling(pool).getShares(user);
if(uint256(curQuota) >= userStake) {
curQuota = int(uint256(curQuota).sub(userStake));
}else {
curQuota = 0;
}
}
address feeAddr = cpPoolInfo.feeAddr;
if(feeAddr == address(0)) {
userFee = 0;
} else {
userFee = IFee(feeAddr).getUserFee(user);
}
}
}
function _cp(bytes32 _hashPoolVersion) internal pure returns (bool) {
return (_hashPoolVersion == keccak256(abi.encodePacked("CP 1.0.0")) || _hashPoolVersion == keccak256(abi.encodePacked("CP 2.0.0")));
}
function _dip3dvm(bytes32 _hashPoolVersion) internal pure returns (bool){
return (_hashPoolVersion == keccak256(abi.encodePacked("DVM 1.0.2")) || _hashPoolVersion == keccak256(abi.encodePacked("DVM 1.0.3")));
}
function _dip3dsp(bytes32 _hashPoolVersion) internal pure returns (bool){
return (_hashPoolVersion == keccak256(abi.encodePacked("DSP 1.0.1")) || _hashPoolVersion == keccak256(abi.encodePacked("DSP 1.0.2")));
}
function _kjudge(bytes32 _hashPoolVersion) internal pure returns (bool) {
return (_hashPoolVersion == keccak256(abi.encodePacked("DVM 1.0.2")) || _hashPoolVersion == keccak256(abi.encodePacked("DSP 1.0.1")) || _hashPoolVersion == keccak256(abi.encodePacked("DPP 1.0.0")) || _hashPoolVersion == keccak256(abi.encodePacked("DPP Advanced 1.0.0")));
}
function version() virtual external pure returns (string memory) {
return "1.2.0";
}
}/*
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
/**
* @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;
}
}
}/*
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
/**
* @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);
}
}// 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);
}{
"remappings": [],
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "istanbul",
"libraries": {},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AddAdmin","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":"admin","type":"address"}],"name":"RemoveAdmin","type":"event"},{"inputs":[],"name":"_LP_MT_RATIO_","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"address","name":"userAddr","type":"address"}],"name":"addAdminList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cpPool","type":"address"},{"internalType":"address","name":"quoteToken","type":"address"},{"internalType":"int256","name":"globalQuota","type":"int256"},{"internalType":"address","name":"feeAddr","type":"address"},{"internalType":"address","name":"quotaAddr","type":"address"}],"name":"addCpPoolInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"cpPools","outputs":[{"internalType":"address","name":"quoteToken","type":"address"},{"internalType":"int256","name":"globalQuota","type":"int256"},{"internalType":"address","name":"feeAddr","type":"address"},{"internalType":"address","name":"quotaAddr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getCPInfoByUser","outputs":[{"internalType":"bool","name":"isHaveCap","type":"bool"},{"internalType":"int256","name":"curQuota","type":"int256"},{"internalType":"uint256","name":"userFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"initOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdminListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolHeartBeat","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"}],"name":"removeAdminList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cpPool","type":"address"},{"internalType":"address","name":"quoteToken","type":"address"},{"internalType":"int256","name":"globalQuota","type":"int256"},{"internalType":"address","name":"feeAddr","type":"address"},{"internalType":"address","name":"quotaAddr","type":"address"}],"name":"setCpPoolInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cpPool","type":"address"},{"internalType":"address","name":"quotaAddr","type":"address"}],"name":"setCpPoolQuotaAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLpMtRatio","type":"uint256"}],"name":"setLpMtRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPoolHeartBeat","type":"address"}],"name":"setPoolHeartBeat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolAddr","type":"address"},{"internalType":"uint256","name":"mtFeeRate","type":"uint256"}],"name":"setSpecPoolList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"specPoolList","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":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"}]Contract Creation Code
6080604052601960025534801561001557600080fd5b50611bb0806100256000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063848cc303116100b8578063b1efb8f41161007c578063b1efb8f414610271578063c30c616914610279578063ef6a5d791461028c578063f2fde38b1461029f578063fae783d8146102b2578063fd8bd849146102d457610137565b8063848cc303146102105780638614c552146102305780638c34329614610243578063a1e281de1461024b578063ae52aae71461025e57610137565b80634e71e0c8116100ff5780634e71e0c8146101b55780635454b842146101bd57806354fd4d50146101d057806368f0cb6f146101e55780638456db151461020857610137565b806301ea364b1461013c5780630d0092971461015157806316048bc4146101645780631822c0c01461018257806344c19402146101a2575b600080fd5b61014f61014a3660046116ff565b6102e7565b005b61014f61015f366004611628565b610336565b61016c610396565b60405161017991906118e0565b60405180910390f35b610195610190366004611628565b6103a5565b604051610179919061191f565b61014f6101b0366004611698565b6103ba565b61014f61043e565b61014f6101cb366004611698565b6104cc565b6101d861058d565b6040516101799190611942565b6101f86101f3366004611628565b6105ac565b60405161017994939291906118f4565b61016c6105e2565b61022361021e366004611660565b6105f1565b6040516101799190611b29565b61022361023e366004611628565b610e5d565b61016c610e6f565b61014f6102593660046117fd565b610e7e565b61014f61026c366004611628565b610ead565b610223610f35565b61014f610287366004611628565b610f3b565b61014f61029a366004611660565b610f87565b61014f6102ad366004611628565b61105c565b6102c56102c0366004611660565b6110e1565b6040516101799392919061192a565b61014f6102e2366004611628565b611355565b6000546001600160a01b0316331461031a5760405162461bcd60e51b815260040161031190611ac0565b60405180910390fd5b6001600160a01b03909116600090815260046020526040902055565b600154600160a01b900460ff16156103605760405162461bcd60e51b815260040161031190611a0d565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b031681565b60056020526000908152604090205460ff1681565b6000546001600160a01b031633146103e45760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03948516600090815260036020819052604090912080549587166001600160a01b031996871617815560028101805494881694871694909417909355820180549190951693169290921790925560010155565b6001546001600160a01b031633146104685760405162461bcd60e51b815260040161031190611975565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526005602052604090205460ff166104fb5760405162461bcd60e51b815260040161031190611a6e565b610503611601565b50604080516080810182526001600160a01b039586168152602080820195865293861681830190815292861660608201908152968616600090815260039485905291909120905181549086166001600160a01b0319918216178255935160018201559051600282018054918616918516919091179055935193018054939092169216919091179055565b6040805180820190915260058152640312e322e360dc1b602082015290565b600360208190526000918252604090912080546001820154600283015492909301546001600160a01b0391821693928216911684565b6001546001600160a01b031681565b6000826001600160a01b03166354fd4d506040518163ffffffff1660e01b815260040160006040518083038186803b15801561062c57600080fd5b505afa92505050801561066157506040513d6000823e601f3d908101601f1916820160405261065e9190810190611762565b60015b61069f573d80801561068f576040519150601f19603f3d011682016040523d82523d6000602084013e610694565b606091505b506000915050610e57565b6000816040516020016106b29190611815565b6040516020818303038152906040528051906020012090506106d3816113cf565b1561086c576000856001600160a01b031663ec2fd46d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561071357600080fd5b505afa158015610727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074b919061174a565b90506000866001600160a01b0316637d7215046040518163ffffffff1660e01b815260040160206040518083038186803b15801561078857600080fd5b505afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c0919061174a565b90506000876001600160a01b031663bbf5ce786040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fd57600080fd5b505afa158015610811573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610835919061174a565b90508215801561084b575081158061084b575080155b156108685760405162461bcd60e51b81526004016103119061199c565b5050505b6006546001600160a01b0316158015906109035750600654604051633ded920b60e11b81526001600160a01b0390911690637bdb2416906108b19088906004016118e0565b60206040518083038186803b1580156108c957600080fd5b505afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610901919061172a565b155b1561098f576001856001600160a01b031663ab44a7a36040518163ffffffff1660e01b815260040160206040518083038186803b15801561094357600080fd5b505afa158015610957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097b919061174a565b670de0b6b3a7640000030392505050610e57565b6001600160a01b038516600090815260046020526040902054156109ce575050506001600160a01b038216600090815260046020526040902054610e57565b6109d781611487565b15610d5e576109e4611601565b506001600160a01b0380861660009081526003602081815260409283902083516080810185528154861680825260018301549382019390935260028201548616948101949094529091015490921660608201529080610a4a576000945050505050610e57565b6000610b48886001600160a01b031663bbf5ce786040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8857600080fd5b505afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac0919061174a565b6040516370a0823160e01b81526001600160a01b038516906370a0823190610aec908d906004016118e0565b60206040518083038186803b158015610b0457600080fd5b505afa158015610b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3c919061174a565b9063ffffffff6114c516565b90506000886001600160a01b031663f04da65b896040518263ffffffff1660e01b8152600401610b7891906118e0565b60206040518083038186803b158015610b9057600080fd5b505afa158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc8919061174a565b60408501516060860151602087015192935090916001600160a01b03821615610c6a576040516398a299e560e01b81526001600160a01b038316906398a299e590610c17908e906004016118e0565b60206040518083038186803b158015610c2f57600080fd5b505afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c67919061174a565b90505b806000191480610c9657508060001914158015610c96575080610c93868663ffffffff6114ed16565b13155b610cb25760405162461bcd60e51b815260040161031190611a37565b6001600160a01b038316610cd25760009950505050505050505050610e57565b60405163060f58c360e01b81526001600160a01b0384169063060f58c390610cfe908e906004016118e0565b60206040518083038186803b158015610d1657600080fd5b505afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e919061174a565b9950505050505050505050610e57565b610d6781611519565b80610d765750610d7681611557565b15610e50576000856001600160a01b031663ab44a7a36040518163ffffffff1660e01b815260040160206040518083038186803b158015610db657600080fd5b505afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee919061174a565b90506000610e186064610e0c6002548561159590919063ffffffff16565b9063ffffffff6115cf16565b9050670de0b6b3a7640000610e33838363ffffffff6114ed16565b10610e45576000945050505050610e57565b9350610e5792505050565b6000925050505b92915050565b60046020526000908152604090205481565b6006546001600160a01b031681565b6000546001600160a01b03163314610ea85760405162461bcd60e51b815260040161031190611ac0565b600255565b6000546001600160a01b03163314610ed75760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03811660009081526005602052604090819020805460ff19166001179055517fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba90610f2a9083906118e0565b60405180910390a150565b60025481565b6000546001600160a01b03163314610f655760405162461bcd60e51b815260040161031190611ac0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b816001600160a01b03166316048bc46040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190611644565b6001600160a01b0316336001600160a01b03161461102a5760405162461bcd60e51b815260040161031190611a95565b6001600160a01b0391821660009081526003602081905260409091200180546001600160a01b03191691909216179055565b6000546001600160a01b031633146110865760405162461bcd60e51b815260040161031190611ac0565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060006110ee611601565b506001600160a01b03808616600090815260036020818152604092839020835160808101855281548616808252600183015493820193909352600282015486169481019490945290910154909216606082015290611158576000935060001992506000915061134d565b6060810151602082015193506001600160a01b038116156111f2576040516398a299e560e01b81526001600160a01b038216906398a299e59061119f9089906004016118e0565b60206040518083038186803b1580156111b757600080fd5b505afa1580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ef919061174a565b93505b83600019141561120557600094506112af565b60405163f04da65b60e01b8152600195506000906001600160a01b0389169063f04da65b90611238908a906004016118e0565b60206040518083038186803b15801561125057600080fd5b505afa158015611264573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611288919061174a565b90508085106112a8576112a1858263ffffffff6114c516565b94506112ad565b600094505b505b60408201516001600160a01b0381166112cb576000935061134a565b60405163060f58c360e01b81526001600160a01b0382169063060f58c3906112f7908a906004016118e0565b60206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611347919061174a565b93505b50505b509250925092565b6000546001600160a01b0316331461137f5760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03811660009081526005602052604090819020805460ff19169055517f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b90610f2a9083906118e0565b60006040516020016113e090611846565b60405160208183030381529060405280519060200120821480611426575060405160200161140d90611884565b6040516020818303038152906040528051906020012082145b80611454575060405160200161143b90611899565b6040516020818303038152906040528051906020012082145b80610e575750604051602001611469906118c2565b60405160208183030381529060405280519060200120821492915050565b600060405160200161149890611870565b60405160208183030381529060405280519060200120821480610e575750604051602001611469906118ae565b6000828211156114e75760405162461bcd60e51b8152600401610311906119ea565b50900390565b6000828201838110156115125760405162461bcd60e51b815260040161031190611ae3565b9392505050565b600060405160200161152a90611846565b60405160208183030381529060405280519060200120821480610e5757506040516020016114699061185b565b600060405160200161156890611884565b60405160208183030381529060405280519060200120821480610e57575060405160200161146990611831565b6000826115a457506000610e57565b828202828482816115b157fe5b04146115125760405162461bcd60e51b815260040161031190611b06565b60008082116115f05760405162461bcd60e51b8152600401610311906119c2565b8183816115f957fe5b049392505050565b60408051608081018252600080825260208201819052918101829052606081019190915290565b600060208284031215611639578081fd5b813561151281611b62565b600060208284031215611655578081fd5b815161151281611b62565b60008060408385031215611672578081fd5b823561167d81611b62565b9150602083013561168d81611b62565b809150509250929050565b600080600080600060a086880312156116af578081fd5b85356116ba81611b62565b945060208601356116ca81611b62565b93506040860135925060608601356116e181611b62565b915060808601356116f181611b62565b809150509295509295909350565b60008060408385031215611711578182fd5b823561171c81611b62565b946020939093013593505050565b60006020828403121561173b578081fd5b81518015158114611512578182fd5b60006020828403121561175b578081fd5b5051919050565b600060208284031215611773578081fd5b815167ffffffffffffffff8082111561178a578283fd5b81840185601f82011261179b578384fd5b80519250818311156117ab578384fd5b604051601f8401601f1916810160200183811182821017156117cb578586fd5b6040528381528184016020018710156117e2578485fd5b6117f3846020830160208501611b32565b9695505050505050565b60006020828403121561180e578081fd5b5035919050565b60008251611827818460208701611b32565b9190910192915050565b682229a810189718171960b91b815260090190565b68222b2690189718171960b91b815260090190565b6844564d20312e302e3360b81b815260090190565b670435020312e302e360c41b815260080190565b6844535020312e302e3160b81b815260090190565b68044505020312e302e360bc1b815260090190565b670435020322e302e360c41b815260080190565b71044505020416476616e63656420312e302e360741b815260120190565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815260208101939093529083166040830152909116606082015260800190565b901515815260200190565b92151583526020830191909152604082015260600190565b6000602082528251806020840152611961816040850160208701611b32565b601f01601f19169190910160400192915050565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b6020808252600c908201526b25a52aa223a2afa2a92927a960a11b604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252601e908201527f444f444f466565496d706c3a204558434545445f594f55525f51554f54410000604082015260600190565b6020808252600d908201526c1050d0d154d4d7d11153925151609a1b604082015260600190565b6020808252601190820152701393d50813d5d391548813d1881413d3d3607a1b604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b60208082526009908201526820a2222fa2a92927a960b91b604082015260600190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b90815260200190565b60005b83811015611b4d578181015183820152602001611b35565b83811115611b5c576000848401525b50505050565b6001600160a01b0381168114611b7757600080fd5b5056fea2646970667358221220d2e8d52a6c5f5567a6d93556dd1bfe60a2638bb493dc72826e081510f6941abc64736f6c63430006090033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063848cc303116100b8578063b1efb8f41161007c578063b1efb8f414610271578063c30c616914610279578063ef6a5d791461028c578063f2fde38b1461029f578063fae783d8146102b2578063fd8bd849146102d457610137565b8063848cc303146102105780638614c552146102305780638c34329614610243578063a1e281de1461024b578063ae52aae71461025e57610137565b80634e71e0c8116100ff5780634e71e0c8146101b55780635454b842146101bd57806354fd4d50146101d057806368f0cb6f146101e55780638456db151461020857610137565b806301ea364b1461013c5780630d0092971461015157806316048bc4146101645780631822c0c01461018257806344c19402146101a2575b600080fd5b61014f61014a3660046116ff565b6102e7565b005b61014f61015f366004611628565b610336565b61016c610396565b60405161017991906118e0565b60405180910390f35b610195610190366004611628565b6103a5565b604051610179919061191f565b61014f6101b0366004611698565b6103ba565b61014f61043e565b61014f6101cb366004611698565b6104cc565b6101d861058d565b6040516101799190611942565b6101f86101f3366004611628565b6105ac565b60405161017994939291906118f4565b61016c6105e2565b61022361021e366004611660565b6105f1565b6040516101799190611b29565b61022361023e366004611628565b610e5d565b61016c610e6f565b61014f6102593660046117fd565b610e7e565b61014f61026c366004611628565b610ead565b610223610f35565b61014f610287366004611628565b610f3b565b61014f61029a366004611660565b610f87565b61014f6102ad366004611628565b61105c565b6102c56102c0366004611660565b6110e1565b6040516101799392919061192a565b61014f6102e2366004611628565b611355565b6000546001600160a01b0316331461031a5760405162461bcd60e51b815260040161031190611ac0565b60405180910390fd5b6001600160a01b03909116600090815260046020526040902055565b600154600160a01b900460ff16156103605760405162461bcd60e51b815260040161031190611a0d565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b031681565b60056020526000908152604090205460ff1681565b6000546001600160a01b031633146103e45760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03948516600090815260036020819052604090912080549587166001600160a01b031996871617815560028101805494881694871694909417909355820180549190951693169290921790925560010155565b6001546001600160a01b031633146104685760405162461bcd60e51b815260040161031190611975565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526005602052604090205460ff166104fb5760405162461bcd60e51b815260040161031190611a6e565b610503611601565b50604080516080810182526001600160a01b039586168152602080820195865293861681830190815292861660608201908152968616600090815260039485905291909120905181549086166001600160a01b0319918216178255935160018201559051600282018054918616918516919091179055935193018054939092169216919091179055565b6040805180820190915260058152640312e322e360dc1b602082015290565b600360208190526000918252604090912080546001820154600283015492909301546001600160a01b0391821693928216911684565b6001546001600160a01b031681565b6000826001600160a01b03166354fd4d506040518163ffffffff1660e01b815260040160006040518083038186803b15801561062c57600080fd5b505afa92505050801561066157506040513d6000823e601f3d908101601f1916820160405261065e9190810190611762565b60015b61069f573d80801561068f576040519150601f19603f3d011682016040523d82523d6000602084013e610694565b606091505b506000915050610e57565b6000816040516020016106b29190611815565b6040516020818303038152906040528051906020012090506106d3816113cf565b1561086c576000856001600160a01b031663ec2fd46d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561071357600080fd5b505afa158015610727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074b919061174a565b90506000866001600160a01b0316637d7215046040518163ffffffff1660e01b815260040160206040518083038186803b15801561078857600080fd5b505afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c0919061174a565b90506000876001600160a01b031663bbf5ce786040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fd57600080fd5b505afa158015610811573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610835919061174a565b90508215801561084b575081158061084b575080155b156108685760405162461bcd60e51b81526004016103119061199c565b5050505b6006546001600160a01b0316158015906109035750600654604051633ded920b60e11b81526001600160a01b0390911690637bdb2416906108b19088906004016118e0565b60206040518083038186803b1580156108c957600080fd5b505afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610901919061172a565b155b1561098f576001856001600160a01b031663ab44a7a36040518163ffffffff1660e01b815260040160206040518083038186803b15801561094357600080fd5b505afa158015610957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097b919061174a565b670de0b6b3a7640000030392505050610e57565b6001600160a01b038516600090815260046020526040902054156109ce575050506001600160a01b038216600090815260046020526040902054610e57565b6109d781611487565b15610d5e576109e4611601565b506001600160a01b0380861660009081526003602081815260409283902083516080810185528154861680825260018301549382019390935260028201548616948101949094529091015490921660608201529080610a4a576000945050505050610e57565b6000610b48886001600160a01b031663bbf5ce786040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8857600080fd5b505afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac0919061174a565b6040516370a0823160e01b81526001600160a01b038516906370a0823190610aec908d906004016118e0565b60206040518083038186803b158015610b0457600080fd5b505afa158015610b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3c919061174a565b9063ffffffff6114c516565b90506000886001600160a01b031663f04da65b896040518263ffffffff1660e01b8152600401610b7891906118e0565b60206040518083038186803b158015610b9057600080fd5b505afa158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc8919061174a565b60408501516060860151602087015192935090916001600160a01b03821615610c6a576040516398a299e560e01b81526001600160a01b038316906398a299e590610c17908e906004016118e0565b60206040518083038186803b158015610c2f57600080fd5b505afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c67919061174a565b90505b806000191480610c9657508060001914158015610c96575080610c93868663ffffffff6114ed16565b13155b610cb25760405162461bcd60e51b815260040161031190611a37565b6001600160a01b038316610cd25760009950505050505050505050610e57565b60405163060f58c360e01b81526001600160a01b0384169063060f58c390610cfe908e906004016118e0565b60206040518083038186803b158015610d1657600080fd5b505afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e919061174a565b9950505050505050505050610e57565b610d6781611519565b80610d765750610d7681611557565b15610e50576000856001600160a01b031663ab44a7a36040518163ffffffff1660e01b815260040160206040518083038186803b158015610db657600080fd5b505afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee919061174a565b90506000610e186064610e0c6002548561159590919063ffffffff16565b9063ffffffff6115cf16565b9050670de0b6b3a7640000610e33838363ffffffff6114ed16565b10610e45576000945050505050610e57565b9350610e5792505050565b6000925050505b92915050565b60046020526000908152604090205481565b6006546001600160a01b031681565b6000546001600160a01b03163314610ea85760405162461bcd60e51b815260040161031190611ac0565b600255565b6000546001600160a01b03163314610ed75760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03811660009081526005602052604090819020805460ff19166001179055517fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba90610f2a9083906118e0565b60405180910390a150565b60025481565b6000546001600160a01b03163314610f655760405162461bcd60e51b815260040161031190611ac0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b816001600160a01b03166316048bc46040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190611644565b6001600160a01b0316336001600160a01b03161461102a5760405162461bcd60e51b815260040161031190611a95565b6001600160a01b0391821660009081526003602081905260409091200180546001600160a01b03191691909216179055565b6000546001600160a01b031633146110865760405162461bcd60e51b815260040161031190611ac0565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060006110ee611601565b506001600160a01b03808616600090815260036020818152604092839020835160808101855281548616808252600183015493820193909352600282015486169481019490945290910154909216606082015290611158576000935060001992506000915061134d565b6060810151602082015193506001600160a01b038116156111f2576040516398a299e560e01b81526001600160a01b038216906398a299e59061119f9089906004016118e0565b60206040518083038186803b1580156111b757600080fd5b505afa1580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ef919061174a565b93505b83600019141561120557600094506112af565b60405163f04da65b60e01b8152600195506000906001600160a01b0389169063f04da65b90611238908a906004016118e0565b60206040518083038186803b15801561125057600080fd5b505afa158015611264573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611288919061174a565b90508085106112a8576112a1858263ffffffff6114c516565b94506112ad565b600094505b505b60408201516001600160a01b0381166112cb576000935061134a565b60405163060f58c360e01b81526001600160a01b0382169063060f58c3906112f7908a906004016118e0565b60206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611347919061174a565b93505b50505b509250925092565b6000546001600160a01b0316331461137f5760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03811660009081526005602052604090819020805460ff19169055517f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b90610f2a9083906118e0565b60006040516020016113e090611846565b60405160208183030381529060405280519060200120821480611426575060405160200161140d90611884565b6040516020818303038152906040528051906020012082145b80611454575060405160200161143b90611899565b6040516020818303038152906040528051906020012082145b80610e575750604051602001611469906118c2565b60405160208183030381529060405280519060200120821492915050565b600060405160200161149890611870565b60405160208183030381529060405280519060200120821480610e575750604051602001611469906118ae565b6000828211156114e75760405162461bcd60e51b8152600401610311906119ea565b50900390565b6000828201838110156115125760405162461bcd60e51b815260040161031190611ae3565b9392505050565b600060405160200161152a90611846565b60405160208183030381529060405280519060200120821480610e5757506040516020016114699061185b565b600060405160200161156890611884565b60405160208183030381529060405280519060200120821480610e57575060405160200161146990611831565b6000826115a457506000610e57565b828202828482816115b157fe5b04146115125760405162461bcd60e51b815260040161031190611b06565b60008082116115f05760405162461bcd60e51b8152600401610311906119c2565b8183816115f957fe5b049392505050565b60408051608081018252600080825260208201819052918101829052606081019190915290565b600060208284031215611639578081fd5b813561151281611b62565b600060208284031215611655578081fd5b815161151281611b62565b60008060408385031215611672578081fd5b823561167d81611b62565b9150602083013561168d81611b62565b809150509250929050565b600080600080600060a086880312156116af578081fd5b85356116ba81611b62565b945060208601356116ca81611b62565b93506040860135925060608601356116e181611b62565b915060808601356116f181611b62565b809150509295509295909350565b60008060408385031215611711578182fd5b823561171c81611b62565b946020939093013593505050565b60006020828403121561173b578081fd5b81518015158114611512578182fd5b60006020828403121561175b578081fd5b5051919050565b600060208284031215611773578081fd5b815167ffffffffffffffff8082111561178a578283fd5b81840185601f82011261179b578384fd5b80519250818311156117ab578384fd5b604051601f8401601f1916810160200183811182821017156117cb578586fd5b6040528381528184016020018710156117e2578485fd5b6117f3846020830160208501611b32565b9695505050505050565b60006020828403121561180e578081fd5b5035919050565b60008251611827818460208701611b32565b9190910192915050565b682229a810189718171960b91b815260090190565b68222b2690189718171960b91b815260090190565b6844564d20312e302e3360b81b815260090190565b670435020312e302e360c41b815260080190565b6844535020312e302e3160b81b815260090190565b68044505020312e302e360bc1b815260090190565b670435020322e302e360c41b815260080190565b71044505020416476616e63656420312e302e360741b815260120190565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815260208101939093529083166040830152909116606082015260800190565b901515815260200190565b92151583526020830191909152604082015260600190565b6000602082528251806020840152611961816040850160208701611b32565b601f01601f19169190910160400192915050565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b6020808252600c908201526b25a52aa223a2afa2a92927a960a11b604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252601e908201527f444f444f466565496d706c3a204558434545445f594f55525f51554f54410000604082015260600190565b6020808252600d908201526c1050d0d154d4d7d11153925151609a1b604082015260600190565b6020808252601190820152701393d50813d5d391548813d1881413d3d3607a1b604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b60208082526009908201526820a2222fa2a92927a960b91b604082015260600190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b90815260200190565b60005b83811015611b4d578181015183820152602001611b35565b83811115611b5c576000848401525b50505050565b6001600160a01b0381168114611b7757600080fd5b5056fea2646970667358221220d2e8d52a6c5f5567a6d93556dd1bfe60a2638bb493dc72826e081510f6941abc64736f6c63430006090033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
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.