Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 76 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 38476920 | 57 days ago | IN | 0 MON | 0.00836919 | ||||
| Rescue ERC20 | 38400795 | 58 days ago | IN | 0 MON | 0.00973187 | ||||
| Approve | 38398722 | 58 days ago | IN | 0 MON | 0.00658961 | ||||
| Approve | 38398515 | 58 days ago | IN | 0 MON | 0.00560616 | ||||
| Approve | 38398487 | 58 days ago | IN | 0 MON | 0.00560616 | ||||
| Approve | 38396775 | 58 days ago | IN | 0 MON | 0.0064135 | ||||
| Approve | 38396737 | 58 days ago | IN | 0 MON | 0.012 | ||||
| Approve | 38393821 | 58 days ago | IN | 0 MON | 0.0161373 | ||||
| Approve | 38392409 | 58 days ago | IN | 0 MON | 0.00560616 | ||||
| Approve | 38389956 | 58 days ago | IN | 0 MON | 0.00599056 | ||||
| Approve | 38389001 | 58 days ago | IN | 0 MON | 0.00672735 | ||||
| Approve | 38388449 | 58 days ago | IN | 0 MON | 0.0161373 | ||||
| Approve | 38387909 | 58 days ago | IN | 0 MON | 0.11 | ||||
| Approve | 38386663 | 58 days ago | IN | 0 MON | 0.0240264 | ||||
| Approve | 38386233 | 58 days ago | IN | 0 MON | 0.0240264 | ||||
| Approve | 38385718 | 58 days ago | IN | 0 MON | 0.0161373 | ||||
| Approve | 38385586 | 58 days ago | IN | 0 MON | 0.0240264 | ||||
| Approve | 38385574 | 58 days ago | IN | 0 MON | 0.0240264 | ||||
| Approve | 38385487 | 58 days ago | IN | 0 MON | 0.0161373 | ||||
| Approve | 38385250 | 58 days ago | IN | 0 MON | 0.0240264 | ||||
| Approve | 38385000 | 58 days ago | IN | 0 MON | 0.0240264 | ||||
| Approve | 38384868 | 58 days ago | IN | 0 MON | 0.0240264 | ||||
| Approve | 38384803 | 58 days ago | IN | 0 MON | 0.0240264 | ||||
| Approve | 38384735 | 58 days ago | IN | 0 MON | 0.0064135 | ||||
| Approve | 38383978 | 58 days ago | IN | 0 MON | 0.0240264 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 38400104 | 58 days ago | 1.94066736 MON | ||||
| 38400104 | 58 days ago | 388.13347228 MON | ||||
| 38400104 | 58 days ago | 194.06673614 MON | ||||
| 38400104 | 58 days ago | 584.14087578 MON | ||||
| 38398608 | 58 days ago | 4.09334783 MON | ||||
| 38398608 | 58 days ago | 818.66956683 MON | ||||
| 38398608 | 58 days ago | 409.33478341 MON | ||||
| 38398608 | 58 days ago | 1,232.09769809 MON | ||||
| 38398562 | 58 days ago | 4.49122283 MON | ||||
| 38398562 | 58 days ago | 898.24456665 MON | ||||
| 38398562 | 58 days ago | 449.12228332 MON | ||||
| 38398562 | 58 days ago | 1,351.85807281 MON | ||||
| 38398512 | 58 days ago | 5.11237154 MON | ||||
| 38398512 | 58 days ago | 1,022.47430921 MON | ||||
| 38398512 | 58 days ago | 511.2371546 MON | ||||
| 38398512 | 58 days ago | 1,538.82383536 MON | ||||
| 38398487 | 58 days ago | 5.48883389 MON | ||||
| 38398487 | 58 days ago | 1,097.76677906 MON | ||||
| 38398487 | 58 days ago | 548.88338953 MON | ||||
| 38398487 | 58 days ago | 1,652.13900249 MON | ||||
| 38398411 | 58 days ago | 6.41597442 MON | ||||
| 38398411 | 58 days ago | 1,283.19488421 MON | ||||
| 38398411 | 58 days ago | 641.5974421 MON | ||||
| 38398411 | 58 days ago | 1,931.20830074 MON | ||||
| 38397970 | 58 days ago | 7.43869278 MON |
Loading...
Loading
Contract Name:
BabyChog
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/**
*Submitted for verification at monadscan.com on 2025-11-27
*/
// SPDX-License-Identifier: MIT
//Welcome to Baby Chog $BABYCHOG Baby Chog is designed to reward holders 2% of every transactions made.
// Baby Chog is also designed to help bring in buying pressure to Chog through our reward system.
// Simply hold Baby Chog and earn 2%
// https://babychog.io
// https://t.me/babychog
// https://x.com/BabyChog_
pragma solidity 0.8.26;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}
}
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {if(b > a) return(false, 0); return(true, a - b);}
}
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (a == 0) return(true, 0);
uint256 c = a * b;
if(c / a != b) return(false, 0);
return(true, c);
}
}
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {if(b == 0) return(false, 0); return(true, a / b);}
}
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {if(b == 0) return(false, 0); return(true, a % b);}
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked{require(b <= a, errorMessage); return a - b;}
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked{require(b > 0, errorMessage); return a / b;}
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked{require(b > 0, errorMessage); return a % b;}
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function circulatingSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function getOwner() external view returns (address);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address _owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
abstract contract Ownable {
address internal owner;
constructor(address _owner) {owner = _owner;}
modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
function isOwner(address account) public view returns (bool) {return account == owner;}
function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
event OwnershipTransferred(address owner);
}
interface IFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
function getPair(address tokenA, address tokenB) external view returns (address pair);
}
interface IRouterV2 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint amountA, uint amountB);
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
// Uniswap V3-style router used only for buying the reward token
interface IRewardRouter {
struct ExactInputParams {
bytes path;
address recipient;
uint256 deadline;
uint256 amountIn;
uint256 amountOutMinimum;
}
function exactInput(ExactInputParams calldata params)
external
payable
returns (uint256 amountOut);
}
contract BabyChog is IERC20, Ownable {
using SafeMath for uint256;
string private constant _name = 'Baby Chog';
string private constant _symbol = 'BABYCHOG';
uint8 private constant _decimals = 9;
uint256 private _totalSupply = 1000000000 * (10 ** _decimals);
uint256 private _maxTxAmount = ( _totalSupply * 10000 ) / 10000;
uint256 private _maxSellAmount = ( _totalSupply * 10000 ) / 10000;
uint256 private _maxWalletToken = ( _totalSupply * 10000 ) / 10000;
mapping (address => uint256) _balances;
mapping (address => mapping (address => uint256)) private _allowances;
mapping (address => bool) public isFeeExempt;
mapping (address => bool) public isDividendExempt;
// Routers and pair (Monad-specific)
IRouterV2 public tradeRouter; // DEX A: GM trading and liquidity
IRewardRouter public rewardRouter; // DEX B: reward token purchases (V3-style)
address public pair;
// Wrapped native token on Monad (equivalent to WETH)
address public constant WNATIVE = 0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A;
// Trading control: starts locked, must call startTrading()
bool private tradingAllowed = true;
uint256 private liquidityFee = 0;
uint256 private marketingFee = 500;
uint256 private rewardsFee = 0;
uint256 private developmentFee = 0;
uint256 private burnFee = 0;
uint256 private totalFee = 500;
uint256 private sellFee = 500;
uint256 private transferFee = 0;
uint256 private denominator = 10000;
bool private swapEnabled = true;
uint256 private swapTimes;
bool private swapping;
uint256 private swapThreshold = ( _totalSupply * 1000 ) / 100000;
uint256 private _minTokenAmount = ( _totalSupply * 10 ) / 100000;
modifier lockTheSwap {swapping = true; _; swapping = false;}
// Reward token on Monad (fixed)
address public constant reward = 0x350035555E10d9AfAF1566AaebfCeD5BA6C27777;
uint256 public totalShares;
uint256 public totalDividends;
uint256 public totalDistributed;
uint256 internal dividendsPerShare;
uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
address[] shareholders;
mapping (address => uint256) shareholderIndexes;
mapping (address => uint256) shareholderClaims;
struct Share {
uint256 amount;
uint256 totalExcluded;
uint256 totalRealised;
}
mapping (address => Share) public shares;
uint256 internal currentIndex;
uint256 public minPeriod = 30 minutes;
uint256 public minDistribution = 1 * (10 ** 15);
uint256 public distributorGas = 350000;
function _claimDividend() external {distributeDividend(msg.sender);}
address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
// Same address for marketing, development, and liquidity (Monad)
address internal constant monad_receiver = 0x2fB842F6F66A69aAd9b831CabF73ADEd83357eE0;
address internal constant development_receiver = monad_receiver;
address internal constant marketing_receiver = monad_receiver;
address internal constant liquidity_receiver = monad_receiver;
constructor() Ownable(msg.sender) {
// Set routers for DEX A (GM) and DEX B (reward)
IRouterV2 _tradeRouter = IRouterV2(0x26CEb692410c4b3C12D63e01CFc03eEA103fc474);
IRewardRouter _rewardRouter = IRewardRouter(0xdac97b6a3951641B177283028A8f428332333071);
tradeRouter = _tradeRouter;
rewardRouter = _rewardRouter;
// Create pair on DEX A using wrapped native token
address _pair = IFactory(_tradeRouter.factory()).createPair(address(this), WNATIVE);
pair = _pair;
isFeeExempt[address(this)] = true;
isFeeExempt[liquidity_receiver] = true;
isFeeExempt[marketing_receiver] = true;
isFeeExempt[msg.sender] = true;
isDividendExempt[address(pair)] = true;
isDividendExempt[address(msg.sender)] = true;
isDividendExempt[address(this)] = true;
isDividendExempt[address(DEAD)] = true;
isDividendExempt[address(0)] = true;
_balances[msg.sender] = _totalSupply;
emit Transfer(address(0), msg.sender, _totalSupply);
}
receive() external payable {}
function name() public pure returns (string memory) {return _name;}
function symbol() public pure returns (string memory) {return _symbol;}
function decimals() public pure returns (uint8) {return _decimals;}
function getOwner() external view override returns (address) { return owner; }
function totalSupply() public view override returns (uint256) {return _totalSupply;}
function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
function allowance(address owner_, address spender) public view override returns (uint256) {return _allowances[owner_][spender];}
function isCont(address addr) internal view returns (bool) {uint size; assembly { size := extcodesize(addr) } return size > 0; }
function setisExempt(address _address, bool _enabled) external onlyOwner {isFeeExempt[_address] = _enabled;}
function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}
function startTrading() external onlyOwner {
tradingAllowed = true;
}
function preTxCheck(address sender, address recipient, uint256 amount) internal view {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
require(amount > uint256(0), "Transfer amount must be greater than zero");
require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
}
function _transfer(address sender, address recipient, uint256 amount) private {
preTxCheck(sender, recipient, amount);
checkTradingAllowed(sender, recipient);
checkMaxWallet(sender, recipient, amount);
swapbackCounters(sender, recipient);
checkTxLimit(sender, recipient, amount);
swapBack(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(amount);
uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
_balances[recipient] = _balances[recipient].add(amountReceived);
emit Transfer(sender, recipient, amountReceived);
if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));}
if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));}
if(shares[recipient].amount > 0){distributeDividend(recipient);}
process(distributorGas);
}
function setSwapBackThreshold(uint256 _threshold) external onlyOwner {
swapThreshold = (_totalSupply * _threshold) / 100000;
}
function setStructure(
uint256 _liquidity,
uint256 _marketing,
uint256 _burn,
uint256 _rewards,
uint256 _development,
uint256 _total,
uint256 _sell,
uint256 _trans
) external onlyOwner {
liquidityFee = _liquidity;
marketingFee = _marketing;
burnFee = _burn;
rewardsFee = _rewards;
developmentFee = _development;
totalFee = _total;
sellFee = _sell;
transferFee = _trans;
require(
totalFee <= denominator.div(10) &&
sellFee <= denominator.div(10) &&
transferFee <= denominator.div(10),
"totalFee and sellFee cannot be more than 10%"
);
}
function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner {
uint256 newTx = (totalSupply() * _buy) / 10000;
uint256 newTransfer = (totalSupply() * _trans) / 10000;
uint256 newWallet = (totalSupply() * _wallet) / 10000;
_maxTxAmount = newTx;
_maxSellAmount = newTransfer;
_maxWalletToken = newWallet;
uint256 limit = totalSupply().mul(5).div(1000);
require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%");
}
function checkTradingAllowed(address sender, address recipient) internal view {
if(!isFeeExempt[sender] && !isFeeExempt[recipient]){
require(tradingAllowed, "tradingAllowed");
}
}
function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
if(
!isFeeExempt[sender] &&
!isFeeExempt[recipient] &&
recipient != address(pair) &&
recipient != address(DEAD)
){
require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");
}
}
function swapbackCounters(address sender, address recipient) internal {
if(recipient == pair && !isFeeExempt[sender]){swapTimes += uint256(1);}
}
function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
if(sender != pair){
require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
}
require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
}
function swapAndLiquify(uint256 tokens) private lockTheSwap {
uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee).add(rewardsFee)).mul(2);
uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
uint256 initialBalance = address(this).balance;
swapTokensForETH(toSwap); // via tradeRouter
uint256 deltaBalance = address(this).balance.sub(initialBalance);
uint256 unitBalance = deltaBalance.div(_denominator.sub(liquidityFee));
uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
if(ETHToAddLiquidityWith > uint256(0)){
addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);
}
uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);}
uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
if(rewardsAmount > 0){deposit(rewardsAmount);}
if(address(this).balance > uint256(0)){
payable(development_receiver).transfer(address(this).balance);
}
}
function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
_approve(address(this), address(tradeRouter), tokenAmount);
tradeRouter.addLiquidityETH{value: ETHAmount}(
address(this),
tokenAmount,
0,
0,
liquidity_receiver,
block.timestamp
);
}
function swapTokensForETH(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WNATIVE;
_approve(address(this), address(tradeRouter), tokenAmount);
tradeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
bool aboveMin = amount >= _minTokenAmount;
bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
return !swapping
&& swapEnabled
&& tradingAllowed
&& aboveMin
&& !isFeeExempt[sender]
&& recipient == pair
&& swapTimes >= uint256(2)
&& aboveThreshold;
}
function swapBack(address sender, address recipient, uint256 amount) internal {
if(shouldSwapBack(sender, recipient, amount)){
swapAndLiquify(swapThreshold);
swapTimes = uint256(0);
}
}
function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
return !isFeeExempt[sender] && !isFeeExempt[recipient];
}
function getTotalFee(address sender, address recipient) internal view returns (uint256) {
if(recipient == pair){return sellFee;}
if(sender == pair){return totalFee;}
return transferFee;
}
function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
uint256 feeBp = getTotalFee(sender, recipient);
if(feeBp > 0){
uint256 feeAmount = amount.div(denominator).mul(feeBp);
_balances[address(this)] = _balances[address(this)].add(feeAmount);
emit Transfer(sender, address(this), feeAmount);
if(burnFee > uint256(0)){
_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));
}
return amount.sub(feeAmount);
}
return amount;
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function _approve(address owner_, address spender, uint256 amount) private {
require(owner_ != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner_][spender] = amount;
emit Approval(owner_, spender, amount);
}
function setisDividendExempt(address holder, bool exempt) external onlyOwner {
isDividendExempt[holder] = exempt;
if(exempt){setShare(holder, 0);}
else{setShare(holder, balanceOf(holder)); }
}
function setShare(address shareholder, uint256 amount) internal {
if(amount > 0 && shares[shareholder].amount == 0){
addShareholder(shareholder);
}
else if(amount == 0 && shares[shareholder].amount > 0){
removeShareholder(shareholder);
}
totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
shares[shareholder].amount = amount;
shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
}
// Uses rewardRouter (V3) on Monad to buy the fixed reward token with native
function deposit(uint256 amountETH) internal {
if (amountETH == 0 || totalShares == 0) {
return;
}
// Build V3 path: WNATIVE -> reward with 1% fee (10000)
bytes memory path = abi.encodePacked(
WNATIVE,
uint24(10000),
reward
);
IRewardRouter.ExactInputParams memory params = IRewardRouter.ExactInputParams({
path: path,
recipient: address(this),
deadline: block.timestamp,
amountIn: amountETH,
amountOutMinimum: 0
});
uint256 amountOut = rewardRouter.exactInput{value: amountETH}(params);
if (amountOut > 0) {
totalDividends = totalDividends.add(amountOut);
dividendsPerShare = dividendsPerShare.add(
dividendsPerShareAccuracyFactor.mul(amountOut).div(totalShares)
);
}
}
function process(uint256 gas) internal {
uint256 shareholderCount = shareholders.length;
if(shareholderCount == 0) { return; }
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
while(gasUsed < gas && iterations < shareholderCount) {
if(currentIndex >= shareholderCount){currentIndex = 0;}
if(shouldDistribute(shareholders[currentIndex])){
distributeDividend(shareholders[currentIndex]);
}
gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
gasLeft = gasleft();
currentIndex++;
iterations++;
}
}
// Same behaviour as original: only marketing_receiver can rescue arbitrary ERC-20
function rescueERC20(address _address, uint256 _amount) external {
require(msg.sender == marketing_receiver, "Not authorized");
IERC20(_address).transfer(marketing_receiver, _amount);
}
function shouldDistribute(address shareholder) internal view returns (bool) {
return shareholderClaims[shareholder] + minPeriod < block.timestamp
&& getUnpaidEarnings(shareholder) > minDistribution;
}
function totalRewardsDistributed(address _wallet) external view returns (uint256) {
address shareholder = _wallet;
return uint256(shares[shareholder].totalRealised);
}
function distributeDividend(address shareholder) internal {
if(shares[shareholder].amount == 0){ return; }
uint256 amount = getUnpaidEarnings(shareholder);
if(amount > 0){
totalDistributed = totalDistributed.add(amount);
IERC20(reward).transfer(shareholder, amount);
shareholderClaims[shareholder] = block.timestamp;
shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
}
}
function getUnpaidEarnings(address shareholder) public view returns (uint256) {
if(shares[shareholder].amount == 0){ return 0; }
uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
return shareholderTotalDividends.sub(shareholderTotalExcluded);
}
function getCumulativeDividends(uint256 share_) internal view returns (uint256) {
return share_.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
}
function addShareholder(address shareholder) internal {
shareholderIndexes[shareholder] = shareholders.length;
shareholders.push(shareholder);
}
function removeShareholder(address shareholder) internal {
shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
shareholders.pop();
}
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _distributorGas) external onlyOwner {
minPeriod = _minPeriod;
minDistribution = _minDistribution;
distributorGas = _distributorGas;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WNATIVE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRouter","outputs":[{"internalType":"contract IRewardRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setSwapBackThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeRouter","outputs":[{"internalType":"contract IRouterV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526100106009600a6104c3565b61001e90633b9aca006104d8565b60015561271060015461271061003491906104d8565b61003e91906104ef565b60025561271060015461271061005491906104d8565b61005e91906104ef565b60035561271060015461271061007491906104d8565b61007e91906104ef565b600455600b805460ff60a01b1916600160a01b1790555f600c8190556101f4600d819055600e829055600f829055601082905560118190556012556013556127106014556015805460ff1916600190811790915554620186a0906100e4906103e86104d8565b6100ee91906104ef565b601855620186a0600154600a61010491906104d8565b61010e91906104ef565b6019556ec097ce7bc90715b34b9f1000000000601e5561070860245566038d7ea4c6800060255562055730602655348015610147575f80fd5b505f8054336001600160a01b0319918216178255600980547326ceb692410c4b3c12d63e01cfc03eea103fc4749083168117909155600a805473dac97b6a3951641b177283028a8f4283323330719316831790556040805163c45a015560e01b81529051919391849163c45a01559160048083019260209291908290030181865afa1580156101d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101fc919061050e565b6040516364e329cb60e11b8152306004820152733bd359c1119da7da1d913d1c4d2b7c461115433a60248201526001600160a01b03919091169063c9c65396906044016020604051808303815f875af115801561025b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027f919061050e565b600b80546001600160a01b0319166001600160a01b03838116919091178255305f818152600760209081526040808320805460ff1990811660019081179092557f276fd2d3a269e6afb1125c9c39fbe2883923620e0251cc81f1de120456df3b35805482168317905533808652838620805483168417905597549096168452600883528184208054871682179055868452818420805487168217905593835280832080548616851790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548616851790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909516841790945591548482526005835283822081905592519283529394509192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050610534565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610419578085048111156103fd576103fd6103ca565b600184161561040b57908102905b60019390931c9280026103e2565b935093915050565b5f8261042f575060016104bd565b8161043b57505f6104bd565b8160018114610451576002811461045b57610477565b60019150506104bd565b60ff84111561046c5761046c6103ca565b50506001821b6104bd565b5060208310610133831016604e8410600b841016171561049a575081810a6104bd565b6104a65f1984846103de565b805f19048211156104b9576104b96103ca565b0290505b92915050565b5f6104d160ff841683610421565b9392505050565b80820281158282048414176104bd576104bd6103ca565b5f8261050957634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561051e575f80fd5b81516001600160a01b03811681146104d1575f80fd5b612598806105415f395ff3fe608060405260043610610220575f3560e01c806370a082311161011e578063b381cf40116100a8578063e2d6f94c1161006d578063e2d6f94c146106e7578063ef43b02b14610706578063efca2eed14610725578063f2fde38b1461073a578063ffd49c8414610759575f80fd5b8063b381cf40146105dc578063c942435d14610603578063ca89b89914610617578063ce7c2ac21461064e578063dd62ed3e146106a3575f80fd5b80639358928b116100ee5780639358928b1461054557806395d89b4114610559578063997664d714610589578063a8aa1b311461059e578063a9059cbb146105bd575f80fd5b806370a08231146104cc578063893d20e8146104eb5780638cd4426d146105075780638fe62b8a14610526575f80fd5b8063313ce567116101aa5780634355855a1161016f5780634355855a1461043657806348ff2b8b146104645780634fab0ae8146104835780635a3bb9891461049857806360e71962146104b7575f80fd5b8063313ce5671461039a57806331d7ba59146103b557806334c5d2ce146103d45780633a98ef39146103f35780633f4218e014610408575f80fd5b8063228cb733116101f0578063228cb733146102dc57806323b872dd1461031b57806328fd31981461033a578063293230b8146103595780632f54bf6e1461036d575f80fd5b806306fdde031461022b578063095ea7b31461026e5780630ca61cb11461029d57806318160ddd146102be575f80fd5b3661022757005b5f80fd5b348015610236575f80fd5b50604080518082019091526009815268426162792043686f6760b81b60208201525b604051610265919061219a565b60405180910390f35b348015610279575f80fd5b5061028d6102883660046121c3565b61076e565b6040519015158152602001610265565b3480156102a8575f80fd5b506102bc6102b73660046121ed565b610784565b005b3480156102c9575f80fd5b506001545b604051908152602001610265565b3480156102e7575f80fd5b5061030373350035555e10d9afaf1566aaebfced5ba6c2777781565b6040516001600160a01b039091168152602001610265565b348015610326575f80fd5b5061028d610335366004612216565b6107c4565b348015610345575f80fd5b506102ce610354366004612254565b61082c565b348015610364575f80fd5b506102bc6108b2565b348015610378575f80fd5b5061028d610387366004612254565b5f546001600160a01b0391821691161490565b3480156103a5575f80fd5b5060405160098152602001610265565b3480156103c0575f80fd5b50600954610303906001600160a01b031681565b3480156103df575f80fd5b506102bc6103ee3660046121ed565b6108f0565b3480156103fe575f80fd5b506102ce601a5481565b348015610413575f80fd5b5061028d610422366004612254565b60076020525f908152604090205460ff1681565b348015610441575f80fd5b5061028d610450366004612254565b60086020525f908152604090205460ff1681565b34801561046f575f80fd5b506102bc61047e36600461227c565b610a3f565b34801561048e575f80fd5b506102ce60255481565b3480156104a3575f80fd5b50600a54610303906001600160a01b031681565b3480156104c2575f80fd5b506102ce60265481565b3480156104d7575f80fd5b506102ce6104e6366004612254565b610a92565b3480156104f6575f80fd5b505f546001600160a01b0316610303565b348015610512575f80fd5b506102bc6105213660046121c3565b610aac565b348015610531575f80fd5b506102bc6105403660046122b3565b610b87565b348015610550575f80fd5b506102ce610bd2565b348015610564575f80fd5b506040805180820190915260088152674241425943484f4760c01b6020820152610258565b348015610594575f80fd5b506102ce601b5481565b3480156105a9575f80fd5b50600b54610303906001600160a01b031681565b3480156105c8575f80fd5b5061028d6105d73660046121c3565b610c01565b3480156105e7575f80fd5b50610303733bd359c1119da7da1d913d1c4d2b7c461115433a81565b34801561060e575f80fd5b506102bc610c0d565b348015610622575f80fd5b506102ce610631366004612254565b6001600160a01b03165f9081526022602052604090206002015490565b348015610659575f80fd5b50610688610668366004612254565b60226020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610265565b3480156106ae575f80fd5b506102ce6106bd3660046122ca565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b3480156106f2575f80fd5b506102bc6107013660046122f6565b610c18565b348015610711575f80fd5b506102bc61072036600461227c565b610d1d565b348015610730575f80fd5b506102ce601c5481565b348015610745575f80fd5b506102bc610754366004612254565b610d92565b348015610764575f80fd5b506102ce60245481565b5f61077a338484610e0e565b5060015b92915050565b5f546001600160a01b031633146107b65760405162461bcd60e51b81526004016107ad90612346565b60405180910390fd5b602492909255602555602655565b5f6107d0848484610f31565b610821843361081c8560405180606001604052806028815260200161253b602891396001600160a01b038a165f90815260066020908152604080832033845290915290205491906110dc565b610e0e565b5060015b9392505050565b6001600160a01b0381165f90815260226020526040812054810361085157505f919050565b6001600160a01b0382165f9081526022602052604081205461087290611107565b6001600160a01b0384165f908152602260205260409020600101549091508082116108a057505f9392505050565b6108aa8282611123565b949350505050565b5f546001600160a01b031633146108db5760405162461bcd60e51b81526004016107ad90612346565b600b805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146109195760405162461bcd60e51b81526004016107ad90612346565b5f6127108461092760015490565b610931919061237a565b61093b9190612391565b90505f6127108461094b60015490565b610955919061237a565b61095f9190612391565b90505f6127108461096f60015490565b610979919061237a565b6109839190612391565b60028490556003839055600481905590505f6109b56103e86109af60056109a960015490565b9061112e565b90611139565b90508084101580156109c75750808310155b80156109d35750808210155b610a365760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b60648201526084016107ad565b50505050505050565b5f546001600160a01b03163314610a685760405162461bcd60e51b81526004016107ad90612346565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03165f9081526005602052604090205490565b33732fb842f6f66a69aad9b831cabf73aded83357ee014610b005760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016107ad565b60405163a9059cbb60e01b8152732fb842f6f66a69aad9b831cabf73aded83357ee06004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610b5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8291906123b0565b505050565b5f546001600160a01b03163314610bb05760405162461bcd60e51b81526004016107ad90612346565b620186a081600154610bc2919061237a565b610bcc9190612391565b60185550565b5f610bfc610bdf5f610a92565b610bf6610bed61dead610a92565b60015490611123565b90611123565b905090565b5f61077a338484610f31565b610c1633611144565b565b5f546001600160a01b03163314610c415760405162461bcd60e51b81526004016107ad90612346565b600c889055600d8790556010869055600e859055600f849055601183905560128290556013819055601454610c7790600a611139565b60115411158015610c975750601454610c9190600a611139565b60125411155b8015610cb25750601454610cac90600a611139565b60135411155b610d135760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2031302560a01b60648201526084016107ad565b5050505050505050565b5f546001600160a01b03163314610d465760405162461bcd60e51b81526004016107ad90612346565b6001600160a01b0382165f908152600860205260409020805460ff19168215801591909117909155610d8057610d7c825f611284565b5050565b610d7c82610d8d84610a92565b611284565b5f546001600160a01b03163314610dbb5760405162461bcd60e51b81526004016107ad90612346565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b038316610e705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107ad565b6001600160a01b038216610ed15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107ad565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f3c838383611394565b610f46838361152d565b610f518383836115bc565b610f5b83836116a5565b610f668383836116fa565b610f71838383611823565b6001600160a01b0383165f90815260056020526040902054610f939082611123565b6001600160a01b0384165f90815260056020526040812091909155610fb88484611847565b610fc25781610fcd565b610fcd84848461188b565b6001600160a01b0384165f90815260056020526040902054909150610ff29082611978565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110459085815260200190565b60405180910390a36001600160a01b0384165f9081526008602052604090205460ff166110795761107984610d8d86610a92565b6001600160a01b0383165f9081526008602052604090205460ff166110a5576110a583610d8d85610a92565b6001600160a01b0383165f90815260226020526040902054156110cb576110cb83611144565b6110d6602654611983565b50505050565b5f81848411156110ff5760405162461bcd60e51b81526004016107ad919061219a565b505050900390565b5f61077e601e546109af601d548561112e90919063ffffffff16565b5f61082582846123cb565b5f610825828461237a565b5f6108258284612391565b6001600160a01b0381165f9081526022602052604081205490036111655750565b5f61116f8261082c565b90508015610d7c57601c546111849082611978565b601c5560405163a9059cbb60e01b81526001600160a01b03831660048201526024810182905273350035555e10d9afaf1566aaebfced5ba6c277779063a9059cbb906044016020604051808303815f875af11580156111e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120991906123b0565b506001600160a01b0382165f908152602160209081526040808320429055602290915290206002015461123c9082611978565b6001600160a01b0383165f90815260226020526040902060028101919091555461126590611107565b6001600160a01b0383165f908152602260205260409020600101555050565b5f811180156112a857506001600160a01b0382165f90815260226020526040902054155b1561130c57601f80546001600160a01b0384165f8181526020805260408120839055600183018455929092527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d8070180546001600160a01b031916909117905561133e565b8015801561133057506001600160a01b0382165f9081526022602052604090205415155b1561133e5761133e82611a69565b6001600160a01b0382165f90815260226020526040902054601a5461136e91839161136891611123565b90611978565b601a556001600160a01b0382165f90815260226020526040902081905561126581611107565b6001600160a01b0383166113f85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107ad565b6001600160a01b03821661145a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107ad565b5f81116114bb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107ad565b6114c483610a92565b811115610b825760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016107ad565b6001600160a01b0382165f9081526007602052604090205460ff1615801561156d57506001600160a01b0381165f9081526007602052604090205460ff16155b15610d7c57600b54600160a01b900460ff16610d7c5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b60448201526064016107ad565b6001600160a01b0383165f9081526007602052604090205460ff161580156115fc57506001600160a01b0382165f9081526007602052604090205460ff16155b80156116165750600b546001600160a01b03838116911614155b801561162d57506001600160a01b03821661dead14155b15610b82576004546001600160a01b0383165f908152600560205260409020546116579083611978565b1115610b825760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e000060448201526064016107ad565b600b546001600160a01b0382811691161480156116da57506001600160a01b0382165f9081526007602052604090205460ff16155b15610d7c57600160165f8282546116f191906123de565b90915550505050565b600b546001600160a01b03848116911614611799576003548111158061173757506001600160a01b0383165f9081526007602052604090205460ff165b8061175957506001600160a01b0382165f9081526007602052604090205460ff165b6117995760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107ad565b600254811115806117c157506001600160a01b0383165f9081526007602052604090205460ff165b806117e357506001600160a01b0382165f9081526007602052604090205460ff165b610b825760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107ad565b61182e838383611b74565b15610b825761183e601854611c22565b5f601655505050565b6001600160a01b0382165f9081526007602052604081205460ff161580156108255750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f806118978585611dd2565b9050801561196f575f6118b9826109a96014548761113990919063ffffffff16565b305f908152600560205260409020549091506118d59082611978565b305f81815260056020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119259085815260200190565b60405180910390a36010541561195c5761195c3061dead6119576010546109a96014548a61113990919063ffffffff16565b610f31565b6119668482611123565b92505050610825565b50909392505050565b5f61082582846123de565b601f545f819003611992575050565b5f805a90505f5b84831080156119a757508381105b15611a625783602354106119ba575f6023555b6119eb601f602354815481106119d2576119d26123f1565b5f918252602090912001546001600160a01b0316611e1c565b15611a2157611a21601f60235481548110611a0857611a086123f1565b5f918252602090912001546001600160a01b0316611144565b611a36611a2f5a8490611123565b8490611978565b92505a602380549193505f611a4a83612405565b91905055508080611a5a90612405565b915050611999565b5050505050565b601f8054611a79906001906123cb565b81548110611a8957611a896123f1565b5f9182526020808320909101546001600160a01b038481168452918052604090922054601f80549290931692918110611ac457611ac46123f1565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681528180526040812054601f805491939291611b0c906001906123cb565b81548110611b1c57611b1c6123f1565b5f9182526020808320909101546001600160a01b03168352820192909252604001902055601f805480611b5157611b5161241d565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f8060195483101590505f601854611b8b30610a92565b601754911115915060ff16158015611ba5575060155460ff165b8015611bba5750600b54600160a01b900460ff165b8015611bc35750815b8015611be757506001600160a01b0386165f9081526007602052604090205460ff16155b8015611c005750600b546001600160a01b038681169116145b8015611c0f5750600260165410155b8015611c185750805b9695505050505050565b600160175f6101000a81548160ff0219169083151502179055505f611c6a60026109a9600e54611368600f54611368600d546113686001600c5461197890919063ffffffff16565b90505f611c86826109af600c548661112e90919063ffffffff16565b90505f611c938483611123565b905047611c9f82611e60565b5f611caa4783611123565b90505f611ccc611cc5600c548861112390919063ffffffff16565b8390611139565b90505f611ce4600c548361112e90919063ffffffff16565b90508015611cf657611cf68682611f6a565b600d545f90611d0a906109a985600261112e565b90508015611d5257604051732fb842f6f66a69aad9b831cabf73aded83357ee09082156108fc029083905f818181858888f19350505050158015611d50573d5f803e3d5ffd5b505b600e545f90611d66906109a986600261112e565b90508015611d7757611d7781612024565b4715611dbc57604051732fb842f6f66a69aad9b831cabf73aded83357ee0904780156108fc02915f818181858888f19350505050158015611dba573d5f803e3d5ffd5b505b50506017805460ff191690555050505050505050565b600b545f906001600160a01b0390811690831603611df3575060125461077e565b600b546001600160a01b0390811690841603611e12575060115461077e565b5060135492915050565b6024546001600160a01b0382165f9081526021602052604081205490914291611e4591906123de565b10801561077e5750602554611e598361082c565b1192915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611e9357611e936123f1565b60200260200101906001600160a01b031690816001600160a01b031681525050733bd359c1119da7da1d913d1c4d2b7c461115433a81600181518110611edb57611edb6123f1565b6001600160a01b039283166020918202929092010152600954611f019130911684610e0e565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790611f399085905f90869030904290600401612431565b5f604051808303815f87803b158015611f50575f80fd5b505af1158015611f62573d5f803e3d5ffd5b505050505050565b600954611f829030906001600160a01b031684610e0e565b60095460405163f305d71960e01b8152306004820152602481018490525f604482018190526064820152732fb842f6f66a69aad9b831cabf73aded83357ee060848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611fff573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a6291906124a1565b8015806120315750601a54155b156120395750565b604051731de9ace088ced3ed0ec89e8e2695be23088aa19d60611b602082015261027160ec1b603482015273350035555e10d9afaf1566aaebfced5ba6c2777760601b60378201525f90604b0160408051601f1981840301815260a0830182528083523060208401524283830152606083018590525f60808401819052600a54925163c04b8d5960e01b8152919450916001600160a01b03169063c04b8d599086906120e99086906004016124cc565b60206040518083038185885af1158015612105573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061212a9190612523565b905080156110d657601b5461213f9082611978565b601b55601a54601e546121639161215a916109af908561112e565b601d5490611978565b601d5550505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610825602083018461216c565b6001600160a01b03811681146121c0575f80fd5b50565b5f80604083850312156121d4575f80fd5b82356121df816121ac565b946020939093013593505050565b5f805f606084860312156121ff575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215612228575f80fd5b8335612233816121ac565b92506020840135612243816121ac565b929592945050506040919091013590565b5f60208284031215612264575f80fd5b8135610825816121ac565b80151581146121c0575f80fd5b5f806040838503121561228d575f80fd5b8235612298816121ac565b915060208301356122a88161226f565b809150509250929050565b5f602082840312156122c3575f80fd5b5035919050565b5f80604083850312156122db575f80fd5b82356122e6816121ac565b915060208301356122a8816121ac565b5f805f805f805f80610100898b03121561230e575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761077e5761077e612366565b5f826123ab57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156123c0575f80fd5b81516108258161226f565b8181038181111561077e5761077e612366565b8082018082111561077e5761077e612366565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161241657612416612366565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156124815783516001600160a01b031683526020938401939092019160010161245a565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f606084860312156124b3575f80fd5b5050815160208301516040909301519094929350919050565b602081525f825160a060208401526124e760c084018261216c565b905060018060a01b0360208501511660408401526040840151606084015260608401516080840152608084015160a08401528091505092915050565b5f60208284031215612533575f80fd5b505191905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b457a902cab6cbd5243ce7d71b5434390a2e3e131cc43141a7ed59e6a89480da64736f6c634300081a0033
Deployed Bytecode
0x608060405260043610610220575f3560e01c806370a082311161011e578063b381cf40116100a8578063e2d6f94c1161006d578063e2d6f94c146106e7578063ef43b02b14610706578063efca2eed14610725578063f2fde38b1461073a578063ffd49c8414610759575f80fd5b8063b381cf40146105dc578063c942435d14610603578063ca89b89914610617578063ce7c2ac21461064e578063dd62ed3e146106a3575f80fd5b80639358928b116100ee5780639358928b1461054557806395d89b4114610559578063997664d714610589578063a8aa1b311461059e578063a9059cbb146105bd575f80fd5b806370a08231146104cc578063893d20e8146104eb5780638cd4426d146105075780638fe62b8a14610526575f80fd5b8063313ce567116101aa5780634355855a1161016f5780634355855a1461043657806348ff2b8b146104645780634fab0ae8146104835780635a3bb9891461049857806360e71962146104b7575f80fd5b8063313ce5671461039a57806331d7ba59146103b557806334c5d2ce146103d45780633a98ef39146103f35780633f4218e014610408575f80fd5b8063228cb733116101f0578063228cb733146102dc57806323b872dd1461031b57806328fd31981461033a578063293230b8146103595780632f54bf6e1461036d575f80fd5b806306fdde031461022b578063095ea7b31461026e5780630ca61cb11461029d57806318160ddd146102be575f80fd5b3661022757005b5f80fd5b348015610236575f80fd5b50604080518082019091526009815268426162792043686f6760b81b60208201525b604051610265919061219a565b60405180910390f35b348015610279575f80fd5b5061028d6102883660046121c3565b61076e565b6040519015158152602001610265565b3480156102a8575f80fd5b506102bc6102b73660046121ed565b610784565b005b3480156102c9575f80fd5b506001545b604051908152602001610265565b3480156102e7575f80fd5b5061030373350035555e10d9afaf1566aaebfced5ba6c2777781565b6040516001600160a01b039091168152602001610265565b348015610326575f80fd5b5061028d610335366004612216565b6107c4565b348015610345575f80fd5b506102ce610354366004612254565b61082c565b348015610364575f80fd5b506102bc6108b2565b348015610378575f80fd5b5061028d610387366004612254565b5f546001600160a01b0391821691161490565b3480156103a5575f80fd5b5060405160098152602001610265565b3480156103c0575f80fd5b50600954610303906001600160a01b031681565b3480156103df575f80fd5b506102bc6103ee3660046121ed565b6108f0565b3480156103fe575f80fd5b506102ce601a5481565b348015610413575f80fd5b5061028d610422366004612254565b60076020525f908152604090205460ff1681565b348015610441575f80fd5b5061028d610450366004612254565b60086020525f908152604090205460ff1681565b34801561046f575f80fd5b506102bc61047e36600461227c565b610a3f565b34801561048e575f80fd5b506102ce60255481565b3480156104a3575f80fd5b50600a54610303906001600160a01b031681565b3480156104c2575f80fd5b506102ce60265481565b3480156104d7575f80fd5b506102ce6104e6366004612254565b610a92565b3480156104f6575f80fd5b505f546001600160a01b0316610303565b348015610512575f80fd5b506102bc6105213660046121c3565b610aac565b348015610531575f80fd5b506102bc6105403660046122b3565b610b87565b348015610550575f80fd5b506102ce610bd2565b348015610564575f80fd5b506040805180820190915260088152674241425943484f4760c01b6020820152610258565b348015610594575f80fd5b506102ce601b5481565b3480156105a9575f80fd5b50600b54610303906001600160a01b031681565b3480156105c8575f80fd5b5061028d6105d73660046121c3565b610c01565b3480156105e7575f80fd5b50610303733bd359c1119da7da1d913d1c4d2b7c461115433a81565b34801561060e575f80fd5b506102bc610c0d565b348015610622575f80fd5b506102ce610631366004612254565b6001600160a01b03165f9081526022602052604090206002015490565b348015610659575f80fd5b50610688610668366004612254565b60226020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610265565b3480156106ae575f80fd5b506102ce6106bd3660046122ca565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b3480156106f2575f80fd5b506102bc6107013660046122f6565b610c18565b348015610711575f80fd5b506102bc61072036600461227c565b610d1d565b348015610730575f80fd5b506102ce601c5481565b348015610745575f80fd5b506102bc610754366004612254565b610d92565b348015610764575f80fd5b506102ce60245481565b5f61077a338484610e0e565b5060015b92915050565b5f546001600160a01b031633146107b65760405162461bcd60e51b81526004016107ad90612346565b60405180910390fd5b602492909255602555602655565b5f6107d0848484610f31565b610821843361081c8560405180606001604052806028815260200161253b602891396001600160a01b038a165f90815260066020908152604080832033845290915290205491906110dc565b610e0e565b5060015b9392505050565b6001600160a01b0381165f90815260226020526040812054810361085157505f919050565b6001600160a01b0382165f9081526022602052604081205461087290611107565b6001600160a01b0384165f908152602260205260409020600101549091508082116108a057505f9392505050565b6108aa8282611123565b949350505050565b5f546001600160a01b031633146108db5760405162461bcd60e51b81526004016107ad90612346565b600b805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146109195760405162461bcd60e51b81526004016107ad90612346565b5f6127108461092760015490565b610931919061237a565b61093b9190612391565b90505f6127108461094b60015490565b610955919061237a565b61095f9190612391565b90505f6127108461096f60015490565b610979919061237a565b6109839190612391565b60028490556003839055600481905590505f6109b56103e86109af60056109a960015490565b9061112e565b90611139565b90508084101580156109c75750808310155b80156109d35750808210155b610a365760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b60648201526084016107ad565b50505050505050565b5f546001600160a01b03163314610a685760405162461bcd60e51b81526004016107ad90612346565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03165f9081526005602052604090205490565b33732fb842f6f66a69aad9b831cabf73aded83357ee014610b005760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016107ad565b60405163a9059cbb60e01b8152732fb842f6f66a69aad9b831cabf73aded83357ee06004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610b5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8291906123b0565b505050565b5f546001600160a01b03163314610bb05760405162461bcd60e51b81526004016107ad90612346565b620186a081600154610bc2919061237a565b610bcc9190612391565b60185550565b5f610bfc610bdf5f610a92565b610bf6610bed61dead610a92565b60015490611123565b90611123565b905090565b5f61077a338484610f31565b610c1633611144565b565b5f546001600160a01b03163314610c415760405162461bcd60e51b81526004016107ad90612346565b600c889055600d8790556010869055600e859055600f849055601183905560128290556013819055601454610c7790600a611139565b60115411158015610c975750601454610c9190600a611139565b60125411155b8015610cb25750601454610cac90600a611139565b60135411155b610d135760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2031302560a01b60648201526084016107ad565b5050505050505050565b5f546001600160a01b03163314610d465760405162461bcd60e51b81526004016107ad90612346565b6001600160a01b0382165f908152600860205260409020805460ff19168215801591909117909155610d8057610d7c825f611284565b5050565b610d7c82610d8d84610a92565b611284565b5f546001600160a01b03163314610dbb5760405162461bcd60e51b81526004016107ad90612346565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b038316610e705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107ad565b6001600160a01b038216610ed15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107ad565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f3c838383611394565b610f46838361152d565b610f518383836115bc565b610f5b83836116a5565b610f668383836116fa565b610f71838383611823565b6001600160a01b0383165f90815260056020526040902054610f939082611123565b6001600160a01b0384165f90815260056020526040812091909155610fb88484611847565b610fc25781610fcd565b610fcd84848461188b565b6001600160a01b0384165f90815260056020526040902054909150610ff29082611978565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110459085815260200190565b60405180910390a36001600160a01b0384165f9081526008602052604090205460ff166110795761107984610d8d86610a92565b6001600160a01b0383165f9081526008602052604090205460ff166110a5576110a583610d8d85610a92565b6001600160a01b0383165f90815260226020526040902054156110cb576110cb83611144565b6110d6602654611983565b50505050565b5f81848411156110ff5760405162461bcd60e51b81526004016107ad919061219a565b505050900390565b5f61077e601e546109af601d548561112e90919063ffffffff16565b5f61082582846123cb565b5f610825828461237a565b5f6108258284612391565b6001600160a01b0381165f9081526022602052604081205490036111655750565b5f61116f8261082c565b90508015610d7c57601c546111849082611978565b601c5560405163a9059cbb60e01b81526001600160a01b03831660048201526024810182905273350035555e10d9afaf1566aaebfced5ba6c277779063a9059cbb906044016020604051808303815f875af11580156111e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120991906123b0565b506001600160a01b0382165f908152602160209081526040808320429055602290915290206002015461123c9082611978565b6001600160a01b0383165f90815260226020526040902060028101919091555461126590611107565b6001600160a01b0383165f908152602260205260409020600101555050565b5f811180156112a857506001600160a01b0382165f90815260226020526040902054155b1561130c57601f80546001600160a01b0384165f8181526020805260408120839055600183018455929092527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d8070180546001600160a01b031916909117905561133e565b8015801561133057506001600160a01b0382165f9081526022602052604090205415155b1561133e5761133e82611a69565b6001600160a01b0382165f90815260226020526040902054601a5461136e91839161136891611123565b90611978565b601a556001600160a01b0382165f90815260226020526040902081905561126581611107565b6001600160a01b0383166113f85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107ad565b6001600160a01b03821661145a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107ad565b5f81116114bb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107ad565b6114c483610a92565b811115610b825760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016107ad565b6001600160a01b0382165f9081526007602052604090205460ff1615801561156d57506001600160a01b0381165f9081526007602052604090205460ff16155b15610d7c57600b54600160a01b900460ff16610d7c5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b60448201526064016107ad565b6001600160a01b0383165f9081526007602052604090205460ff161580156115fc57506001600160a01b0382165f9081526007602052604090205460ff16155b80156116165750600b546001600160a01b03838116911614155b801561162d57506001600160a01b03821661dead14155b15610b82576004546001600160a01b0383165f908152600560205260409020546116579083611978565b1115610b825760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e000060448201526064016107ad565b600b546001600160a01b0382811691161480156116da57506001600160a01b0382165f9081526007602052604090205460ff16155b15610d7c57600160165f8282546116f191906123de565b90915550505050565b600b546001600160a01b03848116911614611799576003548111158061173757506001600160a01b0383165f9081526007602052604090205460ff165b8061175957506001600160a01b0382165f9081526007602052604090205460ff165b6117995760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107ad565b600254811115806117c157506001600160a01b0383165f9081526007602052604090205460ff165b806117e357506001600160a01b0382165f9081526007602052604090205460ff165b610b825760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107ad565b61182e838383611b74565b15610b825761183e601854611c22565b5f601655505050565b6001600160a01b0382165f9081526007602052604081205460ff161580156108255750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f806118978585611dd2565b9050801561196f575f6118b9826109a96014548761113990919063ffffffff16565b305f908152600560205260409020549091506118d59082611978565b305f81815260056020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119259085815260200190565b60405180910390a36010541561195c5761195c3061dead6119576010546109a96014548a61113990919063ffffffff16565b610f31565b6119668482611123565b92505050610825565b50909392505050565b5f61082582846123de565b601f545f819003611992575050565b5f805a90505f5b84831080156119a757508381105b15611a625783602354106119ba575f6023555b6119eb601f602354815481106119d2576119d26123f1565b5f918252602090912001546001600160a01b0316611e1c565b15611a2157611a21601f60235481548110611a0857611a086123f1565b5f918252602090912001546001600160a01b0316611144565b611a36611a2f5a8490611123565b8490611978565b92505a602380549193505f611a4a83612405565b91905055508080611a5a90612405565b915050611999565b5050505050565b601f8054611a79906001906123cb565b81548110611a8957611a896123f1565b5f9182526020808320909101546001600160a01b038481168452918052604090922054601f80549290931692918110611ac457611ac46123f1565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681528180526040812054601f805491939291611b0c906001906123cb565b81548110611b1c57611b1c6123f1565b5f9182526020808320909101546001600160a01b03168352820192909252604001902055601f805480611b5157611b5161241d565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f8060195483101590505f601854611b8b30610a92565b601754911115915060ff16158015611ba5575060155460ff165b8015611bba5750600b54600160a01b900460ff165b8015611bc35750815b8015611be757506001600160a01b0386165f9081526007602052604090205460ff16155b8015611c005750600b546001600160a01b038681169116145b8015611c0f5750600260165410155b8015611c185750805b9695505050505050565b600160175f6101000a81548160ff0219169083151502179055505f611c6a60026109a9600e54611368600f54611368600d546113686001600c5461197890919063ffffffff16565b90505f611c86826109af600c548661112e90919063ffffffff16565b90505f611c938483611123565b905047611c9f82611e60565b5f611caa4783611123565b90505f611ccc611cc5600c548861112390919063ffffffff16565b8390611139565b90505f611ce4600c548361112e90919063ffffffff16565b90508015611cf657611cf68682611f6a565b600d545f90611d0a906109a985600261112e565b90508015611d5257604051732fb842f6f66a69aad9b831cabf73aded83357ee09082156108fc029083905f818181858888f19350505050158015611d50573d5f803e3d5ffd5b505b600e545f90611d66906109a986600261112e565b90508015611d7757611d7781612024565b4715611dbc57604051732fb842f6f66a69aad9b831cabf73aded83357ee0904780156108fc02915f818181858888f19350505050158015611dba573d5f803e3d5ffd5b505b50506017805460ff191690555050505050505050565b600b545f906001600160a01b0390811690831603611df3575060125461077e565b600b546001600160a01b0390811690841603611e12575060115461077e565b5060135492915050565b6024546001600160a01b0382165f9081526021602052604081205490914291611e4591906123de565b10801561077e5750602554611e598361082c565b1192915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611e9357611e936123f1565b60200260200101906001600160a01b031690816001600160a01b031681525050733bd359c1119da7da1d913d1c4d2b7c461115433a81600181518110611edb57611edb6123f1565b6001600160a01b039283166020918202929092010152600954611f019130911684610e0e565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790611f399085905f90869030904290600401612431565b5f604051808303815f87803b158015611f50575f80fd5b505af1158015611f62573d5f803e3d5ffd5b505050505050565b600954611f829030906001600160a01b031684610e0e565b60095460405163f305d71960e01b8152306004820152602481018490525f604482018190526064820152732fb842f6f66a69aad9b831cabf73aded83357ee060848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611fff573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a6291906124a1565b8015806120315750601a54155b156120395750565b604051731de9ace088ced3ed0ec89e8e2695be23088aa19d60611b602082015261027160ec1b603482015273350035555e10d9afaf1566aaebfced5ba6c2777760601b60378201525f90604b0160408051601f1981840301815260a0830182528083523060208401524283830152606083018590525f60808401819052600a54925163c04b8d5960e01b8152919450916001600160a01b03169063c04b8d599086906120e99086906004016124cc565b60206040518083038185885af1158015612105573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061212a9190612523565b905080156110d657601b5461213f9082611978565b601b55601a54601e546121639161215a916109af908561112e565b601d5490611978565b601d5550505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610825602083018461216c565b6001600160a01b03811681146121c0575f80fd5b50565b5f80604083850312156121d4575f80fd5b82356121df816121ac565b946020939093013593505050565b5f805f606084860312156121ff575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215612228575f80fd5b8335612233816121ac565b92506020840135612243816121ac565b929592945050506040919091013590565b5f60208284031215612264575f80fd5b8135610825816121ac565b80151581146121c0575f80fd5b5f806040838503121561228d575f80fd5b8235612298816121ac565b915060208301356122a88161226f565b809150509250929050565b5f602082840312156122c3575f80fd5b5035919050565b5f80604083850312156122db575f80fd5b82356122e6816121ac565b915060208301356122a8816121ac565b5f805f805f805f80610100898b03121561230e575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761077e5761077e612366565b5f826123ab57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156123c0575f80fd5b81516108258161226f565b8181038181111561077e5761077e612366565b8082018082111561077e5761077e612366565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161241657612416612366565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156124815783516001600160a01b031683526020938401939092019160010161245a565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f606084860312156124b3575f80fd5b5050815160208301516040909301519094929350919050565b602081525f825160a060208401526124e760c084018261216c565b905060018060a01b0360208501511660408401526040840151606084015260608401516080840152608084015160a08401528091505092915050565b5f60208284031215612533575f80fd5b505191905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b457a902cab6cbd5243ce7d71b5434390a2e3e131cc43141a7ed59e6a89480da64736f6c634300081a0033
Deployed Bytecode Sourcemap
5560:19865:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10016:67;;;;;;;;;;-1:-1:-1;10076:5:0;;;;;;;;;;;;-1:-1:-1;;;10076:5:0;;;;10016:67;;;;;;;:::i;:::-;;;;;;;;11050:133;;;;;;;;;;-1:-1:-1;11050:133:0;;;;;:::i;:::-;;:::i;:::-;;;1206:14:1;;1199:22;1181:41;;1169:2;1154:18;11050:133:0;1041:187:1;25163:259:0;;;;;;;;;;-1:-1:-1;25163:259:0;;;;;:::i;:::-;;:::i;:::-;;10323:84;;;;;;;;;;-1:-1:-1;10393:12:0;;10323:84;;;1850:25:1;;;1838:2;1823:18;10323:84:0;1704:177:1;7492:75:0;;;;;;;;;;;;7525:42;7492:75;;;;;-1:-1:-1;;;;;2050:32:1;;;2032:51;;2020:2;2005:18;7492:75:0;1886:203:1;19484:309:0;;;;;;;;;;-1:-1:-1;19484:309:0;;;;;:::i;:::-;;:::i;24020:480::-;;;;;;;;;;-1:-1:-1;24020:480:0;;;;;:::i;:::-;;:::i;11336:83::-;;;;;;;;;;;;;:::i;3496:87::-;;;;;;;;;;-1:-1:-1;3496:87:0;;;;;:::i;:::-;3551:4;3576:5;-1:-1:-1;;;;;3565:16:0;;;3576:5;;3565:16;;3496:87;10166:67;;;;;;;;;;-1:-1:-1;10166:67:0;;5776:1;3001:36:1;;2989:2;2974:18;10166:67:0;2859:184:1;6346:28:0;;;;;;;;;;-1:-1:-1;6346:28:0;;;;-1:-1:-1;;;;;6346:28:0;;;13815:612;;;;;;;;;;-1:-1:-1;13815:612:0;;;;;:::i;:::-;;:::i;7578:26::-;;;;;;;;;;;;;;;;6194:44;;;;;;;;;;-1:-1:-1;6194:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6245:49;;;;;;;;;;-1:-1:-1;6245:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10936:108;;;;;;;;;;-1:-1:-1;10936:108:0;;;;;:::i;:::-;;:::i;8183:47::-;;;;;;;;;;;;;;;;6422:33;;;;;;;;;;-1:-1:-1;6422:33:0;;;;-1:-1:-1;;;;;6422:33:0;;;8237:38;;;;;;;;;;;;;;;;10413:103;;;;;;;;;;-1:-1:-1;10413:103:0;;;;;:::i;:::-;;:::i;10239:78::-;;;;;;;;;;-1:-1:-1;10291:7:0;10309:5;-1:-1:-1;;;;;10309:5:0;10239:78;;22755:208;;;;;;;;;;-1:-1:-1;22755:208:0;;;;;:::i;:::-;;:::i;12848:158::-;;;;;;;;;;-1:-1:-1;12848:158:0;;;;;:::i;:::-;;:::i;11189:138::-;;;;;;;;;;;;;:::i;10089:71::-;;;;;;;;;;-1:-1:-1;10151:7:0;;;;;;;;;;;;-1:-1:-1;;;10151:7:0;;;;10089:71;;7611:29;;;;;;;;;;;;;;;;6507:19;;;;;;;;;;-1:-1:-1;6507:19:0;;;;-1:-1:-1;;;;;6507:19:0;;;10522:139;;;;;;;;;;-1:-1:-1;10522:139:0;;;;;:::i;:::-;;:::i;6595:76::-;;;;;;;;;;;;6629:42;6595:76;;8285:68;;;;;;;;;;;;;:::i;23212:190::-;;;;;;;;;;-1:-1:-1;23212:190:0;;;;;:::i;:::-;-1:-1:-1;;;;;23360:19:0;23285:7;23360:19;;;:6;:19;;;;;:33;;;;23212:190;8053:40;;;;;;;;;;-1:-1:-1;8053:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4445:25:1;;;4501:2;4486:18;;4479:34;;;;4529:18;;;4522:34;4433:2;4418:18;8053:40:0;4243:319:1;10667:129:0;;;;;;;;;;-1:-1:-1;10667:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;10766:19:0;;;10749:7;10766:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10667:129;13015:791;;;;;;;;;;-1:-1:-1;13015:791:0;;;;;:::i;:::-;;:::i;20150:224::-;;;;;;;;;;-1:-1:-1;20150:224:0;;;;;:::i;:::-;;:::i;7647:31::-;;;;;;;;;;;;;;;;3589:111;;;;;;;;;;-1:-1:-1;3589:111:0;;;;;:::i;:::-;;:::i;8139:37::-;;;;;;;;;;;;;;;;11050:133;11125:4;11132:37;11141:10;11153:7;11162:6;11132:8;:37::i;:::-;-1:-1:-1;11177:4:0;11050:133;;;;;:::o;25163:259::-;3551:4;3576:5;-1:-1:-1;;;;;3576:5:0;3463:10;3565:16;3447:38;;;;-1:-1:-1;;;3447:38:0;;;;;;;:::i;:::-;;;;;;;;;25297:9:::1;:28:::0;;;;25336:15:::1;:34:::0;25381:14:::1;:33:::0;25163:259::o;19484:309::-;19582:4;19599:36;19609:6;19617:9;19628:6;19599:9;:36::i;:::-;19646:117;19655:6;19663:10;19675:87;19711:6;19675:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19675:19:0;;;;;;:11;:19;;;;;;;;19695:10;19675:31;;;;;;;;;:87;:35;:87::i;:::-;19646:8;:117::i;:::-;-1:-1:-1;19781:4:0;19484:309;;;;;;:::o;24020:480::-;-1:-1:-1;;;;;24112:19:0;;24089:7;24112:19;;;:6;:19;;;;;:26;:31;;24109:48;;-1:-1:-1;24153:1:0;;24020:480;-1:-1:-1;24020:480:0:o;24109:48::-;-1:-1:-1;;;;;24229:19:0;;24170:33;24229:19;;;:6;:19;;;;;:26;24206:50;;:22;:50::i;:::-;-1:-1:-1;;;;;24303:19:0;;24267:32;24303:19;;;:6;:19;;;;;:33;;;24170:86;;-1:-1:-1;24350:53:0;;;24347:70;;-1:-1:-1;24413:1:0;;24020:480;-1:-1:-1;;;24020:480:0:o;24347:70::-;24437:55;:25;24467:24;24437:29;:55::i;:::-;24430:62;24020:480;-1:-1:-1;;;;24020:480:0:o;11336:83::-;3551:4;3576:5;-1:-1:-1;;;;;3576:5:0;3463:10;3565:16;3447:38;;;;-1:-1:-1;;;3447:38:0;;;;;;;:::i;:::-;11390:14:::1;:21:::0;;-1:-1:-1;;;;11390:21:0::1;-1:-1:-1::0;;;11390:21:0::1;::::0;;11336:83::o;13815:612::-;3551:4;3576:5;-1:-1:-1;;;;;3576:5:0;3463:10;3565:16;3447:38;;;;-1:-1:-1;;;3447:38:0;;;;;;;:::i;:::-;13915:13:::1;13965:5;13954:4;13938:13;10393:12:::0;;;10323:84;13938:13:::1;:20;;;;:::i;:::-;13937:33;;;;:::i;:::-;13915:55;;13981:19;14031:5;14020:6;14004:13;10393:12:::0;;;10323:84;14004:13:::1;:22;;;;:::i;:::-;14003:33;;;;:::i;:::-;13981:55;;14047:17;14097:5;14086:7;14070:13;10393:12:::0;;;10323:84;14070:13:::1;:23;;;;:::i;:::-;14069:33;;;;:::i;:::-;14113:12;:27:::0;;;14151:14:::1;:33:::0;;;14195:15:::1;:31:::0;;;14047:55;-1:-1:-1;;14259:30:0::1;14284:4;14259:20;14277:1;14259:13;10393:12:::0;;;10323:84;14259:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;14237:52;;14317:5;14308;:14;;:38;;;;;14341:5;14326:11;:20;;14308:38;:60;;;;;14363:5;14350:9;:18;;14308:60;14300:119;;;::::0;-1:-1:-1;;;14300:119:0;;7359:2:1;14300:119:0::1;::::0;::::1;7341:21:1::0;7398:2;7378:18;;;7371:30;7437:34;7417:18;;;7410:62;-1:-1:-1;;;7488:18:1;;;7481:44;7542:19;;14300:119:0::1;7157:410:1::0;14300:119:0::1;13904:523;;;;13815:612:::0;;;:::o;10936:108::-;3551:4;3576:5;-1:-1:-1;;;;;3576:5:0;3463:10;3565:16;3447:38;;;;-1:-1:-1;;;3447:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11010:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;11010:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10936:108::o;10413:103::-;-1:-1:-1;;;;;10496:18:0;10479:7;10496:18;;;:9;:18;;;;;;;10413:103::o;22755:208::-;22839:10;8561:42;22839:32;22831:59;;;;-1:-1:-1;;;22831:59:0;;7774:2:1;22831:59:0;;;7756:21:1;7813:2;7793:18;;;7786:30;-1:-1:-1;;;7832:18:1;;;7825:44;7886:18;;22831:59:0;7572:338:1;22831:59:0;22901:54;;-1:-1:-1;;;22901:54:0;;8561:42;22901:54;;;8089:51:1;8156:18;;;8149:34;;;-1:-1:-1;;;;;22901:25:0;;;;;8062:18:1;;22901:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22755:208;;:::o;12848:158::-;3551:4;3576:5;-1:-1:-1;;;;;3576:5:0;3463:10;3565:16;3447:38;;;;-1:-1:-1;;;3447:38:0;;;;;;;:::i;:::-;12990:6:::1;12976:10;12961:12;;:25;;;;:::i;:::-;12960:36;;;;:::i;:::-;12944:13;:52:::0;-1:-1:-1;12848:158:0:o;11189:138::-;11248:7;11265:60;11303:21;11321:1;11303:9;:21::i;:::-;11265:33;11282:15;8395:42;11282:9;:15::i;:::-;11265:12;;;:16;:33::i;:::-;:37;;:60::i;:::-;11258:67;;11189:138;:::o;10522:139::-;10600:4;10607:40;10617:10;10629:9;10640:6;10607:9;:40::i;8285:68::-;8321:30;8340:10;8321:18;:30::i;:::-;8285:68::o;13015:791::-;3551:4;3576:5;-1:-1:-1;;;;;3576:5:0;3463:10;3565:16;3447:38;;;;-1:-1:-1;;;3447:38:0;;;;;;;:::i;:::-;13288:12:::1;:27:::0;;;13326:12:::1;:27:::0;;;13364:7:::1;:22:::0;;;13397:10:::1;:25:::0;;;13433:14:::1;:29:::0;;;13473:8:::1;:23:::0;;;13507:7:::1;:22:::0;;;13540:11:::1;:23:::0;;;13608:11:::1;::::0;:19:::1;::::0;13624:2:::1;13608:15;:19::i;:::-;13596:8;;:31;;:79;;;;-1:-1:-1::0;13656:11:0::1;::::0;:19:::1;::::0;13672:2:::1;13656:15;:19::i;:::-;13644:7;;:31;;13596:79;:130;;;;-1:-1:-1::0;13707:11:0::1;::::0;:19:::1;::::0;13723:2:::1;13707:15;:19::i;:::-;13692:11;;:34;;13596:130;13574:224;;;::::0;-1:-1:-1;;;13574:224:0;;8646:2:1;13574:224:0::1;::::0;::::1;8628:21:1::0;8685:2;8665:18;;;8658:30;8724:34;8704:18;;;8697:62;-1:-1:-1;;;8775:18:1;;;8768:42;8827:19;;13574:224:0::1;8444:408:1::0;13574:224:0::1;13015:791:::0;;;;;;;;:::o;20150:224::-;3551:4;3576:5;-1:-1:-1;;;;;3576:5:0;3463:10;3565:16;3447:38;;;;-1:-1:-1;;;3447:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20238:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;20238:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;20282:85:::1;;20293:19;20302:6;20310:1;20293:8;:19::i;:::-;20150:224:::0;;:::o;20282:85::-:1;20329:35;20338:6;20346:17;20356:6;20346:9;:17::i;:::-;20329:8;:35::i;3589:111::-:0;3551:4;3576:5;-1:-1:-1;;;;;3576:5:0;3463:10;3565:16;3447:38;;;;-1:-1:-1;;;3447:38:0;;;;;;;:::i;:::-;3655:5:::1;:11:::0;;-1:-1:-1;;;;;;3655:11:0::1;-1:-1:-1::0;;;;;3655:11:0;::::1;::::0;;::::1;::::0;;;3673:25:::1;::::0;2032:51:1;;;3673:25:0::1;::::0;2020:2:1;2005:18;3673:25:0::1;;;;;;;3589:111:::0;:::o;19802:339::-;-1:-1:-1;;;;;19896:20:0;;19888:69;;;;-1:-1:-1;;;19888:69:0;;9275:2:1;19888:69:0;;;9257:21:1;9314:2;9294:18;;;9287:30;9353:34;9333:18;;;9326:62;-1:-1:-1;;;9404:18:1;;;9397:34;9448:19;;19888:69:0;9073:400:1;19888:69:0;-1:-1:-1;;;;;19976:21:0;;19968:68;;;;-1:-1:-1;;;19968:68:0;;9680:2:1;19968:68:0;;;9662:21:1;9719:2;9699:18;;;9692:30;9758:34;9738:18;;;9731:62;-1:-1:-1;;;9809:18:1;;;9802:32;9851:19;;19968:68:0;9478:398:1;19968:68:0;-1:-1:-1;;;;;20047:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;20100:33;;1850:25:1;;;20100:33:0;;1823:18:1;20100:33:0;;;;;;;19802:339;;;:::o;11876:963::-;11965:37;11976:6;11984:9;11995:6;11965:10;:37::i;:::-;12013:38;12033:6;12041:9;12013:19;:38::i;:::-;12062:41;12077:6;12085:9;12096:6;12062:14;:41::i;:::-;12115:35;12132:6;12140:9;12115:16;:35::i;:::-;12161:39;12174:6;12182:9;12193:6;12161:12;:39::i;:::-;12212:35;12221:6;12229:9;12240:6;12212:8;:35::i;:::-;-1:-1:-1;;;;;12281:17:0;;;;;;:9;:17;;;;;;:29;;12303:6;12281:21;:29::i;:::-;-1:-1:-1;;;;;12261:17:0;;;;;;:9;:17;;;;;:49;;;;12346:32;12271:6;12368:9;12346:13;:32::i;:::-;:78;;12418:6;12346:78;;;12381:34;12389:6;12397:9;12408:6;12381:7;:34::i;:::-;-1:-1:-1;;;;;12458:20:0;;;;;;:9;:20;;;;;;12321:103;;-1:-1:-1;12458:40:0;;12321:103;12458:24;:40::i;:::-;-1:-1:-1;;;;;12435:20:0;;;;;;;:9;:20;;;;;;;:63;;;;12514:43;;;;;;;;;;12542:14;1850:25:1;;1838:2;1823:18;;1704:177;12514:43:0;;;;;;;;-1:-1:-1;;;;;12575:24:0;;;;;;:16;:24;;;;;;;;12571:67;;12601:35;12610:6;12618:17;12628:6;12618:9;:17::i;12601:35::-;-1:-1:-1;;;;;12652:27:0;;;;;;:16;:27;;;;;;;;12648:76;;12681:41;12690:9;12701:20;12711:9;12701;:20::i;12681:41::-;-1:-1:-1;;;;;12737:17:0;;12764:1;12737:17;;;:6;:17;;;;;:24;:28;12734:64;;12767:29;12786:9;12767:18;:29::i;:::-;12808:23;12816:14;;12808:7;:23::i;:::-;11954:885;11876:963;;;:::o;1802:168::-;1888:7;1934:12;1926:6;;;;1918:29;;;;-1:-1:-1;;;1918:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1956:5:0;;;1802:168::o;24509:172::-;24580:7;24607:66;24641:31;;24607:29;24618:17;;24607:6;:10;;:29;;;;:::i;503:82::-;561:7;578:5;582:1;578;:5;:::i;591:82::-;649:7;666:5;670:1;666;:5;:::i;679:82::-;737:7;754:5;758:1;754;:5;:::i;23411:600::-;-1:-1:-1;;;;;23483:19:0;;;;;;:6;:19;;;;;:26;:31;;23480:46;;23411:600;:::o;23480:46::-;23539:14;23556:30;23574:11;23556:17;:30::i;:::-;23539:47;-1:-1:-1;23600:10:0;;23597:407;;23645:16;;:28;;23666:6;23645:20;:28::i;:::-;23626:16;:47;23688:44;;-1:-1:-1;;;23688:44:0;;-1:-1:-1;;;;;8107:32:1;;23688:44:0;;;8089:51:1;8156:18;;;8149:34;;;7525:42:0;;23688:23;;8062:18:1;;23688:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23747:30:0;;;;;;:17;:30;;;;;;;;23780:15;23747:48;;23846:6;:19;;;;;:33;;;:45;;23884:6;23846:37;:45::i;:::-;-1:-1:-1;;;;;23810:19:0;;;;;;:6;:19;;;;;:33;;;:81;;;;23965:26;23942:50;;:22;:50::i;:::-;-1:-1:-1;;;;;23906:19:0;;;;;;:6;:19;;;;;:33;;:86;23469:542;23411:600;:::o;20383:529::-;20470:1;20461:6;:10;:45;;;;-1:-1:-1;;;;;;20475:19:0;;;;;;:6;:19;;;;;:26;:31;20461:45;20458:224;;;24789:12;:19;;-1:-1:-1;;;;;24755:31:0;;;;;;:18;:31;;;;;:53;;;24819:30;;;;;;;;;;;;;-1:-1:-1;;;;;;24819:30:0;;;;;;20458:224;;;20579:11;;:45;;;;-1:-1:-1;;;;;;20594:19:0;;20623:1;20594:19;;;:6;:19;;;;;:26;:30;;20579:45;20576:106;;;20640:30;20658:11;20640:17;:30::i;:::-;-1:-1:-1;;;;;20722:19:0;;;;;;:6;:19;;;;;:26;20706:11;;:55;;20754:6;;20706:43;;:15;:43::i;:::-;:47;;:55::i;:::-;20692:11;:69;-1:-1:-1;;;;;20772:19:0;;;;;;:6;:19;;;;;:35;;;20854:50;20801:6;20854:22;:50::i;11428:439::-;-1:-1:-1;;;;;11532:20:0;;11524:70;;;;-1:-1:-1;;;11524:70:0;;10216:2:1;11524:70:0;;;10198:21:1;10255:2;10235:18;;;10228:30;10294:34;10274:18;;;10267:62;-1:-1:-1;;;10345:18:1;;;10338:35;10390:19;;11524:70:0;10014:401:1;11524:70:0;-1:-1:-1;;;;;11613:23:0;;11605:71;;;;-1:-1:-1;;;11605:71:0;;10622:2:1;11605:71:0;;;10604:21:1;10661:2;10641:18;;;10634:30;10700:34;10680:18;;;10673:62;-1:-1:-1;;;10751:18:1;;;10744:33;10794:19;;11605:71:0;10420:399:1;11605:71:0;11712:1;11695:6;:19;11687:73;;;;-1:-1:-1;;;11687:73:0;;11026:2:1;11687:73:0;;;11008:21:1;11065:2;11045:18;;;11038:30;11104:34;11084:18;;;11077:62;-1:-1:-1;;;11155:18:1;;;11148:39;11204:19;;11687:73:0;10824:405:1;11687:73:0;11789:17;11799:6;11789:9;:17::i;:::-;11779:6;:27;;11771:88;;;;-1:-1:-1;;;11771:88:0;;11436:2:1;11771:88:0;;;11418:21:1;11475:2;11455:18;;;11448:30;11514:34;11494:18;;;11487:62;-1:-1:-1;;;11565:18:1;;;11558:47;11622:19;;11771:88:0;11234:413:1;14436:215:0;-1:-1:-1;;;;;14529:19:0;;;;;;:11;:19;;;;;;;;14528:20;:47;;;;-1:-1:-1;;;;;;14553:22:0;;;;;;:11;:22;;;;;;;;14552:23;14528:47;14525:119;;;14599:14;;-1:-1:-1;;;14599:14:0;;;;14591:41;;;;-1:-1:-1;;;14591:41:0;;11854:2:1;14591:41:0;;;11836:21:1;11893:2;11873:18;;;11866:30;-1:-1:-1;;;11912:18:1;;;11905:44;11966:18;;14591:41:0;11652:338:1;14660:404:0;-1:-1:-1;;;;;14778:19:0;;;;;;:11;:19;;;;;;;;14777:20;:60;;;;-1:-1:-1;;;;;;14815:22:0;;;;;;:11;:22;;;;;;;;14814:23;14777:60;:103;;;;-1:-1:-1;14875:4:0;;-1:-1:-1;;;;;14854:26:0;;;14875:4;;14854:26;;14777:103;:146;;;;-1:-1:-1;;;;;;14897:26:0;;8395:42;14897:26;;14777:146;14760:297;;;14995:15;;-1:-1:-1;;;;;14958:20:0;;;;;;:9;:20;;;;;;:32;;14983:6;14958:24;:32::i;:::-;14957:53;;14949:96;;;;-1:-1:-1;;;14949:96:0;;12197:2:1;14949:96:0;;;12179:21:1;12236:2;12216:18;;;12209:30;12275:32;12255:18;;;12248:60;12325:18;;14949:96:0;11995:354:1;15073:159:0;15170:4;;-1:-1:-1;;;;;15157:17:0;;;15170:4;;15157:17;:41;;;;-1:-1:-1;;;;;;15179:19:0;;;;;;:11;:19;;;;;;;;15178:20;15157:41;15154:71;;;15221:1;15200:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;15073:159:0;;:::o;15241:365::-;15352:4;;-1:-1:-1;;;;;15342:14:0;;;15352:4;;15342:14;15339:148;;15390:14;;15380:6;:24;;:47;;;-1:-1:-1;;;;;;15408:19:0;;;;;;:11;:19;;;;;;;;15380:47;:73;;;-1:-1:-1;;;;;;15431:22:0;;;;;;:11;:22;;;;;;;;15380:73;15372:103;;;;-1:-1:-1;;;15372:103:0;;12686:2:1;15372:103:0;;;12668:21:1;12725:2;12705:18;;;12698:30;-1:-1:-1;;;12744:18:1;;;12737:47;12801:18;;15372:103:0;12484:341:1;15372:103:0;15515:12;;15505:6;:22;;:45;;;-1:-1:-1;;;;;;15531:19:0;;;;;;:11;:19;;;;;;;;15505:45;:71;;;-1:-1:-1;;;;;;15554:22:0;;;;;;:11;:22;;;;;;;;15505:71;15497:101;;;;-1:-1:-1;;;15497:101:0;;12686:2:1;15497:101:0;;;12668:21:1;12725:2;12705:18;;;12698:30;-1:-1:-1;;;12744:18:1;;;12737:47;12801:18;;15497:101:0;12484:341:1;18211:234:0;18303:41;18318:6;18326:9;18337:6;18303:14;:41::i;:::-;18300:138;;;18360:29;18375:13;;18360:14;:29::i;:::-;18424:1;18404:9;:22;18211:234;;;:::o;18454:160::-;-1:-1:-1;;;;;18560:19:0;;18535:4;18560:19;;;:11;:19;;;;;;;;18559:20;:47;;;;-1:-1:-1;;;;;;;18584:22:0;;;;;:11;:22;;;;;;;;18583:23;;18454:160;-1:-1:-1;18454:160:0:o;18851:624::-;18937:7;18957:13;18973:30;18985:6;18993:9;18973:11;:30::i;:::-;18957:46;-1:-1:-1;19017:9:0;;19014:430;;19042:17;19062:34;19090:5;19062:23;19073:11;;19062:6;:10;;:23;;;;:::i;:34::-;19156:4;19138:24;;;;:9;:24;;;;;;19042:54;;-1:-1:-1;19138:39:0;;19042:54;19138:28;:39::i;:::-;19129:4;19111:24;;;;:9;:24;;;;;;;:66;;;;19197:42;;-1:-1:-1;;;;;19197:42:0;;;;;;;19229:9;1850:25:1;;1838:2;1823:18;;1704:177;19197:42:0;;;;;;;;19257:7;;:20;19254:136;;19297:77;19315:4;8395:42;19337:36;19365:7;;19337:23;19348:11;;19337:6;:10;;:23;;;;:::i;:36::-;19297:9;:77::i;:::-;19411:21;:6;19422:9;19411:10;:21::i;:::-;19404:28;;;;;;19014:430;-1:-1:-1;19461:6:0;;18851:624;-1:-1:-1;;;18851:624:0:o;415:82::-;473:7;490:5;494:1;490;:5;:::i;21962:696::-;22039:12;:19;22012:24;22072:21;;;22069:37;;22097:7;21962:696;:::o;22069:37::-;22119:15;22149;22167:9;22149:27;;22187:18;22223:428;22239:3;22229:7;:13;:46;;;;;22259:16;22246:10;:29;22229:46;22223:428;;;22311:16;22295:12;;:32;22292:55;;22344:1;22329:12;:16;22292:55;22364:44;22381:12;22394;;22381:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;22381:26:0;22364:16;:44::i;:::-;22361:129;;;22428:46;22447:12;22460;;22447:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;22447:26:0;22428:18;:46::i;:::-;22514:35;22526:22;22538:9;22526:7;;:11;:22::i;:::-;22514:7;;:11;:35::i;:::-;22504:45;;22574:9;22598:12;:14;;22564:19;;-1:-1:-1;22598:12:0;:14;;;:::i;:::-;;;;;;22627:12;;;;;:::i;:::-;;;;22223:428;;;22001:657;;;;21962:696;:::o;24866:288::-;24982:12;24995:19;;:21;;25015:1;;24995:21;:::i;:::-;24982:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24947:31:0;;;;;;;;;;;;;24934:12;:45;;24982:35;;;;;24934:12;:45;;;;;;:::i;:::-;;;;;;;;;;;;;:83;;-1:-1:-1;;;;;;24934:83:0;-1:-1:-1;;;;;24934:83:0;;;;;;25086:31;;;;;;;;;;;;25047:12;25060:19;;25086:31;;24934:45;;25060:21;;-1:-1:-1;;25060:21:0;:::i;:::-;25047:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25047:35:0;25028:55;;;;;;;;;;;;:89;25128:12;:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;25128:18:0;;;;;-1:-1:-1;;;;;;25128:18:0;;;;;;-1:-1:-1;24866:288:0:o;17705:497::-;17803:4;17820:13;17852:15;;17842:6;:25;;17820:47;;17878:19;17928:13;;17900:24;17918:4;17900:9;:24::i;:::-;17960:8;;17900:41;-1:-1:-1;17900:41:0;;-1:-1:-1;17960:8:0;;17959:9;:37;;;;-1:-1:-1;17985:11:0;;;;17959:37;:68;;;;-1:-1:-1;18013:14:0;;-1:-1:-1;;;18013:14:0;;;;17959:68;:93;;;;;18044:8;17959:93;:130;;;;-1:-1:-1;;;;;;18070:19:0;;;;;;:11;:19;;;;;;;;18069:20;17959:130;:164;;;;-1:-1:-1;18119:4:0;;-1:-1:-1;;;;;18106:17:0;;;18119:4;;18106:17;17959:164;:204;;;;;18161:1;18140:9;;:23;;17959:204;:235;;;;;18180:14;17959:235;17952:242;17705:497;-1:-1:-1;;;;;;17705:497:0:o;15615:1250::-;7418:4;7407:8;;:15;;;;;;;;;;;;;;;;;;15686:20:::1;15709:82;15789:1;15710:73;15772:10;;15710:57;15752:14;;15710:37;15734:12;;15710:19;15727:1;15710:12;;:16;;:19;;;;:::i;15709:82::-;15686:105;;15802:32;15837:42;15866:12;15837:24;15848:12;;15837:6;:10;;:24;;;;:::i;:42::-;15802:77:::0;-1:-1:-1;15890:14:0::1;15907:36;:6:::0;15802:77;15907:10:::1;:36::i;:::-;15890:53:::0;-1:-1:-1;15982:21:0::1;16014:24;15890:53:::0;16014:16:::1;:24::i;:::-;16068:20;16091:41;:21;16117:14:::0;16091:25:::1;:41::i;:::-;16068:64;;16143:19;16166:48;16183:30;16200:12;;16183;:16;;:30;;;;:::i;:::-;16166:12:::0;;:16:::1;:48::i;:::-;16143:71;;16225:29;16257;16273:12;;16257:11;:15;;:29;;;;:::i;:::-;16225:61:::0;-1:-1:-1;16303:34:0;;16300:126:::1;;16353:61;16366:24;16392:21;16353:12;:61::i;:::-;16488:12;::::0;16439:23:::1;::::0;16465:36:::1;::::0;:18:::1;:11:::0;16481:1:::1;16465:15;:18::i;:36::-;16439:62:::0;-1:-1:-1;16515:19:0;;16512:79:::1;;16536:53;::::0;8561:42:::1;::::0;16536:53;::::1;;;::::0;16573:15;;16536:53:::1;::::0;;;16573:15;8561:42;16536:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16512:79;16651:10;::::0;16604:21:::1;::::0;16628:34:::1;::::0;:18:::1;:11:::0;16644:1:::1;16628:15;:18::i;:34::-;16604:58:::0;-1:-1:-1;16676:17:0;;16673:46:::1;;16695:22;16703:13;16695:7;:22::i;:::-;16735:21;:34:::0;16732:126:::1;;16785:61;::::0;8561:42:::1;::::0;16824:21:::1;16785:61:::0;::::1;;;::::0;::::1;::::0;;;16824:21;8561:42;16785:61;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16732:126;-1:-1:-1::0;;7427:8:0;:16;;-1:-1:-1;;7427:16:0;;;-1:-1:-1;;;;;;;;15615:1250:0:o;18623:219::-;18738:4;;18702:7;;-1:-1:-1;;;;;18738:4:0;;;18725:17;;;;18722:38;;-1:-1:-1;18751:7:0;;18744:14;;18722:38;18783:4;;-1:-1:-1;;;;;18783:4:0;;;18773:14;;;;18770:36;;-1:-1:-1;18796:8:0;;18789:15;;18770:36;-1:-1:-1;18823:11:0;;18623:219;;;;:::o;22972:231::-;23099:9;;-1:-1:-1;;;;;23066:30:0;;23042:4;23066:30;;;:17;:30;;;;;;23042:4;;23111:15;;23066:42;;23099:9;23066:42;:::i;:::-;:60;:129;;;;;23180:15;;23147:30;23165:11;23147:17;:30::i;:::-;:48;23059:136;22972:231;-1:-1:-1;;22972:231:0:o;17246:450::-;17336:16;;;17350:1;17336:16;;;;;;;;17312:21;;17336:16;;;;;;;;;;-1:-1:-1;17336:16:0;17312:40;;17383:4;17365;17370:1;17365:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;17365:23:0;;;-1:-1:-1;;;;;17365:23:0;;;;;6629:42;17399:4;17404:1;17399:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17399:17:0;;;:7;;;;;;;;;:17;17459:11;;17427:58;;17444:4;;17459:11;17473;17427:8;:58::i;:::-;17496:11;;:192;;-1:-1:-1;;;17496:192:0;;-1:-1:-1;;;;;17496:11:0;;;;:62;;:192;;17573:11;;17496;;17615:4;;17642;;17662:15;;17496:192;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17301:395;17246:450;:::o;16874:363::-;16987:11;;16955:58;;16972:4;;-1:-1:-1;;;;;16987:11:0;17001;16955:8;:58::i;:::-;17024:11;;:205;;-1:-1:-1;;;17024:205:0;;17092:4;17024:205;;;14633:51:1;14700:18;;;14693:34;;;17024:11:0;14743:18:1;;;14736:34;;;14786:18;;;14779:34;8561:42:0;14829:19:1;;;14822:61;17203:15:0;14899:19:1;;;14892:35;-1:-1:-1;;;;;17024:11:0;;;;:27;;17059:9;;14605:19:1;;17024:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21003:950::-;21063:14;;;:34;;-1:-1:-1;21081:11:0;;:16;21063:34;21059:73;;;21003:950;:::o;21059:73::-;21230:98;;-1:-1:-1;;;21230:98:0;;;15582:66:1;-1:-1:-1;;;15664:12:1;;;15657:63;-1:-1:-1;;;15736:12:1;;;15729:75;21210:17:0;;15820:12:1;;21230:98:0;;;-1:-1:-1;;21230:98:0;;;;;;21389:215;;;;;;;;21479:4;21230:98;21389:215;;;21509:15;21389:215;;;;;;;;;;21342:44;21389:215;;;;;;21638:12;;:49;;-1:-1:-1;;;21638:49:0;;21230:98;;-1:-1:-1;21342:44:0;-1:-1:-1;;;;;21638:12:0;;:23;;21549:9;;21638:49;;21230:98;;21638:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21618:69;-1:-1:-1;21705:13:0;;21701:245;;21752:14;;:29;;21771:9;21752:18;:29::i;:::-;21735:14;:46;21907:11;;21856:31;;21816:118;;21856:63;;:46;;21892:9;21856:35;:46::i;:63::-;21816:17;;;:21;:118::i;:::-;21796:17;:138;21048:905;;;21003:950;:::o;14:289:1:-;56:3;94:5;88:12;121:6;116:3;109:19;177:6;170:4;163:5;159:16;152:4;147:3;143:14;137:47;229:1;222:4;213:6;208:3;204:16;200:27;193:38;292:4;285:2;281:7;276:2;268:6;264:15;260:29;255:3;251:39;247:50;240:57;;;14:289;;;;:::o;308:220::-;457:2;446:9;439:21;420:4;477:45;518:2;507:9;503:18;495:6;477:45;:::i;533:131::-;-1:-1:-1;;;;;608:31:1;;598:42;;588:70;;654:1;651;644:12;588:70;533:131;:::o;669:367::-;737:6;745;798:2;786:9;777:7;773:23;769:32;766:52;;;814:1;811;804:12;766:52;853:9;840:23;872:31;897:5;872:31;:::i;:::-;922:5;1000:2;985:18;;;;972:32;;-1:-1:-1;;;669:367:1:o;1233:466::-;1310:6;1318;1326;1379:2;1367:9;1358:7;1354:23;1350:32;1347:52;;;1395:1;1392;1385:12;1347:52;-1:-1:-1;;1440:23:1;;;1560:2;1545:18;;1532:32;;-1:-1:-1;1663:2:1;1648:18;;;1635:32;;1233:466;-1:-1:-1;1233:466:1:o;2094:508::-;2171:6;2179;2187;2240:2;2228:9;2219:7;2215:23;2211:32;2208:52;;;2256:1;2253;2246:12;2208:52;2295:9;2282:23;2314:31;2339:5;2314:31;:::i;:::-;2364:5;-1:-1:-1;2421:2:1;2406:18;;2393:32;2434:33;2393:32;2434:33;:::i;:::-;2094:508;;2486:7;;-1:-1:-1;;;2566:2:1;2551:18;;;;2538:32;;2094:508::o;2607:247::-;2666:6;2719:2;2707:9;2698:7;2694:23;2690:32;2687:52;;;2735:1;2732;2725:12;2687:52;2774:9;2761:23;2793:31;2818:5;2793:31;:::i;3273:118::-;3359:5;3352:13;3345:21;3338:5;3335:32;3325:60;;3381:1;3378;3371:12;3396:382;3461:6;3469;3522:2;3510:9;3501:7;3497:23;3493:32;3490:52;;;3538:1;3535;3528:12;3490:52;3577:9;3564:23;3596:31;3621:5;3596:31;:::i;:::-;3646:5;-1:-1:-1;3703:2:1;3688:18;;3675:32;3716:30;3675:32;3716:30;:::i;:::-;3765:7;3755:17;;;3396:382;;;;;:::o;4012:226::-;4071:6;4124:2;4112:9;4103:7;4099:23;4095:32;4092:52;;;4140:1;4137;4130:12;4092:52;-1:-1:-1;4185:23:1;;4012:226;-1:-1:-1;4012:226:1:o;4567:388::-;4635:6;4643;4696:2;4684:9;4675:7;4671:23;4667:32;4664:52;;;4712:1;4709;4702:12;4664:52;4751:9;4738:23;4770:31;4795:5;4770:31;:::i;:::-;4820:5;-1:-1:-1;4877:2:1;4862:18;;4849:32;4890:33;4849:32;4890:33;:::i;4960:1071::-;5082:6;5090;5098;5106;5114;5122;5130;5138;5191:3;5179:9;5170:7;5166:23;5162:33;5159:53;;;5208:1;5205;5198:12;5159:53;-1:-1:-1;;5253:23:1;;;5373:2;5358:18;;5345:32;;-1:-1:-1;5476:2:1;5461:18;;5448:32;;5579:2;5564:18;;5551:32;;-1:-1:-1;5682:3:1;5667:19;;5654:33;;-1:-1:-1;5786:3:1;5771:19;;5758:33;;-1:-1:-1;5890:3:1;5875:19;;5862:33;;-1:-1:-1;5994:3:1;5979:19;5966:33;;-1:-1:-1;4960:1071:1;-1:-1:-1;4960:1071:1:o;6296:329::-;6498:2;6480:21;;;6537:1;6517:18;;;6510:29;-1:-1:-1;;;6570:2:1;6555:18;;6548:36;6616:2;6601:18;;6296:329::o;6630:127::-;6691:10;6686:3;6682:20;6679:1;6672:31;6722:4;6719:1;6712:15;6746:4;6743:1;6736:15;6762:168;6835:9;;;6866;;6883:15;;;6877:22;;6863:37;6853:71;;6904:18;;:::i;6935:217::-;6975:1;7001;6991:132;;7045:10;7040:3;7036:20;7033:1;7026:31;7080:4;7077:1;7070:15;7108:4;7105:1;7098:15;6991:132;-1:-1:-1;7137:9:1;;6935:217::o;8194:245::-;8261:6;8314:2;8302:9;8293:7;8289:23;8285:32;8282:52;;;8330:1;8327;8320:12;8282:52;8362:9;8356:16;8381:28;8403:5;8381:28;:::i;9881:128::-;9948:9;;;9969:11;;;9966:37;;;9983:18;;:::i;12354:125::-;12419:9;;;12440:10;;;12437:36;;;12453:18;;:::i;12830:127::-;12891:10;12886:3;12882:20;12879:1;12872:31;12922:4;12919:1;12912:15;12946:4;12943:1;12936:15;12962:135;13001:3;13022:17;;;13019:43;;13042:18;;:::i;:::-;-1:-1:-1;13089:1:1;13078:13;;12962:135::o;13102:127::-;13163:10;13158:3;13154:20;13151:1;13144:31;13194:4;13191:1;13184:15;13218:4;13215:1;13208:15;13366:959;13628:4;13676:3;13665:9;13661:19;13707:6;13696:9;13689:25;13750:6;13745:2;13734:9;13730:18;13723:34;13793:3;13788:2;13777:9;13773:18;13766:31;13817:6;13852;13846:13;13883:6;13875;13868:22;13921:3;13910:9;13906:19;13899:26;;13960:2;13952:6;13948:15;13934:29;;13981:1;13991:195;14005:6;14002:1;13999:13;13991:195;;;14070:13;;-1:-1:-1;;;;;14066:39:1;14054:52;;14135:2;14161:15;;;;14126:12;;;;14102:1;14020:9;13991:195;;;-1:-1:-1;;;;;;;14242:32:1;;;;14237:2;14222:18;;14215:60;-1:-1:-1;;14306:3:1;14291:19;14284:35;14203:3;13366:959;-1:-1:-1;;;13366:959:1:o;14938:456::-;15026:6;15034;15042;15095:2;15083:9;15074:7;15070:23;15066:32;15063:52;;;15111:1;15108;15101:12;15063:52;-1:-1:-1;;15156:16:1;;15262:2;15247:18;;15241:25;15358:2;15343:18;;;15337:25;15156:16;;15241:25;;-1:-1:-1;15337:25:1;14938:456;-1:-1:-1;14938:456:1:o;15843:651::-;16038:2;16027:9;16020:21;16001:4;16076:6;16070:13;16119:4;16114:2;16103:9;16099:18;16092:32;16147:52;16194:3;16183:9;16179:19;16165:12;16147:52;:::i;:::-;16133:66;;16280:1;16276;16271:3;16267:11;16263:19;16257:2;16249:6;16245:15;16239:22;16235:48;16230:2;16219:9;16215:18;16208:76;16338:2;16330:6;16326:15;16320:22;16315:2;16304:9;16300:18;16293:50;16398:2;16390:6;16386:15;16380:22;16374:3;16363:9;16359:19;16352:51;16459:3;16451:6;16447:16;16441:23;16434:4;16423:9;16419:20;16412:53;16482:6;16474:14;;;15843:651;;;;:::o;16499:230::-;16569:6;16622:2;16610:9;16601:7;16597:23;16593:32;16590:52;;;16638:1;16635;16628:12;16590:52;-1:-1:-1;16683:16:1;;16499:230;-1:-1:-1;16499:230:1:o
Swarm Source
ipfs://b457a902cab6cbd5243ce7d71b5434390a2e3e131cc43141a7ed59e6a89480da
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MON
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.